root 일 때 systemctl 액세스가 거부 됨 Access denied 그러나 루트로 실행되며 액세스를

내가 달릴 때

sudo systemctl disable avahi-daemon.socket

나는 얻다

Failed to execute operation: Access denied

그러나 루트로 실행되며 액세스를 어떻게 거부 할 수 있습니까? (CentOS 7)



답변

CentOS 7에서도 일하고 ​​비슷한 문제가 있습니다.

# systemctl unmask tmp.mount
Failed to execute operation: Access denied

거부는 SELinux와 관련이 있습니다. SELinux를 enforcing모드 에서 실행중인 경우 다음과 같습니다.

# getenforce
Enforcing

내 경우에는 systemctl 오류로 인해 USER_AVCSELinux 로그 파일에서 거부 가 발생했습니다 /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

잘 작동합니다. 그러나이 두 번째 솔루션은 보안에 영향을 미칩니다.


답변

내 경우에는 방금 업그레이드 systemd했으며 모든 systemctl명령이 실패했습니다.

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied

그러나 init맨 페이지 에 따르면 SIGTERMPID 1로 실행되는 데몬 으로 전송하여 동일한 작업을 수행 할 수 있습니다 .

kill -TERM 1

데몬을 다시로드 한 후 모든 systemctl명령이 다시 작동하기 시작했습니다.


답변

어느 해결책도 저에게 효과적이지 않았습니다. 내 .service 파일의 줄 중 하나에 누락 된 = 기호가있는 것으로 나타났습니다. 나는 / var / log / messages를보고 이것을 발견했고 더 설명적인 오류를 보았다. 따라서 액세스 거부가 오도되었습니다. 실제로 보안 문제는 아닙니다.


답변