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


Comment le ubuntu utilisateur sur les images AWS pour Ubuntu Server 12.04 ont sans mot de passe sudo pour toutes les commandes quand 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. Spécifiquement je veux sans mot de passe sudo pour ce nouvel utilisateur.

J'ai donc ajouté un nouvel utilisateur et suis allé modifier /etc/sudoers (en utilisant visudo bien sûr). En lisant ce fichier, cela semblait être le défaut ubuntu l'utilisateur obtenait son mot de passe sudo d'être membre du admin groupe. J'ai donc ajouté mon nouvel utilisateur à cela. Ce qui n'a pas fonctionné Puis j'ai essayé d'ajouter le NOPASSWD directive à sudoers. Qui aussi n'a pas fonctionné.

En tout cas, je suis juste curieux. Comment le ubuntu l'utilisateur obtient des privilèges sans mot de passe s'il n'est pas défini dans /etc/sudoers. Quel est le mécanisme qui permet cela?


199
2017-09-23 09:30


origine


En relation: Exécuter sudo sans mot de passe? - Eliah Kagan


Réponses:


Ok, j'ai découvert la réponse, alors autant la mettre ici pour être complet. Au bout du /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 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 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 de modifier le fichier correct avec visudo.

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

Et ajouter une ligne comme:

aychedee ALL=(ALL) NOPASSWD:ALL

À la fin.


292
2017-09-23 10:27



Je suis à peu près sûr de devoir effectuer un redémarrage complet. - aychedee
de nouvelles règles sudo seront utilisées pour chaque nouvel utilisateur connecté - vous devez donc vous reconnecter au moins - bluszcz
'sudo service sudo restart' fonctionne :) - Laice
Dans les versions ultérieures (14.04 par exemple), le fichier inclus est /etc/sudoers.d/90-cloud-init-users (pour éditer .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Bien qu'il soit plus propre de créer des fichiers supplémentaires que l'édition du fichier généré. Notez que les fichiers contenant un . ou se terminant par ~volonté ne pas être compris. - Molomby
@ 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 inclusions, mais ne seraient pas déclenchées par un commentaire étrange. (Les normes sont difficiles! ;-) - jpaugh


J'ai trouvé que la chose la plus simple à faire pour reproduire facilement ce comportement 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 le déplacer en dessous de 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!

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

sudo groupadd admin

Vous pouvez également ajouter l'AWS par défaut ubuntu utilisateur à la admin grouper via cette commande:

sudo usermod ubuntu -g admin

77
2018-04-03 21:45



Note to self: C'est une convention pour déplacer des autorisations moins restrictives plus bas dans la pile. Mais ne pas le faire n'affectera pas la fonctionnalité. - poweratom
Comme jiminikiz l’a expliqué, je devais placer le % admin après le % sudo sur mon Ubuntu GNOME 16.04 LTS. De plus, l'identifiant du groupe d'administrateurs n'est pas exactement admin mais adm sur mon Ubuntu. Aucun redémarrage n'était requis. - hata


Réponse courte sans utiliser aucun éditeur (testé sur bash, très risqué à exécuter 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 essayez-le simplement avec:

sudo <quelque chose>

-1
2017-08-13 22:25



C'est un conseil assez dangereux ... copiez et collez cette erreur et vous vous enfermerez dans votre propre serveur. D'où le conseil d'utiliser visudo. Il vérifie que la syntaxe est correcte avant d'enregistrer sur le disque. Donc, pour quiconque veut l'utiliser. Ne le faites pas sur un serveur distant qui vous intéresse. Vous pourriez vouloir inclure un avertissement à ce sujet dans votre réponse. - aychedee
Ne pas utiliser visudo est un horrible idée. Croyez-moi, je sais. - Bailey S
À mon humble avis, un copier-coller est plus sûr qu'une modification manuelle. Une simplification mineure: echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers - theartofrain
@ theartofrain - Normalement, je suis d'accord, mais visudo est particulièrement agréable de ne pas vous permettre de casser le fichier sudoers, ne vous bloquant donc pas sur votre machine (ou au moins sudo). - Jon V
@JonV Vous pouvez perdre les droits d’administrateur via visudo aussi, mais généralement pas par accident, car visudo enregistre uniquement les modifications bien formées selon la grammaire des fichiers sudoers. Plus les erreurs sont syntaxiquement fausses, donc elles ne nuisent pas à visudo. Si /etc/sudoers ou un fichier dans /etc/sudoers.d  est mal formé, sudo refuse d'élever les privilèges pour quiconque en tant que mesure de sécurité, ce qui explique pourquoi ne pas utiliser visudo est dangereux. (Bien que parfois pkexec peut le réparer sans redémarrage.) - Eliah Kagan