Доступ к systemctl запрещен, когда root

28310
spraff

Когда я бегу

sudo systemctl disable avahi-daemon.socket 

я получил

Failed to execute operation: Access denied 

Но он запускается с правами root, как запретить доступ? (CentOS 7)

13
Вы работаете в контейнере, например Docker или LXC или LXD? Вы * точно знаете * находитесь или не находитесь в контейнере? Horn OK Please 7 лет назад 0
Я запускаю новую установку CentOS в VirtualBox. Это считается контейнером? spraff 7 лет назад 0
Нет, VirtualBox - это не контейнер, а виртуальная машина. Они принципиально разные. Скорее всего, вам нужно запустить `journalctl -xe`, чтобы выяснить, почему это происходит. Horn OK Please 7 лет назад 0
Обратите внимание, что это сообщение об ошибке («Не удалось выполнить операцию: доступ запрещен») также может появляться при попытке доступа к несуществующей службе в принудительном режиме. В разрешающем режиме вы получите сообщение «Не удалось выполнить операцию: нет такого файла или каталога». danmichaelo 7 лет назад 0

2 ответа на вопрос

18
Elouan Keryell-Even

Я также работаю над CentOS 7, и у меня была похожая проблема:

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

Отказ связан с SELinux. Это может быть ваш случай, если вы используете SELinux в enforcingрежиме:

# getenforce Enforcing 

В моем случае systemctlошибка привела к USER_AVCотказу в файле журнала 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=?' 

Решение

В этой статье говорится, что это происходит из-за ошибки в systemd, и предоставляется обходной путь:

systemctl daemon-reexec 

Вторичное решение

Если вышеописанное не сработало, вы можете установить режим SELinux на permissive:

setenforce 0 

и это должно работать нормально. Однако это второе решение имеет последствия для безопасности.

Я не получаю вывод вместо `Removed symlink`, и после этого` systemctl отключает avahi-daemon.socket`, как и прежде, не удается, производя ту же строку в `audit.log` spraff 7 лет назад 0
Можете ли вы попытаться отключить Selinux принудительный режим? `setenforce 0` Elouan Keryell-Even 7 лет назад 0
`systemctl disable avahi-daemon.socket` завершается успешно после` setenforce 0` без `systemctl daemon-reexec` (и теперь я понимаю, что` unmask` - это ваша команда, а не моя :-)) Можно ли просто сделать это и ` setenforce 1` после? spraff 7 лет назад 0
@ spraff Я не знаю, я новичок в SELinux, ха-ха. Imma упомянуть `setenforce 0` в моем ответе тогда. Elouan Keryell-Even 7 лет назад 0
@spraff вы можете запустить `setenforce 1` после. это сбрасывает его для обеспечения исполнения. Mark Yisri 7 лет назад 0
Пожалуйста, не `setenforce 0`. Это плохая практика в производственной среде. Пожалуйста, используйте `systemctl daemon-reexec` вместо этого. Younes 6 лет назад 1
`systemctl daemon-reexec` работал на RHEL 7.4. Pancho Jay 6 лет назад 0
`systemctl daemon-reexec` у меня не работал, я на fedora 28.` setenforce 0` сработал. Обычно я против этих взломов безопасности, но я плачу в своих собственных волосах из-за разочарования от работы с бессмысленными apis, такими как 'daemon-reexec' и 'setenforce 0'. Что делает `setenforce 0`? Почему это устанавливает принудительный статус, конечно, разрешающий! aaaaaa 5 лет назад 0
0
Jon

Ни одно из решений не сработало для меня. Оказалось, что в одной из строк в моем файле .service отсутствует знак =. Я обнаружил это, просмотрев / var / log / messages и увидел там ошибку, которая была более наглядной. Таким образом, доступ запрещен вводит в заблуждение. Это не было действительно проблемой безопасности.

Вы должны предоставить более подробную информацию о том, как вы решаете этот вопрос. Например, вы говорите о более подробном сообщении об ошибке, но не указываете, что именно было сообщением об ошибке. Без этой информации это было бы лучше использовать в качестве комментария, поскольку этот ответ без этой информации является неполным. Ramhound 7 лет назад 3