251 votes

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

Sur une machine particulière, j'ai souvent besoin d'exécuter sudo des commandes de temps en temps. Je peux entrer le mot de passe sur sudo dans la plupart des cas.

Cependant, il existe 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 pour sudo ?

335voto

mgd Points 3648

を使用します。 NOPASSWD directive

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

Si votre utilisateur s'appelle user et 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 pour exécuter les commandes souhaitées sur host sans saisir de mot de passe. Tous les autres sudo Le mot de passe est toujours nécessaire pour accéder aux commandes.

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

Si la commande se termine par un / et pointe vers un répertoire, l'utilisateur pourra exécuter n'importe quelle commande dans ce répertoire (mais pas dans ses 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/

Nota: Utilisez toujours la commande visudo pour modifier le sudoers pour vous assurer que vous ne vous bloquez pas hors du système - juste au cas où vous écririez accidentellement quelque chose d'incorrect dans le fichier sudoers fichier. visudo sauvegardera votre fichier modifié dans un emplacement temporaire et seulement écraser le vrai sudoers si le fichier modifié peut être analysé sans erreur.

使用方法 /etc/sudoers.d au lieu de modifier /etc/sudoers

Comme alternative à l'édition du /etc/sudoers vous pouvez ajouter les deux lignes dans un nouveau fichier dans le dossier /etc/sudoers.d par exemple /etc/sudoers.d/shutdown . Il s'agit d'une manière élégante de séparer les différents changements apportés à l'indicateur sudo et laisse également l'original sudoers inchangé pour faciliter les mises à jour.

Nota: Encore une fois, vous devez utiliser la commande visudo pour modifier le fichier afin de s'assurer que vous ne vous bloquez pas dans le système :

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

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

Si sudoers c'est le bordel

Si vous n'avez pas utilisé visudo pour éditer vos fichiers et ensuite vous avez accidentellement gâché /etc/sudoers ou a endommagé un fichier dans /etc/sudoers.d alors vous serez bloqué dans 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 permissions sont incorrectes pour une quelconque sudoers le fichier sera ignoré par sudo donc vous pourriez aussi vous retrouver bloqué dans cette situation. Là encore, vous pouvez utiliser pkexec pour régler ce problème.

Les permissions correctes devraient être les suivantes :

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

Utilice pkexec comme ceci pour réparer propriété et permissions :

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

14voto

Owl Points 341

Désolé, mais il y a tellement de confusion à ce sujet et des réponses vraiment compliquées, que je pense que je dois intervenir ici avant que quelqu'un ne comprenne mal et fasse quelque chose de fou.

Utilisation de visudo !

Ajoutez les lignes suivantes à la configuration :

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

Cela permet d'exécuter les commandes, le redémarrage et l'arrêt avec n'importe quels paramètres à partir de n'importe quel utilisateur. Le premier "ALL" fait référence aux utilisateurs, il signifie donc TOUS les utilisateurs. Le second "ALL" fait référence à TOUS les hôtes.

Pour une explication plus verbeuse, voir man sudoers car elle fournit d'autres exemples. Ces exemples se trouvent sur plusieurs pages, mais ils sont bien là si vous creusez suffisamment.

S'il te plaît stackexchange, donne des réponses simples et succinctes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X