Я пытаюсь включить 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
устраняет проблему в моей системе.