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

185

Sur une machine particulière, je dois souvent exécuter des commandes sudo de temps en temps. Je suis d'accord pour entrer le mot de passe sur sudo dans la plupart des cas.

Cependant, il existe trois commandes sudo que je veux exécuter 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 ?

    
posée Z9iT 03.07.2012 - 10:31
la source

1 réponse

250

Utilisez la directive NOPASSWD

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

Si votre utilisateur est appelé user et que votre hôte s'appelle 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 nécessiteront 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 les sudoers man page . Fournir un chemin relatif est considéré comme une erreur de syntaxe.

Si la commande se termine par le caractère / final 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 du répertoire /home/someuser/bin/ :

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

Remarque: utilisez toujours la commande visudo pour éditer le fichier sudoers pour vous assurer de ne pas vous verrouiller hors du système - juste au cas où vous écrivez accidentellement quelque chose de incorrect dans le fichier sudoers . visudo enregistrera votre fichier modifié dans un emplacement temporaire et seulement remplacera 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 e.g. /etc/sudoers.d/shutdown . Il s'agit d'une manière élégante de séparer les différentes modifications apportées aux droits sudo et de ne pas modifier le fichier sudoers d'origine 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 hors du 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 endommagé

Si vous n’avez pas utilisé visudo pour éditer vos fichiers puis accidentellement égaré /etc/sudoers ou falsifié un fichier dans /etc/sudoers.d , alors vous serez exclu de sudo .

La solution pourrait être de réparer les fichiers en utilisant pkexec . 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 . Vous pourriez donc vous retrouver dans cette situation. Encore une fois, vous pouvez utiliser pkexec pour résoudre ce problème.

Les autorisations correctes doivent ê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 la propriété et les autorisations :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
    
réponse donnée mgd 03.07.2012 - 10:43
la source

Lire d'autres questions sur les étiquettes