当我跑步时
sudo systemctl disable avahi-daemon.socket
我明白了
Failed to execute operation: Access denied
但它以 root 身份运行,怎么会拒绝访问?(CentOS 7)
答案1
我也在 CentOS 7 上工作,遇到了类似的问题:
# systemctl unmask tmp.mount
Failed to execute operation: Access denied
拒绝与 SELinux 有关。如果您在enforcing
以下模式下运行 SELinux,则可能遇到这种情况:
# getenforce
Enforcing
就我的情况而言,该错误在 SELinux 日志文件中systemctl
产生了拒绝:USER_AVC
/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=?'
解决方案
本文指出这是由于 systemd 中的一个错误造成的,并提供了一种解决方法:
systemctl daemon-reexec
二次解决方案
如果上述方法不起作用,您可以将 SELinux 模式设置为permissive
:
setenforce 0
并且它应该可以正常工作。但是,第二种解决方案存在安全隐患。
答案2
就我的情况来说,我刚刚升级systemd
,所有systemctl
命令都失败了:
# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied
但是根据手册页,您可以通过向作为 PID 1 运行的守护进程发送命令来init
执行相同的操作,该方法有效:SIGTERM
kill -TERM 1
这将重新加载守护进程,之后所有systemctl
命令都将重新开始工作。
答案3
这两种解决方案对我来说都不起作用。结果发现我的 .service 文件中的其中一行缺少一个 = 符号。我通过查看 /var/log/messages 发现了这一点,并在那里看到了一个更具描述性的错误。因此,拒绝访问具有误导性。这实际上不是一个安全问题。