为什么 SELinux 阻止 systemctl --user / systemd 用户实例命令?

为什么 SELinux 阻止 systemctl --user / systemd 用户实例命令?

我拥有多个 Fe​​dora 27 系统。我对 SELinux 相当熟悉。我在所有系统上运行它,并禁用“unconfined”模块。

在这个特定的系统上,SELinux 阻止了所有“systemctl --user”命令:

$ systemctl --user status
Failed to read server status: Access denied

直到最近,这种方法才奏效。我不知道发生了什么变化。我做过最近从 Fedora 26 升级到 Fedora 27,但我认为时机与这个问题不一样。

让我感到奇怪并且很难知道下一步该做什么的是,auditd 中根本没有关于它的任何内容。

在系统日志中我得到:

Dec 25 09:48:07 jukni systemd[669]: selinux: avc:  denied  { status } for auid=n/a uid=1086 gid=1086 cmdline="" scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tclass=system permissive=0

此外,这:

$ systemctl --user restart lojban_mediawiki_web
Failed to restart lojban_mediawiki_web.service: Access denied
See user logs and 'systemctl --user status lojban_mediawiki_web.service' for details.

在系统日志中给出以下内容:

Dec 25 09:49:06 jukni systemd[669]: selinux: avc:  denied  { start } for auid=n/a uid=1086 gid=1086 path="/home/sampre_mw/.config/systemd/user/lojban_mediawiki_web.service" cmdline="" scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=staff_u:object_r:systemd_unit_file_t:s0 tclass=service permissive=0

我在搜索中找不到关于 self:system 的任何内容,而我所能找到的https://github.com/TresysTechnology/refpolicy.git 或者 https://github.com/TresysTechnology/refpolicy-contrib.git是:

policy/modules/kernel/kernel.te
481:    allow can_load_kernmodule self:system module_load;

policy/modules/system/init.te
225:    allow init_t self:system { status reboot halt reload };

我的其他类似系统没有这个问题。重新标记重新启动没有帮助。用户单元文件的上下文是:

$ ls -lZ ~/.config/systemd/user/
total 8
drwxr-xr-x. 2 sampre sampre staff_u:object_r:user_home_t:s0  66 Feb  6  2017 default.target.wants
-rw-rw-r--. 1 sampre sampre staff_u:object_r:user_home_t:s0 417 Jul 14 00:32 jbotcan_database.service
-rw-rw-r--. 1 sampre sampre staff_u:object_r:user_home_t:s0 419 Jul 14 00:32 jbotcan_site.service

,我不知道这是否正确。

将该用户的登录名更改为 sysadm_u 或 user_u 也无济于事。

我甚至不知道接下来该怎么做。我的意思是,我可以制作一个自定义模块来实现要发送到 syslog 的 AVC,但这似乎是错误的做法 (tm),因为很明显,如果没有这个模块,操作系统就不会发布。

添加:

$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

添加#2:

我现在重新启动了另一个 Fedora 27 盒子并且:

Jan  5 23:31:38 vrici systemd[5992]: selinux: avc:  denied  { status } for auid=n/a uid=1000 gid=1000 cmdline="" scontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcontext=staff_u:staff_r:staff_t:s0-s0:c0.c1023 tcla

ss=系统许可=0

这让它看起来更像是 systemd 或 selinux 的一个错误。

答案1

我觉得你需要改变角色sysadm_r,也许可以尝试:

sudo -u <your_user> -r sysadm_r -t sysadm_t systemctl --user status

这确实可能是策略中的一个错误,用户应该能够管理自己的 IMVHO 服务(与系统服务相比)。我想你应该向 fedoraselinux-policy软件包报告这一点。

另外,您是否尝试过用 重新标记文件系统restorecon -RFv /?这将强制 (-F) 重置一些额外的标识符。

相关内容