在 Linux 上搭建 安全的 FTP 服务器,核心原则是:尽量不用明文 FTP,改用加密协议(FTPS / SFTP),并严格控制权限和访问范围。下面给你一套实用、可落地的做法。
✅ 推荐方案
❌ 不推荐
sudo apt install openssh-server # Debian/Ubuntu
sudo yum install openssh-server # CentOS/RHEL
编辑:
sudo vim /etc/ssh/sshd_config
修改或添加:
PermitRootLogin no
PasswordAuthentication no # 建议用密钥
重启:
sudo systemctl restart sshd
sudo useradd -m sftpuser
sudo passwd sftpuser
如果想 限制只能 SFTP,不能 SSH 登录:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
⚠️ 权限要求:
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
sudo apt install vsftpd
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.crt
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
重启:
sudo systemctl restart vsftpd
sudo ufw allow 21
sudo ufw allow 40000:50000/tcp
vsftpd 被动模式:
pasv_min_port=40000
pasv_max_port=50000
sudo ufw allow 22
✔ 禁用匿名访问
✔ 禁用 root 登录
✔ 使用 密钥认证(SSH)
✔ 开启 TLS 加密
✔ 限制用户目录(chroot)
✔ 使用 非默认端口
✔ 定期更新系统
✔ 日志审计
/var/log/auth.log
/var/log/vsftpd.log
| 场景 | 推荐 |
|---|---|
| 内部文件传输 | ✅ SFTP |
| 对外客户系统 | ✅ FTPS |
| 云服务器 | ✅ SFTP |
| 老旧设备 | ⚠️ FTPS |
你可以告诉我:
我可以直接给你一套 可复制的完整配置文件。