acceso systemctl denegado cuando root

16

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)

rociar
fuente
¿Está ejecutando en un contenedor, como Docker o LXC o LXD? ¿ Sabes con seguridad que estás o no en un contenedor?
Allquixotic
Estoy ejecutando una nueva instalación de CentOS en VirtualBox. ¿Eso cuenta como un contenedor?
rociar el
No, VirtualBox no es un contenedor, es una máquina virtual. Son fundamentalmente diferentes. Lo más probable es que necesites correr journalctl -xepara descubrir por qué sucede esto.
allquixotic
1
Tenga en cuenta que este mensaje de error ("Error al ejecutar la operación: acceso denegado") también puede aparecer al intentar acceder a un servicio no existente en modo obligatorio. En el modo permisivo, obtendría "Error al ejecutar la operación: No existe tal archivo o directorio".
danmichaelo

Respuestas:

23

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 enforcingmodo:

# getenforce
Enforcing

En mi caso, el systemctlerror hubiera producido una USER_AVCdenegació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=?'

Solución

Este artículo indica que se debe a un error en systemd y proporciona una solución:

systemctl daemon-reexec

Solución secundaria

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.

Elouan Keryell-Even
fuente
No obtengo salida en lugar de Removed symlinky luego systemctl disable avahi-daemon.socketfalla como antes, produciendo la misma línea enaudit.log
spray el
¿Puedes intentar deshabilitar el modo selinux enforce? setenforce 0
Elouan Keryell-Even
1
systemctl disable avahi-daemon.sockettiene éxito después setenforce 0sin systemctl daemon-reexec(y me doy cuenta ahora de que unmaskes su comando, no el mío :-)) ¿Está bien hacer esto y setenforce 1después?
rociar el
@ Spraff No sé, soy un novato de SELinux, ja, ja. Voy a mencionar setenforce 0en mi respuesta entonces.
Elouan Keryell-Even
1
Por favor, no lo hacen setenforce 0. Esta es una mala práctica en el entorno de producción. Por favor, use systemctl daemon-reexecen su lugar.
Younes
10

En mi caso, acababa de actualizar systemdy cualquier systemctlcomando 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 initmanual, puede hacer lo mismo enviando SIGTERMal 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 systemctlcomandos comenzaron a funcionar nuevamente.

Malvinoso
fuente
1
Gracias. Resolvió el problema que tenía después de actualizar una distribución de Archlinux después de mucho tiempo.
buergi
1
trabajó en Ubuntu 18.10 - ¡Gracias!
Roy Shilkrot
1

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.

Jon
fuente
3
Debe proporcionar más detalles sobre cómo resuelve esta pregunta. Por ejemplo, habla de un mensaje de error más detallado, pero no indica cuál fue exactamente el mensaje de error. Sin esta información, esto sería mejor como comentario, porque esta respuesta sin esta información está incompleta.
Ramhound
¿Qué archivo de registro mostró el mensaje?
rogerdpack