Запуск Habitat как службы с помощью SELinux
Возникли проблемы при запуске Habitat как службы под systemd с применением SELinux.
Согласно документации, это просто вопрос создания файла системного модуля для запуска сервиса:
cat <<HAB | tee /etc/systemd/system/habitat.service
[Unit]
Description=The Habitat Supervisor
[Service]
ExecStart=/bin/hab sup run
[Install]
WantedBy=default.target
HAB
systemctl start habitat
Однако, это терпит неудачу с ошибкой отказа в разрешении:
Apr 14 20:03:32 server.local audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=habitat comm="systemd" exe="/usr/lib/systemd/systemd"
Apr 14 20:03:32 server.local audit[16391]: AVC avc: denied { execute } for pid=16391 comm="(hab)" name="hab" dev="dm-0" ino=1191322 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u
Apr 14 20:03:32 server.local systemd[16391]: habitat.service: Failed at step EXEC spawning /bin/hab: Permission denied
-- Subject: Process /bin/hab could not be executed
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /bin/hab could not be executed and failed.
--
-- The error number returned by this process is 13.
aud2why в основном говорит, что отсутствует правило:
Apr 14 20:28:01 server.local audit[19421]: AVC avc: denied { execute } for pid=19421 comm="(hab)" name="hab" dev="dm-0" ino=1191322 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:unconfined_exec_t:s0 tclass=file permissive=0
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
Аудит2, похоже, не решил проблему, и, вообще говоря, не плохая ли идея создать модуль init_t?
journalctl -xe | audit2allow
#============= init_t ==============
allow init_t unconfined_exec_t:file execute;
journalctl -xe | audit2allow -M habitat
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i habitat.pp
sudo semodule -i habitat.pp
При этом генерируется следующее сообщение aud2why:
Apr 14 20:28:01 server.local audit[19421]: AVC avc: denied { execute } for pid=19421 comm="(hab)" name="hab" dev="dm-0" ino=1191322 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:unconfined_exec_t:s0 tclass=file permissive=0
Was caused by:
Unknown - would be allowed by active policy
Possible mismatch between this policy and the one under which the audit message was generated.
Possible mismatch between current in-memory boolean settings vs. permanent ones.
Исходя из этого ТАКОГО вопроса о SELinux, кажется, что проблема заключается либо в том, и / или в том, что /bin/hab
это ссылка, или что он пытается запустить в init_t
контекст.
Поэтому я попытался переименовать (к сожалению, --type
не получается "неоднозначно")
sudo semanage fcontext -a -t unconfined_exec_t -f f /bin/hab
sudo restorecon /bin/hab
sudo ls -Z /bin/hab
unconfined_u:object_r:bin_t:s0 /bin/hab
Однако, это все еще терпит неудачу с тем же сообщением об ошибке, и попытка указать непосредственно на двоичный файл среды обитания, кажется, также терпит неудачу:
cat <<HAB | tee /etc/systemd/system/habitat.service
[Unit]
Description=The Habitat Supervisor
[Service]
ExecStart=/hab/pkgs/core/hab/0.55.0/20180321220925/bin/hab sup run
[Install]
WantedBy=default.target
HAB
sudo semanage fcontext -a -t unconfined_exec_t -f f /hab/pkgs/core/hab/0.55.0/20180321220925/bin/hab
sudo restorecon /hab/pkgs/core/hab/0.55.0/20180321220925/bin/hab
Apr 14 20:30:52 servedr.local audit[19703]: AVC avc: denied { read open } for pid=19703 comm="(hab)" path="/hab/pkgs/core/hab/0.55.0/20180321220925/bin/hab" dev="dm-0" ino=1191322 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:unconfined_exec_t:s0 tclass=file permissive=0
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
Отключение SELinux позволяет запускать среду обитания без проблем, но это не совсем решение:)