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.