修复 Debian 上的 FTP 服务器,通常取决于你使用的是哪种 FTP 服务(最常见的是 vsftpd、Pure-FTPd 或 ProFTPD)。下面以 vsftpd(最常见、默认推荐)为主,系统性地帮你排查和修复常见问题。
dpkg -l | grep -E 'vsftpd|pure-ftpd|proftpd'
常见服务名:
vsftpdpure-ftpdproftpdsystemctl status vsftpd
如果服务未运行:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
如果启动失败:
sudo journalctl -xe
sudo systemctl status vsftpd -l
查看具体错误原因。
主配置文件:
/etc/vsftpd.conf
常见正确配置示例(适合 Debian):
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pam_service_name=vsftpd
修改后重启:
sudo systemctl restart vsftpd
id ftpuser
grep ftpuser /etc/passwd
如果用户 shell 是 /bin/false 或 /usr/sbin/nologin,但你想让它登录 FTP:
sudo usermod -s /bin/bash ftpuser
⚠️ 注意:仅用于 FTP,不建议用于 SSH
如果服务器有防火墙:
sudo ufw status
放行 FTP:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw reload
如果是 被动模式(推荐),还需放行被动端口:
# /etc/vsftpd.conf
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙:
sudo ufw allow 30000:31000/tcp
查看:
sudo aa-status
如果 vsftpd 被限制,可临时测试:
sudo systemctl stop apparmor
如恢复正常,需调整 AppArmor 规则(不建议直接关闭)。
FTP 用户目录权限示例:
sudo chown ftpuser:ftpuser /home/ftpuser
sudo chmod 755 /home/ftpuser
如果开启 chroot,根目录 不能写:
/home/ftpuser
├── upload (可写)
└── download
ftp localhost
ftp your_server_ip
或使用:
lftp ftp://user@ip
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 530 Login incorrect | 用户 / 密码 / PAM | 检查用户 & /etc/pam.d/vsftpd |
| 500 OOPS: vsftpd: refusing to run with writable root | chroot 目录可写 | 加 allow_writeable_chroot=YES |
| 无法连接 | 防火墙 / 端口 | 放行 21 / 被动端口 |
| 连接后无响应 | IPv6 / 监听配置 | listen_ipv6=NO |
| 上传失败 | 权限 | 检查目录权限 |
你可以直接贴出以下信息之一:
/etc/vsftpd.conf 内容systemctl status vsftpd 输出我可以直接帮你改成 可用配置 ✅