root 时拒绝 systemctl 访问

spr*_*aff 28 centos administrator systemctl

当我跑

sudo systemctl disable avahi-daemon.socket
Run Code Online (Sandbox Code Playgroud)

我得到

Failed to execute operation: Access denied
Run Code Online (Sandbox Code Playgroud)

但是它以root身份运行,如何拒绝访问?(CentOS 7)

Elo*_*ven 33

我也在 CentOS 7 上工作,并且遇到了类似的问题:

# systemctl unmask tmp.mount
Failed to execute operation: Access denied
Run Code Online (Sandbox Code Playgroud)

拒绝与 SELinux 有关。如果您在enforcing模式下运行 SELinux,这可能是您的情况:

# getenforce
Enforcing
Run Code Online (Sandbox Code Playgroud)

就我而言,该systemctl错误USER_AVC在 SELinux 日志文件中产生了拒绝/var/log/audit/audit.log

type=USER_AVC msg=audit(1475497680.859:2656): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { enable } for auid=0 uid=0 gid=0 path="/dev/null" cmdline="systemctl unmask tmp.mount" scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:null_device_t:s0 tclass=service  exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?'
Run Code Online (Sandbox Code Playgroud)

解决方案

这篇文章指出这是由于 systemd 中的错误造成的,并提供了解决方法:

systemctl daemon-reexec
Run Code Online (Sandbox Code Playgroud)

二次解决方案

如果上述方法不起作用,您可以将 SELinux 模式设置为permissive

setenforce 0
Run Code Online (Sandbox Code Playgroud)

它应该可以正常工作。但是,第二个解决方案具有安全隐患。


Mal*_*ous 26

就我而言,我刚刚升级systemd并且任何systemctl命令都失败了:

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied
Run Code Online (Sandbox Code Playgroud)

但是,根据init联机帮助页,您可以通过发送SIGTERM到以 PID 1 运行的守护程序来执行相同的操作,该操作有效:

kill -TERM 1
Run Code Online (Sandbox Code Playgroud)

这重新加载了守护进程,之后所有systemctl命令都重新开始工作。

  • 在 Ubuntu 18.10 上工作 - 谢谢! (3认同)
  • 谢谢。解决了我在很长一段时间后升级 archlinux 发行版后遇到的问题。 (2认同)
  • 它适用于 Ubuntu 20.04(从 18.10 升级)并为我省去了很多麻烦。一束感谢 (2认同)