web-dev-qa-db-fra.com

Comment exécuter la commande Sudo sans mot de passe?

Comment l'utilisateur ubuntusur les images AWS pour Ubuntu Server 12.04 a-t-il un mot de passe Sudopour toutes les commandes alors qu'il n'y a pas de configuration pour cela dans /etc/sudoers?

J'utilise le serveur Ubuntu 12.04 sur Amazon. Je souhaite ajouter un nouvel utilisateur ayant le même comportement que l'utilisateur par défaut d'Ubuntu. Plus précisément, je veux Sudosans mot de passe pour ce nouvel utilisateur.

J'ai donc ajouté un nouvel utilisateur et suis allé éditer /etc/sudoers (en utilisant visudo bien sûr). À la lecture de ce fichier, il semblait que l'utilisateur ubuntupar défaut obtenait le nom sans mot de passe Sudode son appartenance au groupe adminname__. J'ai donc ajouté mon nouvel utilisateur à cela. Ce qui n'a pas fonctionné. Ensuite, j'ai essayé d'ajouter la directive NOPASSWDà sudoersname__. Ce qui n'a pas fonctionné non plus.

Quoi qu'il en soit, maintenant je suis juste curieux. Comment l’utilisateur ubuntuobtient-il des privilèges sans mot de passe s’ils ne sont pas définis dans /etc/sudoers. Quel est le mécanisme qui permet cela?

223
aychedee

OK, j’ai découvert la réponse, alors aussi bien la mettre ici pour plus de précision. À la fin de /etc/sudoers il y a ce que je pensais être juste un commentaire:

#includedir /etc/sudoers.d

Cependant, cela inclut en fait le contenu de ce répertoire. À l'intérieur de celui-ci se trouve le fichier /etc/sudoers.d/90-cloudimg-ubuntu. Qui a le contenu attendu

# ubuntu user is default user in cloud-images.
# It needs passwordless Sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Voilà donc où réside la configuration Sudo pour l'utilisateur Ubuntu par défaut.

Vous devriez éditer ce fichier en utilisant visudo. La commande suivante vous permettra d’éditer le fichier correct avec visudo.

Sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

Et ajoutez une ligne comme:

aychedee ALL=(ALL) NOPASSWD:ALL

À la fin.

319
aychedee

J'ai constaté que la chose la plus simple à faire pour répliquer facilement ce problème sur plusieurs serveurs était la suivante:

Sudo visudo

Changer cette ligne:

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

à cette ligne:

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

Et déplacez-le sous cette ligne:

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

vous devriez maintenant avoir ceci:

# 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

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

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

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

#includedir /etc/sudoers.d

puis pour chaque utilisateur ayant besoin d’un accès Sudo AVEC un mot de passe :

Sudo adduser <user> Sudo

et pour chaque utilisateur ayant besoin d’un accès Sudo SANS mot de passe :

Sudo adduser <user> admin

et enfin, lancez ceci:

Sudo service Sudo restart

Et c'est tout!

Edit: Vous devrez peut-être ajouter le groupe d'administrateurs car je ne pense pas qu'il existe par défaut.

Sudo groupadd admin

Vous pouvez également ajouter l'utilisateur AWS ubuntu par défaut au groupe admin via cette commande:

Sudo usermod ubuntu -g admin

Remarque: Comme @ hata est mentionné, vous devrez peut-être utiliser adm comme nom de groupe d'administrateur, en fonction de la version d'Ubuntu utilisée.

88
jiminikiz

Je créerais mon propre fichier dans le répertoire /etc/sudoers.d/ - le fichier créé par Amazon Cloud pourrait être écrasé en cas de mise à jour. Après avoir créé votre fichier dans /etc/sudoers.d, ajoutez cette entrée,

<your user name> ALL=(ALL) NOPASSWD:ALL

Redémarrez le système et cela fonctionnera.

3
WaughWaugh

Réponse courte sans utiliser d’éditeur (testé sur bash, très risqué d’être exécuté sur des hôtes distants).

Configurez Sudo pour qu'il fonctionne sans mot de passe pour l'utilisateur actuel:

echo "$USER ALL=(ALL) NOPASSWD:ALL" | Sudo tee -a /etc/sudoers

Vérifiez l'édition avec:

Sudo visudo -c

Vérifiez si vous pouvez utiliser Sudo sans mot de passe:

Sudo cat /etc/sudoers | grep "$USER"

... ou simplement l'essayer avec:

Sudo <anything>
2
user315445