1. 安装FTP服务器软件
选择vsftpd(Debian默认推荐的安全FTP服务器),通过以下命令安装:
sudo apt update && sudo apt install vsftpd
2. 配置vsftpd增强安全性
编辑核心配置文件/etc/vsftpd.conf,按需调整以下关键参数:
anonymous_enable=NO(防止未授权用户登录);local_enable=YES(仅允许系统用户访问);chroot_local_user=YES(将用户锁定在其家目录,避免遍历整个文件系统);allow_writeable_chroot=YES(若用户需要上传文件,需开启此选项,避免权限错误);xferlog_enable=YES(记录传输日志,便于审计);deny_email_enable=YES+banned_email_file=/etc/vsftpd.banned_emails(可选,禁止使用常见邮箱账号登录,降低暴力破解风险)。sudo systemctl restart vsftpd
3. 创建专用FTP用户并设置权限
避免使用系统管理员账户(如root)登录FTP,创建专用用户并限制其权限:
sudo adduser ftpuser # 创建用户(按提示设置密码)
sudo usermod -d /home/ftpuser -s /sbin/nologin ftpuser # 设置家目录并禁用shell登录(防止通过SSH登录)
sudo chown -R ftpuser:ftpuser /home/ftpuser # 设置家目录所有者为用户自身
sudo chmod -R 755 /home/ftpuser # 设置目录权限(所有者可读写执行,其他用户仅可读执行)
4. 配置防火墙允许FTP流量
使用ufw(Uncomplicated Firewall)配置规则,允许FTP控制连接(端口21)和被动模式数据连接(自定义端口范围,如30000-31000):
sudo ufw allow 21/tcp # 允许FTP控制连接
sudo ufw allow 30000:31000/tcp # 允许被动模式数据连接(需与vsftpd配置一致)
sudo ufw enable # 启用防火墙
sudo ufw reload # 重新加载规则
若使用iptables,需添加类似规则并保存:
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
5. 启用TLS/SSL加密传输
为避免FTP数据(用户名、密码、文件内容)以明文传输,需配置SSL/TLS加密:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
sudo nano /etc/vsftpd.conf
添加/修改以下参数:ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
重启服务使加密生效:sudo systemctl restart vsftpd
6. 优化用户权限与访问控制
/etc/vsftpd.user_list文件,添加允许登录的用户名(每行一个),并在vsftpd.conf中配置:userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO # 仅允许列表中的用户登录
write_enable=NO(禁止写入);若需要上传,确保家目录权限正确(如755)且allow_writeable_chroot=YES。7. 定期维护与监控
sudo apt update && sudo apt upgrade,修复已知安全漏洞;sudo tail -f /var/log/vsftpd.log实时查看登录、传输记录,及时发现异常行为(如频繁登录失败);/etc/vsftpd.conf、用户家目录及数据库文件(若有虚拟用户),防止数据丢失。