说明
环境
- 系统:CentOS 7.6 64位
- VSFTPD:vsftpd-3.0.2-25.el7.x86_64
其他
- 本文由作者三汪首发于简书。
- 本文不包含防火墙、安全组配置部分。
步骤
安装
安装
yum install -y vsftpd
安装成功后查看软件版本
rpm -qa | grep vsftpd
OpenSSL自签证书
说明
这一步是为了给FTP over TLS提供证书。如果不配置SSL,可以跳过这一步。
命令
openssl req -newkey rsa:2048 -nodes -keyout /etc/vsftpd/vsftpd.key -x509 -days 365 -out /etc/vsftpd/vsftpd.pem -subj "/C=CN/ST=SC/L=CD/O=SYSIT/OU=sa/CN=sysit.cn/emailAddress=sa@sysit.cn"
参数说明
-
-newkey rsa:2048
:使用RSA算法生成长度2048byte的key -
-days 365
:证书有效期365天 -
-keyout /etc/vsftpd/vsftpd.key
:指定私钥文件输出 -
-out /etc/vsftpd/vsftpd.pem
:指定证书文件输出
配置vsftpd.conf
方式一、手动配置
命令
vim /etc/vsftpd/vsftpd.conf
内容
# 限制匿名登录
anonymous_enable=NO
# 允许local user登录
local_enable=YES
# 禁止写操作
write_enable=NO
# 设置local user的umask
local_umask=022
# 发送目录信息
dirmessage_enable=YES
# 上传/下载日志记录(默认位置/var/log/xferlog)
xferlog_enable=YES
#xferlog_file=/var/log/xferlog
xferlog_std_format=YES
# 以 nobody 作为此一服务执行者的权限
# 因为 nobody 的权限相当的低
# 因此即使被入侵,入侵者仅能取得nobody的权限
nopriv_user=nobody
# 欢迎消息
ftpd_banner=Hey.
# 限制local user在用户主目录下
chroot_local_user=YES
allow_writeable_chroot=YES
# 监听
listen=NO
listen_ipv6=YES
# pam认证模块
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# CONTROL PORT控制端口
listen_port=12345
# PASV模式
pasv_enable=YES
pasv_min_port=12346
pasv_max_port=12356
# 不要求使用20端口传输数据
connect_from_port_20=NO
# SSL
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.key
方式二、直接上传配置文件
说明
该方式要求系统已安装lrzsz。
若lrzsz不存在,使用yum -y install lrzsz
命令安装即可使用。
命令
rz
mv vsftpd.conf /etc/vsftpd/vsftpd.conf
配置/etc/services
说明
如果没有修改默认的控制端口21,可以跳过这一步。
命令
vi /etc/services
内容
相关行修改成
ftp 12345/tcp
ftp 12345/udp
启动
设置开机自启
systemctl enable vsftpd
服务操作
systemctl start vsftpd.service # 启动服务
systemctl restart vsftpd.service # 重启服务
systemctl status vsftpd.service # 服务状态查看
遇到的坑
530 Login incorrect
描述
在确认账号密码没问题的前提下,出现530。
原因
在我的情况里是因为/etc/pam.d/vsftpd
这个文件里的配置导致的。
该文件中有一行内容为:auth required pam_shells.so
。
这一行的含义是:仅允许用户的登录shell为/etc/shells
文件内的shell命令时,才能登录。
而我登录的用户配置的shell是/sbin/nologin
。
但是/etc/shells
文件中不存在该项,导致用户登录被拒绝。
解决
解决方式一
执行vim /etc/shells
,在这个文件里添加/sbin/nologin
即可。
解决方式二
当然,直接把/etc/pam.d/vsftpd
中的auth required pam_shells.so
注释掉,绕过校验也能成功登录。
怎么处理,各位自己权衡。