下面从 CentOS(6/7/8 通用思路) 出发,系统性地说明如何 加固 FTP 服务器。常见 FTP 服务有 vsftpd(最常用)、ProFTPD,下面以 vsftpd 为主,兼顾通用安全原则。
尽量避免使用 FTP,优先使用 SFTP(SSH)
如果必须使用 FTP
# CentOS 7/8
yum install -y vsftpd
# CentOS 6
yum install vsftpd
systemctl enable vsftpd
systemctl start vsftpd
编辑配置文件:
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=NO
如需上传,再开启:
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
⚠ 注意:
allow_writeable_chroot=YES)userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
然后在 /etc/vsftpd/user_list 中加入允许的用户。
openssl req -x509 -nodes -days 365 \
-keyout /etc/vsftpd/vsftpd.key \
-out /etc/vsftpd/vsftpd.crt
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/vsftpd.key
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙放行:
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload
查看状态:
getenforce
允许 FTP 访问家目录:
setsebool -P ftp_home_dir on
若使用 chroot:
setsebool -P allow_ftpd_full_access on
⚠ SELinux 建议 不要直接关闭
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES # 调试时可开,生产建议关闭
定期检查:
/var/log/vsftpd.log
/var/log/messages
usermod -s /sbin/nologin ftpuser
vim /etc/security/pwquality.conf
✅ 强烈建议
| 项目 | 是否完成 |
|---|---|
| 禁止匿名 | ✅ |
| 启用 FTPS | ✅ |
| chroot 限制 | ✅ |
| 用户白名单 | ✅ |
| 防火墙限制 | ✅ |
| SELinux 配置 | ✅ |
| 日志开启 | ✅ |
| 禁用 SSH 登录 | ✅ |
如果你愿意,我可以:
直接告诉我你的使用场景即可。