Как заставить «su» работать в сценариях инициализации в Red Hat 8 с SELinux?
В сценарии инициализации я пытаюсь запустить команду:
su - user -c "/home/user/bin/command”
но SELinux предотвращает это:
systemd[1]: Starting LSB: Start the my_script at boot...
su[5941]: pam_unix(su-l:auth): auth could not identify password for [user]
su[5941]: FAILED SU (to user) root on none
my_script[5939]: Password: Password: su: Authentication has failed
я подал заявкуsetsebool -P domain_can_mmap_files 1
, а также сгенерировал и применил политику с помощьюausearch -c 'su' --raw | audit2allow -M my-su
:
module my-su 1.0;
require {
type init_t;
type su_exec_t;
class file map;
}
#============= init_t ==============
allow init_t su_exec_t:file map;
Я получаю сообщение/var/log/audit.log
:
type=USER_AVC msg=audit(1607611267.156:176): pid=6376 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc: denied { rootok } for scontext=system_u:system_r:init_t:s0 tcontext=system_u:system_r:init_t:s0 tclass=passwd permissive=0 exe="/usr/bin/su" sauid=0 hostname=? addr=? terminal=?'UID="root" AUID="unset" SAUID="root"
и последующее использованиеausearch […]
не создает надлежащей политики.
Кому-нибудь удалось решить подобную проблему?
1 ответ
Только что нашел решение, там былоallow init_t self:passwd rootok;
отсутствующий. Действительная политика заключается в следующем:
module my-su 1.0;
require {
type init_t;
type su_exec_t;
class file map;
class passwd rootok;
}
#============= init_t ==============
allow init_t su_exec_t:file map;
allow init_t self:passwd rootok;