环境如下:Ubuntu18.04 vsftpd 3.0.3;
要求: 用winscp 5.13.4,从外网可以连接到服务器,账号只具有上传功能,没有下载和删除功能

以下是操作记录:
sudo apt-get install vsftpd
sudo vim /etc/vsftpd.conf
修改为以下内容

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
download_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
local_root=/home/ftpout/data

修改路由器转发设置

winscp连接报错:连接失败 OOPS: cannot change directory:/xxx
尝试1:修改权限
sudo chown -R ftpout:ftpout /media/smartclass/video_data
结果:错误依然,完全相同
尝试2:
sudo apt install policycoreutils
sudo setsebool -P ftpd_disable_trans 1
sudo service vsftpd restart
结果:错误依然,完全相同
尝试3:
sudo chmod 755 /media/smartclass/
结果:出现另一个错误:Illegal PORT command.
上传数据则会出现
Server sent passive reply with unroutable address 192.168.1.xx, using host address instead.
无法打开传输通道。原因:由于目标计算机积极拒绝,无法连接。
监测到超时! (控制连接)
复制文件到远端时错误。
已解决,解决方案如下:
sudo vim /etc/vsftpd.conf
修改为以下内容
cat /etc/vsftpd.conf | grep -v ‘^#’(这句的意思是打印出文件里面非以#开头的行,意思就是下面是conf文件的非注释行)

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
download_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
port_enable=YES
connect_from_port_20=YES
ftp_data_port=55537
xferlog_file=/var/log/vsftpd.log
ascii_upload_enable=YES
ascii_download_enable=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
local_root=/media/smartclass/video_data
pasv_enable=YES
pasv_address=xx.xx.xx.xx
pasv_max_port=32469
pasv_min_port=32467

路由器端口映射除了ftp协议的21端口需要对外映射以外,还需要把pasv对应的数据端口映射出去,如下图

最后,重启ftp:sudo service vsftpd restart
外网访问连接ftp时,比如用winscp访问,直接用默认的被动模式就好,不需要刻意修改为主动模式。
另外,中文乱码和无法上传的问题:
winscp中解决方案如下:选择高级设置->开启文件名UFT-8编码

现在我们可以上传和删除、修改,不能下载
接下来我们设置删除权限
参考:https://blog.csdn.net/u012743859/article/details/79019583
具体操作如下:
sudo mkdir -p /etc/vsftpd/vsftpd_user_conf
sudo vim /etc/vsftpd/vsftpd_user_conf/ftpuser
写一行:cmds_denied=DELE,RMD 保存
sudo vim /etc/vsftpd.conf
增加一行:user_config_dir=/etc/vsftpd/vsftpd_user_conf
重启ftp:sudo service vsftpd restart
搞定!

补充:

用户自定义设置权限的方式中,DELE和RMD分别代表什么?还有其他权限呢?
cmds_allowed是允许某些权限,cmds_denied是禁止某些权限
ABOR - abort a file transfer
CWD - change working directory
DELE - delete a remote file
LIST - list remote files
MDTM - return the modification time of a file
MKD - make a remote directory
NLST - name list of remote directory
PASS - send password
PASV - enter passive mode
PORT - open a data port
PWD - print working directory
QUIT - terminate the connection
RETR - retrieve a remote file
RMD - remove a remote directory
RNFR - rename from
RNTO - rename to
SITE - site-specific commands
SIZE - return the size of a file
STOR - store a file on the remote host
TYPE - set transfer type
USER - send username
ACCT* - send account information
APPE - append to a remote file
CDUP - CWD to the parent of the current directory
HELP - return help on using the server
MODE - set transfer mode
NOOP - do nothing
REIN* - reinitialize the connection
STAT - return server status
STOU - store a file uniquely
STRU - set file transfer structure
SYST - return system type

参考:
http://blog.chinaunix.net/uid-24250828-id-3760115.html
https://blog.csdn.net/chenguibao/article/details/46301951

ubuntu 18.04装ftp服务器+外网访问相关推荐

  1. 搭建 公网FTP服务器 外网访问

    我是在ubuntu 20.04 上配置的,需要用到公网IP.没有公网IP的,可以考虑花生壳这类应用来做内网穿透. 1. 配置FTP服务器 安装vsftpd. # sudo apt install vs ...

  2. websocket 服务器外网访问

        websocket 服务器外网访问 本地localhost测试能成功,但是放在服务器上外网,连接失败 原因:新增端口后需要在防火墙中将该端口加入入站规则,否则没有权限连接外网. 方法:控制面板 ...

  3. 公网IP实现虚拟机服务器外网访问

    公网IP实现虚拟机服务器外网访问 项目背景是要建一个web服务器,但是需要外网访问,虚拟机建的服务器只能局域网访问,本来是用花生壳做的内网穿透,但是怕出现什么问题,后面登录公司路由,发现其IP其实是固 ...

  4. 服务器显示521,apache 在 ubuntu 18.04 LTS 设定多个网域连同一服务器,使用 Cloudflare 出现 521 错误?...

    第一次遇到这个问题,还是我少做了什么⋯⋯?虽然离上次类似操作应该有半年了,不至于忘记什么呀 ubuntu 18.04 LTS apache 2.4.29 我的DNS在 Cloudflare ,首先去域 ...

  5. Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件

    最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器.往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件.像我这样一个Linux菜逼,这种要求不是 ...

  6. Ubuntu 18.04 搭建 gitlab服务器记录

    首先现在官方的deb包,下载地址:https://packages.gitlab.com/gitlab/gitlab-ee/packages/ubuntu/bionic/gitlab-ee_11.11 ...

  7. 阿里云服务器外网访问问题

    昨天看到阿里云有个活动,学生可以领取6个月云服务器,就领了一个,装的操作系统是windows server2012 远程连接进去后,装了一个wampserver,参照网上教程https://blog. ...

  8. 局域网服务器外网访问,端口映射方法

    自己应用:内网搭建了演示网站,客户需从公网链接访问,此时需要在内网路由器虚拟服务器设置端口映射 本人网站内网访问端口为8088 1.    192.168.1.1进入路由器设置(本人为TP-link路 ...

  9. Ubuntu 18.04搭建Git服务器

    学习链接:博客园.廖雪峰 一 前言 前面已经贴了两个链接,为什么还要再写一篇呢,因为可能由于个人能力问题,我觉得上面两篇写的都有点简略,有些地方不太好理解,并不能一次性成功搭建,所以想根据自己踩过的坑 ...

最新文章

  1. [置顶] Activity Stack
  2. Tasklets 机制浅析
  3. SAP从视图获得数据
  4. linux下c语言 双向链表
  5. 一文搞懂MySQL的Join
  6. arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例
  7. 关于socket组播和ssdp(二)
  8. Spring MVC提供http接口供下载文件
  9. java中的getnumber怎么用_java安全编码指南之:Number操作详解
  10. pygame精灵组有哪些方法_利用 pygame 开发一款游戏:「跳跳兔」(六)
  11. Ubuntu 14.04/16.04 (使用apt-get进行安装) 安装Docker
  12. Mybatis Generator的使用 1
  13. MyEclipse发布项目更改项目名
  14. 基于springboot实现OA办公管理系统
  15. HC32F4 CRC32校验(附软件CRC32校验)
  16. 华为路由器 dopra linux passwd,使用华为光猫ONT使能工具后,本地主机如何通过Telnet登录光猫进行配置...
  17. Duality-Gated Mutual Condition Network for RGBT Tracking
  18. 虚拟机Hyper-V的安装以及使用教程
  19. 网易被裁后,68天吃透这份阿里学长甩我的Android面试笔记,竟让我收到字节跳动和小米offer
  20. 都这样了!我还是没法关闭微信朋友圈广告

热门文章

  1. 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver
  2. HashMap有序性与无序性阐述
  3. 从输入 URL 到浏览器接收的过程中发生了什么事情?
  4. launch 文件中remap标签的使用
  5. Caused by: java.lang.NoClassDefFoundError: org/apache/curator/shaded/com/google/common/collect/Maps
  6. JS 将毫秒数时间,转化为时间格式(yy-MM-dd)
  7. js,根据一个数组,遍历对象数组,进行多条件并列的筛选或过滤
  8. 计算机专业第五轮学科评估排名,第五轮学科评估排行榜-第二轮双一流淘汰名单预测...
  9. Java开发——Mindmaster/Typora思维导图
  10. python 断点_断点python_python 断点_python断点定义 - 云+社区 - 腾讯云