我在Centos 5.4服务器上通过xinetd运行TFTPD。 我能够通过tftp罚款访问文件,所以我知道服务运行正常。 但是,每当我尝试上传文件,我得到一个0权限被拒绝的消息。
我已经在/ tftpboot中创build了文件,并将权限设置为666。
我的tftpdconfiguration有详细的日志logging(-vvvv),但我在/ var / log / messages中看到的是:
START:tftp pid = 20383 from = 192.168.77.4
我已经看到一些提到SELinux可以防止TFTPD上传,但我希望看到日志中的东西。 我有SELinux设置为宽容模式。
有任何想法吗?
我发现了另一个更好的解决这个问题的方法。 我不能相信编写selinux策略文件的人不认为人们需要tftp上传,所以我做了一些挖掘。 我找不到在网上没有任何引用的东西,但是通过searchselinux策略,我能够在系统上find另一个已经在tftp写入的安全上下文。 更改/ tftpboot的上下文修复了这个问题。
# sesearch -a | grep tftpdir |grep tftpd_ allow tftpd_t tftpdir_t : file { read getattr }; allow tftpd_t tftpdir_t : dir { read getattr search }; allow tftpd_t tftpdir_t : lnk_file { read getattr }; allow tftpd_t tftpdir_rw_t : file { ioctl read write create getattr setattr lock append unlink link rename }; allow tftpd_t tftpdir_rw_t : dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir }; allow tftpd_t tftpdir_rw_t : lnk_file { read create getattr setattr unlink link rename }; # ls -Z /tftpboot/ -a drwxrwxrwx root root system_u:object_r:tftpdir_t . drwxr-xr-x root root system_u:object_r:root_t .. # chcon -t tftpdir_rw_t /tftpboot # ls -Z /tftpboot/ -a drwxrwxrwx root root system_u:object_r:tftpdir_rw_t . drwxr-xr-x root root system_u:object_r:root_t ..
你用-s选项启动tftpd吗? 有些客户端可能会期望这样做,例如上传一个名为foo的文件到/foo是真正用于服务器上的/tftpboot/foo 。 添加-s /tftpboot本质上告诉服务器对该目录做一个“chroot”。
尝试手动运行tftpd,例如不通过xinetd,看看输出是什么。 你也可以试着用strace来运行它,看看它正在试图打开哪个文件,以及它正在调用哪个系统。
仔细检查/etc/hosts.allow和/etc/hosts.deny以确保stream量被允许进入服务器。
对于SELinux,根据您的系统configuration情况,如果您启用了auditd,则可能会logging到/var/log/audit/audit.log 。 请参阅本页的第5节。
请遵循http://grimwell.wikispaces.com/tftpd上的信息,特别注意“冲洗和重复”以实现selinux策略。 经过几次尝试之后,这一切都开始工作 – 上传,并创build新的文件。
简而言之:
-c -v -s /tftpboot grep tftp /var/log/audit/audit.log | audit2allow -m tftpwrite grep tftp /var/log/audit/audit.log | audit2allow -m tftpwrite创build一个selinux策略。 确保该策略包含写入和创build行。 如果不是,请尝试再次编写和创build以在审核日志中生成警报,然后重试。 grep tftp /var/log/audit/audit.log | audit2allow -M tftpwrite创build一个可安装策略 grep tftp /var/log/audit/audit.log | audit2allow -M tftpwrite然后使用semodule -i tftpwrite.pp安装它 service xinetd reload并尝试使用tftp。 灿烂。 希望别人觉得这个有用!