У меня есть контейнер Docker, который должен читать журналы, в том числе с самого хоста. Так я монтирую том /var/log
используя z
флаг. Это изменяет контекст SELinux для файлов внутри /var/log
что не позволяет моему обычному процессору получить доступ к этим файлам, в результате чего я не могу войти в систему локально:
kernel: type = 1400 audit (14958482): avc: denied {open} for pid = 12345 comm = "agetty" name = "/ var / log / wtmp" dev = "dm-6" ino = 134 scontext = system_u: system_r : getty_t: s0-s0: c0.c1023 tcontext = system_u: object_r: svirt_sandbox_file_t: s0 tclass = файл
Какая здесь лучшая практика? Отключение SELinux, хотя и решает проблему, не вариант.
restorecon -R /var/log
может исправить проблему отсутствия входа в систему, так как он вернет все метки в этом дереве по умолчанию.
Долгосрочное исправление заключается в изменении политики SELinux, чтобы позволить контейнерам Docker читать содержимое / var / log. https://wiki.gentoo.org/wiki/SELinux/Tutorials/Creating_your_own_policy_module_file это один из примеров того, как это сделать. Если вы положите все обратно и попытаетесь прочитать снова, вы можете использовать audit2allow -r
чтобы сформировать для вас необходимую политику.
Если вы используете Chef, вы можете использовать https://supermarket.chef.io/cookbooks/selinux_policy/versions/0.3.0 сделать это тоже.
(И похвалы за то, что не пошли по маршруту just-disable-it)