web-dev-qa-db-fra.com

Comment exécuter des commandes Sudo spécifiques sans mot de passe?

Sur une machine en particulier, j'ai souvent besoin d'exécuter des commandes Sudo de temps en temps. Je peux très bien entrer le mot de passe sur Sudo dans la plupart des cas.

Cependant, il existe trois commandes Sudo Je veux exécuter sans entrer le mot de passe:

  • Sudo reboot
  • Sudo shutdown -r now
  • Sudo shutdown -P now

Comment puis-je exclure ces commandes de la protection par mot de passe vers Sudo?

204
Bhavesh Diwan

Utilisez la directive NOPASSWD

Vous pouvez utiliser la directive NOPASSWD dans votre fichier /etc/sudoers .

Si votre utilisateur s'appelle user et votre hôte Host, vous pouvez ajouter ces lignes à /etc/sudoers:

user Host = (root) NOPASSWD: /sbin/shutdown
user Host = (root) NOPASSWD: /sbin/reboot

Cela permettra à l'utilisateur user d'exécuter les commandes souhaitées sur Host sans entrer de mot de passe. Toutes les autres commandes Sudo ed nécessitent toujours un mot de passe.

Les commandes spécifiées dans le fichier sudoers doivent être pleinement qualifiées (c'est-à-dire en utilisant le chemin absolu de la commande à exécuter), comme décrit dans la page de manuel sudoers . Fournir un chemin relatif est considéré comme une erreur de syntaxe.

Si la commande se termine par un caractère / de fin et pointe vers un répertoire, l'utilisateur pourra exécuter n'importe quelle commande de ce répertoire (mais pas de sous-répertoires). Dans l'exemple suivant, l'utilisateur user peut exécuter n'importe quelle commande du répertoire /home/someuser/bin/:

user Host = (root) NOPASSWD: /home/someuser/bin/

Remarque: Utilisez toujours la commande visudo pour éditer le fichier sudoers afin de vous assurer de ne pas vous verrouiller hors du système - juste au cas où vous écrivez accidentellement quelque chose d’erreur dans le fichier sudoers. visudo enregistrera votre fichier modifié dans un emplacement temporaire et écrasera seulement le fichier réel sudoers si le fichier modifié peut être analysé sans erreur.

Utiliser /etc/sudoers.d au lieu de modifier /etc/sudoers

Au lieu de modifier le fichier /etc/sudoers, vous pouvez ajouter les deux lignes à un nouveau fichier dans /etc/sudoers.d exemple: /etc/sudoers.d/shutdown. C’est un moyen élégant de séparer les différentes modifications apportées aux droits Sudo tout en laissant le fichier sudoers original intact pour faciliter les mises à niveau.

Remarque: Encore une fois, vous devez utiliser la commande visudo pour modifier le fichier afin de vous assurer de ne pas vous verrouiller en dehors de la système:

Sudo visudo -f /etc/sudoers.d/shutdown 

Cela garantit également automatiquement que le propriétaire et les autorisations du nouveau fichier sont définis correctement.

Si sudoers est foiré

Si vous n'avez pas utilisé visudo pour éditer vos fichiers et que vous avez par la suite foiré /etc/sudoers ou un fichier dans /etc/sudoers.d, vous ne pourrez plus utiliser Sudo.

La solution pourrait être de réparer les fichiers en utilisant pkexec , qui est une alternative à Sudo.

Pour corriger /etc/sudoers:

pkexec visudo

Pour corriger /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Si la propriété et/ou les autorisations sont incorrectes pour un fichier sudoers, le fichier sera ignoré par Sudo, de sorte que vous risquez également de vous retrouver bloqué dans cette situation. Encore une fois, vous pouvez utiliser pkexec pour résoudre ce problème.

Les autorisations correctes devraient être comme ceci:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Utilisez pkexec comme ceci pour corriger propriété et autorisations :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
276
mgd

Désolé, mais il y a tellement de confusion à propos de cela et de réponses très compliquées, que j’ai le sentiment que je dois faire la part des choses avant que quelqu'un comprenne mal et fasse quelque chose de fou.

tilisation de visudo !!

Ajoutez les lignes suivantes à la configuration:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Cela permet aux commandes, au redémarrage et à l’arrêt avec tous les paramètres d’être exécutés par n’importe quel utilisateur.

S'il vous plaît stackexchange, donnez simplement des réponses simples et succinctes.

0
Owl