首先确认vsftpd服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status vsftpd
若服务未启动,执行以下命令启动并设置开机自启:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
服务状态输出中的错误提示(如“failed”)可直接定位启动问题(如配置错误、依赖缺失)。
日志是排查故障的核心依据,vsftpd的默认日志路径为/var/log/vsftpd.log,使用以下命令实时查看最新日志:
sudo tail -f /var/log/vsftpd.log
若日志路径不存在,可通过journalctl查看系统日志:
sudo journalctl -u vsftpd.service -f
日志中常见的错误信息(如“530 Login incorrect”“500 OOPS: cannot change directory”)能直接指向问题根源(如认证失败、目录权限问题)。
vsftpd的主配置文件为/etc/vsftpd.conf,需确保关键参数设置正确:
listen=YES(启用独立监听模式)、local_enable=YES(允许本地用户登录)、write_enable=YES(允许上传文件);anonymous_enable=NO(禁用匿名访问)、chroot_local_user=YES(将用户限制在主目录,提升安全性);pasv_enable=YES、pasv_min_port=40000、pasv_max_port=50000(指定被动模式数据端口范围)。修改配置文件后,使用以下命令检查语法是否正确:
sudo vsftpd -t
若语法有误,命令会输出错误信息,根据提示修复后再重启服务:
sudo systemctl restart vsftpd。
FTP服务依赖21端口(控制连接)和20端口(主动模式数据传输),被动模式下还需开放40000-50000端口范围(数据传输)。使用以下命令开放端口:
sudo ufw allow 21/tcp # 控制连接
sudo ufw allow 20/tcp # 主动模式数据传输
sudo ufw allow 40000:50000/tcp # 被动模式数据传输
sudo ufw reload # 重新加载防火墙规则
检查防火墙状态确认端口是否开放:
sudo ufw status
若使用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。
/etc/passwd),且未被加入/etc/vsftpd.ftpusers(禁止FTP登录的黑名单)或/etc/vsftpd.user_list(若userlist_deny=YES,则禁止列表内用户登录);ftpuser),权限设置为755(rwxr-xr-x),避免权限过高(如777)导致安全问题:sudo chown -R ftpuser:ftpuser /home/ftpusersudo chmod -R 755 /home/ftpuser;/home/ftpuser/upload)需设置为775,且用户为所有者:sudo chown ftpuser:ftpuser /home/ftpuser/uploadsudo chmod 775 /home/ftpuser/upload。若系统启用了SELinux(sestatus显示Enforcing),可能会限制vsftpd的访问。需调整SELinux策略:
sudo setsebool -P ftp_home_dir 1sudo setsebool -P allow_ftpd_full_access 1sudo setenforce 0。若vsftpd无法启动,可能是21端口被其他服务占用。使用以下命令检查端口占用情况:
sudo netstat -tuln | grep :21
若发现其他进程占用端口,停止该进程或修改vsftpd的监听端口(在/etc/vsftpd.conf中修改listen_port参数),并重启服务。
使用FTP客户端(如FileZilla)或命令行工具测试连接:
ftp server_ip # 命令行测试
输入用户名和密码,检查是否能正常登录及传输文件。若连接失败,需结合日志和上述步骤进一步排查(如防火墙是否拦截、配置是否正确)。