odmowa dostępu do systemuctl podczas rootowania

16

Kiedy biegnę

sudo systemctl disable avahi-daemon.socket

dostaję

Failed to execute operation: Access denied

Ale działa jako root, jak można odmówić dostępu? (CentOS 7)

spraff
źródło
Czy pracujesz w kontenerze, takim jak Docker, LXC lub LXD? Czy wiesz na pewno , że jesteś w pojemniku?
allquixotic
Korzystam z nowej instalacji CentOS w VirtualBox. Czy to się liczy jako kontener?
spraff
Nie, VirtualBox nie jest kontenerem, to maszyna wirtualna. Są zasadniczo różne. Najprawdopodobniej musisz pobiec, journalctl -xeaby dowiedzieć się, dlaczego tak się dzieje.
allquixotic
1
Uwaga: ten komunikat o błędzie („Nie można wykonać operacji: odmowa dostępu”) może również wystąpić podczas próby uzyskania dostępu do nieistniejącej usługi w trybie wymuszania. W trybie zezwalającym pojawia się komunikat „Nie można wykonać operacji: brak takiego pliku lub katalogu”.
danmichaelo

Odpowiedzi:

23

Pracuję również na CentOS 7 i miałem podobny problem:

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

Odmowa dotyczy SELinuksa. Może tak być w przypadku, gdy używasz SELinux w enforcingtrybie:

# getenforce
Enforcing

W moim przypadku systemctlbłąd spowodował USER_AVCodmowę w pliku dziennika 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=?'

Rozwiązanie

W tym artykule stwierdzono, że jest to spowodowane błędem w systemie, i przedstawiono obejście:

systemctl daemon-reexec

Rozwiązanie wtórne

Jeśli powyższe nie działało, możesz ustawić tryb SELinux na permissive:

setenforce 0

i powinno działać dobrze. To drugie rozwiązanie ma jednak wpływ na bezpieczeństwo.

Elouan Keryell-Even
źródło
Nie dostaję żadnego wyjścia zamiast, Removed symlinka potem systemctl disable avahi-daemon.socketzawodzi jak poprzednio, produkując ten sam wiersz inaudit.log
spraff
Czy możesz spróbować wyłączyć tryb wymuszania selinux? setenforce 0
Elouan Keryell-Even
1
systemctl disable avahi-daemon.socketpowiedzie się po setenforce 0bez systemctl daemon-reexec(i zdaję sobie sprawę, teraz unmaskto polecenie, nie moja :-)) Czy to jest w porządku, po prostu to zrobić i setenforce 1po?
spraff
@spraff Nie wiem, jestem nowicjuszem SELinux ha ha. Wspominam więc setenforce 0w mojej odpowiedzi.
Elouan Keryell-Even
1
Proszę nie setenforce 0. Jest to zła praktyka w środowisku produkcyjnym. Użyj systemctl daemon-reexeczamiast tego.
Younes
10

W moim przypadku właśnie zaktualizowałem systemdi każde systemctlpolecenie nie działa:

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

Jednak według strony initpodręcznika możesz zrobić to samo, wysyłając SIGTERMdo demona działającego jako PID 1, który działał:

kill -TERM 1

To przeładowało demona, po czym wszystkie systemctlpolecenia znów zaczęły działać.

Malvineous
źródło
1
Dzięki. Rozwiązałem mój problem, który miałem po uaktualnieniu dystrybucji archlinux po długim czasie.
buergi
1
pracował na Ubuntu 18.10 - Dzięki!
Roy Shilkrot
1

Żadne z tych rozwiązań nie działało dla mnie. Okazało się, że w jednym z wierszy w moim pliku .service był brakujący znak =. Odkryłem to, szukając / var / log / messages i zobaczyłem tam błąd, który był bardziej opisowy. Odmowa dostępu wprowadzała w błąd. To nie był tak naprawdę problem bezpieczeństwa.

Jon
źródło
3
Powinieneś podać więcej szczegółów na temat rozwiązania tego pytania. Na przykład mówisz o bardziej szczegółowym komunikacie o błędzie, ale nie wskazujesz, jaki dokładnie był komunikat o błędzie. Bez tych informacji lepiej byłoby to potraktować jako komentarz, ponieważ odpowiedź bez tych informacji jest niepełna.
Ramhound
który plik dziennika pokazał komunikat?
rogerdpack