首先确认vsftpd服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status vsftpd
若服务未运行,启动服务并设置开机自启:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
服务启动失败时,可通过journalctl -u vsftpd
查看详细错误日志。
Ubuntu系统通常使用ufw
防火墙,需开放FTP控制端口(21)和数据端口(20),若使用被动模式还需开放被动端口范围(如40000-50000):
sudo ufw allow 21/tcp
sudo ufw allow 20/tcp
sudo ufw allow 40000:50000/tcp # 被动模式端口范围
sudo ufw reload
若使用iptables
,需添加对应规则允许FTP流量通过。
vsftpd的主配置文件为/etc/vsftpd.conf
,需确保以下关键设置正确(可根据需求调整):
listen=YES # 启用监听(IPv4)
listen_ipv6=NO # 禁用IPv6(若无需IPv6)
anonymous_enable=NO # 禁止匿名登录
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许用户上传文件
chroot_local_user=YES # 将用户限制在主目录(增强安全性)
allow_writeable_chroot=YES # 允许chroot目录可写(若chroot_local_user=YES)
pasv_enable=YES # 启用被动模式(解决防火墙/路由器问题)
pasv_min_port=40000 # 被动模式最小端口
pasv_max_port=50000 # 被动模式最大端口
修改配置文件后,重启vsftpd服务使更改生效:
sudo systemctl restart vsftpd
常见配置错误包括:local_enable=NO
(禁止本地登录)、write_enable=NO
(禁止上传)、chroot_local_user=NO
(未限制用户目录)。
sudo chown -R ftpuser:ftpuser /home/ftpuser # 将用户目录所有者设为ftpuser
sudo chmod -R 755 /home/ftpuser # 设置目录权限为755
/home/ftpuser/upload
)有写权限:sudo mkdir -p /home/ftpuser/upload
sudo chown ftpuser:ftpuser /home/ftpuser/upload
sudo chmod 777 /home/ftpuser/upload # 或755(根据需求调整)
sudo setsebool -P ftpd_full_access on # 临时开启(重启失效)
# 或永久生效(需编辑/etc/selinux/config)
或修改SELinux上下文:sudo semanage fcontext -a -t public_content_rw_t "/home/ftpuser(/.*)?"
sudo restorecon -Rv /home/ftpuser
```。
被动模式(PASV)需要服务器开放指定端口范围,并在客户端配置中启用被动模式:
/etc/vsftpd.conf
中设置pasv_enable=YES
、pasv_min_port
和pasv_max_port
,并开放这些端口到防火墙。若以上步骤无法解决问题,可通过查看vsftpd日志获取详细错误信息:
sudo journalctl -u vsftpd # 查看systemd日志
sudo tail -f /var/log/vsftpd.log # 查看vsftpd专用日志(若有)
常见日志错误及解决方法:
/etc/vsftpd.user_list
文件是否存在,且包含正确的用户账户。/etc/vsftpd.user_list
中未禁用该用户(若userlist_deny=YES
)。使用FTP客户端(如lftp
或FileZilla)测试连接,命令示例如下:
lftp -u ftpuser,ftpuser_password your_server_ip
或使用FileZilla输入服务器IP、端口(21)、用户名和密码进行连接。若连接成功,说明问题已解决。