Pourquoi le système a-t-il /etc/sudoers.d? Comment devrais-je le modifier?

48

La dernière fois, j'ai posé une question sur le risque de ceux-ci (dans / etc / sudoers):

    user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
    %group_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Pendant que je réfléchissais à ce problème, j'ai trouvé le répertoire /etc/sudoers.d . Les fichiers du répertoire devraient avoir des fonctions similaires à celles de / etc / sudoers (ce qui signifie que les scripts ci-dessus posent toujours problème, même dans /etc/sudoers.d). Cependant, un article disait que nous ne devrions pas utiliser le répertoire car nous ne pouvons pas visudomodifier les fichiers dans il. En d’autres termes, nous perdons le droit d’utiliser sudosi nous commettons une erreur dans le répertoire.

Si c'est vrai, pourquoi avons-nous /etc/sudoers.d ? Ou avons-nous un bon moyen d’éditer des fichiers dans /etc/sudoers.d ?

aob
la source

Réponses:

45

Les modifications apportées aux fichiers en place /etc/sudoers.drestent en place si vous mettez à niveau le système. Cela peut empêcher les verrouillages d’utilisateur lors de la mise à niveau du système. Ubuntu a tendance à aimer ce comportement. D'autres distributions utilisent également cette disposition.

D'après mon expérience, les règles sur les fichiers de ce répertoire sont plus souples que pour /etc/sudoers. Cela a inclus:

  • Les erreurs dans le fichier n'ont pas causé sudod'échec. Cependant, le fichier a été ignoré.
  • Les règles de permission semblent moins strictes. Cela permet au groupe concerné ou autre de lire le fichier. Je ne crois pas que c'était possible avec /etc/sudoers. Les autorisations d'écriture doivent être limitées à rootpour maintenir la sécurité. La version actuelle de sudo pour Ubuntu autorise les autorisations de lecture pour les groupes ou autres. (Cette fonctionnalité permet d’auditer l’accès sudo sans audit root).

La visudocommande ne prend par défaut que la valeur /etc/sudoers. Il éditera et vérifiera n'importe quel fichier que vous spécifiez avec l' -foption. J'utilise cette fonctionnalité pour éditer des fichiers qui seront automatiquement installés en tant que /etc/sudoersou dans /etc/sudoders.d. Cependant, les définitions d'autres fichiers peuvent ne pas être trouvées. Il est préférable de rendre le fichier indépendant.

La possibilité de disposer de fichiers autonomes permet à une application d'activer sudofacilement les fonctionnalités d'installation et de les supprimer lorsqu'elles sont désinstallées. Les outils de configuration automatisés peuvent également utiliser cette fonctionnalité.

J'ai utilisé cette fonctionnalité pour isoler les modifications requises pour accorder l'accès à des groupes d'utilisateurs spécifiques sur des systèmes spécifiques.

BillThor
la source
1
Les deux traits de sudoers.d que vous avez mentionnés semblent vraiment importants et utiles. Merci!
aob
Voir ma réponse et mise en garde sur la raison pour laquelle ce ne sont pas réellement des traits de sudoers.d.
dragon788
1
Tout à fait en désaccord avec l’affirmation «Les erreurs dans le dossier n’ont pas entraîné l’ sudoéchec». J'ai cassé sudo sur RHEL avec une syntaxe incorrecte dans un fichier de /etc/sudoers.d. Cela a pris un effort considérable pour rectifier et je pense que la recommandation devrait être de toujours utiliser visudo -fpour éditer ces fichiers.
79E09796
@ 79E09796 J'ai des fichiers cassés dans /etc/sudoers.d sans causer de problèmes avec les règles dans d'autres fichiers. YMMV. Si vous cassez la configuration sudo qui vous introduit dans le système, vous aurez des problèmes. Si vous avez accès au redémarrage du système, il est relativement facile de redémarrer en mode de récupération et de réparer le fichier. Je conviens qu'il est préférable d'utiliser visodo pour éditer, ou au moins vérifier les modifications apportées aux fichiers de configuration sudo.
BillThor
62

Oui, vous pouvez utiliser visudopour éditer ces fichiers. Tout ce que vous avez à faire est de spécifier le nom du fichier que vous souhaitez modifier avec l' -foption. Par exemple:

visudo -f /etc/sudoers.d/somefilename

Ou, si nécessaire:

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

Documentation

De man visudo:

-f sudoers
Spécifie et alterne l’emplacement du fichier sudoers. Avec cette option, visudo éditera (ou vérifiera) le fichier sudoers de votre choix, au lieu du fichier par défaut, / etc / sudoers. Le fichier de verrouillage utilisé est le fichier sudoers spécifié auquel est ajouté ".tmp". En mode vérification uniquement, l'argument de -f peut être "-", ce qui indique que les utilisateurs sudoers seront lus à partir de l'entrée standard.

En résumé:

  1. Syntaxe: Les deux visudoet visudo -f effectuer la même vérification de syntaxe .

  2. Autorisations / Propriété: en tant que fonctionnalité ajoutée pour faciliter l'administration des systèmes volumineux , les fichiers édités sous visudo -fne sont pas contrôlés en termes de propriété ou d'autorisations: cela permet de vérifier la syntaxe d'un fichier hors ligne ou dans le cadre d'un système de contrôle de révision.

Pourquoi utiliser /etc/sudoers.d/

/etc/sudoersEst généralement sous le contrôle du gestionnaire de paquets de votre distribution. Si vous avez apporté des modifications à ce fichier et que le gestionnaire de packages souhaite le mettre à niveau, vous devrez examiner manuellement les modifications et approuver leur fusion dans la nouvelle version. En plaçant vos modifications locales dans un fichier du /etc/sudoers.d/répertoire, vous évitez cette étape manuelle et les mises à niveau peuvent être effectuées automatiquement.

Quand sudoignore un fichier dans /etc/sudoers?

Si votre /etc/sudoersfichier contient la ligne:

#includedir /etc/sudoers.d

puis sudova lire les fichiers dans le répertoire /etc/sudoers.d.

Les exceptions sont:

  1. Fichiers dont le nom se termine par ~
  2. Fichiers dont le nom contient un .caractère

Ceci est fait (a) pour la commodité des gestionnaires de paquets et aussi (b) pour que les fichiers de sauvegarde des éditeurs soient ignorés.

John1024
la source
Merci, mais j'ai un doute. Est-ce visudo -fsécuritaire?
aob
5
Oui, les visudo -fmodifications sont sécurisées comme d'habitude visudo. C'est pourquoi nous avons visudoet pourquoi il fournit l' -foption.
John1024
Remarque importante sur la façon dont les autorisations sont ignorées lors de l'utilisation -fcar cela pourrait octroyer quelqu'un qui le copie ensuite dans /etc/sudoers.d/ sans les vérifier deux fois.
dragon788
1
MERCI pour la section exception. J'ai nommé mon dossier quelque chose comme /etc/sudoers.d/mysudorules.sudoet je ne pouvais pas comprendre pourquoi les règles internes n'étaient pas appliquées avant de lire votre réponse.
Zaroth
1
Merci d'avoir mentionné les exceptions. Mon fichier sous /sudoers.d/mysite.co.ukne fonctionnait pas et après avoir été renommé, mysitecela fonctionne! :)
J86
20

pourquoi avons-nous /etc/sudoers.d?

Parce qu'il est plus facile pour les outils automatisés (tels que Chef ou Puppet) de déposer des fichiers individuels dans ce répertoire, plutôt que d'apporter des modifications à /etc/sudoersce qui pourrait être fragile.

Les fichiers /etc/sudoers.dsont concaténés (en fait). Vous verrez plusieurs autres instances de ce modèle /etc, telles que /etc/cron.det /etc/logrotate.d.

Roger Lipscombe
la source
Je ne savais pas qu'il existe d'autres répertoires similaires. Merci.
aob
14

Un autre avantage de l’utilisation visudo -fmentionnée dans certaines réponses est qu’il existe une option correspondante -cou --checkqui vérifie que vous n’avez pas d’informations non valides dans un fichier sudoers.d ou dans tout autre fichier que vous pourriez vouloir mettre dans sudoers.d. C’est vraiment utile dans les cas mentionnés avec des outils automatisés, comme par exemple

sudo visudo -c -q -f /home/myuser/mysudoers && \
sudo chmod 600 /home/myuser/mysudoers && \
sudo cp /home/myuser/mysudoers /etc/sudoers.d/mysudoers

Ceci vérifie le fichier de manière silencieuse (pas de sortie à cause de -q) et seulement si cela ne renvoie PAS une erreur (exit 1 signifie un fichier sudoers invalide), puis il copiera le fichier dans sudoers.d. De cette façon, vous pourrez créer le fichier et travaillez dessus sans avoir à sudo visudo -f /etc/sudoers.d/myfilecorriger le problème du premier coup (utiliser doit réussir ou rejette le contenu si vous ne le corrigez pas).

En outre, une mise en garde concernant ces déclarations des autres réponses.

D'après mon expérience, les règles concernant les fichiers de ce répertoire sont plus souples que pour / etc / sudoers. Cela a inclus:

Les erreurs dans le fichier n'ont pas causé l'échec de sudo. Cependant, le fichier a été ignoré. Les règles de permission semblent moins strictes. J'autorise le groupe concerné à lire le fichier. Je ne crois pas que ce soit possible avec / etc / sudo.

Les fichiers de /etc/sudoers.d doivent respecter la même syntaxe que / etc / sudoers car, sous le capot, le système concatène simplement tous les fichiers dont le dernier est "gagnant" s'il existe plusieurs entrées pour le même fichier. cadre singulier.

Si les autorisations sont horriblement incorrectes (écriture sur le monde entier) sur les fichiers de /etc/sudoers.d/, ils sont alors ignorés. Cela peut être la cause de l'ignorance des fichiers non valides, sinon vous pouvez sérieusement briser la sudocommande en ayant un sudoers non valide. fichier d avec les autorisations appropriées.

Vous pouvez autoriser les fichiers sudoers à être lisibles par tout le monde. Si vous autorisez accidentellement l'autorisation d'accès en écriture à "autre", vous devez utiliser sudo lorsqu'un autre utilisateur ou depuis un terminal racine exécutez cette commande. Cela peut également échouer si le fichier appartient à quelqu'un d'autre que root: root.

sudo chmod 644 /etc/sudoers.d/mysudoers
sudo chown root:root /etc/sudoers.d/mysudoers

Je viens de confirmer que si je me lance, chmod o+w /etc/sudoers.d/vagrantje ne pourrai plus faire sudo en tant qu'utilisateur vagrant, il me demandera mon mot de passe et échouera.

Lorsque j'ai réussi sudo -là afficher les autorisations de commande appliquées en tant qu'autre utilisateur sudo valide, j'ai également reçu un avertissement concernant les autorisations de fichier. C'est la même commande que j'ai utilisée pour confirmer que l'utilisateur 'vagabond' a perdu sudo lorsque j'ai appliqué des o+wautorisations au fichier lui donnant des autorisations sudo.

dragon788
la source
3

Juste un petit ajout à une réponse générale ... aucune des autres réponses n'a résolu mon problème, à savoir que l'ordre est important.

Si vos lignes fonctionnent dans sudoers mais pas dans sudoers.d, essayez de déplacer le #include ou de changer l'ordre de vos fichiers sudoers.d (en ajoutant un numéro avec le préfixe). Il semble que l'élément le plus spécifique devrait figurer en premier dans le fichier.

J'ai eu quelque chose comme:

somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand

Et le second n'a aucun effet car le premier correspond déjà. NOPASSWD n'est pas une condition, mais un moyen de modifier l'action.

Et ce n'était pas évident car ce n'était pas dans un seul fichier, à cause du répertoire sudoers.d.

Peter
la source