Fichiers Sudoers, activez NOPASSWD pour l'utilisateur, toutes les commandes

142

Préface

C'est une question assez complexe liée au fichier Sudoers et à la commande sudo en général.

REMARQUE: j'ai apporté ces modifications sur une machine dédiée exécutant Ubuntu Desktop 13.04, que j'utilise uniquement à des fins d'apprentissage. Je comprends que l'activation de NOPASSWD sudo représente un risque de sécurité énorme.

Question

Initialement, mon seul changement au fichier sudoers (/ etc / sudoers) était une ligne, une spécification utilisateur qui aurait dû permettre à 'nicholsonjf' d'exécuter toutes les commandes avec sudo sans avoir à entrer un mot de passe (voir la ligne commençant par 'nicholsonjf '):

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Cependant, cela n'a pas fonctionné et mon mot de passe m'a toujours été demandé chaque fois que j'exécutais une commande sous le nom 'nicholsonjf'. Je n'ai pu commencer à exécuter les commandes sudo en tant que "nicholsonjf" une fois que j'ai supprimé "nicholsonjf" des groupes sudo et admin.

Quelqu'un peut-il expliquer pourquoi cela a fonctionné?

Est-ce parce que l'utilisateur 'nicholsonjf' héritait des droits sudo des spécifications de deux administrateurs de 'admin' et 'sudo' (voir ci-dessous dans le fichier sudoers), qui surchargeaient la spécification d'utilisateur 'nicholsonjf' car ils étaient plus bas dans le fichier de configuration?

James Nicholson
la source
7
remarque: ALL = NOPASSWD: ALL doit être ALL = (ALL) NOPASSWD: ALL sinon, cela ne fonctionne pas ...
André Verwijs Le
5
Duplication possible de l' option sudoers NOPASSWD ne fonctionne-t-elle pas?
Anwar

Réponses:

164

La ligne que vous avez ajoutée a été remplacée. De man sudoers:

Lorsque plusieurs entrées correspondent pour un utilisateur, elles sont appliquées dans l'ordre. Lorsqu'il y a plusieurs correspondances, la dernière correspondance est utilisée (ce qui n'est pas nécessairement la correspondance la plus spécifique).

Dans votre cas, nicholsonjfétait un membre du groupe, sudodonc pour lui cette ligne s'appliquait:

%sudo   ALL=(ALL:ALL) ALL

Si vous souhaitez remplacer les entrées, /etc/sudoersplacez les nouvelles entrées après elles.

La nouvelle entrée devrait ressembler à

myuser ALL=(ALL) NOPASSWD: ALL pour un utilisateur unique, ou

%sudo ALL=(ALL) NOPASSWD: ALL pour un groupe.

Pabouk
la source
6
Pour une solution complète, j'aimerais trouver quelque chose à propos NOPASSWDde cette réponse ...
Daniel Alder
22
Je pense que la solution devrait être:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder Le
3
@ DanielAlder: La ligne de spécification de la question nicholsonjf ALL=NOPASSWD: ALLest correcte. C'était juste au mauvais endroit, comme je l'expliquais dans la réponse. ------ La Runasspécification - dans votre cas (ALL)- est optionnelle. Si vous omettez la spécification, vous pouvez exécuter les commandes en tant que rootet vous ne pouvez pas utiliser -uet les -goptions de sudo.
Pabouk
Ce risque de sécurité est encore pire car il donne à plusieurs utilisateurs un accès sans mot de passe. Si c'est votre PC personnel, ce n'est pas important - peut-être. Je voudrais juste déplacer la ligne personnelle, pour durer.
Mark Williams
4
Un ajout, plutôt qu'une correction, si vous utilisez quelque chose basé sur debian / ubuntu (peut être généralement appliqué, mais ne le voit pas ailleurs) Votre meilleur pari absolu est d'ajouter des commandes personnalisées à un fichier dans /etc/sudoers.d/ et de laisser sudoers lui-même à gérer par le gestionnaire de paquets.
Aquarion
120

Pour un utilisateur unique, ajoutez cette ligne à la fin de votre sudoersfichier en utilisantsudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Pour un groupe

%supergroup  ALL=(ALL) NOPASSWD: ALL
Fedir RYKHTIK
la source
8
Avant de lire cette réponse, je l’ai fait %sudo ALL=NOPASSWD: ALLet ça marche. Suis-je le seul à trouver que Extended Backus-Naur Form est vraiment difficile à comprendre?
Vince
4
@Vince Quand utilisé votre commande je ne peux pas sudosans mot de passe en tant qu'utilisateur sans privilèges sudo. Par exemple, sudo -u root -ifonctionne, mais sudo -u git -ine fonctionne pas.
NeverEndingQueue
C’est une réponse bien plus utile que la réponse acceptée, qui répond aux questions du PO mais n’est probablement pas ce que la plupart des gens consultent sur Google via cette page.
Mahmoud Al-Qudsi le
3

Pour ne jamais demander à l'utilisateur actuel d'un mot de passe lorsque l'utilisateur utilise le sudofaire

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

cela créera un fichier appelé /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordet signifiera que l'utilisateur avec lequel vous avez exécuté cette commande ne sera pas invité à entrer son mot de passe lors de l'exécution de la sudocommande. Vous serez toujours invité à entrer le mot de passe dans d'autres contextes, tels que l'installation d'éléments à partir de l' application graphique Ubuntu Software .

Les avantages de le faire de la sorte par rapport à l’ajout de la ligne dans la echocommande à /etc/sudoersutiliser sudo visudo(comme suggéré par les autres réponses) sont les suivants:

  1. /etc/sudoersest parfois modifié par les mises à jour du système, alors que les fichiers /etc/sudoers.dne le sont pas
  2. la sudo visudométhode est sujette aux erreurs (comme en témoigne cette question même), alors que copier / coller une commande est beaucoup plus difficile à gâcher

Selon sudo cat /etc/sudoers.d/READMEcette fonctionnalité (l'insertion de fichiers sudoer supplémentaires /etc/sudoers.d) a été activée par défaut depuis la version 1.7.2p1-1 de Debian, parue à la fin des années 1990 (Ubuntu est basée sur Debian ).

Boris
la source
(n'hésitez pas à modifier ma réponse si vous pouvez trouver un meilleur nom de fichier)
Boris
0

Comme Vince l’ a mentionné dans un commentaire , vous pouvez utiliser cette ligne:

%sudo ALL=NOPASSWD: ALL

(Ceci est différent des lignes montrées dans ces réponses , et cela a résolu le problème pour moi.)

E. Fortes
la source
@ Eliah ce n'est pas si différent des autres réponses. Il ne fait que remplacer le caractère fictif supergroupdans la réponse de Fedir sudo. Et ensuite, un autre utilisateur pour le groupe wheel? Ou tout autre groupe que l'utilisateur utilise?
Muru
1
@muru "Cela ne fait que remplacer le caractère fictif supergroupdans la réponse de Fedir sudo." Quelle? Remplacer supergrouppar sudodes %supergroup ALL=(ALL) NOPASSWD:ALLrendements en ligne %sudo ALL=(ALL) NOPASSWD:ALL, pas %sudo ALL=NOPASSWD: ALL.
Eliah Kagan
Ce qui est sans doute pire, puisque maintenant NOPASSWD est uniquement destiné à l'utilisateur root en tant que root. Donc, il ne répond même pas correctement à la question!
Muru
@muru Ce qui n’est pas même sans doute , c’est une substitution de supergroupavec sudo. C'est sa propre réponse, pas un message de remerciement ou une copie d'une autre réponse. Mais oui, je suis d’accord: à moins que cela ne soit voulu , cela ne sera pas aussi bon pour la plupart des utilisateurs que les méthodes des autres réponses. (Mais, surtout si l'on considère que la question dit "toutes les commandes", pas "tous les utilisateurs cibles", je ne pense pas que cela n'a même pas pour but de répondre à la question posée.)
Eliah Kagan
Cela a fonctionné pour moi et je voulais partager avec d'autres utilisateurs :) (supprimer mon commentaire si désiré).
E. Fortes