一、安装
# 1.安装软件
$ sudo apt-get install vsftpd
# 2.修改 /etc/shells,避免报错 530 login incorrect
$ vi /etc/shells
增加 /usr/sbin/nologin
# 3.增加ftp账户(如果使用系统账号也可不添加)
$ sudo useradd -d /home/ftp -g ftp -s /usr/sbin/nologin ftpname
指定/home/ftp为ftp文件目录,创建ftpname用户创建ftp用户组。
# 4.设置ftpname密码
$ sudo passwd ftpname
二、vsftp配置文件
$ sudo vi /etc/vsftpd.conf
重点配置标注下
listen=YES
listen_ipv6=YES
anonymous_enable=NO # 禁用匿名账号登陆
local_enable=YES # 允许本地账号登陆
write_enable=YES # 允许ftp的写操作
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to FTP service.
# 允许写入跟路径,这条不加容易出现 500 OOPS: vsftpd: refusing to run with writable root inside chroot () 报错
allow_writeable_chroot=YES
# 这三条设置用户限定在ftp文件目录,不能跨出该目录外,但在/etc/vsftpd.chroot_list文件中列出的用户除外。
chroot_local_user=YES # 所有用户被限制在ftp目录内,不能跨出该目录,除非有例外情况;
chroot_list_enable=YES # 这里就是例外情况
chroot_list_file=/etc/vsftpd.chroot_list # 跨目录例外情况 白名单
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
ssl_enable=NO
local_root=/home/ftp # 设置ftp文件主目录(登陆ftp后显示的目录)
# 在 vsftpd.user_list 里的用户允许登陆ftp,注意同时注释掉在 ftpuser黑名单 里面的用户
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list # 允许ftp登陆账号 白名单
三、用户黑白名单实现
1. ftpuser黑名单
/etc/ftpusers
是一个黑名单配置,禁止访问ftp的用户,不受任何配置项影响,安装ftp后默认会把系统默认用户都存放在这里。
2. userlist_enable/userlist_deny/vsftpd.user_list共同控制
vsftpd.user_list 为白名单还是黑名单受 userlist_enable、userlist_deny 配置控制,一般情况下设置为白名单(即下面第一种配置)。
- (1) userlist_enable=YES,userlist_deny=NO 此时 vsftpd.user_list 为白名单,在此列表的用户可以访问ftp,其他用户不能。
- (2) userlist_enable=YES,userlist_deny=YES 此时 vsftpd.user_list 为黑名单,在此列表的用户不能访问ftp,其他用户可以。
- (3) userlist_enable=NO,userlist_deny=YES 和 NO 时 所有用户被允许登陆,此时 userlist_deny 和 userlist_file 配置失效。