我拥有多个 Fedora 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) 重置一些额外的标识符。