Запуск 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 позволяет запускать среду обитания без проблем, но это не совсем решение:)

0 ответов

Другие вопросы по тегам