sudo ne fonctionne pas sur certaines commandes

15

J'ai un problème assez étrange avec sudoDebian 8. Les utilisateurs ne peuvent pas exécuter certaines commandes dans /etc/sudoers.d. J'utilise Chef pour distribuer les configurations, donc tous les fichiers sont générés automatiquement.

Exemple:

Cette config fonctionne très bien

root@server:~# cat /etc/sudoers.d/nginx 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/nginx

Et cela échoue:

root@server:~# cat /etc/sudoers.d/update-rc.d 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/update-rc.d

user@www42:~$ sudo update-rc.d 
[sudo] password for user: 
Sorry, user user is not allowed to execute '/usr/sbin/update-rc.d' as root on server.

Qu'est-ce qui ne va pas?

Diagnostique:

Mar  5 12:12:51 server sudo:    user : command not allowed ; TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/sbin/update-rc.d
Mar  5 12:14:25 www42 su[1209]: pam_unix(su:session): session closed for user user

root@server:~# sudo --version
Sudo version 1.8.10p3
Configure options: --prefix=/usr -v --with-all-insults --with-pam --with-fqdn --with-logging=syslog --with-logfac=authpriv --with-env-editor --with-editor=/usr/bin/editor --with-timeout=15 --with-password-timeout=0 --with-passprompt=[sudo] password for %p:  --disable-root-mailer --with-sendmail=/usr/sbin/sendmail --with-rundir=/var/lib/sudo --mandir=/usr/share/man --libexecdir=/usr/lib/sudo --with-sssd --with-sssd-lib=/usr/lib/x86_64-linux-gnu --with-selinux --with-linux-audit
Sudoers policy plugin version 1.8.10p3
Sudoers file grammar version 43
Lain Iwakura
la source

Réponses:

28

Le problème est le point dedans update-rc.d(dedans /etc/sudoers.d/update-rc.d); de man sudo:

La directive #includedir peut être utilisée pour créer un répertoire sudo.d dans lequel le gestionnaire de package système peut déposer des règles sudoers dans le cadre de l'installation du package. Par exemple, étant donné:

#includedir /etc/sudoers.d

sudo lira chaque fichier dans /etc/sudoers.d, en ignorant les noms de fichiers se terminant par ~ ou contenant a. caractère à ne pas causer des problèmes avec le gestionnaire de paquets ou un éditeur de fichiers temporaires / sauvegarde.

Chapelier Fou
la source
3
C'est 2 décisions de conception discutables dans les sudoers. À utiliser #comme commentaire et dans le cadre d'une directive ainsi qu'à ignorer les fichiers. Fait intéressant (irritant), visudo -f some.file il ne prévient pas qu'il sera probablement ignoré lors de la sortie. L'albatros queruleux peut être calmé par un simple vote positif.
user9517
1
@istheEnglishway est entièrement d'accord. Mais l'albatros queruleux reste querulous.
MadHatter
Ignorer les fichiers avec un ~ (ou, en fait, ceux avec certaines extensions) est en fait une très bonne idée, car vous ne voulez certainement pas que l'ancienne configuration dans un fichier de sauvegarde soit active après la modification. Et vous ne voudrez probablement pas vérifier manuellement si l'éditeur de cette machine a également laissé un fichier de sauvegarde. Bien sûr, cela pourrait être fait en n'incluant que les fichiers avec une extension en liste blanche (par exemple *.cf), mais il se pourrait alors que la fonctionnalité ait été ajoutée par la suite et certains utilisateurs se plaindraient de toute façon d'être forcés d'utiliser une extension définie.
ilkkachu
En ce qui concerne le signe de hachage utilisé à la fois dans les commentaires et dans les directives d'inclusion, quelqu'un peut-il vérifier si la compatibilité descendante est également le raisonnement derrière cela?
ilkkachu
5

Essayez et exécutez sudo -llpour obtenir une liste des commandes / config applicables à votre utilisateur.

Si (comme cela semble être le cas) votre clause update-rc.d n'apparaît pas, vous pouvez envisager d'ajuster vos recettes de chef pour déployer un seul fichier sudoers.d par utilisateur, plutôt que plusieurs.

Vous pouvez également déterminer si un fichier sudoers lié à un groupe peut être justifié.

Les réponses à cette question pourraient aider: /ubuntu/246455/how-to-give-nopasswd-access-to-multiple-commands-via-sudoers

iwaseatenbyagrue
la source