我正在尝试在 CentOS 5.5 服务器上启用 SELinux,并使用 Squid 3.1.12 通过 ncsa_auth 处理身份验证。
当我关闭 SElinux 时,一切都运行正常,但是当我启用它时,Squid 在身份验证插件 ncsa_auth 上崩溃。
这是错误信息:
May 29 19:12:21 us squid[1458]: Squid Parent: child process 1493 started
May 29 19:12:21 us kernel: printk: 27 messages suppressed.
May 29 19:12:21 us kernel: type=1400 audit(1306696341.922:74): avc: denied { execute } for pid=1494 comm="squid" name="ncsa_auth" dev=xvda1 ino=610563 scontext=root:system_r:squid_t:s0 tcontext=user_u:object_r:usr_t:s0 tclass=file
May 29 19:12:22 us (squid): The basicauthenticator helpers are crashing too rapidly, need help!
May 29 19:12:22 us squid[1458]: Squid Parent: child process 1493 exited with status 1
May 29 19:12:22 us squid[1458]: Exiting due to repeated, frequent failures
当 SELinux 允许时,我会收到以下警告:
May 29 19:25:27 us kernel: type=1400 audit(1306697127.741:81): avc: denied { execute } for pid=1524 comm="squid" name="ncsa_auth" dev=xvda1 ino=610563 scontext=root:system_r:squid_t:s0 tcontext=user_u:object_r:usr_t:s0 tclass=file
May 29 19:25:27 us kernel: type=1400 audit(1306697127.741:82): avc: denied { execute_no_trans } for pid=1524 comm="squid" path="/opt/squid-3.1.12/helpers/basic_auth/NCSA/ncsa_auth" dev=xvda1 ino=610563 scontext=root:system_r:squid_t:s0 tcontext=user_u:object_r:usr_t:s0 tclass=file
ncsa-auth:
[bart@us NCSA]# ls -alZ ncsa_auth
-rwxrwxrwx root root user_u:object_r:usr_t ncsa_auth
我思考他希望标签是unconfined_u:system_r:squid_t:s0
,但我不知道如何正确设置它。在我尝试使用以下命令设置它之后:
chcon unconfined_u:system_r:squid_t:s0 ncsa_auth
我收到以下错误:chcon: failed to change context of ncsa_auth to unconfined_u:system_r:squid_t:s0: Invalid argument
答案1
我刚刚检查了 CentOS 5.6 系统,其中 squid + ncsa_auth 正在运行。我的权限/usr/lib64/squid/ncsa_auth
是
ls -lZ /usr/lib64/squid/ncsa_auth
-rwsr-x--- root squid system_u:object_r:lib_t /usr/lib64/squid/ncsa_auth
如果我将权限设置/usr/lib64/squid/ncsa_auth
为与您相同,那么我会收到与您完全相同的错误消息。
chown root:squid /usr/lib64/squid/ncsa_auth
chmod 4750 /usr/lib64/squid/ncsa_auth
chcon system_u:object_r:lib_t /usr/lib64/squid/ncsa_auth
修复了我的系统上的问题。
答案2
那应该chcon -t squid_t ncsa_auth
存在,但在我的 RHEL5.5 机器上,有一条规则允许 Squid 对标有 的文件具有执行权限bin_t
,这可能应该是 ,而不是squid_t
:
allow squid_t bin_t : file { ioctl read getattr lock execute execute_no_trans open } ;
您可以使用来检查这一点sesearch -s squid_t --allow
。 lib_t 也存在相同的规则,请参阅 Iains 的回答。
类型squid_t
适用于域,而不是文件。文件可以标记为squid_exec_t
,但那是针对守护进程二进制文件,而不是辅助文件。长话短说,文件可能应该标记为bin_t
并放入/usr/local/bin
。
我怀疑你的 ncsa_auth 插件安装在一个奇怪的位置。如果你把它放在 中/usr/local/bin
,并restorecon -Fv
在其上运行,Squid 会尝试将其作为bin_t
文件执行,这更有可能成功。