Aller au contenu principal

sudo et privilèges


Table des matières

  1. Pourquoi sudo ?
  2. Configuration /etc/sudoers
  3. su vs sudo
  4. Bonnes pratiques de sécurité
  5. 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

AvantageExplication
AuditChaque commande sudo est loggée
GranularitéDroits spécifiques par utilisateur
SécuritéPas de session root permanente
Mot de passeUtilise le mot de passe de l'utilisateur
TimeoutRedemande 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

Aspectsusudo
Mot de passeDe l'utilisateur cibleDe l'utilisateur courant
AuditLimitéComplet (logs)
GranularitéTout ou rienCommandes spécifiques
SessionOuvre un shellCommande unique
SécuritéNécessite partage du mdp rootPas de partage

Quand utiliser quoi ?

SituationRecommandation
Commande rapide en rootsudo commande
Maintenance prolongéesudo -i puis exit
Devenir un utilisateur applicatifsudo -u postgres bash
Tester en tant qu'autre utilisateursu - 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

PratiqueExemple
Limiter les commandesalice ALL=(ALL) /usr/bin/systemctl restart nginx
Utiliser des groupes%webadmins ALL=(ALL) /usr/bin/nginx
Logger les actionsVérifier /var/log/auth.log
Timeout courtDefaults timestamp_timeout=5

À éviter

Mauvaise pratiqueRisque
NOPASSWD: ALLEscalade sans authentification
Se connecter en rootErreurs critiques possibles
Partager le mot de passe rootPas de traçabilité
sudo su - permanentEnvironnement 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 > su pour la sécurité et l'audit
  • Toujours utiliser visudo pour é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: ALL sauf cas particuliers

🔝 Retour à la table des matières


← Chapitre précédent | Chapitre suivant : Gestion des packages →