SELinux. Нерегистрируемые блокировки при загрузке.
Прикрутил SELinux к Archlinux. Политики брал с https://github.com/TresysTechnology/refpolicy. Загрузился в permissive режиме, внес поправки в политики с учетом системы инициализации systemd. То есть сам systemd у меня загружается в домене init_t, а дальше я прописал для него цепочки переходов в новые домены для остальных сервисов. Вот список модулей политик, которые у меня на данный момент загружены:
- base.pp
- init.pp
- libraries.pp
- logging.pp
- selinuxutil.pp
- modutils.pp
- userdomain.pp
- miscfiles.pp
- sysadm.pp
- authlogin.pp
- sysnetwork.pp
- storage.pp
- application.pp
- locallogin.pp
- getty.pp
- xserver.pp
- mount.pp
- unconfined.pp
- udev.pp
- avahi.pp
- cups.pp
- dbus.pp
- alsa.pp
- dhcp.pp
- networkmanager.pp
- ssh.pp
- policykit.pp
- ntp.pp
Перезагрузился, пофиксил все блокировки, которые выводятся при «journalctl -b | grep -i avc». Все, теперь после перезагрузки лог чистый. Отменил правила dontaudit («semodule -DB»). Возникло еще несколько запрещений, которые я тоже разрешил. Прописал в конфиге режим «enforcing», перезагрузился. При загрузке выводятся несколько красных сообщений об ошибках, успеваю прочесть только, что «failed» и «journalctl». Грепнул лог:
$ journalctl -b | grep -i denied
июл 28 12:19:44 localhost journalctl[191]: Failed to kill journal service: Access denied
июл 28 12:19:46 localhost systemd-update-utmp[263]: Failed to get timestamp: Access denied
июл 28 12:19:47 localhost systemd-logind[309]: Failed to enable subscription: Access denied
июл 28 12:19:47 localhost systemd-logind[309]: Failed to fully start up daemon: Permission denied
июл 28 12:19:47 localhost systemd-logind[324]: Failed to enable subscription: Access denied
июл 28 12:19:47 localhost systemd-logind[324]: Failed to fully start up daemon: Permission denied
июл 28 13:34:43 localhost unknown[1]: <audit-1130> pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t msg='unit=systemd-journald comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
июл 28 13:34:43 localhost kernel: audit: type=1130 audit(1438079683.186:10): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t msg='unit=systemd-journald comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
июл 28 13:34:43 localhost journalctl[189]: Failed to kill journal service: Access denied
июл 28 13:34:43 localhost unknown[1]: <audit-1130> pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t msg='unit=systemd-udevd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
июл 28 13:34:43 localhost kernel: audit: type=1130 audit(1438079683.290:11): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t msg='unit=systemd-udevd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
июл 28 13:34:43 localhost systemd[1]: systemd-journal-flush.service: main process exited, code=exited, status=1/FAILURE
июл 28 13:34:43 localhost systemd[1]: Failed to start Flush Journal to Persistent Storage.
июл 28 13:34:43 localhost systemd[1]: Unit systemd-journal-flush.service entered failed state.
июл 28 13:34:43 localhost systemd[1]: systemd-journal-flush.service failed.
июл 28 13:34:43 localhost unknown[1]: <audit-1130> pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t msg='unit=systemd-journal-flush comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
июл 28 13:34:43 localhost unknown[1]: <audit-1130> pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t msg='unit=systemd-vconsole-setup comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[Service]
ExecStart=/usr/bin/journalctl --flush
/bin/journalctl --flush
Failed to kill journal service: Access denied
if (access("/run/systemd/journal/flushed", F_OK) >= 0)
return 0;
/* OK, let's actually do the full logic, send SIGUSR1 to the
* daemon and set up inotify to wait for the flushed file to appear */
r = bus_open_system_systemd(&bus);
if (r < 0)
return log_error_errno(r, "Failed to get D-Bus connection: %m");
r = sd_bus_call_method(
bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
"KillUnit",
&error,
NULL,
"ssi", "systemd-journald.service", "main", SIGUSR1);
if (r < 0) {
log_error("Failed to kill journal service: %s", bus_error_message(&error, r));
return r;
}
$ qdbus-qt4 --system org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager.KillUnit
Error: org.freedesktop.DBus.Error.InvalidArgs
Invalid arguments '' to call org.freedesktop.systemd1.Manager.KillUnit(), expecting 'ssi'.
$ qdbus-qt4 --system org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager.KillUnit "systemd-journald.service" "main" SIGUSR1
Cannot find 'org.freedesktop.systemd1.Manager.KillUnit' in object /org/freedesktop/systemd1 at org.freedesktop.systemd1