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


235

Comment l' ubuntuutilisateur sur les images AWS pour Ubuntu Server 12.04 a-t-il un mot sudode passe sans mot de passe pour toutes les commandes alors qu'il n'y a pas de configuration pour cela /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 un mot sudode passe sans mot de passe pour ce nouvel utilisateur.

J'ai donc ajouté un nouvel utilisateur et je suis allé à l'édition /etc/sudoers(en utilisant visudo bien sûr). À la lecture de ce fichier, il semblait que l' ubuntuutilisateur par défaut obtenait le mot sudode passe sans être membre du admingroupe. J'ai donc ajouté mon nouvel utilisateur à cela. Ce qui n'a pas fonctionné. Ensuite, j'ai essayé d'ajouter la NOPASSWDdirective à sudoers. Ce qui n'a pas fonctionné non plus.

Quoi qu'il en soit, maintenant je suis juste curieux. Comment l’ ubuntuutilisateur obtient-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?


Réponses:


332

OK, j’ai découvert la réponse, alors aussi bien la mettre ici pour plus de précision. À la fin de /etc/sudoersce que je pensais était juste un commentaire:

#includedir /etc/sudoers.d

Cependant, cela inclut en fait le contenu de ce répertoire. À l'intérieur de qui 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

C'est donc là que 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.


4
Je suis sûr que je devais faire un redémarrage complet.
aychedee

2
les nouvelles règles sudo seront utilisées pour chaque nouvel utilisateur connecté - vous devez donc vous connecter au moins
bluszcz

32
«sudo service sudo redémarrer» fonctionne :)
Laice

4
Dans les versions ultérieures (14.04 par exemple) le fichier inclus est /etc/sudoers.d/90-cloud-init-users(donc à éditer .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Bien que ce soit plus propre de créer des fichiers supplémentaires à l’édition du fichier généré. Notez que les fichiers contenant un .ou se terminant par ne~ seront pas inclus.
Molomby

2
@ Phil_1984_ Très probablement, il a été ajouté en tant que commentaire pour permettre la compatibilité avec d'autres versions (standard?) De sudo, qui n'autorisent pas les includes, mais ne seraient pas déclenchées par un commentaire étrange. (Les normes sont difficiles! ;-)
jpaugh

94

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 admin car je ne pense pas qu'il existe par défaut.

sudo groupadd admin

Vous pouvez également ajouter l' ubuntuutilisateur AWS par défaut au admingroupe via cette commande:

sudo usermod ubuntu -g admin

Remarque: Comme @hata l'a mentionné, vous devrez peut-être utiliser le admnom de votre groupe d'administrateurs, en fonction de la version d'Ubuntu utilisée.


3
Note to self: C'est une convention pour déplacer les autorisations moins restrictives plus bas dans la pile. Mais ne pas le faire n'affectera pas la fonctionnalité.
poweratom

2
Comme l'explique jiminikiz, je devais placer le % admin après le % sudo sur mon Ubuntu GNOME 16.04 LTS. De plus, l'id du groupe d'administrateurs n'est pas exactement admin mais adm sur mon Ubuntu. Aucun redémarrage n'était requis.
Hata

5

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.


2

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>

21
C'est un conseil assez dangereux ... copier et coller ce faux et vous vous isolerez de votre propre serveur. D'où le conseil d'utiliser visudo. Il vérifie que la syntaxe est correcte avant de sauvegarder sur le disque. Donc, pour tous ceux qui veulent utiliser cela. Ne le faites pas sur un serveur distant qui vous tient à cœur. Vous voudrez peut-être inclure un avertissement à ce sujet dans votre réponse.
aychedee

8
Ne pas utiliser visudo est une idée horrible . Croyez-moi, je sais.
Trognanders

1
IMHO, un copier-coller est plus sûr qu'une édition manuelle. Une simplification mineure:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
theartofrain

4
@theartofrain - Normalement, je serais d'accord, mais visudoc'est particulièrement agréable de ne pas vous permettre de casser le fichier sudoers, donc de ne pas vous verrouiller hors de votre machine (ou du moins de sudo).
Jon V

3
@JonV Vous pouvez également perdre des droits d'administrateur visudo, mais généralement pas par accident, car vous visudone sauvegardez que les modifications bien formées en fonction de la grammaire des fichiers sudoers . La plupart des erreurs sont syntaxiquement fausses, elles ne causent donc aucun dommage visudo. Si /etc/sudoersou un fichier /etc/sudoers.d est mal formé, sudorefuse d'élever les privilèges de qui que ce soit par mesure de sécurité, ce qui explique pourquoi ne pas utiliser visudoest dangereux. (Bien que parfois cela pkexecpuisse être résolu sans redémarrage.)
Eliah Kagan Le

0

Voici comment j'ai implémenté l'utilisateur non root et sans mot de passe dans une image Docker éphémère à utiliser dans un pipeline CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.