sudo et privilèges
Table des matières
- Pourquoi sudo ?
- Configuration /etc/sudoers
- su vs sudo
- Bonnes pratiques de sécurité
- Exercices pratiques
1 - Pourquoi sudo ?
sudo = Super User DO
sudo permet d'exécuter une commande avec les privilèges d'un autre utilisateur (par défaut root).
Le problème sans sudo
La solution avec sudo
Avantages de sudo
| Avantage | Explication |
|---|---|
| Audit | Chaque commande sudo est loggée |
| Granularité | Droits spécifiques par utilisateur |
| Sécurité | Pas de session root permanente |
| Mot de passe | Utilise le mot de passe de l'utilisateur |
| Timeout | Redemande le mot de passe après 15 min |
Utilisation de base
# Exécuter une commande en tant que root
sudo apt update
# Exécuter en tant qu'un autre utilisateur
sudo -u postgres psql
# Ouvrir un shell root (déconseillé pour usage prolongé)
sudo -i
# ou
sudo su -
🔝 Retour à la table des matières
2 - Configuration /etc/sudoers
Structure du fichier
danger
Ne JAMAIS éditer /etc/sudoers directement ! Utilisez toujours visudo qui vérifie la syntaxe.
sudo visudo
Format des règles
utilisateur machine=(utilisateur:groupe) commandes
Exemples de configuration
# Permettre à john d'exécuter toutes les commandes
john ALL=(ALL:ALL) ALL
# Permettre sans mot de passe
john ALL=(ALL:ALL) NOPASSWD: ALL
# Permettre seulement certaines commandes
alice ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
# Permettre à un groupe (préfixe %)
%developers ALL=(ALL) /usr/bin/docker, /usr/bin/docker-compose
# Interdire certaines commandes
bob ALL=(ALL) ALL, !/bin/rm, !/bin/su
Fichiers sudoers.d
Plutôt que de modifier le fichier principal, créez des fichiers dans /etc/sudoers.d/ :
# Créer une règle personnalisée
sudo visudo -f /etc/sudoers.d/developers
# Contenu
%developers ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/systemctl restart nginx
Vérifier la configuration
# Vérifier les droits sudo d'un utilisateur
sudo -l
# ou pour un autre utilisateur
sudo -l -U alice
Alias dans sudoers
# Définir des alias
User_Alias ADMINS = john, alice, bob
Host_Alias SERVERS = server1, server2
Cmnd_Alias NETWORKING = /sbin/ifconfig, /sbin/route
# Utiliser les alias
ADMINS ALL = NETWORKING
🔝 Retour à la table des matières
3 - su vs sudo
su - Changer d'utilisateur
su = Substitute User
# Devenir root (demande le mot de passe ROOT)
su
# Devenir root avec environnement complet
su -
# Devenir un autre utilisateur
su alice
su - alice # Avec son environnement
Comparaison
| Aspect | su | sudo |
|---|---|---|
| Mot de passe | De l'utilisateur cible | De l'utilisateur courant |
| Audit | Limité | Complet (logs) |
| Granularité | Tout ou rien | Commandes spécifiques |
| Session | Ouvre un shell | Commande unique |
| Sécurité | Nécessite partage du mdp root | Pas de partage |
Quand utiliser quoi ?
| Situation | Recommandation |
|---|---|
| Commande rapide en root | sudo commande |
| Maintenance prolongée | sudo -i puis exit |
| Devenir un utilisateur applicatif | sudo -u postgres bash |
| Tester en tant qu'autre utilisateur | su - username |
sudo avec préservation d'environnement
# Préserver l'environnement (variables)
sudo -E commande
# Préserver le PATH
sudo env "PATH=$PATH" commande
# Éditer un fichier avec nano
sudo -e /etc/hosts
# ou
sudoedit /etc/hosts
🔝 Retour à la table des matières
4 - Bonnes pratiques de sécurité
Principe du moindre privilège
À faire
| Pratique | Exemple |
|---|---|
| Limiter les commandes | alice ALL=(ALL) /usr/bin/systemctl restart nginx |
| Utiliser des groupes | %webadmins ALL=(ALL) /usr/bin/nginx |
| Logger les actions | Vérifier /var/log/auth.log |
| Timeout court | Defaults timestamp_timeout=5 |
À éviter
| Mauvaise pratique | Risque |
|---|---|
NOPASSWD: ALL | Escalade sans authentification |
| Se connecter en root | Erreurs critiques possibles |
| Partager le mot de passe root | Pas de traçabilité |
sudo su - permanent | Environnement root risqué |
Configuration sécurisée
# Dans /etc/sudoers (via visudo)
# Timeout de 5 minutes
Defaults timestamp_timeout=5
# Toujours demander le mot de passe
Defaults !authenticate
# Protéger le PATH
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Logger les entrées/sorties (avancé)
Defaults log_input, log_output
Defaults!/usr/bin/sudoreplay !log_input, !log_output
Audit des actions sudo
# Voir les logs sudo
sudo grep sudo /var/log/auth.log
# Ou avec journalctl
sudo journalctl -u sudo
# Format typique d'un log
# Jan 15 10:30:00 server sudo: john : TTY=pts/0 ; PWD=/home/john ; USER=root ; COMMAND=/usr/bin/apt update
attention
Chaque commande sudo est tracée ! En entreprise, les administrateurs peuvent voir qui a fait quoi.
🔝 Retour à la table des matières
5 - Exercices pratiques
Exercice 1 : Utilisation de base
# 1. Vérifiez vos droits sudo
sudo -l
# 2. Exécutez une commande simple
sudo whoami
# Résultat attendu : root
# 3. Mettez à jour le système
sudo apt update
Exercice 2 : Configuration sudoers
# 1. Créez un utilisateur de test
sudo useradd -m testadmin
# 2. Définissez son mot de passe
sudo passwd testadmin
# 3. Créez une règle sudo personnalisée
sudo visudo -f /etc/sudoers.d/testadmin
# Ajoutez cette ligne :
# testadmin ALL=(ALL) /usr/bin/apt update, /usr/bin/apt upgrade
# 4. Testez (dans un autre terminal ou avec su)
su - testadmin
sudo apt update # Doit fonctionner
sudo apt install vim # Doit échouer
# 5. Nettoyez
exit
sudo userdel -r testadmin
sudo rm /etc/sudoers.d/testadmin
Exercice 3 : Audit
# 1. Exécutez quelques commandes sudo
sudo ls /root
sudo cat /etc/shadow
# 2. Vérifiez les logs
sudo grep "$(whoami)" /var/log/auth.log | tail -5
Quiz
Q1. Quelle commande édite sudoers de manière sécurisée ?
Réponse
visudo ou sudo visudo
Q2. Où sont stockés les logs sudo ?
Réponse
/var/log/auth.log ou via journalctl
Q3. Comment permettre à un groupe de faire sudo sans mot de passe ?
Réponse
%groupe ALL=(ALL) NOPASSWD: ALL
🔝 Retour à la table des matières
Points clés à retenir
sudo>supour la sécurité et l'audit- Toujours utiliser
visudopour éditer sudoers - Appliquer le principe du moindre privilège
- Les actions sudo sont loggées dans
/var/log/auth.log - Utiliser
/etc/sudoers.d/pour les configurations personnalisées - Éviter
NOPASSWD: ALLsauf cas particuliers
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Gestion des packages →