SUDO et le principe de moindre privilège
Mise à jour :
Lorsqu’il s’agit de gérer un système Linux, l’accès à des privilèges élevés est
souvent nécessaire pour effectuer certaines tâches administratives. Cependant,
avec un grand pouvoir vient une grande responsabilité et c’est là qu’entre en
jeu l’outil sudo
. Il est essentiel de comprendre comment utiliser sudo
de
manière adéquate pour garantir la sécurité de votre système.
Sudo, abréviation de “Substitute User Do,” est une commande qui permet aux utilisateurs de Unix et Linux d’exécuter des commandes avec les privilèges d’un autre utilisateur, généralement l’utilisateur root (administrateur). Cette fonctionnalité est essentielle car elle permet de limiter l’accès aux ressources système sensibles tout en permettant aux utilisateurs autorisés d’accomplir des tâches administratives.
Historique
Pour comprendre pleinement l’importance de la commande sudo, il est essentiel de plonger dans son histoire. L’origine de sudo remonte aux premiers jours des systèmes Unix et Linux et son développement a été guidé par la nécessité de gérer efficacement les privilèges sur ces systèmes.
Sudo a été développé en 1980 par Bob Coggeshall et Cliff Spencer à l’Université de Californie à Berkeley, qui était l’un des centres de développement pionniers pour les systèmes Unix. À l’origine, sudo avait pour but de résoudre un problème critique : comment permettre à des utilisateurs normaux d’exécuter des commandes avec les privilèges de l’utilisateur root, généralement réservés à l’administrateur du système.
Au fil des ans, sudo a évolué pour devenir un outil de gestion des privilèges flexible et puissant. Il a été adopté par de nombreuses distributions Linux ainsi que par d’autres systèmes Unix. Son utilisation s’est étendue au-delà de l’Université de Californie à Berkeley pour devenir une norme de facto dans le monde Unix/Linux.
Fondamentaux
Pour comprendre pleinement l’utilisation de la commande sudo, il est essentiel de maîtriser les fondamentaux qui sous-tendent son fonctionnement. Dans ce chapitre, nous aborderons le concept clé du “moindre privilège”, le rôle de la commande sudo et son utilisation de base.
Le Principe du “Moindre Privilège”
Le principe du “moindre privilège” est un concept fondamental en sécurité informatique. Il stipule que les utilisateurs et les processus doivent avoir le niveau de privilège le plus bas nécessaire pour accomplir leurs tâches. En d’autres termes, ne donnez pas plus de privilèges que ce qui est strictement requis. Ce principe vise à réduire les risques de sécurité en limitant la surface d’attaque potentielle.
Le Rôle de la Commande Sudo
La commande sudo est l’outil clé pour mettre en œuvre le principe du “moindre privilège” dans les systèmes Unix et Linux. Elle permet à un utilisateur d’exécuter des commandes avec les privilèges d’un autre utilisateur, généralement l’utilisateur root (administrateur). Cela signifie que même un utilisateur non administrateur peut accomplir des tâches administratives spécifiques sans avoir accès à l’ensemble des privilèges root.
Utilisation Courante de Sudo
Sudo est couramment utilisé dans les scénarios suivants :
- Installation de Logiciels : Les utilisateurs peuvent utiliser sudo pour installer des logiciels système sans avoir besoin d’accès administratif complet.
- Mise à Jour du Système : Les mises à jour du système, y compris la mise à jour de sécurité, sont généralement effectuées avec sudo.
- Gestion des Services : Redémarrer des services, démarrer/arrêter des démons système, etc.
- Configuration Réseau : Modifier les paramètres réseau, ajouter des routes, etc.
Utilisation de Base de Sudo
L’utilisation de base de sudo consiste à préfixer une commande avec “sudo” lors de son exécution. Par exemple, au lieu d’utiliser simplement “ls” pour lister le contenu d’un répertoire, vous pouvez utiliser “sudo ls” pour exécuter la commande en tant qu’administrateur, ce qui peut être nécessaire pour accéder à certains répertoires.
Exemple d’utilisation de base :
La première fois que vous utilisez sudo dans une session, il vous sera généralement demandé de saisir le mot de passe de votre propre compte utilisateur pour confirmer votre identité. Une fois authentifié, vous pouvez exécuter des commandes avec les privilèges accordés par sudo.
Emplacement du Fichier de Configuration
Le fichier de configuration de sudo est généralement situé à /etc/sudoers
ou
dans le répertoire /etc/sudoers.d/
. Il est important de noter que ce fichier
doit être édité avec précaution, car des erreurs de syntaxe peuvent entraîner
des problèmes de sécurité.
Syntaxe du Fichier de Configuration
Le fichier de configuration de sudo est le pivot de son fonctionnement. Il détermine qui peut exécuter quelles commandes avec sudo et avec quels privilèges. Comprendre sa syntaxe est essentiel pour une utilisation efficace de sudo.
-
Lignes de Commentaires : Les lignes commençant par le caractère dièse
#
sont des commentaires et sont ignorées par sudo. Vous pouvez les utiliser pour ajouter des notes ou des explications au fichier.Exemple :
-
Définition des Alias : Vous pouvez définir des alias pour rendre le fichier plus lisible et modulaire. Les alias sont utilisés pour regrouper des commandes, des utilisateurs, des groupes, etc.
Exemple :
Dans cet exemple,
ADMINS
est un alias pour les utilisateurs “johndoe” et “janedoe” etUPDATE
est un alias pour les commandes apt. -
Définition des Utilisateurs et des Groupes : Vous pouvez spécifier des utilisateurs et des groupes de la manière suivante :
utilisateur
: Pour spécifier un utilisateur individuel.%groupe
: Pour spécifier un groupe.ALL
: Pour faire correspondre tous les utilisateurs ou tous les groupes.
Exemple :
Dans cet exemple, “johndoe” a des autorisations sudo pour toutes les commandes et le groupe “admins” a également des autorisations sudo pour toutes les commandes.
-
Spécification des Commandes : Vous pouvez spécifier les commandes ou les commandes alias que les utilisateurs sont autorisés à exécuter. Utilisez
(ALL:ALL)
pour spécifier tous les utilisateurs et tous les groupes, ou limitez les autorisations à des combinaisons spécifiques d’utilisateurs et de groupes.Exemple :
Dans cet exemple, “johndoe” est autorisé à exécuter la commande “apt update”, tandis que le groupe “admins” peut exécuter la commande “reboot” en tant qu’administrateur (root) sans mot de passe.
-
Options de Sécurité : Vous pouvez spécifier des options de sécurité pour les règles sudo, telles que
NOPASSWD
(pas de mot de passe requis),PASSWD
(mot de passe requis),NOPASSWD:
(défini au niveau de la commande),PASSWD:
(défini au niveau de la commande), etc.Exemple :
Dans cet exemple, “johndoe” peut exécuter la commande “apt update” sans nécessiter de mot de passe.
-
Directive par Défaut : Vous pouvez spécifier des directives par défaut qui s’appliquent à tous les utilisateurs et commandes qui ne sont pas explicitement définis dans le fichier.
Exemple :
Dans cet exemple, la directive “requiretty” est activée par défaut, ce qui signifie qu’un terminal est requis pour exécuter des commandes sudo.
-
Directive Inclure : Vous pouvez inclure d’autres fichiers de configuration sudoers à l’aide de la directive “Include”.
Exemple :
Dans cet exemple, nous montrons comment inclure des fichiers de configuration supplémentaires et comment exclure certains fichiers spécifiques.
-
Syntaxe de Fichier : Assurez-vous de suivre la syntaxe du fichier sudoers pour éviter les erreurs. Une syntaxe incorrecte peut rendre sudo inutilisable.
Ces sont les éléments de base de la syntaxe du fichier sudoers. Il est essentiel
de comprendre cette syntaxe pour configurer correctement les autorisations sudo
sur un système Unix/Linux. Veillez à toujours faire preuve de prudence lors de
la modification du fichier sudoers, car une erreur de configuration peut
entraîner des problèmes de sécurité graves. Pour éviter cela, il est recommandé
d’utiliser la commande visudo
pour éditer le fichier sudoers, car elle
effectue des vérifications de syntaxe avant d’enregistrer les modifications.
Exemples de Syntaxe
Voici quelques exemples de syntaxe couramment utilisés dans le fichier de configuration de sudo :
Dans cet exemple, l’utilisateur web_admin
est autorisé à exécuter la commande
/usr/bin/systemctl restart apache2
en tant qu’utilisateur www-data
sans
avoir besoin d’entrer un mot de passe.
Vérification de la Syntaxe du Fichier
Avant de sauvegarder des modifications dans le fichier de configuration sudoers,
il est recommandé de vérifier la syntaxe pour éviter les erreurs potentielles.
Vous pouvez le faire en utilisant la commande visudo
, qui ouvre le fichier de
configuration dans un éditeur spécifique à sudo et effectue une vérification de
syntaxe avant de permettre la sauvegarde.
La syntaxe du fichier de configuration de sudo peut sembler complexe au début, mais avec de la pratique et en suivant les bonnes pratiques, vous pourrez gérer efficacement les privilèges des utilisateurs sur votre système Unix ou Linux.
Utilisation des Rôles
Les rôles dans sudo permettent de définir des ensembles spécifiques de privilèges pour un utilisateur ou un groupe d’utilisateurs. Cette fonctionnalité est extrêmement utile pour organiser et gérer les autorisations de manière plus granulaire, tout en maintenant la sécurité de votre système.
Création de Rôles
Pour créer un rôle dans sudo, vous devez éditer le fichier de configuration
(/etc/sudoers
) en utilisant visudo
. Voici comment créer un rôle :
role_name
: Le nom du rôle que vous souhaitez créer.host
: L’hôte sur lequel le rôle est valable (généralementALL
pour tous les hôtes).(user:group)
: L’utilisateur et le groupe auxquels la commande peut être exécutée.command
: La commande spécifique autorisée pour ce rôle.
Exemples d’Utilisation des Rôles
Supposons que vous ayez un groupe d’utilisateurs responsables de la gestion des mise à jour de packages. Vous pouvez créer un rôle spécifique pour eux :
Dans cet exemple :
- Nous utilisons
Cmnd_Alias
pour créer un alias nommé “APT_COMMANDS” qui regroupe plusieurs commandes apt, notamment la mise à jour, la mise à niveau, la mise à niveau de distribution et la suppression des paquets obsolètes. - Ensuite, nous autorisons tous les membres du groupe “apt_manager” à exécuter ces commandes sans nécessiter de mot de passe. Assurez-vous que le groupe “apt_manager” existe et ajoutez les utilisateurs souhaités à ce groupe.
Cela fonctionne !
Avantages de l’Utilisation des Rôles
L’utilisation de rôles présente plusieurs avantages :
- Gestion Facilitée : Vous pouvez attribuer des privilèges spécifiques à des groupes d’utilisateurs sans avoir à éditer le fichier de configuration pour chaque utilisateur individuellement.
- Sécurité Renforcée : En limitant les commandes autorisées pour chaque rôle, vous réduisez les risques potentiels liés à l’abus de privilèges.
- Organisation Claire : Les rôles simplifient la gestion des autorisations en les regroupant de manière logique, ce qui facilite la maintenance.
L’utilisation judicieuse des rôles dans sudo est un élément essentiel de la gestion des privilèges sur les systèmes Unix et Linux. Elle permet de concilier sécurité et efficacité dans la gestion des ressources et des services.
Fonctionnement de sudo
Le fonctionnement de sudo
:
-
Commande Utilisateur : Tout commence quand un utilisateur entre une commande précédée de
sudo
.sudo
est une commande Unix qui permet d’exécuter des commandes avec les privilèges du superutilisateur ou d’un autre utilisateur, selon la configuration. -
Sudo : Lorsque la commande
sudo
est exécutée, elle initie le processus de vérification et d’autorisation. -
Vérification du Fichier Sudoers :
sudo
consulte le fichier sudoers. Ce fichier contient les règles qui déterminent quels utilisateurs ou groupes peuvent exécuter quelles commandes et sur quels hôtes. -
Vérifications Multiples :
- Permissions Utilisateur :
sudo
vérifie si l’utilisateur a les droits nécessaires pour exécuter la commande demandée. - Alias de Commande : Si la commande correspond à un alias défini dans le fichier sudoers, cette correspondance est vérifiée.
- Spécifications de l’Hôte :
sudo
vérifie si la commande est autorisée à être exécutée sur l’hôte actuel. - Alias ‘Run as’ : Il détermine si l’utilisateur est autorisé à exécuter la commande en tant qu’un autre utilisateur ou groupe (par exemple, root).
- Permissions Utilisateur :
-
Décision d’Autorisation : Basé sur les résultats de ces vérifications,
sudo
décide si l’utilisateur a la permission d’exécuter la commande. -
Résultat de la Permission :
- Oui : Si l’utilisateur a la permission, la commande est exécutée avec les privilèges de superutilisateur ou ceux de l’utilisateur cible spécifié.
- Non : Si l’utilisateur n’a pas la permission, l’accès est refusé et un message d’erreur est affiché.
-
Exécution de la Commande : Si la permission est accordée, la commande est exécutée avec les privilèges élevés.
-
Message d’Erreur : Si la permission est refusée,
sudo
affiche un message d’erreur.
Ce processus permet de contrôler l’accès aux commandes nécessitant des privilèges élevés, assurant ainsi une sécurité accrue du système.
Lister les sudo’s
Pour lister tous les utilisateurs et groupes qui ont des autorisations sudo sur
un système Unix/Linux, vous pouvez utiliser la commande sudo
avec l’option
-l
(list).
-
Pour lister les utilisateurs et groupes ayant des autorisations sudo :
-
Pour lister les autorisations sudo d’un utilisateur spécifique, remplacez “nom_utilisateur” par le nom de l’utilisateur :
Par exemple, pour lister les autorisations sudo de l’utilisateur “test” :
Ces commandes afficheront les autorisations sudo correspondantes pour l’utilisateur ou le groupe spécifié. Assurez-vous de disposer des droits d’administration pour exécuter ces commandes.
Audit
La journalisation des activités de sudo est une étape essentielle pour maintenir la sécurité et la transparence de votre système. L’audit de l’utilisation de sudo permet de savoir qui a exécuté des commandes avec des privilèges élevés, quelles commandes ont été exécutées et quand elles l’ont été. Cela facilite la détection d’éventuelles activités suspectes et la conformité aux politiques de sécurité.
Configuration de l’Audit
Pour activer l’audit des commandes sudo, vous devez éditer le fichier de
configuration sudoers avec visudo
et ajouter les options de journalisation
appropriées. Voici un exemple de configuration pour activer l’audit des entrées
et des sorties :
log_input
: Cette option enregistre l’entrée de chaque commande exécutée avec sudo, ce qui inclut la commande elle-même et ses arguments.log_output
: Cette option enregistre la sortie de chaque commande exécutée avec sudo, ce qui inclut le résultat de la commande.
Consultation des Journaux
Une fois l’audit activé, les informations de journalisation sont stockées dans
les fichiers de logs système, généralement dans /var/log/auth.log
(ou
/var/log/secure
sur certaines distributions). Vous pouvez utiliser des outils
de visualisation de logs comme grep
ou des outils de gestion de logs plus
avancés pour analyser ces fichiers.
Exemple de commande pour consulter les logs de sudo :
Interprétation des Logs
Les logs de sudo enregistrent des informations précieuses telles que l’utilisateur qui a utilisé sudo, la commande exécutée, la date et l’heure de l’exécution. Il est important de surveiller régulièrement ces logs pour détecter toute activité anormale ou non autorisée.
Voici un exemple d’entrée de log :
johndoe
: L’utilisateur qui a utilisé sudo.PWD
: Le répertoire de travail de l’utilisateur.USER=root
: L’utilisateur en tant que lequel la commande a été exécutée.COMMAND
: La commande spécifique qui a été exécutée.
Importance de l’Audit
L’audit des activités de sudo est essentiel pour plusieurs raisons :
- Sécurité : Il permet de détecter les tentatives d’utilisation abusive de privilèges et les accès non autorisés.
- Conformité : Dans de nombreuses organisations, l’audit est requis pour se conformer aux réglementations de sécurité et de confidentialité des données.
- Résolution de Problèmes : En cas de problème, les logs de sudo peuvent aider à comprendre ce qui s’est passé et à résoudre les problèmes.
L’audit est une composante clé de la gestion sécurisée de sudo et il ne doit pas être négligé.
Bonnes Pratiques
L’utilisation de sudo, un outil puissant dans les systèmes d’exploitation basés sur Unix, permet aux utilisateurs d’exécuter des commandes avec les privilèges du superutilisateur ou d’un autre utilisateur. Bien que sudo soit essentiel pour la gestion des systèmes, une mauvaise utilisation peut entraîner des failles de sécurité majeures. Cela est particulièrement critique en lien avec des outils, qui peuvent être utilisés pour abuser des binaires autorisés par sudo pour exécuter des commandes en tant que superutilisateur.
GTFOBins ↗ est une base de données de méthodes pour exploiter les binaires Unix afin de contourner les restrictions de sécurité locales. Il répertorie des binaires qui peuvent être utilisés pour contourner les restrictions de sudo. Il est important de noter qu’il ne s’agit pas d’une liste d’exploits et que les programmes répertoriés ici ne sont pas vulnérables en soi. Il s’agit plutôt un recueil sur la façon de vivre de la terre lorsque vous ne disposez que de certains binaires.
Conclusion
Ce guide sur sudo nous a permis de plonger dans l’univers complexe de la gestion des privilèges sur les systèmes Unix et Linux. En comprenant ces concepts fondamentaux et en explorant les détails de la configuration de sudo, vous avez acquis une base solide pour gérer efficacement les privilèges sur les systèmes Unix et Linux. Continuez à pratiquer et à approfondir vos connaissances pour devenir un expert de sudo et garantir la sécurité de vos systèmes.