我在红帽里安装了vsftpd。所有文件都是文件,直到我登录到ftp服务器时:
ftp本地主机
or fileZilla我得到以下错误:
ERROR:
- 500 OOPS: cannot change directory:/foo同时,当我将日志目录从
- /var/log/xferlog至
- /usr/local/data然后我得到:
500 OOPS: failed to open xferlog log file:/usr/local/data/vsftpd.log从这个链接看来,解决方案似乎是:
This happens because SELinux isn’t properly configured for your ftp service. Either disable SELinux or configure it for ftp.
To disable SELinux, edit /etc/selinux/config and set “SELINUX=disabled”, then reboot.如何在不禁用SElinux的情况下启用ftp?
发布于 2014-04-01 12:02:57
SELinux不会让vsftpd为/var/ftp以外的地方提供文件,也不会故意在/var/log之外写入日志。SELinux完全是关于减灾的。FTP根本上是不安全的。在vsftpd下运行SELinux是个好主意,因为如果攻击者决定攻击您的FTP服务,那么它可以最大限度地减少攻击者可能造成的损害。
运行vsftpd这样的根本不安全的服务而不使用SELinux锁定它是愚蠢的。
如果您绝对必须像这样重新配置它,则需要重写与FTP相关的SELinux策略,但这并不是一项简单的工作。这个audit2allow工具可以帮助。
如果您认为禁用SELinux太危险,而构建新的SELinux策略太困难,那么我建议您改用SFTP或scp。RHEL附带了sshd的配置和运行,所以您不必做任何特殊的事情来完成这项工作。
发布于 2014-04-01 14:40:04
您通常可以在/var/log/messages中找到selinux拒绝。尝试这个(作为根):
grep avc /var/log/messages | grep ftp根据所需的配置,检查输出并确定拒绝是否错误。根据需要对grep语句进行调优,以便将信息简化为您想要修复的语句。将系统暂时置于许可模式(setenforce 0)中,然后执行您希望需要的操作,这通常是有用的。/var/log/messages将收集需要在SELinux策略中修复的错误列表。一旦您对需要修复的拒绝列表感到满意,请使用以下方法生成一个新策略:
# ensure you have audit2allow
which audit2allow
# if no audit2allow, install it:
yum install policycoreutils-python
# replace the following with your tuned grep (if necessary)
grep avc /var/log/message | grep ftp | audit2allow -M my_vsftp在当前目录中,将有两个新文件:my_vsftp.te和my_vsftp.pp。*.te文件是可读的,*.pp是编译的。检查*.te文件以确保它是适当的。
这里要小心,因为开放太多的SELinux规则可能会使您容易受到攻击。强烈建议在SELinux上阅读。
cat my_vsftp.te如果策略看起来合适,安装并激活它:
mkdir /usr/share/selinux/packages/my_vsftp
mv my_vsftp.* /usr/share/selinux/packages/my_vsftp/
semodule -i /usr/share/selinux/packages/my_vsftp/my_vsftp.pp确保系统正在执行(getenforce、setenforce 1),并测试您的FTP服务器,监视/var/log/messages是否拒绝。
发布于 2014-04-01 17:49:42
允许vsftpd访问任何地方的一种稍微繁琐的解决方案是:
setsebool -P allow_ftpd_full_access=1在这一点上,vsftpd几乎可以在系统的任何地方.
https://unix.stackexchange.com/questions/122552
复制相似问题