The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как в SELinux дать httpd право на выполнение файла bin_t"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Мониторинг, логи / Linux)
Изначальное сообщение [ Отслеживать ]

"Как в SELinux дать httpd право на выполнение файла bin_t"  +/
Сообщение от billybons2006 email(ok) on 20-Апр-16, 15:08 
Всем привет! Есть vds-ка: CentOS 7 / SELinux / dovecot / httpd / postfix / postfixadmin.
Postfixadmin при логине пытается запустить /usr/bin/doveadm для проверки пароля. Если SELinux выключен, все работает. Если включен, то возникают проблемы.

Вот часть лога /var/log/audit/audit.log:

type=AVC msg=audit(1461137622.601:691): avc:  denied  { read } for  pid=7329 comm="doveadm" name="dovecot.conf" dev="sda1" ino=919678 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:dovecot_etc_t:s0 tclass=file

type=SYSCALL msg=audit(1461137622.601:691): arch=c000003e syscall=21 success=no exit=-13 a0=7fabb674a800 a1=4 a2=7fabb6742050 a3=6 items=0 ppid=7300 pid=7329 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="doveadm" exe="/usr/bin/doveadm" subj=system_u:system_r:httpd_t:s0 key=(null)

type=AVC msg=audit(1461137622.601:692): avc:  denied  { getattr } for  pid=7329 comm="doveadm" path="/etc/dovecot/dovecot.conf" dev="sda1" ino=919678 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:dovecot_etc_t:s0 tclass=file

type=SYSCALL msg=audit(1461137622.601:692): arch=c000003e syscall=4 success=no exit=-13 a0=7fabb674a800 a1=7ffef3e54ac0 a2=7ffef3e54ac0 a3=19 items=0 ppid=7300 pid=7329 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="doveadm" exe="/usr/bin/doveadm" subj=system_u:system_r:httpd_t:s0 key=(null)

# ls -aZ /usr/bin/doveadm
-rwxr-xr-x. root root system_u:object_r:bin_t:s0   /usr/bin/doveadm

Само собой, httpd не дают выполнять bin_t.

# semanage fcontext -a -t httpd_exec_t "/usr/bin/doveadm"
не то, т.к. контекст бинарника "/usr/bin/doveadm" менять не надо (по идее) - он же все-таки не из httpd.

# grep dove /var/log/audit/audit.log | audit2allow -M httpd_dovecot
предлагает
allow httpd_t dovecot_etc_t:dir read;
allow httpd_t dovecot_etc_t:file { read getattr open };

странно - ни слова про doveadm...

Ну да ладно, я все же загрузил этот модуль, не помогло. Выгрузил нафиг.

Как я в итоге сформулировал задачу: надо ДОБАВИТЬ право httpd_t выполнить "/usr/bin/doveadm". Но вот забуксовал. Или задачу не так ставлю? Можете посоветовать, что делать?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как в SELinux дать httpd право на выполнение файла bin_t"  +/
Сообщение от billybons2006 email(ok) on 20-Апр-16, 17:58 
Добавлю: меня сбивает с толку факт, что в логе /var/log/audit/audit.log указан стартовый контекст (scontext=system_u:system_r:httpd_t:s0), в конфиге postfixadmin указан файл /usr/bin/doveadm, а audit2allow предлагает решение: дать httpd_t доступ на чтение директории конфигов dovecot. А где, собственно, указание httpd_t дать доступ к bin_t (/usr/bin/doveadm)?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как в SELinux дать httpd право на выполнение файла bin_t"  +2 +/
Сообщение от eRIC (ok) on 20-Апр-16, 19:34 
> Добавлю: меня сбивает с толку факт, что в логе /var/log/audit/audit.log указан стартовый
> контекст (scontext=system_u:system_r:httpd_t:s0), в конфиге postfixadmin указан файл
> /usr/bin/doveadm, а audit2allow предлагает решение: дать httpd_t доступ на чтение директории
> конфигов dovecot. А где, собственно, указание httpd_t дать доступ к bin_t
> (/usr/bin/doveadm)?

если разжевать лог это выглядит так:
postfixadmin веб приложение, которое работает под httpd(Apache2 сервер) где в веб приложении(в контексте httpd сервера) вызывается административная утилита /usr/bin/doveadm где данная утилита обращается к своему конфигурационному файлу /etc/dovecot/dovecot.conf для выполнения задачи

#ps axZ | grep httpd (отобразит текущие SELinux правила/контексты httpd процесса)

вывод:
1- отключить SELinux (что не ахти) или переключить на Permissive или Enforcing
2- подружиться с SELinux (то что советуется в audit логах) при помощи TE(Type Enforcement) файла(писать самому или же использовать audit2allow утилиту)

Решение:

#grep httpd_t /var/log/audit/audit.log | audit2allow -m doveadmlocal > doveadmlocal.te
#cat doveadm.te будет содержать типа такого:

module doveadm 1.0;
require {
        type dovecot_etc_t;
        type httpd_t;
        class file { read getattr open };
        class dir read;
}
#============= httpd_t ==============
allow httpd_t dovecot_etc_t:file { read getattr open };
allow httpd_t dovecot_etc_t:dir read;

дальше этот файл TE скомпилировать в модуль и включить в список модулей SELinux, будет где-то в этой папке /etc/selinux/targeted/modules/active/modules/:

#checkmodule -M -m -o doveadmlocal.mod doveadmlocal.te
#semodule_package -o doveadmlocal.pp -m doveadmlocal.mod
#semodule -i doveadmlocal.pp


Литература: https://wiki.centos.org/HowTos/SELinux


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Как в SELinux дать httpd право на выполнение файла bin_t"  +/
Сообщение от billybons2006 (ok) on 20-Апр-16, 21:36 
> если разжевать лог это выглядит так:
> postfixadmin веб приложение, которое работает под httpd(Apache2 сервер) где в веб приложении(в
> контексте httpd сервера) вызывается административная утилита /usr/bin/doveadm где данная
> утилита обращается к своему конфигурационному файлу /etc/dovecot/dovecot.conf для выполнения
> задачи

Зачем его разжёвывать? Я не говорил, что мне непонятна суть.

Мне непонятно вот что: для dovecot файл doveadm в самом деле "утилита". Но она, эта утилита, чужая для httpd. Почему стоит вопрос так, что надо утилите дать права на чтение конфига ее "хозяина" dovecot, когда по идее должен стоять вопрос как вообще httpd допущен к запуску /usr/bin/doveadm, которая bin_t. Мне это не совсем ясно.

> #ps axZ | grep httpd (отобразит текущие SELinux правила/контексты httpd процесса)

system_u:system_r:httpd_t:s0     2253 ?        Ss     0:02 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0     2255 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0     2256 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0     2257 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0     2258 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0     2259 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0     2281 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3741 pts/0 S+   0:00 grep --color=auto httpd

> вывод:
> 1- отключить SELinux (что не ахти) или переключить на Permissive или Enforcing
> 2- подружиться с SELinux (то что советуется в audit логах) при помощи
> TE(Type Enforcement) файла(писать самому или же использовать audit2allow утилиту)

Еще больше непонятно. Я же не предлагаю отключать. В вашей терминологии я с ним "дружусь" :)

>[оверквотинг удален]
>         class dir read;
> }
> #============= httpd_t ==============
> allow httpd_t dovecot_etc_t:file { read getattr open };
> allow httpd_t dovecot_etc_t:dir read;
> дальше этот файл TE скомпилировать в модуль и включить в список модулей
> SELinux, будет где-то в этой папке /etc/selinux/targeted/modules/active/modules/:
> #checkmodule -M -m -o doveadmlocal.mod doveadmlocal.te
> #semodule_package -o doveadmlocal.pp -m doveadmlocal.mod
> #semodule -i doveadmlocal.pp

Там все уже скомпилировано, сразу после выполнения:
grep httpd_t /var/log/audit/audit.log | audit2allow -M doveadmlocal

и только и ждет того, чтобы подгрузили. Во-первых, я уже писал, что после этого все равно ничего не пошло, а во-вторых, я читал на нескольких форумах, что на эту утилиту полагаться всецело не надо, типа, поймите сначала, что она предлагает, а потом уже думайте. Поэтому у меня и возник вопрос о том, а почему проблема между doveadm и конфигом dovecot, а не между httpd и doveadm. Ответить на этот вопрос я не смог (к тому же стал думать, что дело в domain transitions и окончательно сбился с мыслей) и спросил здесь.

> Литература: https://wiki.centos.org/HowTos/SELinux

Спасибо! Мне больше нравится эта: https://access.redhat.com/documentation/en-US/Red_Hat_Enterp...

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Как в SELinux дать httpd право на выполнение файла bin_t"  +/
Сообщение от eRIC (ok) on 21-Апр-16, 06:27 
> Зачем его разжёвывать? Я не говорил, что мне непонятна суть.

было разжевано для того, чтобы понять всю цепочку лога в audit и куда дальше копать :)

> Мне непонятно вот что: для dovecot файл doveadm в самом деле "утилита".
> Но она, эта утилита, чужая для httpd. Почему стоит вопрос так,
> что надо утилите дать права на чтение конфига ее "хозяина" dovecot,
> когда по идее должен стоять вопрос как вообще httpd допущен к
> запуску /usr/bin/doveadm, которая bin_t. Мне это не совсем ясно.\

из selinuxproject.org:
----------------------------------
# Using the type statement to declare a type of bin_t, where
# bin_t is used to identify a file as an ordinary program type.

type bin_t;
----------------------------------

> Еще больше непонятно. Я же не предлагаю отключать. В вашей терминологии я
> с ним "дружусь" :)

ну и вам никто явно не говорил отключать, показали пути решения, выбирать барину :)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Как в SELinux дать httpd право на выполнение файла bin_t"  +/
Сообщение от billybons2006 (ok) on 20-Апр-16, 22:08 
> #============= httpd_t ==============
> allow httpd_t dovecot_etc_t:file { read getattr open };
> allow httpd_t dovecot_etc_t:dir read;

После того, как вы прислали мне то, от чего я ушел в самом начале, подумалось, что если двое так считают, то все же имеет смысл попробовать еще разок:

grep dove /var/log/audit/audit.log | audit2allow -M doveconf-module
semodule -i doveconf-module.pp

Взял из истории команд те же самые, загрузил модуль и, тысяча чертей, пошло. Спасибо за отклик, помогли. А то я в дебри ушел бы сто процентов, т.к. считал предыдущие шаги ошибочными.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "Как в SELinux дать httpd право на выполнение файла bin_t"  +/
Сообщение от eRIC (ok) on 21-Апр-16, 06:28 
> Взял из истории команд те же самые, загрузил модуль и, тысяча чертей,
> пошло. Спасибо за отклик, помогли. А то я в дебри ушел
> бы сто процентов, т.к. считал предыдущие шаги ошибочными.

:)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру