ubuntu云服务器搭建FTP环境
前言:这里采用
vsftpd在Ubuntu 18.04云服务器上搭建FTP服务,支持匿名用户、本地用户和虚拟用户三种类型。
安装vsftpd
1 | $ sudo apt install vsftpd |
- 使用
ps -ef | grep ftp命令查看是否开启了FTP服务进程,有如下进程表示开启成功。

- 设置开机自启动
1 | $ sudo systemctl enable vsftpd |
- 查看
FTP服务状态
1 | $ sudo systemctl status vsftpd.service |

- 启动/重启/停止
FTP服务
1 | $ sudo systemctl start/restart/stop vsftpd.service |
匿名用户访问配置
- 创建FTP存放目录
1 | $ mkdir /home/ftp |
- 备份
vsftpd配置文件
1 | sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak |
- 修改
vsftpd配置文件
1 | sudo vim /etc/vsftpd.conf |
需要修改内容如下(配置匿名用户只有读权限):
1 | # Allow anonymous FTP? (Disabled by default). |
- 重启
FTP服务
本地用户访问配置
- 添加
FTP用户
1 | $ sudo mkdir /home/ftp/lyj # 创建FTP用户家目录 |
查看
FTP本地用户:cat /etc/passwd | grep ftp删除
FTP用户:sudo deluser --remove-home username
- 将新添加的
ftpuser用户添加到vsftpd.chroot_list文件
这里是使
ftpuser不被限制到主目录中,可以切换并访问其他目录的文件
1 | sudo vim /etc/vsftpd.chroot_list |
- 修改
vsftpd配置文件
1 | sudo vim /etc/vsftpd.conf |
需要修改内容如下(配置本地用户有读写权限):
1 | # Allow anonymous FTP? (Disabled by default). |
- 重启
FTP服务
本地虚拟用户访问配置
- 创建本地无法登录的用户及其登录目录
1 | sudo sueradd guest -d /var/ftp -s /bin/nologin |
- 创建虚拟用户的文件夹
1 | sudo mkdir -p /var/ftp/anonymous /var/ftp/admin /var/ftp/test |
- 创建虚拟用户统一存放配置文件的文件夹
1 | sudo mkdir /etc/vsftpd |
- 创建用户数据库
ftpguests
1 | vim ftpguests |
- 生成用户数据库
ftpguests.db
用到的工具为
db_load,若没安装则执行sudo apt install db-util安装
1 | sudo db_load -T -t hash -f ftpguests /etc/vsftpd/ftpguests.db |
- 修改
pam认证文件
1 | sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak |
在第一行添加如下内容:
auth sufficient pam_userdb.so db=/etc/vsftpd/ftpguests
account sufficient pam_userdb.so db=/etc/vsftpd/ftpguests
其中sufficient表示同时支持虚拟用户和本地用户
- 建立虚拟用户的配置文件
1 | vim /etc/vsftpd/admin |
1 | local_root=/var/ftp |
1 | vim /etc/vsftpd/test |
1 | local_root=/var/ftp/test |
- 修改配置文件
/etc/vsftpd.conf
在上面本地用户访问配置基础上添加如下内容
1 | # 开启虚拟用户访问 |
- 重启
FTP服务
遇到的问题
1.使用FileZilla软件连接报错:服务器发回了不可路由的地址。使用服务器地址代替的问题
- 修改
vsftpd配置文件
1 | sudo vim /etc/vsftpd.conf |
添加如下内容:
1 | listen=YES |
- 重启
FTP服务
记得开放云服务器上对应的被动端口,否则无法访问。
2.限制本地用户在主目录后仍然能访问其他目录
这里首先介绍一下
/etc/vsftpd.conf配置文件中的三个相关参数,然后根据需要可以
chroot_local_user
作用:是否将所有用户限制在主目录中,默认为NO表示不做限制,否则表示启用限制
chroot_list_enable
作用:是否启用限制用户的名单,默认为NO表示禁用,否则表示启用
chroot_list_file
作用:是否限制在主目录下用户名称的文件,对该文件中的用户是否限制则根据chroot_local_user和chroot_list_enable确定
| chroot_local_user=YES chroot_list_enable=YES | 所有用户均被限制在其主目录,chroot_list_file中的用户不受限制 |
|---|---|
| chroot_local_user=YES chroot_list_enable=NO | 所有用户均被限制在其主目录下 |
| chroot_local_user=NO chroot_list_enable=YES | 所有用户均不被限制, chroot_list_file中的用户受到限制 |
| chroot_local_user=NO chroot_list_enable=NO | 所有用户均不被限制在其主目录下 |
3.报错500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- 这是由于
vsftpd从2.3.5之后增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限,如果检查发现还有写权限,就会报该错误。 - 网上有两种方法分别是:(1)
sudo chmod a-w /home/ftp/anonymous(用户主目录) (2)在配置文件中添加allow_writeable_choot=YES,但是我这里只有第一种方法可行,第二种没有效果,大家若遇到可以两种方法都尝试一下
4.其他错误
FileZilla软件报错如下:
553 Could not create file.
错误: 严重文件传输错误
一般可能是权限不够的问题,也有可能是磁盘空间已满的原因。
可以尝试修改文件权限(777),或者修改文件所属用户
550 Failed to change directory.
错误: 读取目录列表失败
可能是权限问题,也可能是SElinux的FTP传输审核功能禁止切换目录,还可能是限制了用户对主目录的访问。
参考文章:
