请注意,本文编写于 1336 天前,最后修改于 1332 天前,其中某些信息可能已经过时。
VSFTPD是一个FTP服务器程序,然后SELinux是CentOS的防火墙组件,由于Vsftpd默认被SELINUX拦截,所以默认情况下会遇到FTP以下的问题:
- 226 Transfer done (but failed to open directory).(传输完成,但是打开路径失败)
- 550 Failed to change directory(更改路径失败)
- 553 Could not create file.
- 或者干脆在发送了LIST命令以后,服务器没响应,超时断开。
遇到这样的问题,通常是vsftpd没有足够的权限,很有可能是被selinux阻止了。网络上流行的办法是直接关闭selinux,但是这样做会引起其他安全问题,所以还有更好的解决方法
为了确定是不是由selinux引起的问题,我们需要暂时将selinux关闭来验证
setenforce 0 #暂时让SElinux进入Permissive模式
运行完以后在尝试,如果ftp能取得目录,上传下载,那么证明就是SElinux导致的。
解决办法:getsebool -a|grep ftpd
来查看ftp的相关权限列表
getsebool -a | grep ftpd
#以下是显示出来的权限,off是关闭权限,on是打开权限
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
ftp_home_dir --> off
其中,ftp_home_dir
和allow_ftpd_full_access
必须为ON,才能使vsftpd具有访问ftp根目录,以及文件传输等权限。
运行以下命令
setsebool -P ftp_home_dir 1
setsebool -P allow_ftpd_full_access 1
若权限列表中没有ftp_home_dir
则只输入第二条
运行完了以后,重新恢复SELinux进入Enforcing模式。
setenforce 1 #进入Enforcing模式
如果此问题还没有解决的话,也可能是ftp访问的目录权限不够,建议使用chmod -R 777 路径
将权限属性改为777,再尝试,通常能够解决问题
版权属于:DeepFal
本文链接:https://blog.deepfal.cn/index.php/archives/656/
转载时须注明出处及本声明