Aller au contenu principal

Chapitre 9.2 - Configuration sudo

Objectifs d'Apprentissage​

À la fin de ce chapitre, vous serez capable de:

  • Comprendre sudo et son rôle
  • Configurer sudo de manière sécurisée
  • Créer des alias et groupes
  • Limiter les commandes autorisées
  • Journaliser les actions sudo
  • Comprendre les bonnes pratiques

Qu'est-ce que sudo?​

sudo (Super User DO) permet d'exécuter des commandes avec les privilèges d'un autre utilisateur (généralement root).

Avantages:

  • Pas besoin de compte root
  • Journalisation des actions
  • Contrôle granulaire
  • Plus sécurisé que su

Fichier /etc/sudoers​

Éditer Sûrement​

# JAMAIS éditer directement!
# Utiliser visudo (vérifie syntaxe)
sudo visudo

# Ou éditer avec vérification
sudo visudo -f /etc/sudoers

visudo:

  • Vérifie la syntaxe avant sauvegarde
  • Évite les erreurs de configuration
  • Verrouille le fichier pendant édition

Format de Base​

# /etc/sudoers
# Format: utilisateur host=(runas) commandes

# Exemple simple
user1 ALL=(ALL:ALL) ALL

# Avec NOPASSWD
user1 ALL=(ALL:ALL) NOPASSWD: ALL

# Commandes spécifiques
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

Syntaxe Détaillée​

Utilisateurs​

# Utilisateur spécifique
user1 ALL=(ALL:ALL) ALL

# Groupe (préfixe %)
%developers ALL=(ALL:ALL) ALL

# Alias utilisateurs
User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(ALL:ALL) ALL

Hosts​

# Tous les hosts
user1 ALL=(ALL:ALL) ALL

# Host spécifique
user1 server1=(ALL:ALL) ALL

# Alias hosts
Host_Alias SERVERS = server1, server2, server3
user1 SERVERS=(ALL:ALL) ALL

Runas (Exécuter comme)​

# Comme root
user1 ALL=(ALL:ALL) ALL

# Comme utilisateur spécifique
user1 ALL=(www-data:ALL) ALL

# Comme n'importe quel utilisateur
user1 ALL=(ALL:ALL) ALL

# Alias runas
Runas_Alias WEBSERVERS = www-data, nginx
user1 ALL=(WEBSERVERS:ALL) ALL

Commandes​

# Toutes les commandes
user1 ALL=(ALL:ALL) ALL

# Commandes spécifiques
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

# Répertoire (toutes commandes dedans)
user1 ALL=(ALL:ALL) /usr/local/bin/

# Avec ou sans mot de passe
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl
user1 ALL=(ALL:ALL) PASSWD: /usr/bin/docker

Alias​

User_Alias​

# Grouper utilisateurs
User_Alias ADMINS = user1, user2
User_Alias DEVELOPERS = dev1, dev2, dev3
User_Alias DEVOPS = ops1, ops2

# Utilisation
ADMINS ALL=(ALL:ALL) ALL
DEVELOPERS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker

Host_Alias​

# Grouper hosts
Host_Alias SERVERS = server1, server2, 192.168.1.0/24
Host_Alias WORKSTATIONS = ws1, ws2

# Utilisation
user1 SERVERS=(ALL:ALL) ALL

Cmnd_Alias​

# Grouper commandes
Cmnd_Alias NETWORKING = /sbin/ifconfig, /sbin/route, /sbin/ip
Cmnd_Alias SERVICES = /usr/bin/systemctl start, /usr/bin/systemctl stop
Cmnd_Alias SOFTWARE = /usr/bin/apt, /usr/bin/yum

# Utilisation
user1 ALL=(ALL:ALL) NETWORKING, SERVICES

Runas_Alias​

# Grouper utilisateurs runas
Runas_Alias WEBSERVERS = www-data, nginx
Runas_Alias DATABASES = mysql, postgres

# Utilisation
user1 ALL=(WEBSERVERS:ALL) /usr/bin/systemctl

Exemples Pratiques​

Administrateur Complet​

# Accès complet
User_Alias ADMINS = admin1, admin2
ADMINS ALL=(ALL:ALL) ALL

Développeur Limité​

# Commandes développement seulement
User_Alias DEVS = dev1, dev2
DEVS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker, /usr/bin/npm

Webmaster​

# Gestion web seulement
user1 ALL=(www-data:ALL) /usr/bin/systemctl restart apache2, \
/usr/bin/systemctl reload nginx

Opérateur Système​

# Commandes système sans mot de passe
User_Alias OPS = ops1, ops2
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/journalctl
OPS ALL=(ALL:ALL) NOPASSWD: SYSTEM

Journalisation​

Configuration​

# /etc/sudoers
# Journaliser toutes les commandes
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output

# Ou avec syslog
Defaults syslog=auth

Voir les Logs​

# Logs système
sudo grep sudo /var/log/auth.log # Ubuntu/Debian
sudo grep sudo /var/log/secure # Red Hat/CentOS

# Fichier personnalisé
sudo tail -f /var/log/sudo.log

# Voir commandes d'un utilisateur
sudo grep "user1" /var/log/auth.log | grep sudo

Bonnes Pratiques​

Sécurité​

# 1. Limiter les commandes
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

# 2. Éviter NOPASSWD sauf nécessaire
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status

# 3. Utiliser des alias
User_Alias ADMINS = user1, user2
ADMINS ALL=(ALL:ALL) ALL

# 4. Journaliser
Defaults logfile=/var/log/sudo.log

# 5. Timeout approprié
Defaults timestamp_timeout=15 # 15 minutes

Maintenance​

# Vérifier configuration
sudo visudo -c

# Tester permissions
sudo -l # Voir permissions actuelles

# Voir historique
sudo grep sudo /var/log/auth.log

Fichiers Inclus​

/etc/sudoers.d/​

# Créer fichier séparé
sudo visudo -f /etc/sudoers.d/user1

# Contenu
user1 ALL=(ALL:ALL) /usr/bin/systemctl

# Avantages:
# - Organisation
# - Facile à gérer
# - Pas de conflit avec sudoers principal

Note: Fichiers dans /etc/sudoers.d/ sont inclus automatiquement.


Résumé​

Dans ce chapitre, vous avez appris:

sudo: Exécution commandes avec privilèges élevés
visudo: Éditeur sûr avec vérification syntaxe
Syntaxe: utilisateur host=(runas) commandes
Alias: User_Alias, Host_Alias, Cmnd_Alias, Runas_Alias
Journalisation: Logs des actions sudo
Pratique: Limiter commandes, utiliser alias, journaliser


Prochaines Étapes​

Chapitre 9.3: Pare-feu (iptables, firewalld, ufw)
Chapitre 9.4: Audit et Monitoring Sécurité


Chapitre créé le: Décembre 2024