You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSFTPD搭建FTP服务仅显示目录无法查看文件故障咨询

VSFTPD仅能显示目录无法显示普通文件问题处理

问题根因

该问题90%以上的诱因是CentOS 7默认开启的SELinux安全策略拦截了vsftpd对普通文件元数据的读取,导致vsftpd生成目录列表时自动过滤了所有普通文件条目,仅返回目录项。少数情况为chroot安全限制、被动模式NAT配置缺失导致。

验证依据:SFTP基于SSH服务实现,不受vsftpd的SELinux策略、chroot规则约束,因此可以正常显示所有文件;目录本身的元数据读取权限优先级高于普通文件,因此目录项可以正常返回。

排查解决步骤

第一步:验证SELinux是否为诱因

  1. 在服务器终端执行命令查看当前SELinux状态:
    getenforce
    
  2. 如果返回结果为Enforcing,执行以下命令临时关闭SELinux拦截:
    setenforce 0
    
  3. 重新连接FTP执行ls命令,如果可以正常看到所有文件,即可确认是SELinux导致的问题,选择以下任意一种方案永久修复:
    • 方案1(推荐,保留SELinux安全性):执行命令开放vsftpd的全访问权限,永久生效:
      setsebool -P ftpd_full_access on
      
      如果仍有部分文件无法显示,给FTP根目录设置正确的SELinux安全上下文,将命令中的路径替换为你实际的FTP目录绝对路径:
      semanage fcontext -a -t public_content_rw_t "/path/to/your/ftpdir(/.*)?"
      restorecon -Rv /path/to/your/ftpdir
      
    • 方案2(不推荐,降低系统安全性):永久关闭SELinux,编辑/etc/selinux/config文件,将SELINUX=enforcing修改为SELINUX=disabled,重启服务器生效。

第二步:修复chroot权限限制

如果临时关闭SELinux后问题仍复现,按以下步骤调整chroot配置:

  1. 编辑vsftpd配置文件:
    vi /etc/vsftpd/vsftpd.conf
    
  2. 在配置文件中添加以下行,允许chroot环境下的可写根目录权限:
    allow_writeable_chroot=YES
    
  3. 保存退出后重启vsftpd服务:
    systemctl restart vsftpd
    

第三步:校验被动模式配置(云服务器必查)

如果是云服务器部署,确认vsftpd.conf中的被动模式配置完整,补充以下配置(将公网IP替换为你服务器的实际公网IP):

pasv_enable=YES
pasv_min_port=8888
pasv_max_port=8899
pasv_address=你的服务器公网IP
pasv_promiscuous=YES

保存后重启vsftpd服务,同时确认云服务器安全组、本地防火墙已经放通8888-8899端口范围。

安全建议

不建议开放root用户的FTP登录权限,存在极高的安全风险,建议新建专用普通用户作为FTP访问账号。

内容的提问来源于stack exchange,提问作者LenorEric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:09:18