温馨提示×

centos vsftp故障排查步骤

小樊
43
2025-11-21 18:35:12
栏目: 智能运维

CentOS 上 vsftpd 故障排查步骤

一 快速定位流程

  • 确认服务是否运行:执行systemctl status vsftpd,未运行则systemctl start vsftpd;每次修改配置后执行systemctl restart vsftpd使生效。
  • 本机连通性自检:在本机执行telnet 127.0.0.1 21nc -vz 127.0.0.1 21,能连上说明服务在监听,问题多在外部网络/防火墙/客户端。
  • 端口监听与占用:执行netstat -tulpen | grep :21,确认 vsftpd 正在监听;若被占用,调整配置或释放端口。
  • 防火墙放行:执行firewall-cmd --query-service=ftpfirewall-cmd --query-port=21/tcp;未放行则执行firewall-cmd --permanent --add-service=ftpfirewall-cmd --permanent --add-port=21/tcpfirewall-cmd --reload
  • SELinux 状态:执行getenforce(返回Enforcing表示开启)。如怀疑 SELinux 导致,可临时setenforce 0验证,再按需设置布尔值。
  • 日志与系统日志:查看**/var/log/vsftpd.log获取 FTP 层错误;同时查看/var/log/securejournalctl -xe**获取认证与会话细节。

二 常见症状与处理要点

  • 无法建立连接(超时/拒绝)
    • 服务未启动或崩溃:重启并检查状态。
    • 端口未放行:放行21/tcp(以及被动端口范围,见下文)。
    • 端口被占用:更换监听端口或释放占用进程。
    • 云服务器安全组/ACL:在云平台安全组与边界防火墙同时放行。
  • 530 Login incorrect
    • 用户名/密码错误;检查是否被**/etc/ftpusers拒绝;确认/etc/vsftpd/vsftpd.conflocal_enable=YES**;检查 PAM 与用户主目录权限。
  • 无法上传/创建文件(如 553 Could not create file)
    • 配置write_enable=YES;目录对 FTP 进程可写;必要时设置chown -R ftpuser:ftpuser /pathchmod -R 755 /path;SELinux 下启用setsebool -P ftp_home_dir on
  • 被动模式失败(登录后列目录卡住/超时)
    • 启用被动模式pasv_enable=YES,设置端口范围(如pasv_min_port=10060pasv_max_port=10070),并在防火墙放行该范围。
  • 被 chroot 后写入失败(500 OOPS: vsftpd: refusing to run with writable root inside chroot)
    • 启用allow_writeable_chroot=YES,或确保用户根目录不可写且将可写目录放在其下并单独赋权。
  • 日志无输出或信息不足
    • 确认**/var/log/vsftpd.log路径在配置中正确,且日志级别与轮转策略允许写入;同时交叉查看/var/log/securejournalctl**。

三 配置文件关键项与建议值

  • 监听与协议:
    • listen=YES;如使用 IPv6 再设置listen_ipv6=YES(避免重复监听冲突)。
  • 访问开关:
    • anonymous_enable=NO(禁止匿名);local_enable=YES(允许本地用户);write_enable=YES(允许上传/删除)。
  • 目录与隔离:
    • chroot_local_user=YES(锁定用户主目录);如需要可写根目录,设置allow_writeable_chroot=YES
  • 被动模式(PASV):
    • pasv_enable=YES;设置pasv_min_portpasv_max_port(如10060–10070),并在防火墙放行该区间。
  • 日志:
    • 确认vsftpd.confxferlog_enable=YESxferlog_std_format=YES,并设置log_ftp_protocol=YES以获取更详细交互日志(按需开启)。

四 防火墙与 SELinux 设置

  • firewalld:
    • 放行 FTP 服务:firewall-cmd --permanent --add-service=ftp && firewall-cmd --reload;或放行端口:firewall-cmd --permanent --add-port=21/tcp && firewall-cmd --reload
    • 被动端口范围:放行10060–10070/tcp(与配置一致)。
  • SELinux:
    • 查看布尔值:getsebool -a | grep ftp
    • 允许本地用户家目录访问:setsebool -P ftp_home_dir on
    • 需要更宽松策略时:setsebool -P allow_ftpd_full_access on(仅在可信网络使用)。
    • 排查时可临时setenforce 0验证是否为 SELinux 引起,确认后改回Enforcing并采用精确布尔值。

五 一键核查清单

检查项 命令示例 期望结果/处理
服务运行 systemctl status vsftpd 状态为 active (running);异常则 start/restart
监听端口 netstat -tulpen 0.0.0.0:21 或 :::21 处于 LISTEN
本机连通 telnet 127.0.0.1 21 220 欢迎信息
防火墙放行 firewall-cmd --query-service=ftp yes;否则添加服务并重载
被动端口范围 firewall-cmd --query-port=10060-10070/tcp yes;与配置一致
SELinux 状态 getenforce Permissive/Enforcing;必要时调整布尔值
登录失败 tail -n50 /var/log/vsftpd.log /var/log/secure 无 530/Login incorrect;检查 /etc/ftpusers 与 PAM
上传失败 ls -ld ~ftpuser /path && getsebool ftp_home_dir 目录可写;必要时 setsebool -P ftp_home_dir on
配置生效 systemctl restart vsftpd 修改后立即重启服务

0