VSFTPD搭建FTP服务仅显示目录无法查看文件故障咨询
VSFTPD仅能显示目录无法显示普通文件问题处理
问题根因
该问题90%以上的诱因是CentOS 7默认开启的SELinux安全策略拦截了vsftpd对普通文件元数据的读取,导致vsftpd生成目录列表时自动过滤了所有普通文件条目,仅返回目录项。少数情况为chroot安全限制、被动模式NAT配置缺失导致。
验证依据:SFTP基于SSH服务实现,不受vsftpd的SELinux策略、chroot规则约束,因此可以正常显示所有文件;目录本身的元数据读取权限优先级高于普通文件,因此目录项可以正常返回。
排查解决步骤
第一步:验证SELinux是否为诱因
- 在服务器终端执行命令查看当前SELinux状态:
getenforce - 如果返回结果为
Enforcing,执行以下命令临时关闭SELinux拦截:setenforce 0 - 重新连接FTP执行
ls命令,如果可以正常看到所有文件,即可确认是SELinux导致的问题,选择以下任意一种方案永久修复:- 方案1(推荐,保留SELinux安全性):执行命令开放vsftpd的全访问权限,永久生效:
如果仍有部分文件无法显示,给FTP根目录设置正确的SELinux安全上下文,将命令中的路径替换为你实际的FTP目录绝对路径:setsebool -P ftpd_full_access onsemanage 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,重启服务器生效。
- 方案1(推荐,保留SELinux安全性):执行命令开放vsftpd的全访问权限,永久生效:
第二步:修复chroot权限限制
如果临时关闭SELinux后问题仍复现,按以下步骤调整chroot配置:
- 编辑vsftpd配置文件:
vi /etc/vsftpd/vsftpd.conf - 在配置文件中添加以下行,允许chroot环境下的可写根目录权限:
allow_writeable_chroot=YES - 保存退出后重启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
相关产品推荐
相关产品推荐

