温馨提示×

vsftp故障排查Ubuntu版攻略

小樊
39
2025-12-24 05:42:49
栏目: 智能运维

Ubuntu 下 vsftpd 故障排查攻略

一 快速定位流程

  • 检查服务状态与端口
    • 查看运行状态:sudo systemctl status vsftpd
    • 启动/自启:sudo systemctl start vsftpdsudo systemctl enable vsftpd
    • 端口占用:sudo ss -tulpen | grep ‘:21|:990’
  • 核对配置文件
    • 主配置:/etc/vsftpd.conf(修改后执行:sudo systemctl restart vsftpd
    • 常用关键项:anonymous_enable=NOlocal_enable=YESwrite_enable=YESchroot_local_user=YES
  • 查看日志
    • 服务日志:sudo journalctl -u vsftpd -f
    • 专用日志:sudo tail -f /var/log/vsftpd.log(若未生成,检查配置与 rsyslog)
  • 防火墙放行
    • UFW:sudo ufw allow 21/tcpsudo ufw allow 990/tcpsudo ufw allow 40000:50000/tcp
    • firewalld:sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload
  • 连通性测试
    • 本机:ftp 127.0.0.1
    • 远程:ftp your_server_ip 或使用 nc/telnet 探测 21 端口

二 常见症状与修复对照表

症状 快速检查 修复建议
无法连接(超时/拒绝) 服务是否运行、端口 21 是否监听、云安全组/本机防火墙 启动服务;放行 21/tcp;云主机放行安全组;必要时改用被动模式并放行数据端口范围
530 Login incorrect 密码是否正确、用户是否被禁止、PAM 与白名单配置 重置密码;检查 /etc/ftpusers 黑名单;核对 /etc/vsftpd.user_listuserlist_enable/userlist_deny;Ubuntu 下将 pam_service_name=ftp
500 OOPS: refusing to run with writable root inside chroot() 是否启用 chroot_local_user=YES 且家目录可写 设置家目录属主为 root:root 且权限 755,或启用 allow_writeable_chroot=YES
能登录但无法上传 write_enable=YES、目录权限、磁盘空间 开启写入;修正目录属主与权限(如 chown user:user /home/userchmod 755 /home/user);检查 df -h
被动模式数据连接失败 是否配置 pasv_enable=YES 与端口范围,且防火墙放行 在配置中设置 pasv_min_port/pasv_max_port(如 40000:50000),并放行对应端口范围
日志无明显输出 日志路径、rsyslog 配置 确认 /var/log/vsftpd.log 存在并有写入;必要时在 rsyslog 中启用 vsftpd 日志
端口冲突 21 被其他进程占用 结束占用进程或调整 vsftpd 监听端口,并同步防火墙规则

三 配置与权限要点

  • 基础配置建议(/etc/vsftpd.conf)
    • 身份与权限:anonymous_enable=NOlocal_enable=YESwrite_enable=YES
    • 禁锢用户:启用 chroot_local_user=YES 时,避免家目录可写,或使用 allow_writeable_chroot=YES
    • 被动模式:启用 pasv_enable=YES,并设置端口范围(如 pasv_min_port=40000pasv_max_port=50000
  • 用户访问控制
    • 黑名单:/etc/ftpusers(列于此文件的用户禁止登录)
    • 白名单:启用 userlist_enable=YESuserlist_deny=NO,并在 /etc/vsftpd.user_list 中列出允许登录的用户
  • PAM 与系统账号
    • Ubuntu 常见为 pam_service_name=ftp;若使用 /sbin/nologin 的系统账号,确保 /etc/shells 包含该 shell,或在 /etc/pam.d/vsftpd 中调整相关 PAM 规则以避免鉴权失败
  • 目录与所有权
    • 禁锢场景建议:家目录属主 root:root、权限 755;用户写入目录单独授权(如 /home/user755/home/user/upload755/775 视需求而定)

四 防火墙与被动模式

  • UFW 放行示例
    • 命令:sudo ufw allow 21/tcpsudo ufw allow 990/tcpsudo ufw allow 40000:50000/tcp
    • 说明:21 为控制连接,990 为显式 FTPS(若启用),40000:50000 为被动模式数据端口范围
  • firewalld 放行示例
    • 命令:sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload
    • 说明:若使用被动模式,同样需要放行配置的数据端口范围
  • 云服务器与边界防火墙
    • 除本机防火墙外,还需在云平台安全组放行 21/tcp 与被动端口范围

五 高效排错命令清单

  • 服务与端口:sudo systemctl status vsftpdsudo ss -tulpen | grep ‘:21|:990’
  • 配置与语法:编辑 /etc/vsftpd.conf 后用 sudo systemctl restart vsftpd 生效
  • 日志跟踪:sudo journalctl -u vsftpd -fsudo tail -f /var/log/vsftpd.log
  • 连通性测试:ftp 127.0.0.1ftp your_server_ip;必要时用 nc -vz your_server_ip 21
  • 防火墙与端口:sudo ufw statussudo firewall-cmd --list-portssudo ss -tulpen | grep ftp
  • 权限与空间:ls -ld /home/usernamedf -h

0