Назад | Перейти на главную страницу

SELinux отрицает «systemctl kill» при использовании в сценарии постротации Anacron на CentOS 7

Я использую программу резервного копирования под названием UrBackup, которую я настроил для ротации журналов один раз в день через cron.daily. После ротации журналов программное обеспечение использует сценарий postrotate для отправки запущенному процессу сигнала HUP с «systemctl kill». Однако SELinux отрицает эту операцию, и я не могу понять, как это исправить.

Вот полный файл конфигурации logrotate для UrBackup из /etc/logrotate.d:

"/var/log/urbackup.log" {
        daily
        rotate 30
        missingok
        create 640 urbackup urbackup
        compress
        postrotate
                test -e /var/run/urbackupsrv.pid && kill -HUP 'cat /var/run/urbackupsrv.pid' || /bin/systemctl kill -s HUP urbackup-server.service
        endscript
}

Как я обнаружил, в системе выполняется следующий проблемный сценарий postrotate:

/bin/systemctl kill -s HUP urbackup-server.service

SELinux блокирует это. Вот соответствующая запись журнала из / var / log / messages:

Nov 14 03:33:33 backup4 kernel: type=1107 audit(1510648413.518:4407695): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { stop } for auid=0 uid=0 gid=0 path="/usr/lib/systemd/system/urbackup-server.service" cmdline="/bin/systemctl kill -s HUP urbackup-server.service" scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023 tcontext=system_u:object_r:systemd_unit_file_t:s0 tclass=service#012 exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?'

Nov 14 03:33:33 backup4 logrotate: ALERT exited abnormally with [1]

Поскольку сигнал HUP не отправляется службе, он не знает, что файлы журнала были повернуты, и продолжает бесконечно записывать в старый (повернутый) журнал.

Я попытался устранить эту проблему с помощью утилиты sealert, чтобы предоставить объяснение всех ошибок в /var/log/audit/audit.log. Однако похоже, что эта ошибка игнорируется, хотя запись журнала отображается в audit.log.

Я также пробовал запускать команду «systemctl kill» в интерактивном режиме от имени пользователя root. Он завершается без ошибок. То же самое касается ручного запуска logrotate:

logrotate -f /etc/logrotate.d/urbackup-server

Эта команда также выполняется без проблем. Единственный раз, когда я вижу отказ SELinux, - это когда logrotate запускается ежедневным процессом Anacron.

SELinux явно не разрешает команду "systemctl kill"? Если да, то почему я могу запускать его в интерактивном режиме, но не при запуске через cron? Есть ли способ добавить исключение для этого случая или другой способ отправить сигнал HUP процессу, чтобы он записал в правильный файл журнала?

Большое спасибо за любую помощь.

В частности, контекст logrotate_t не допускается systemd_unit_file_t. Ваш интерактивный запуск находится в другом контексте.

Любопытно, что провалился тест pid файла. Если этот файл pid не существует во время работы службы, попробуйте добавить PIDFile=/var/run/urbackupsrv.pid к urbackup-server.service Блок.

Есть способы определить переход домена в SELinux, но сначала попробуйте файл pid.