首先确认vsftpd服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status vsftpd
若服务未启动,执行以下命令启动服务并设置开机自启:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
服务启动失败时,可通过journalctl -xe或查看/var/log/vsftpd.log获取详细错误信息。
vsftpd的主配置文件为/etc/vsftpd.conf,需检查以下关键参数是否设置正确:
listen=YES:确保服务监听正确端口(默认21);anonymous_enable=NO:禁止匿名访问(若需允许,设为YES);local_enable=YES:允许本地用户登录;write_enable=YES:允许用户上传文件;chroot_local_user=YES:将用户限制在主目录(需配合allow_writeable_chroot=YES使用,若用户主目录需写入);pasv_enable=YES/pasv_min_port/pasv_max_port:若使用被动模式,需开启并设置端口范围(如50000-50050)。修改配置文件后,需重启服务使更改生效:
sudo systemctl restart vsftpd
配置文件语法错误会导致服务无法启动,可通过sudo systemctl cat vsftpd.service查看ExecStart命令,手动执行排查问题。
Ubuntu默认使用ufw防火墙,需允许FTP流量通过:
sudo ufw allow 21/tcp # 控制连接端口
sudo ufw allow 20/tcp # 数据传输端口(主动模式)
sudo ufw allow 990/tcp # TLS加密端口(若启用)
sudo ufw allow 40000:50000/tcp # 被动模式端口范围(根据配置调整)
sudo ufw reload
若使用iptables,可通过以下命令开放端口:
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT
sudo service iptables save
被动模式下,需在路由器上转发pasv_min_port至pasv_max_port的端口范围。
若系统启用SELinux(getenforce返回Enforcing),需调整相关策略:
sudo setsebool -P ftp_home_dir on
sudo setsebool -P allow_ftpd_full_access on
sudo setenforce 0
SELinux策略限制会导致“500 OOPS”或“Permission denied”错误。
/etc/vsftpd/ftpusers(禁止访问列表)或/etc/vsftpd/user_list(若userlist_enable=YES且userlist_deny=YES,则列表内用户无法登录);ftpuser:ftpuser),并设置适当权限(建议755,若需写入需allow_writeable_chroot=YES):sudo chown -R ftpuser:ftpuser /home/ftpuser
sudo chmod -R 755 /home/ftpuser
/home/ftpuser/uploads):sudo chmod -R 777 /home/ftpuser/uploads # 测试时可设为777,生产环境建议更严格
权限问题会导致“530 Login incorrect”“553 Could not create file”等错误。
vsftpd的日志主要记录在/var/log/vsftpd.log(若未开启,需在/etc/vsftpd.conf中设置xferlog_enable=YES),也可通过journalctl查看系统日志:
sudo tail -f /var/log/vsftpd.log # 实时查看vsftpd日志
sudo journalctl -u vsftpd -f # 实时查看系统日志中的vsftpd条目
日志中会明确提示错误原因(如“Cannot open user list file”“Permission denied”),是排查问题的关键依据。
ping命令测试客户端与服务器之间的网络连接:ping server_ip
telnet或nc命令测试FTP端口(21)是否开放:telnet server_ip 21
# 或
nc -zv server_ip 21
若端口不通,需检查防火墙、路由器或服务器网络配置。
/etc/vsftpd.user_list文件是否存在,且包含正确的用户账户;local_enable=YES,用户未被加入ftpusers列表,且密码正确;chmod),确保磁盘空间充足(df -h);pasv_enable=YES,pasv_min_port/pasv_max_port设置正确,且防火墙开放了该端口范围。通过以上步骤,可覆盖vsftpd在Ubuntu下的常见故障场景。若问题仍未解决,建议根据日志信息进一步排查,或参考vsftpd官方文档获取更详细的配置说明。