James Thew - Fotolia

Linux : créez des fichiers de configuration sudo personnalisés

Sudo offre aux administrateurs une grande flexibilité. La création de configurations sudo personnalisées peut grandement faciliter la gestion et la mise à jour des services.

Il est généralement déconseillé de se connecter en tant qu’utilisateur root afin de garantir la sécurité du système. Le compte root est un compte hautement privilégié, c’est pourquoi de nombreuses distributions désactivent la possibilité pour un utilisateur de se connecter avec ce compte.

Une alternative à l’exercice des privilèges d’administrateur est sudo, qui permet de déléguer des commandes à des utilisateurs et à des groupes. Vous pouvez configurer des paramètres sudo simples dans le fichier standard /etc/sudoers, mais que se passe-t-il lorsque vos besoins en matière de délégation sont plus complexes ? Ou lorsque vous devez vous assurer qu’un fichier sudoers soigneusement élaboré n’est pas écrasé lors d’une mise à jour du système d’exploitation ?

La réponse : Implémenter un ou plusieurs fichiers de configuration sudoers personnalisés, et les stocker dans le répertoire /etc/sudoers.d.

Cet article explique l’utilisation des fichiers sudoers personnalisés, y compris les cas d’usage, le contrôle d’accès basé sur les rôles (RBAC) et d’autres exemples. Il montre comment et quand envisager l’utilisation de fichiers sudo personnalisés.

Paramètres sudo avancés

Certaines entreprises ont des exigences complexes en matière de délégation. Par exemple, les serveurs de développement peuvent être accessible à plusieurs membres de l’équipe de développement ou des groupes distincts pour des équipes travaillant sur des projets différents. Déléguer l’accès à des serveurs de base de données, des serveurs web et des hôtes de virtualisation distincts est un défi. La maintenance d’un seul fichier /etc/sudoers peut s’avérer complexe et difficile.

Dans ces situations, créez des fichiers sudoers personnalisés spécifiques à différents utilisateurs ou différents groupes pour faciliter la gestion et les mises à jour. En outre, ces fichiers personnalisés restent inchangés lors des mises à niveau du système d’exploitation ou des changements de version de service.

Une conception et une mise en œuvre efficaces des fichiers sudoers personnalisés vous permettent également de définir des RBAC. Par exemple, supposons que vous souhaitiez définir trois rôles : développeur de code, réviseur de code et gestionnaire de code. Créez un fichier sudoers spécifique pour chaque rôle. Ensuite, ajoutez les différents groupes Linux standard liés au rôle de développeur de code. Faites de même pour les fichiers code-reviewer et code-manager.

Chaque fichier peut inclure un ou plusieurs de ces groupes. Chaque fichier contient aussi les privilèges délégués que vous accordez à ces groupes.

Cette flexibilité est cruciale pour les scénarios de délégation plus complexes.

Les avantages des fichiers sudoers personnalisés sont les suivants :

  • Contrôle précis. Les fichiers de configuration spécifiques aux utilisateurs et aux groupes permettent un contrôle plus précis.
  • Persistance à travers les mises à jour du système d’exploitation. Le fichier /etc/sudoers par défaut risque d’être écrasé lors des mises à jour du système, mais les fichiers personnalisés ne le sont pas, ce qui est essentiel pour les configurations complexes.
  • Gestion plus facile de la configuration. Vous pouvez modifier des fichiers individuels sans altérer ou risquer d’altérer l’ensemble de la configuration sudo.
  • Partage des fichiers de configuration entre les systèmes. Partagez facilement des fichiers entre systèmes en déléguant un contrôle granulaire dans des fichiers autonomes. Supposons que vous ayez besoin de déléguer les mêmes privilèges d’administration de VM à trois serveurs hôtes de virtualisation différents. Vous pouvez maintenir un seul fichier à utiliser sur chaque système. Cependant, l’un de ces systèmes peut également avoir besoin d’une configuration sudo unique qui s’applique à un groupe d’administrateurs de base de données. Cette approche serait beaucoup plus difficile à gérer en utilisant un seul fichier sudoers sur chaque serveur.

Comment gérer le répertoire /etc/sudoers.d ?

Stockez les fichiers de configuration sudo personnalisés dans le répertoire /etc/sudoers.d. Le service vérifie automatiquement la présence de ces fichiers supplémentaires dans le répertoire. Évitez de modifier le fichier sudoers principal si vous utilisez des fichiers personnalisés. Plus vous jonglez avec les fichiers, plus ils sont difficiles à gérer. Laissez le fichier principal contenir la configuration par défaut et les fichiers personnalisés stocker les paramètres plus avancés.

Utilisez visudo lorsque vous créez ou modifiez ces fichiers. Il vérifie la syntaxe pour éviter les erreurs qui pourraient rendre la connexion au système difficile ou impossible.

Linux traite les fichiers de configuration dans /etc/sudoers.d par ordre numérique et alphabétique. Pour éviter les conflits, ajoutez des numéros aux noms de fichiers afin de contrôler l’ordre de traitement. Par exemple, les numéros dans l’exemple suivant dictent la façon dont le système traite ces fichiers :

  • 10_code-developer.
  • 20_code-reviewer.
  • 30_code-manager.

Le fichier 10_code-developer est traité avant les deux autres.

Exemples de fichiers personnalisés

Il y a de fortes chances que vos fichiers sudoers personnalisés soient moins complexes que l’original. Après tout, ils ne doivent contenir que les paramètres que vous souhaitez et les commentaires associés qui les expliquent. Cette simplicité rend les fichiers plus faciles à maintenir et à partager entre les systèmes ayant les mêmes exigences de délégation.

La syntaxe de base des entrées sudoers est la suivante :

username ALL=(ALL) /path/to/command

Par exemple, pour permettre à user01 d’exécuter toutes les commandes, ajoutez cette ligne à un fichier sudoers personnalisé :

user01 ALL=(ALL:ALL) ALL

Il s’agit d’une configuration très ouverte, il serait donc préférable de restreindre user01 à des commandes spécifiques en saisissant cette ligne à la place (indiquez le chemin absolu vers les commandes que vous souhaitez inclure) :

user01 ALL=(root) /usr/bin/dnf, /usr/bin/rpm

Dans les deux exemples ci-dessus, user01 doit saisir son mot de passe. Vous pouvez supprimer cette exigence en ajoutant l’indicateur NOPASSWD :. La ligne mise à jour ressemble à ceci :

user01 ALL=(root) NOPASSSWD : /usr/bin/dnf, /usr/bin/rpm

Les configurations sudo personnalisées sont particulièrement utiles lors de déploiements à grande échelle. Dans ce cas, il est plus judicieux de déléguer à des groupes. Voici un exemple qui accorde un accès administrateur complet au groupe sysadmins :

%sysadmins ALL=(ALL:ALL) ALL

Encore une fois, il s’agit d’une délégation bien plus importante que celle que vous êtes susceptible d’accorder. Pour déléguer le contrôle d’une fonctionnalité spécifique, par exemple en accordant les privilèges d’administration de Docker à un groupe nommé docker, utilisez :

%docker ALL=(root) /usr/bin/docker

N’oubliez pas d’utiliser des commentaires pour expliquer vos paramètres.

Bonnes pratiques pour les fichiers sudo personnalisés

N’oubliez pas d’appliquer les pratiques suivantes lors du déploiement de fichiers de configuration sudo personnalisés :

  • Utilisez toujours visudo pour éditer les fichiers. L’outil visudo vérifie la syntaxe du fichier de configuration avant de mettre en œuvre les modifications afin de s’assurer que vous n’avez pas fait d’erreur qui rendrait le système inopérant.
  • Utilisez des noms de fichiers descriptifs pour simplifier la configuration et le dépannage.
  • Utilisez une norme de dénomination des fichiers qui permet de contrôler l’ordre de traitement des fichiers.
  • Inscrivez des commentaires détaillés expliquant l’objectif de chaque délégation dans le fichier.
  • Définissez l’utilisateur et le groupe root comme propriétaires des fichiers personnalisés dans le répertoire /etc/sudoers.d.
  • Définissez les autorisations standard 0440 sur les fichiers personnalisés du répertoire /etc/sudoers.d afin de garantir que Linux applique correctement les délégations et empêche les modifications inattendues des fichiers.
  • Utilisez des fichiers distincts pour chaque rôle ou délégation.
  • Automatisez les déploiements de fichiers à l’aide de rsync, Chef, Puppet, etc.
  • Surveillez attentivement l’accès aux ressources accordées par sudo.
  • Maintenez un contrôle de version strict. Envisagez d’utiliser un mécanisme tel que Git.

Lier ces bonnes pratiques à vos délégations sudo améliore la sécurité et l’efficacité.

Une meilleure façon de déléguer

Déléguer l’accès à certaines ou à toutes les commandes sur un système Linux avec sudo est une configuration de sécurité critique. Aujourd’hui, de puissants serveurs Linux hébergent diverses bases de données, des projets, des clients de virtualisation, des conteneurs et des environnements de développement. Par conséquent, l’échelle de délégation va au-delà de ce que le fichier de configuration sudoers standard peut gérer de manière organisée.

Le stockage de fichiers sudoers personnalisés dans le répertoire /etc/sudoers.d offre aux administrateurs un moyen plus élégant et plus efficace de gérer la délégation. Créez des fichiers spécifiques pour des utilisateurs, des groupes ou des rôles particuliers, puis hiérarchisez ces fichiers à l’aide d’un système de dénomination numéroté (10_filename, 20_filename, 30_filename, etc.).

Fournissez des commentaires détaillés dans les fichiers et configurez les droits de propriété et autorisations standard appropriés. Envisagez d’intégrer ces fichiers de configuration dans un système de contrôle des versions.

Examinez vos processus de délégation actuels et déterminez si des fichiers sudoers personnalisés simplifieraient vos pratiques d’administration.

Pour approfondir sur Linux