前言:这里采用vsftpd
在Ubuntu 18.04
云服务器上搭建FTP
服务,支持匿名用户、本地用户和虚拟用户三种类型。
安装vsftpd 1 $ sudo apt install vsftpd
使用ps -ef | grep ftp
命令查看是否开启了FTP
服务进程,有如下进程表示开启成功。
1 $ sudo systemctl enable vsftpd
1 $ sudo systemctl status vsftpd.service
1 $ sudo systemctl start/restart/stop vsftpd.service
匿名用户访问配置
1 2 3 $ mkdir /home/ftp $ cd /home/ftp $ mkdir anonymous
1 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
1 sudo vim /etc/vsftpd.conf
需要修改内容如下(配置匿名用户只有读权限):
1 2 3 4 # Allow anonymous FTP? (Disabled by default). anonymous_enable=YES anon_root=/home/ftp/anonymous no_anon_password=YES
本地用户访问配置
1 2 3 4 $ sudo mkdir /home/ftp/lyj $ sudo useradd -d /home/ftp/lyj -s /bin/bash ftpuser $ sudo passwd ftpuser $ sudo chown ftpuser:ftpuser -R /home/ftp/lyj/
查看FTP
本地用户:cat /etc/passwd | grep ftp
删除FTP
用户:sudo deluser --remove-home username
将新添加的ftpuser
用户添加到vsftpd.chroot_list
文件
这里是使ftpuser
不被限制到主目录中,可以切换并访问其他目录的文件
1 2 sudo vim /etc/vsftpd.chroot_list
1 sudo vim /etc/vsftpd.conf
需要修改内容如下(配置本地用户有读写权限):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # Allow anonymous FTP? (Disabled by default). anonymous_enable=YES anon_root=/home/ftp/anonymous no_anon_password=YES # # Uncomment this to allow local users to log in. local_enable=YES local_root=/home/ftp/lyj # # Uncomment this to enable any form of FTP write command. write_enable=YES # You may restrict local users to their home directories. See the FAQ for # the possible risks in this before using chroot_local_user or # chroot_list_enable below. # 是否将所有用户限制在登录根目录内 chroot_local_user=YES allow_writeable_chroot=YES # 是否锁定用户的chroot功能 chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd.chroot_list
本地虚拟用户访问配置
1 2 3 sudo sueradd guest -d /var/ftp -s /bin/nologin sudo mkdir /var/ftp/guest sudo chown guest:guest -R /var/ftp
1 sudo mkdir -p /var/ftp/anonymous /var/ftp/admin /var/ftp/test
1 2 3 4 5 6 vim ftpguests admin admin_passwd test test_passwd
用到的工具为db_load
,若没安装则执行sudo apt install db-util
安装
1 2 sudo db_load -T -t hash -f ftpguests /etc/vsftpd/ftpguests.db sudo chmod 600 /etc/vsftpd/ftpguests.db
1 2 sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak sudo vim /etc/pam.d/vsftpd
在第一行 添加如下内容:
auth sufficient pam_userdb.so db=/etc/vsftpd/ftpguests account sufficient pam_userdb.so db=/etc/vsftpd/ftpguests
其中sufficient
表示同时支持虚拟用户和本地用户
1 2 3 4 5 6 7 8 9 local_root=/var/ftp # 具有读权限,查看文件夹/文件 anon_world_readable_only=NO write_enable=YES anon_upload_enable=YES # 具有写权限,新建文件夹/文件 anon_mkdir_write_enable=YES # 具有修改权限,修改文件夹/文件 anon_other_write_enable=YES
1 2 3 4 5 6 7 8 9 local_root=/var/ftp/test # 具有读权限,查看文件夹/文件 anon_world_readable_only=NO write_enable=YES anon_upload_enable=YES # 具有写权限,新建文件夹/文件 anon_mkdir_write_enable=YES # 没有修改权限,不能修改文件夹/文件 anon_other_write_enable=NO
在上面本地用户访问配置基础上添加如下内容
1 2 3 4 5 6 # 开启虚拟用户访问 guest_enable=YES # 把虚拟用户映射到本地用户guest guest_usernaem=guest # 指定虚拟用户配置文件所在目录 user_config_dir=/etc/vsftpd
遇到的问题 1.使用FileZilla软件连接报错:服务器发回了不可路由的地址。使用服务器地址代替的问题
1 sudo vim /etc/vsftpd.conf
添加如下内容:
1 2 3 4 5 6 7 8 9 10 11 listen=YES listen_ipv6=NO #开启被动模式 pasv_enable=YES #被动模式端口范围 pasv_min_port=6000 pasv_max_port=6010 #需要加入外部ip,否则被动模式会失败 pasv_address=云服务器外部ip地址 pasv_addr_resolve=YES
记得开放云服务器上对应的被动端口,否则无法访问。
2.限制本地用户在主目录后仍然能访问其他目录
这里首先介绍一下/etc/vsftpd.conf
配置文件中的三个相关参数,然后根据需要可以
作用:是否将所有用户限制在主目录中,默认为NO表示不做限制,否则表示启用限制
作用:是否启用限制用户的名单,默认为NO表示禁用,否则表示启用
作用:是否限制在主目录下用户名称的文件,对该文件中的用户是否限制则根据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.其他错误
553 Could not create file. 错误: 严重文件传输错误
一般可能是权限不够的问题,也有可能是磁盘空间已满的原因。
可以尝试修改文件权限(777
),或者修改文件所属用户
550 Failed to change directory. 错误: 读取目录列表失败
可能是权限问题,也可能是SElinux
的FTP
传输审核功能禁止切换目录,还可能是限制了用户对主目录的访问。
参考文章:
Ubuntu下同时搭建支持匿名、本地、虚拟用户的ftp服务器