Помогите настроить rejik в fedora!

Обсуждение программы редиректора
th
Сообщения: 3
Зарегистрирован: Вт дек 06, 2005 6:16

Сообщение th »

недавно пропарил себе мозги с режиком под Fedora Core 4, поэтому поделюсь опытом, может кому пригодится.

По причине вредности мне не хотелось выключать SELinux, если он уже стоит в системе. Пропуская детали почему я скачал selinux-policy-targeted-sources-1.27.2-18 с последующей компиляцией ядра 2.6.14, перейду сразу к сути.

начиная с v1.17 политик сквид вроде как работает корректно с редиректорами при правильной настройке всего остального.

Если вручную не править политику сквида, то это самое остальное надо подстроить под уже существующую политику.

Что входит в остальное? (см. для подробностей selinux/targeted/src/policy/domains/program/squid.te)
1. исполняемый файл должен иметь контекст bin_t или sbin_t. В директориях с этих контекстами приложение из домена squid_t может производить поиск файла и запуск его на выполнение. Для нас это означает что редиректор по хорошему надо положить в /bin, /sbin, /usr/bin, /usr/sbin и т.п.
2. файлы конфигов желательно положить к сквидовским конфигам с контекстом squid_conf_t. (/etc/squid по умолчанию)
3. файлы логов тоже к сквиду, (/var/log/squid, squid_log_t контекст)
4. файлы кэша ну вы поняли уже куда :) контекст им нужен squid_cache_t (/var/spool/squid/).
5. файл блокировки надо вынести за пределы файлов конфигов и туда где сквид может писать (/var/run/ например, с контекстом var_run_t).

выполнив эти пять слагаемых успеха мы получим всё для нашего личного счастья.

как это сделать?
1-3 выполняется легко. Копируем файлы в нужное место, правим файлы конфига режика и сквида соотвествующим образом. Где контекст сам собой не захотел стать таким как окружающие его контексты (ls -lZ) мы хамелеоним его чтобы был такой же как и все :) chcon сущность:роль:домен

4-5 пункт можно выполнить поправив исходные коды режика.
А именно: добавить, где ему хранить файлы блокировки и кэш.

вот тут, я положил модифицированные исходники. Места, где внесены изменения обозначены "th modification" комментарием. Это не касается только случаев, в которых все unsigned char были поменяны на char, чтобы компилятор не ругался при компиляции. Также выделяется память для переменных db_dir и lock_dir и потом не высвобождается... ну это уже мелочи.

Введение в SELinux можно глянуть здесь.

При конфигурировании рекомендую глядеть в /var/log/audit/audit.log если конечно аудит не отключен :)

th
Сообщения: 3
Зарегистрирован: Вт дек 06, 2005 6:16

Сообщение th »

Небольшое дополнение. Совсем из головы вылетело.

Симптомы:
1. syslog (/var/log/messages) содержит нечто вроде:
---
squid[4319]: Squid Parent: child process 4484 exited due to signal 6
squid[4319]: Squid Parent: child process 4503 started
(squid): Too many queued redirector requests (1 on 0)
squid[4319]: Squid Parent: child process 4503 exited due to signal 6
squid[4319]: Squid Parent: child process 4523 started
---
2. ps -e | grep squid выдаёт зашкаливающее за рамки разумного число сквидов.
3. главный показатель /var/log/audit/audit.log
---
type=AVC msg=audit(1133912668.901:980): avc: denied { name_connect } for pid=5019 comm="squid" dest=35100 scontext=root:system_r:squid_t:s0 tcontext=system_u:object_r:port_t:s
0 tclass=tcp_socket
---

Решение:
1. кладём сквид: service squid stop (или любой другой любимый способ убивания сквида...)
2. убиваем если остались живые дочерние процессы: killall -k squid (пару раз для надёжности :)
3. разрешаем сквиду соединяться по любым портам. Как оно влияет на работу редиректоров неясно, но влияет (в любом случае если за сквидом есть gaim, ftp и т.д. - пригодится): setsebool -P squid_connect_any=1
4. запускаем сквид: service squid start

duan
Сообщения: 2
Зарегистрирован: Вт дек 20, 2005 13:51

Сообщение duan »

Такие ошибки не только на федоре.

С учетом рекомендаций th rejik таки запустился. ОС CentOS 4.2. Никаких ошибок ни где все вроде отлично, но не режет ничего.

И вот этой переменной нет в CentOS:
setsebool -P squid_connect_any=1.

Версия политик: 1.17.30-2.110.

Может что еще th скажет хорошего.

th
Сообщения: 3
Зарегистрирован: Вт дек 06, 2005 6:16

Сообщение th »

Такие ошибки не только на федоре.
везде где есть SELinux.

Вообще role-based защита похоже становится межплатформенным стандартом. И скорее всего (ИМХО) будет портирована впоследствии, как станет более отлажена, на другие *никс.

setsebool -P squid_connect_any=1
Она появилась в более поздней версии политик targeted. И до того как она появилась - проблем не было (т.е. по умолчанию сквиду не запрещалось соединение с любыми портами)

А по поводу:
Никаких ошибок ни где все вроде отлично, но не режет ничего.
Лучше всего проверить ещё раз конфиги режика - а более точно все пути к файлам (скорее всего к текстовым базам ссылок и pcre-шаблонов). Похоже причина именно в этом. Проверить можно по отсутствию записей типа в логе redirector.err:
[4108] Load 22282 rules from /var/spool/squid/rejik3/PORNO.cache

Лечится правкой конфига.

Если же там нечто вроде:
[29846] MAKE-CACHE: ERROR: Can't open file /var/spool/squid/rejik3/BANNER.cache (for write): No such file or directory

Необходимо проверить пути к кэшу, права доступа к файлам кэша и SELinux контексты.

duan
Сообщения: 2
Зарегистрирован: Вт дек 20, 2005 13:51

Сообщение duan »

Да, спасибо, ошибка именно в путях была

Ответить