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