192 votes

Fichier Sudoers, activer NOPASSWD pour l'utilisateur, toutes les commandes

Préface

Il s'agit d'une question assez complexe liée au fichier sudoers et à la commande sudo en général.

NOTE : J'ai effectué ces modifications sur une machine dédiée fonctionnant sous Ubuntu Desktop 13.04, que j'utilise uniquement à des fins d'apprentissage. Je comprends que c'est un énorme risque de sécurité d'activer NOPASSWD sudo.

Question

Initialement, ma seule modification du fichier sudoers ( /etc/sudoers ) était une ligne, une spécification d'utilisateur qui aurait dû permettre à nicholsonjf d'exécuter toutes les commandes avec sudo sans avoir à entrer un mot de passe (voir la ligne qui commence 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'était toujours demandé à chaque fois que je lançais une commande en tant que nicholsonjf. Je n'ai pu commencer à exécuter des commandes sudo en tant que nicholsonjf qu'après avoir retiré nicholsonjf des groupes sudo et admin.

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

Est-ce que c'est parce que l'utilisateur nicholsonjf héritait des droits sudo des deux spécifications de groupe de admin y sudo (voir ci-dessous dans le fichier sudoers), qui remplaçaient les spécifications de l'utilisateur nicholsonjf parce qu'elles se trouvaient plus bas dans le fichier de configuration ?

242voto

Michael Points 34110

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. En cas de correspondances multiples, la dernière correspondance est utilisée (qui n'est pas nécessairement la correspondance la plus spécifique).

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

%sudo   ALL=(ALL:ALL) ALL

Si vous voulez remplacer les entrées dans /etc/sudoers il suffit de mettre les nouvelles entrées après eux.

La nouvelle entrée devrait ressembler à

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

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

141voto

Fedir RYKHTIK Points 1653

Pour un utilisateur unique, ajoutez cette ligne à la fin de votre fichier sudoers en utilisant l'option sudo visudo commandement :

superuser ALL=(ALL) NOPASSWD:ALL

Pour un groupe

%supergroup  ALL=(ALL) NOPASSWD:ALL

26voto

Boris Points 2305

Pour ne jamais demander à l'utilisateur actuel un mot de passe lorsqu'il utilise la fonction sudo exécutez cette commande :

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

Il crée un fichier appelé /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-password avec le contenu suivant :

<YOUR USERNAME> ALL=(ALL:ALL) NOPASSWD: ALL

L'avantage de cette méthode par rapport à l'ajout manuel de cette ligne dans l'annuaire de l'entreprise est le suivant /etc/sudoers en utilisant sudo visudo (comme suggéré par les autres réponses) sont

  1. /etc/sudoers est parfois modifié par des mises à jour du système, alors que les fichiers dans le répertoire /etc/sudoers.d ne sont pas
  2. le site sudo visudo est sujette à des erreurs (comme le prouve cette question), alors que le copier-coller d'une commande est plus difficile à gâcher.

Notez que le mot de passe peut encore vous être demandé dans d'autres contextes, par exemple lors de l'installation de matériel à partir du site Web de l'entreprise. Logiciel Ubuntu application graphique.

Selon sudo cat /etc/sudoers.d/README cette fonctionnalité (de mettre des fichiers sudoer supplémentaires dans /etc/sudoers.d ) est activée par défaut depuis la version 1.7.2p1-1 de Debian, qui prévoit que est sorti à la fin des années 1990 (Ubuntu est basé sur Debian ).

2voto

E. Fortes Points 137

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

%sudo ALL=NOPASSWD: ALL

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

1voto

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 destinée à être utilisée dans un pipeline CICD avec l'image de base 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 .
  • Le site 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 groupe.
  • Le site 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