安装
apt install vsftpd
配置
创建用户作为ftp访问用户
useradd -s /sbin/nologin ftpuser
passwd ftpuser # 给用户设置密码
mkdir /home/ftpuser
mkdir /home/ftpuser/ftp
chown -R ftpuser:ftpuser /home/ftpuser
chmod -w /home/ftpuser
创建并修改配置文件:
touch /etc/vsftpd.chroot_list
echo 'ftpuser' >> /etc/vsftpd.user_list
vim /etc/vsftpd.conf
文件内容:
# 禁用匿名用户
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
tcp_wrappers=YES
listen=YES
pam_service_name=vsftpd
#listen_ipv6=NO
# 文件chroot_list记录允许访问主目录以外目录的用户列表
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
# 文件user_list为白名单,仅允许这些用户访问ftp服务
userlist_file=/etc/vsftpd.user_list
userlist_enable=YES
userlist_deny=NO
启动服务
service vsftpd start
service vsftpd restart
service vsftpd stop
修改PAM配置
如果启动服务后登陆出现530 Login incorrect
错误,可能需要修改PAM配置文件:
vim /etc/pam.d/vsftpd
文件内容:
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
#auth required pam_shells.so
auth required pam_nologin.so
可以看到file=/etc/ftpusers
的sense=deny
,所以/etc/ftpusers
文件内的用户无法登陆ftp。
auth required pam_nologin.so
的意思是只有登陆shell为文件/etc/shells
中指定的shell的用户才能登陆。
而用户ftpuser的登陆shell是/sbin/nologin
,不在其内,需要修改此句。
解决方法:
- 编辑
/etc/ftpusers
,确保登陆用户没在这个文件内。 - 修改
/etc/pam.d/vsftpd
,将auth required pam_shells.so
改为auth required pam_nologin.so
。 service vsftpd restart