首先确认VSFTP服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status vsftpd
若服务未运行,启动服务并设置开机自启:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
此步骤可快速排除服务未启动导致的连接失败问题。
日志是定位问题的核心依据,VSFTP的日志通常位于/var/log/vsftpd.log(部分系统可能在/var/log/messages中)。使用以下命令实时查看日志:
sudo tail -f /var/log/vsftpd.log
通过日志中的错误信息(如“530 Login incorrect”“553 Could not create file”),可快速定位具体故障原因。
VSFTP的主配置文件为/etc/vsftpd.conf,需检查以下关键配置项是否正确:
listen=YES:启用独立模式(若为NO,则依赖xinetd服务);listen_ipv6=NO:若无需IPv6支持,建议禁用以避免冲突;anonymous_enable=NO:禁止匿名访问(若需允许,需设置为YES);local_enable=YES:允许本地用户登录;write_enable=YES:允许用户上传文件;chroot_local_user=YES:限制用户只能访问其主目录(增强安全性);pasv_enable=YES:启用被动模式(解决连接超时问题);pasv_min_port/pasv_max_port:设置被动模式端口范围(需与防火墙配合开放)。sudo systemctl restart vsftpd
```。
#### **4. 检查文件与目录权限**
FTP用户需对目标目录具有正确的读写权限,通常设置如下:
```bash
sudo chown -R ftpuser:ftpuser /path/to/ftp/directory # 将目录所有者改为FTP用户
sudo chmod -R 755 /path/to/ftp/directory # 设置目录权限为755(所有者可读写执行,其他用户可读执行)
若用户无法上传文件,还需检查SELinux是否阻止写入(见下文SELinux设置)。
CentOS的防火墙(firewalld或iptables)需开放FTP相关端口:
firewalld为例,操作如下:sudo firewall-cmd --permanent --add-service=ftp # 开放FTP服务(自动包含21端口)
sudo firewall-cmd --permanent --add-port=1024-65535/tcp # 开放被动模式端口范围
sudo firewall-cmd --reload # 重新加载防火墙规则
若使用iptables,需添加对应规则:
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1024-65535 -j ACCEPT
sudo service iptables save
```。
#### **6. 调整SELinux策略**
若SELinux处于`Enforcing`模式,可能会阻止FTP访问用户目录或写入文件。可通过以下命令调整:
- 允许FTP访问用户主目录:
```bash
sudo setsebool -P ftp_home_dir on
sudo setsebool -P allow_ftpd_full_access on
sudo setenforce 0
修改SELinux配置后,需重启VSFTP服务使更改生效。
sudo netstat -tuln | grep 21
若端口被占用,可修改VSFTP的监听端口(在/etc/vsftpd.conf中设置listen_port),并在防火墙中开放新端口。ping命令测试客户端与服务器之间的网络连接,确保无丢包或延迟过高。/etc/hosts或DNS配置正确,客户端能解析服务器主机名。/etc/ftpusers(禁止登录列表)或/etc/vsftpd.user_list(若配置了userlist_enable=YES)中。chmod 755),并检查SELinux是否阻止写入(通过setsebool -P ftp_home_dir on解决)。pasv_enable=YES、pasv_min_port/pasv_max_port配置正确。