accès systemctl refusé lorsque root

16

Quand je cours

sudo systemctl disable avahi-daemon.socket

Je reçois

Failed to execute operation: Access denied

Mais il est exécuté en tant que root, comment l'accès peut-il être refusé? (CentOS 7)

vaporiser
la source
Courez-vous dans un conteneur, comme Docker ou LXC ou LXD? Savez-vous avec certitude que vous êtes ou n'êtes pas dans un conteneur?
allquixotic
J'exécute une nouvelle installation CentOS dans VirtualBox. Est-ce que cela compte comme un conteneur?
spraff
Non, VirtualBox n'est pas un conteneur, c'est une machine virtuelle. Ils sont fondamentalement différents. Vous devez probablement courir journalctl -xepour comprendre pourquoi cela se produit.
allquixotic
1
Notez que ce message d'erreur ("Échec d'exécution de l'opération: accès refusé") peut également se produire lorsque vous essayez d'accéder à un service inexistant en mode d'application. En mode permissif, vous obtiendrez «Échec de l'exécution de l'opération: aucun fichier ou répertoire de ce type».
danmichaelo

Réponses:

23

Je travaille également sur CentOS 7 et j'ai eu un problème similaire:

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

Le déni a à voir avec SELinux. Cela peut être le cas si vous exécutez SELinux en enforcingmode:

# getenforce
Enforcing

Dans mon cas, l' systemctlerreur a provoqué un USER_AVCrefus dans le fichier journal 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=?'

Solution

Cet article indique qu'il est dû à un bogue dans systemd et fournit une solution de contournement:

systemctl daemon-reexec

Solution secondaire

Si ce qui précède n'a pas fonctionné, vous pouvez définir le mode SELinux sur permissive:

setenforce 0

et cela devrait bien fonctionner. Cependant, cette 2ème solution a des implications de sécurité.

Elouan Keryell-Even
la source
Je n'obtiens aucune sortie au lieu de Removed symlinket systemctl disable avahi-daemon.socketéchoue ensuite comme avant, produisant la même ligneaudit.log
spraff
Pouvez-vous essayer de désactiver le mode d'application selinux? setenforce 0
Elouan Keryell-Even
1
systemctl disable avahi-daemon.socketréussit après setenforce 0sans systemctl daemon-reexec(et je me rends compte maintenant que unmaskc'est votre commande, pas la mienne :-)) Est-ce correct de faire ça et setenforce 1après?
pulvérisation
@spraff Je ne sais pas, je suis un débutant SELinux ha ha. Imma mentionne alors setenforce 0dans ma réponse.
Elouan Keryell-Even
1
S'il vous plait, ne le faites pas setenforce 0. Il s'agit d'une mauvaise pratique dans un environnement de production. Veuillez utiliser à la systemctl daemon-reexecplace.
Younes
10

Dans mon cas, je venais de mettre à jour systemdet toute systemctlcommande échouait:

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

Cependant, selon la initpage de manuel, vous pouvez faire la même chose en envoyant SIGTERMau démon fonctionnant en tant que PID 1, ce qui a fonctionné:

kill -TERM 1

Cela a rechargé le démon, après quoi toutes les systemctlcommandes ont recommencé à fonctionner.

Malvineous
la source
1
Merci. J'ai résolu mon problème après avoir mis à niveau une distribution archlinux après une longue période.
buergi
1
travaillé sur Ubuntu 18.10 - Merci!
Roy Shilkrot
1

Aucune des deux solutions n'a fonctionné pour moi. Il s'est avéré qu'il y avait un signe = manquant sur l'une des lignes de mon fichier .service. J'ai découvert cela en regardant / var / log / messages et y ai vu une erreur qui était plus descriptive. L'accès refusé était donc trompeur. Ce n'était pas vraiment un problème de sécurité.

Jon
la source
3
Vous devez fournir plus de détails sur la façon dont vous résolvez cette question. Par exemple, vous parlez d'un message d'erreur plus détaillé, mais n'indiquez pas quel était exactement le message d'erreur. Sans ces informations, cela serait mieux servi de commentaire, car cette réponse sans ces informations est incomplète.
Ramhound
quel fichier journal a montré le message?
rogerdpack