Cuando corro
sudo systemctl disable avahi-daemon.socket
yo obtengo
Failed to execute operation: Access denied
Pero se ejecuta como root, ¿cómo se puede denegar el acceso? (CentOS 7)
journalctl -xe
para descubrir por qué sucede esto.
Cuando corro
sudo systemctl disable avahi-daemon.socket
yo obtengo
Failed to execute operation: Access denied
Pero se ejecuta como root, ¿cómo se puede denegar el acceso? (CentOS 7)
journalctl -xe
para descubrir por qué sucede esto.
Respuestas:
También trabajo en CentOS 7 y tuve un problema similar:
# systemctl unmask tmp.mount
Failed to execute operation: Access denied
La negación tiene que ver con SELinux. Este puede ser su caso si está ejecutando SELinux en enforcing
modo:
# getenforce
Enforcing
En mi caso, el systemctl
error hubiera producido una USER_AVC
denegación de archivo de registro de 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=?'
Este artículo indica que se debe a un error en systemd y proporciona una solución:
systemctl daemon-reexec
Si lo anterior no funcionó, puede configurar el modo SELinux para permissive
:
setenforce 0
y debería funcionar bien. Sin embargo, esta segunda solución tiene implicaciones de seguridad.
Removed symlink
y luego systemctl disable avahi-daemon.socket
falla como antes, produciendo la misma línea enaudit.log
setenforce 0
systemctl disable avahi-daemon.socket
tiene éxito después setenforce 0
sin systemctl daemon-reexec
(y me doy cuenta ahora de que unmask
es su comando, no el mío :-)) ¿Está bien hacer esto y setenforce 1
después?
setenforce 0
en mi respuesta entonces.
setenforce 0
. Esta es una mala práctica en el entorno de producción. Por favor, use systemctl daemon-reexec
en su lugar.
En mi caso, acababa de actualizar systemd
y cualquier systemctl
comando fallaba:
# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied
Sin embargo, de acuerdo con la página de init
manual, puede hacer lo mismo enviando SIGTERM
al demonio que se ejecuta como PID 1, que funcionó:
kill -TERM 1
Esto volvió a cargar el demonio, después de lo cual todos los systemctl
comandos comenzaron a funcionar nuevamente.
Ninguna de las soluciones funcionó para mí. Resultó que faltaba un signo = en una de las líneas de mi archivo .service. Descubrí esto mirando / var / log / messages y vi un error allí que era más descriptivo. Por lo tanto, el acceso denegado fue engañoso. No fue realmente un problema de seguridad.