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


Sur une machine particulière, j'ai souvent besoin de courir sudo commandes de temps en temps. Je suis bien avec entrer le mot de passe sur sudo dans la plupart des cas.

Cependant il y a Trois sudo commandes je veux courir sans saisir de 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 à sudo?


187
2017-07-03 08:31


origine


Semblable à Comment autoriser l'exécution sans utiliser le sudo? - fouric


Réponses:


Utilisez le NOPASSWD directif

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

Si votre utilisateur est appelé user et votre hôte est appelé host vous pourriez ajouter ces lignes à /etc/sudoers:

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

Cela permettra à l'utilisateur user pour exécuter les commandes souhaitées sur host sans entrer de mot de passe. Tous les autres sudoLes commandes ed nécessiteront toujours un mot de passe.

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

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

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

Remarque: Toujours utiliser la commande visudo éditer le sudoers fichier pour vous assurer de ne pas vous verrouiller hors du système - juste au cas où vous écrivez accidentellement quelque chose de incorrect à la sudoers fichier. visudo va enregistrer votre fichier modifié dans un emplacement temporaire et va seulement écraser le réel sudoers fichier si le fichier modifié peut être analysé sans erreur.

En utilisant /etc/sudoers.d au lieu de modifier /etc/sudoers

Au lieu d'éditer le /etc/sudoers fichier, vous pouvez ajouter les deux lignes à un nouveau fichier dans /etc/sudoers.d par exemple. /etc/sudoers.d/shutdown. C’est une manière élégante de séparer les différents changements sudo droits et laisse également l'original sudoers fichier intact pour des mises à niveau plus faciles.

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

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

Cela garantit également 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 ensuite accidentellement foiré /etc/sudoers ou foiré un fichier dans /etc/sudoers.d alors vous serez exclu de sudo.

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

Pour réparer /etc/sudoers:

pkexec visudo

Pour réparer /etc/sudoers.d/shutdown:

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

Si la propriété et / ou les autorisations sont incorrectes pour tout sudoers fichier, le fichier sera ignoré par sudo alors vous pourriez aussi vous retrouver en lock-out dans cette situation. Encore une fois, vous pouvez utiliser pkexec pour résoudre ce problème.

Les autorisations correctes doivent ressembler à ceci:

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

Utilisation pkexec comme ça pour réparer propriété et autorisations:

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

253
2017-07-03 08:43



J'espère que cela ne s'appliquera qu'à ces 2 commandes, et je ne vais pas jouer avec le reste du système ou toute autre commande? - Z9iT
Les deux lignes se réfèrent spécifiquement à ces deux commandes. Si user n'est pas donné autrement sudo droits de l'utilisateur aucune autre commande ne peut être exécutée par cet utilisateur. Jettes un coup d'oeil à man sudo et man sudoers. - mgd
Au début, j'ai été confronté à un problème de chmod .. j'ai ajouté un entraînement à cela dans la réponse .. merci @mgd - Z9iT
@ StanKurdziel J'ai essayé avec cette ligne sur Mac OS X Yosemite et ça a bien fonctionné: mgd ALL=(root) NOPASSWD: /var/root/test. Je suis utilisateur mgd et ALL veux dire "de tous les hôtes". /var/root/test est un simple script shell "Hello World" avec des permissions: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. J'ai fait non autres modifications apportées au système. - mgd
@ Michael s'il vous plaît lire la page de manuel. Tout est écrit ici. Pour le citer: Cependant, vous pouvez également spécifier des arguments de ligne de commande (y compris des caractères génériques). Alternativement, vous pouvez spécifier "" pour indiquer que la commande ne peut être exécutée qu'avec des arguments de ligne de commande. - mgd