root 일 때 systemctl 액세스가 거부 됨


16

내가 달릴 때

sudo systemctl disable avahi-daemon.socket

나는 얻다

Failed to execute operation: Access denied

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


Docker, LXC 또는 LXD와 같은 컨테이너에서 실행 중입니까? 당신이 할 확실히 알고 당신이 나 컨테이너에 있지?
allquixotic

VirtualBox에서 새로운 CentOS 설치를 실행하고 있습니다. 컨테이너로 간주됩니까?
spraff

아니요, VirtualBox는 컨테이너가 아니며 가상 시스템입니다. 그것들은 근본적으로 다릅니다. journalctl -xe왜 이런 일이 일어나고 있는지 파악하기 위해 달려야 할 것입니다.
allquixotic

1
적용 모드에서 존재하지 않는 서비스에 액세스하려고 할 때이 오류 메시지 ( "작업을 실행하지 못했습니다 : 액세스 거부")가 발생할 수도 있습니다. 허용 모드에서는 "작업 실행 실패 : 해당 파일 또는 디렉토리가 없습니다"가 표시됩니다.
danmichaelo

답변:


23

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

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


나는 이전과 같은 결과를 Removed symlinksystemctl disable avahi-daemon.socketaudit.log
얻지 못했지만

selinux 강제 모드를 비활성화 할 수 있습니까? setenforce 0
Elouan Keryell-Even

1
systemctl disable avahi-daemon.socketsetenforce 0없이 성공합니다 systemctl daemon-reexec(그리고 지금 unmask은 내 명령이 아니라 당신의 명령 이라는 것을 알고 있습니다 ) setenforce 1.
spraff

@ spraff 몰라, 나는 SELinux 초보자 하하. setenforce 0내 대답에 Imma 언급 .
Elouan Keryell-Even

1
하지 마십시오 setenforce 0. 이것은 프로덕션 환경에서 나쁜 습관입니다. systemctl daemon-reexec대신 사용하십시오 .
Younes

10

내 경우에는 방금 업그레이드 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명령이 다시 작동하기 시작했습니다.


1
감사. 오랜 시간 후에 아치 리눅스 배포판을 업그레이드 한 후 내 문제를 해결했습니다.
buergi

1
Ubuntu 18.10에서 작업했습니다-감사합니다!
Roy Shilkrot

1

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


3
이 질문을 해결하는 방법에 대한 자세한 내용을 제공해야합니다. 예를 들어 더 자세한 오류 메시지에 대해 이야기하지만 오류 메시지가 정확히 무엇인지 표시하지는 않습니다. 이 정보가 없으면이 정보가없는이 답변이 불완전하기 때문에 주석으로 사용하는 것이 좋습니다.
Ramhound

어떤 로그 파일에 메시지가 표시 되었습니까?
rogerdpack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.