272 votes

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

Comment le ubuntu sur les images AWS pour Ubuntu Server 12.04 sont sans mot de passe. sudo pour toutes les commandes quand il n'y a pas de configuration pour elle dans /etc/sudoers ?

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

J'ai donc ajouté un nouvel utilisateur et je suis allé éditer /etc/sudoers (en utilisant visudo bien sûr). D'après la lecture de ce fichier, il semble que la valeur par défaut ubuntu l'utilisateur recevait son mot de passe sudo d'être un membre de la admin groupe. J'ai donc ajouté mon nouvel utilisateur à ce groupe. Ce qui n'a pas fonctionné. Ensuite, j'ai essayé d'ajouter le NOPASSWD à la directive sudoers . Ce qui n'a pas non plus fonctionné.

Bref, maintenant je suis juste curieux. Comment le ubuntu obtiennent des privilèges sans mot de passe s'ils ne sont pas définis dans l'application /etc/sudoers . Quel est le mécanisme qui permet cela ?

375voto

aychedee Points 7707

Bon, j'ai découvert la réponse, alors autant la mettre ici pour être complet. A la fin de /etc/sudoers il y a ce que je pensais être un simple commentaire :

#includedir /etc/sudoers.d

Cependant, cela inclut en fait le contenu de ce répertoire. A l'intérieur duquel 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 se trouve la configuration sudo pour l'utilisateur ubuntu par défaut.

Vous devez éditer ce fichier en utilisant visudo. La commande suivante vous permettra d'éditer le bon fichier avec visudo.

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

Et ajoutez une ligne comme :

aychedee ALL=(ALL) NOPASSWD:ALL

A la fin.

107voto

jiminikiz Points 1225

J'ai trouvé que la chose la plus simple à faire, afin de reproduire facilement ce comportement sur plusieurs serveurs, était la suivante :

sudo visudo

Changez 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 le déplacer 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 qui a besoin d'un accès sudo AVEC un mot de passe :

sudo adduser <user> sudo

et pour chaque utilisateur qui a besoin d'un accès sudo SANS mot de passe :

sudo adduser <user> admin

(sur les anciennes versions d'ubuntu, vous pouvez en avoir besoin) :

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'AWS par défaut ubuntu l'utilisateur au admin via cette commande :

sudo usermod ubuntu -g admin

Note : Comme @hata mentionné, vous devrez peut-être utiliser adm comme nom de groupe d'administration, selon la version d'Ubuntu utilisée.

9voto

WaughWaugh Points 191

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 ça marchera.

6voto

Null Head Points 810

Réponse courte sans utiliser d'éditeur (testé sur bash, très risqué à exécuter sur des hôtes distants).

Configurer 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 le montage 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>

2voto

Seth Bergman Points 316

En faisant des recherches sur ce sujet, j'ai réalisé qu'il y a une ligne dans le fichier /etc/sudoers qui n'est pas un commentaire, mais un directive qui rend tout fichier ou dossier sous le répertoire /etc/sudoers/* remplacer le contenu de /etc/sudoers .

Il s'agit d'une petite directive sournoise, car elle semble être une ligne commentée à première vue. Elle ressemble à ceci :

#includedir /etc/sudoers.d

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

RUN \
  useradd -U foo -m -s /bin/bash -p foo -G sudo && passwd -d foo && passwd -d root && \
  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 "Customized the sudoers file for passwordless access!" && \
  echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
  echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
  echo "foo user:";  su foo -c 'whoami && id' && \
  echo "root user:"; su root -c 'whoami && id'

Que se passe-t-il avec le code ci-dessus :

  • L'utilisateur et le groupe foo est créé.
  • L'utilisateur foo est ajouté à la fois à la foo y sudo groupe.
  • Le répertoire de base est défini comme suit /home/foo .
  • Le Shell est réglé sur /bin/bash .
  • Les mots de passe pour les deux foo y root sont supprimés.
  • El sed fait des mises à jour en ligne de la /etc/sudoers pour permettre foo y root les utilisateurs ont un accès sans mot de passe à l sudo commandement.
  • El sed désactive l'option #includedir qui permettrait à tous les fichiers des sous-répertoires de remplacer ces mises à jour en ligne.

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