针对 CentOS 的 SELinux 拦截 vsftpd 问题(不关闭SELinux)

VSFTPD是一个FTP服务器程序,然后SELinux是CentOS的防火墙组件。由于 vsftpd 默认被 SELinux 拦截,所以会遇到的FTP以下的问题:

226 Transfer done (but failed to open directory).(传输完成,但是打开路径失败)

550 Failed to change directory(更改路径失败)

550 Create directory operation failed.(创建目录失败)

553 Could not create file.

或者干脆在发送了LIST命令以后,服务器没响应,超时断开(500 OOPS: vsftpd:chroot) 。

遇到这样的问题,通常是vsftpd 没有足够的权限,很有可能是被SELinux阻止了。网络上流行的解决办法是直接关闭SELinux,这样做会引起其它安全问题,所以下面还有其它更好的方法。 

为了确定是不是这个问题,我们需要先试着关闭SELinux,看是不是就是它导致的。

setenforce 0 #暂时让SELinux进入Permissive模式

运行完以后再尝试,如果FTP能取得目录、上传下载,那么证明就是SELinux导致的。

解决办法:我们可以运行 getsebool -a | grep ftpd 判断查看权限

getsebool -a | grep ftp

#以下是显示出来的权限,off是关闭权限,on是打开权限,已经设置,没设置时全是off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> on
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> on

其中,ftp_home_dir和allow_ftpd_full_access必须为on 才能使vsftpd 具有访问ftp根目录,以及文件传输等权限。

运行以下命令:

setsebool -P ftp_home_dir 1
setsebool -P allow_ftpd_full_access 1

注意这两条命令一般需要花上十几秒钟才能运行完 

运行完了以后,我们再重新恢复SELinux进入Enforcing模式。

setenforce 1 #进入Enforcing模式

如果不出意外的话,我们就可以访问到ftp目录了,vsFTPd就可以正常上传下载文件了。

但是如果就此问题还没解决的话,可能是FTP访问的目录属性不够。建议用 chmod -R 777 路径 将路径读写属性设置为777,再尝试,通常也能解决问题。

 

转载于:https://my.oschina.net/u/3939059/blog/1925531

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值