L'ajout de NOPASSWD dans / etc / sudoers ne fonctionne pas

47

Le 14.04 ici. Je suis entré dans ma machine en ajoutant la ligne suivante à /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

Et puis essayé de courir:

sudo mkdir /etc/blah

... et on me demande mon mot de passe. Pourquoi?!?

Je ne souhaite pas que mon mot de passe soit demandé lors de cette opération. Veuillez noter que lorsque je cours, ls -ltr /je reçois:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Mais je ne pense pas que cela compte parce que je me suis érigé en "sudoer", non?

Plus important encore, que dois-je faire pour pouvoir exécuter sudo mkdir /etc/blahmon utilisateur actuel ( myuser) sans me demander le mot de passe?

Voici mon /etc/sudoersdossier complet :

#
# 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
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   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
Zac
la source
Pourriez-vous poster votre fichier sudoers? La directive est correcte, mais cela ne pourrait pas fonctionner en raison du contexte.
Lety
Merci @Letizia - s'il vous plaît voir ma mise à jour, quelque chose saute à vous?
Zac
J'imagine que je devrais également noter que je n'ai pas utilisé visudoles modifications manuelles apportées à ce fichier, mais que ce ne sont pas des tâches de copier-coller, j'ai tout saisi tel quel. Mais visudoéditez-vous d'autres fichiers en plus de celui-ci? C'est peut-être ça ...
Zac
En outre, vérifiez tous les fichiers /etc/sudoers.d/, ils peuvent avoir une importance primordiale/etc/sudoers
tokland

Réponses:

69

C'est la séquence / l'ordre des règles qui a provoqué cela. La dernière règle a la préférence.

Pour résoudre votre problème, déplacez simplement vos lignes,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

du sudoersfichier à

sudo visudo -f /etc/sudoers.d/myOverrides 

Cette approche est préférable à la modification du sudoersfichier avec un éditeur de texte brut. Si vous insérez accidentellement des erreurs dans le fichier, vous risquez de ne plus pouvoir l'exécuter sudo. Toujours utiliser visudo, afin que la syntaxe soit vérifiée et que vous receviez des avertissements concernant les erreurs!

Votre directive ne fonctionne pas car elle est remplacée par:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Si vous exécutez la groupscommande, vous devriez voir que votre utilisateur appartient à ces groupes.

Lety
la source
Le nom du fichier doit suivre une convention de nn-somename, par exemple/etc/sudoers.d/20-myoverrides
shimatai
Oui, bien sûr, si vous avez plusieurs fichiers, ceux-ci sont analysés dans un ordre lexical trié. Il est donc recommandé d’utiliser un numéro et il sera facile de connaître cet ordre.
Lety
22

Si myuser est dans le groupe sudo , alors cet ordre des lignes ne fournira pas d'accès sans mot de passe (comme l'a noté Florian Diesch), car la troisième ligne remplace la première.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Il suffit donc de mettre les lignes dans cet ordre:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

Sous mon compte utilisateur, utilisez sudo -lpour vérifier les autorisations dont dispose monutilisateur .

Kostyantyn
la source
11

Si plusieurs entrées correspondent pour un utilisateur, la dernière est utilisée. Donc, si fizzbuzzet chadminsont membres des groupes adminou sudoon leur demandera toujours un mot de passe.

Placez les deux lignes à la fin du sudoersfichier après la #includedirligne.

Florian Diesch
la source
En effet, la combinaison de @ Letizia et de vos réponses est donc la meilleure solution, car #includedirc’est la dernière entrée sudoerspar défaut.
muru
0

Idéalement, si vous personnalisez les commandes pouvant être exécutées via, sudovous devez apporter ces modifications dans un fichier séparé sous /etc/sudoers.d/plutôt que de les modifier sudoersdirectement. Vous devriez également toujours utiliser visudopour éditer le (s) fichier (s). Vous ne devriez JAMAIS accorder NOPASSWDde ALLcommandes.

Exemple: sudo visudo -f /etc/sudoers.d/mynotriskycommand

Insérez votre ligne accordant la permission: myuser ALL= NOPASSWD: /bin/mkdir

Puis enregistrez et quittez et visudovous avertirons si vous avez des erreurs de syntaxe.

Vous pouvez exécuter sudo -lpour voir les autorisations accordées à votre utilisateur. Si l'une des NOPASSWDcommandes spécifiques à l'utilisateur apparaît AVANT une %groupyouarein ALL=(ALL) ALLcommande dans la sortie, vous serez invité à entrer votre mot de passe.

Si vous êtes en train de créer beaucoup de ces fichiers sudoers.d, vous voudrez peut-être les créer nommés par utilisateur pour faciliter leur visualisation. Gardez à l'esprit que l'ordre des NOMS DE FICHIERS et des règles dans le fichier est très important, le DERNIER chargé gagne gagne, qu'il soit PLUS ou MOINS permissif que les entrées précédentes.

Vous pouvez contrôler le classement des noms de fichiers en utilisant un préfixe 00-99 ou aa / bb / cc, tout en gardant à l'esprit que si vous avez des fichiers sans préfixe numérique, ils se chargeront après les fichiers numérotés. les paramètres. Cela s'explique par le fait que, selon vos paramètres de langue, le "tri lexical" utilisé par le shell trie les nombres en premier, puis entrelace les majuscules et les minuscules lors d'un tri "croissant".

Essayez de lancer printf '%s\n' {{0..99},{A-Z},{a-z}} | sortet printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortde voir si votre langue actuelle imprime, AaBbCcetc., ou ABCensuite abcde déterminer quel serait le meilleur préfixe de la dernière lettre à utiliser.

dragon788
la source