CentOS下VSFTP安全设置方法
首先,确保系统软件包为最新状态,降低已知漏洞风险:
sudo yum update -y
安装VSFTPD(Very Secure FTP Daemon):
sudo yum install vsftpd -y
编辑VSFTPD主配置文件/etc/vsftpd/vsftpd.conf,调整以下核心参数以强化基础安全:
anonymous_enable=NO
local_enable=YES
NO)。write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES # 若chroot目录需写入(如用户上传文件),需设为YES
/etc/vsftpd/user_list文件指定允许登录的用户(userlist_enable=YES+userlist_deny=NO),或禁止列表中的用户(userlist_deny=YES)。userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
允许FTP服务及被动模式端口通过防火墙(CentOS 7及以上使用firewalld):
# 允许FTP服务(默认端口21)
sudo firewall-cmd --permanent --add-service=ftp
# 允许被动模式端口范围(如1024-1048,需与配置文件中的pasv_min/max_port一致)
sudo firewall-cmd --permanent --add-port=1024-1048/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
为防止数据传输被窃听,必须启用SSL/TLS加密:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/pki/tls/private/vsftpd.key \
-out /etc/pki/tls/certs/vsftpd.crt
vsftpd.conf,强制使用TLS并指定证书路径:ssl_enable=YES
force_local_data_ssl=YES # 强制数据连接使用SSL
force_local_logins_ssl=YES # 强制登录过程使用SSL
ssl_tlsv1=YES # 启用TLSv1协议(禁用SSLv2/3)
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/pki/tls/certs/vsftpd.crt
rsa_private_key_file=/etc/pki/tls/private/vsftpd.key
被动模式可避免防火墙拦截主动连接,需指定端口范围:
pasv_enable=YES
pasv_min_port=1024 # 被动模式最小端口
pasv_max_port=1048 # 被动模式最大端口
若系统启用了SELinux,需调整策略允许VSFTPD访问用户目录:
# 允许FTP访问用户家目录
sudo setsebool -P ftp_home_dir on
# 允许FTP修改文件(若需写入)
sudo setsebool -P allow_ftpd_anon_write 0 # 禁止匿名用户写入
避免使用root用户登录,创建专用FTP账户并设置权限:
# 创建用户(-m自动创建家目录,-s禁止shell登录)
sudo useradd -m ftpuser -s /sbin/nologin
# 设置强密码
sudo passwd ftpuser
# 设置家目录权限(用户需拥有读写权限)
sudo chown ftpuser:ftpuser /home/ftpuser
sudo chmod 755 /home/ftpuser
应用所有配置并重启VSFTPD服务:
sudo systemctl restart vsftpd
# 设置开机自启
sudo systemctl enable vsftpd
使用FTP客户端(如FileZilla)连接服务器,选择“FTPS - FTP over TLS”模式,验证加密连接是否成功(客户端会显示锁图标)。
启用传输日志,便于追踪异常活动:
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
定期检查日志文件:
sudo tail -f /var/log/vsftpd.log
/etc/hosts.allow或防火墙规则,仅允许信任的IP地址访问FTP服务。/etc/vsftpd.user_list中不包含root用户,避免服务器被入侵。