Squid 中的 SELinux 和 ncsa_auth

Squid 中的 SELinux 和 ncsa_auth

我正在尝试在 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文件执行,这更有可能成功。

相关内容