Ubuntu 上 vsftpd 启用 SSL/TLS 的完整步骤
一 安装与证书准备
- 安装软件包:sudo apt update && sudo apt install vsftpd openssl。
- 生成自签名证书与私钥(示例有效期 365 天,密钥长度 2048 位):
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.crt
说明:也可将证书与私钥合并为一个 PEM 文件(如 /etc/ssl/private/vsftpd.pem),两种方式二选一,关键是后续配置路径与权限正确。生产环境建议使用 Let’s Encrypt 或企业 CA 签发证书。
二 配置 vsftpd 启用 SSL/TLS
- 编辑配置文件:sudo nano /etc/vsftpd.conf,在文件末尾或相应位置加入/修改:
启用 SSL/TLS
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/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
可选:如需仅开放 FTPS(隐式 SSL),可添加
implicit_ssl=YES
listen_port=990
常见基础安全项(可按需调整):
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
保存后重启服务:sudo systemctl restart vsftpd。提示:若需同时监听 IPv4 与 IPv6,可设置 listen=YES 与 listen_ipv6=YES,但隐式 FTPS 与双栈同时开启在某些环境可能受限,建议优先使用显式 FTPS(默认端口 21)。
三 防火墙与被动模式端口
- UFW 放行:sudo ufw allow 21/tcp(控制通道)
- 显式 FTPS 数据连接由客户端在协商后动态建立,通常无需固定端口放行;若使用隐式 FTPS,放行 990/tcp。
- 被动模式端口范围(示例 40000–50000):sudo ufw allow 40000:50000/tcp
- 重载防火墙:sudo ufw reload。
- 云服务器或外部防火墙需同步放行上述端口。
四 客户端连接与验证
- FileZilla 配置:协议选择 FTP - SSL/TLS(显式),加密选择 要求显式 FTP over TLS,端口 21;首次连接会校验证书(自签名证书需手动确认)。
- 命令行测试(显式 FTPS):lftp -u 用户名,密码 -p 21 你的域名或IP;或 openssl s_client -connect 你的域名或IP:21 -starttls ftp,观察是否返回 220 并出现 TLS 握手信息。
- 服务状态与日志:
- 查看状态:sudo systemctl status vsftpd
- 实时日志:sudo tail -f /var/log/vsftpd.log(或 /var/log/syslog 过滤 vsftpd)
- 证书更换或续期后,执行 sudo systemctl restart vsftpd 使配置生效。
五 常见问题与优化建议
- 证书与权限:确保证书与私钥路径正确,私钥仅对 root 可读(如 600);证书文件权限建议 644。
- 协议安全:禁用 SSLv2/SSLv3,仅启用 TLSv1.2+(若 vsftpd 版本支持,优先配置更高版本;旧版本可保留 TLSv1)。
- 被动模式:务必设置 pasv_min_port/pasv_max_port 并在防火墙放行,否则数据通道可能失败。
- 根目录限制:启用 chroot_local_user=YES 时,如需在用户目录写入,可设置 allow_writeable_chroot=YES(存在一定安全风险,谨慎使用)。
- 匿名访问:生产环境建议 anonymous_enable=NO。
- 升级与监控:定期更新 vsftpd 与系统组件,持续关注日志异常。