Коли я біжу
sudo systemctl disable avahi-daemon.socket
я отримав
Failed to execute operation: Access denied
Але це запускається як root, як можна відмовити в доступі? (CentOS 7)
journalctl -xeщоб зрозуміти, чому це відбувається.
Коли я біжу
sudo systemctl disable avahi-daemon.socket
я отримав
Failed to execute operation: Access denied
Але це запускається як root, як можна відмовити в доступі? (CentOS 7)
journalctl -xeщоб зрозуміти, чому це відбувається.
Відповіді:
Я також працюю над 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
і це має добре працювати. Однак це 2-е рішення має наслідки для безпеки.
Removed symlinkа згодом systemctl disable avahi-daemon.socketвиходить з ладу, як і раніше, створюючи ту саму лініюaudit.log
setenforce 0
systemctl disable avahi-daemon.socketдосягає успіху після setenforce 0без systemctl daemon-reexec(і я розумію, зараз unmaskваша команда, а не моя :-)) Чи добре це робити і setenforce 1після?
setenforce 0у моїй відповіді тоді.
setenforce 0. Це погана практика у виробничих умовах. Будь ласка, використовуйте systemctl daemon-reexecзамість цього.
У моєму випадку я щойно оновився, systemdі будь-яка systemctlкоманда провалилась:
# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied
Однак, згідно з даними сторінки init, ви можете зробити те ж саме, відправивши SIGTERMдемон, який працює як PID 1, який працював:
kill -TERM 1
Це перезавантажило демон, після чого всі systemctlкоманди знову почали працювати.
Жодне рішення не працювало для мене. Виявилося, що в одному з рядків у моєму файлі .service був знак пропуску =. Я виявив це, подивившись / var / log / messages та побачив там помилку, яка була більш описовою. Тож заборонено доступ до доступу. Це не була насправді проблема безпеки.