我在redhat上安装了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?
答案1
SELinux 不会允许vsftpd
从外部以外的地方提供文件/var/ftp
或写入日志/var/log
故意。 SELinux 的目的就是减轻灾难。 FTP 从根本上来说是不安全的。在 SELinux 下运行vsftpd
是一个好主意,因为它可以最大限度地减少攻击者决定攻击您的 FTP 服务时可能造成的损害。
运行一个根本不安全的服务(比如vsftpd
不使用 SELinux 锁定它)是愚蠢的。
如果你绝对必须像这样重新配置它,你需要重写与 FTP 相关的 SELinux 策略,但这不是一个简单的工作。该audit2allow
工具可以提供帮助。
如果您认为禁用 SELinux 风险太大并且构建新的 SELinux 策略太困难,我建议使用SFTP或者scp
反而。 RHEL 出厂时已sshd
配置并正在运行,因此您无需执行任何特殊操作即可使其正常工作。
答案2
您通常可以在 /var/log/messages 中找到 selinux 拒绝。试试这个(作为root):
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
拒绝情况。
答案3
允许 vsftpd 访问任何地方的稍微严厉的解决方案是:
setsebool -P allow_ftpd_full_access=1
到那时,vsftpd 几乎可以到达系统上的任何地方......