Назад | Перейти на главную страницу

SELinux & ncsa_auth в Squid

Я пытаюсь включить SELinux на сервере CentOS 5.5 с 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

Это было бы 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 файл, который имеет гораздо больше шансов на успех.

Я только что проверил систему 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

устраняет проблему в моей системе.