LINUX.ORG.RU

SELinux. Не происходит перехода в новый домен.

 , ,


0

1

Здравствуйте. Пытаюсь прикрутить SELinux к своему Арчу. Ядро перекомпилировал с поддержкой, утилиты всякие нужные установил. Загвоздка в systemd оказалась. Решил посмотреть, как сделано в Федоре и попытаться сделать так же. Подсмотрел, что в Федоре файл /usr/lib/systemd/systemd имеет контекст «system_u:object_r:init_exec_t». Соответственно, сам процесс запустится в домене init_t. Поменял у себя контекст на такой же, перезагрузился, все работает, домен процесса systemd сменился на init_t. Отлично. Дальше нужно сделать, чтобы systemd-journald работал в домене syslogd_t. Подсмотрел, что в Федоре файл /usr/lib/systemd/systemd-journald имеет контекст «system_u:object_r:syslogd_exec_t». Поменял у себя контекст на аналогичный, но после перезагрузки перехода systemd-journald в домен syslogd_t не произошло. Решил посмотреть, какие точки входа в новые домены вообще доступны для init_t.

# sesearch -T -s init_t
Found 9 semantic te rules:
   type_transition init_t var_run_t : file init_var_run_t; 
   type_transition init_t device_t : fifo_file initctl_t; 
   type_transition init_t etc_t : file etc_runtime_t; 
   type_transition init_t xdm_exec_t : process xdm_t; 
   type_transition init_t initrc_exec_t : process initrc_t; 
   type_transition init_t getty_exec_t : process getty_t; 
   type_transition init_t sulogin_exec_t : process sulogin_t; 
   type_transition init_t shell_exec_t : process sysadm_t; 
   type_transition init_t shell_exec_t : process initrc_t;

Сделал вывод, что моя версия политик вообще не предусматривает перехода напрямую из init_t в syslogd_t. Зато в домен syslogd_t можно перейти из initrc_t.

# sesearch -T -t syslogd_exec_t
Found 1 semantic te rules:
   type_transition initrc_t syslogd_exec_t : process syslogd_t;

Но ведь в моей системе systemd-journald запускается напрямую после systemd. То есть нет промежуточного шага в виде initrc скрипта. Делаю вывод, что мне нужно написать модуль политики для systemd, где разрешу переход init_t->syslogd_t. Потому что в Федоре так и сделано. Полазил по спецификации языка политик, накодил нечто такое:

# systemd.te

policy_module(systemd,1.0.0)

########################################
#
# Declarations
#
gen_require(`type syslogd_t, syslogd_exec_t;')
domain_entry_file(syslogd_t, syslogd_exec_t)
# systemd.if

interface(`systemd_domtrans',`
        gen_require(`
                type init_t, syslogd_t, syslogd_exec_t;
        ')

        domtrans_pattern(init_t, syslogd_exec_t, syslogd_t)
')
Модуль отлично компилируется и даже загружается. Но почему-то после загрузки команда «sesearch -T -t syslogd_exec_t» все равно показывает, что переходить можно только из initrc_t. Что я делаю не так? Не ругайтесь особо, я SELinux только начал изучать, а создавать правила через audit2allow некузяво. Хочу разобраться.



Последнее исправление: cetjs2 (всего исправлений: 1)

Решено!

Если кому пригодится - копать в сторону макроса «domain_auto_trans»

esvstn
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.