← Accueil

PCTAMALOU

Semaine 2 : Les Clés de la Cité – Permissions, Utilisateurs et Privilèges sous Linux

Par Platon-Y – pctamalou.fr & e-of-h.fr

🎯 Objectif de la semaine

Maîtriser les mécanismes de permissions Linux pour comprendre comment une simple mauvaise configuration peut devenir une porte d'entrée majeure pour un attaquant – et apprendre à la verrouiller.

Pourquoi c'est fondamental : 40% des intrusions commencent par une faille de permission. Savoir lire et configurer les droits d'accès, c'est savoir où sont les portes de la cité numérique.

flowchart TD A[📄 Fichier/Dossier] --> B{Permisssions} B --> C[👤 User
Propriétaire] B --> D[👥 Group
Groupe assigné] B --> E[🌍 Others
Tous les autres] C --> F[RWX
Lecture/Écriture/Exécution] D --> G[RWX] E --> H[RWX] F --> I{Notation} G --> I H --> I I --> J[🔢 Octale
ex: 755] I --> K[🔣 Symbolique
ex: u+rwx] J --> L[⚡ chmod 755] K --> M[⚡ chmod u+rwx,go+rx] style A fill:#0a0e17,stroke:#00d4ff,stroke-width:2px style B fill:#11151f,stroke:#9d4edd,stroke-width:2px style L fill:#00f5a0,stroke:#000,stroke-width:2px style M fill:#00f5a0,stroke:#000,stroke-width:2px

📚 Sujet – Théorie (1 heure)

Le modèle de sécurité Linux : une cité fortifiée

Imaginez une cité médiévale avec trois niveaux d'accès :

🏰 Les trois portes d'accès :

  • Porte du Seigneur (User) : Vous, propriétaire du fichier. Accès complet.
  • Porte des Gardes (Group) : Votre équipe. Accès contrôlé.
  • Porte du Peuple (Others) : Tout le monde. Accès minimal ou nul.

Déchiffrer la sortie de ls -l : La cryptographie des permissions

-rwxr-xr-- 1 kali kali 4096 Dec 10 14:30 script.sh
 ↑↑↑↑↑↑↑↑↑
 |||||||||
 ||||||||└─ Others : r-- (lecture seule)
 |||||||└── Group  : r-x (lecture + exécution)
 ||||||└─── User   : rwx (tout)
 |||||└──── Type   : - = fichier, d = dossier, l = lien

Chaque caractère est une information de sécurité. Apprenez à lire cette ligne comme un analyste lit un log.

La notation octale : le langage mathématique des permissions

flowchart LR A[4 : Lecture
r--] --> D[7 : rwx] B[2 : Écriture
-w-] --> D C[1 : Exécution
--x] --> D E[User: 7] --> F[755] G[Group: 5] --> F H[Others: 5] --> F style D fill:#11151f,stroke:#00d4ff,stroke-width:2px style F fill:#00f5a0,stroke:#000,stroke-width:2px
Valeur Droits Notation symbolique Cas d'usage Danger potentiel
777 rwxrwxrwx Tout pour tous Partage temporaire en réseau interne 🔴 Élevé - Porte grande ouverte
755 rwxr-xr-x Propriétaire : tout, autres : lecture+exécution Scripts exécutables, programmes 🟡 Moyen - Vérifier le contenu
644 rw-r--r-- Propriétaire : rw, autres : lecture Fichiers de configuration, documents 🟢 Faible - Standard sécurisé
600 rw------- Propriétaire uniquement Fichiers sensibles (mots de passe, clés) 🟢 Très sécurisé

sudo : l'épée à double tranchant

⚠️ sudo ≠ root

sudo est une délégation temporaire de privilèges. root est l'utilisateur tout-puissant.

Une mauvaise configuration de /etc/sudoers peut permettre à un attaquant de devenir root.

Exemple dangereux : apprenti ALL=(ALL) NOPASSWD: ALL → L'utilisateur "apprenti" peut faire TOUT sans mot de passe.

Le principe du moindre privilège (Least Privilege)

Donner exactement les permissions nécessaires, uniquement à ceux qui en ont besoin, seulement pour la durée nécessaire.

💡 Philosophie du Gardien :

"Si tu ne sais pas pourquoi quelqu'un a un accès, il ne devrait pas l'avoir."

En cybersécurité, chaque permission est une responsabilité. Chaque droit accordé est une porte qu'il faudra surveiller.

🔬 Mission pratique – Laboratoire (2 heures)

Scénario : Audit de sécurité d'un serveur compromis

Imaginez que vous êtes appelé pour analyser un serveur potentiellement compromis. Votre mission : identifier les mauvaises configurations de permissions.

📝 Avant de commencer : Créez un fichier audit_s02.txt pour noter vos observations. Un bon pentester documente tout.

Étapes détaillées avec analyse de sécurité

  1. Analyse de l'environnement actuel
    Commençons par comprendre notre point de départ :
    # Vérification de l'utilisateur actuel et de ses groupes
    whoami                        # Qui suis-je ?
    id                            # Identifiant et groupes
    groups                        # Groupes de l'utilisateur
    
    # Analyse des permissions du dossier home
    ls -la ~/                     # Fichiers cachés inclus
    stat ~/.bashrc                # Informations détaillées sur un fichier
    getfacl ~/                    # ACLs (Access Control Lists) avancées
  2. Création d'un environnement de test compromis (simulé)
    Nous allons créer des scénarios de mauvaise configuration courants :
    cd ~/mon_lab
    mkdir -p serveur_compromis/{config,logs,scripts,backups}
    
    # Scénario 1 : Fichier de configuration world-writable
    echo "DB_PASSWORD=SuperSecret123" > serveur_compromis/config/database.conf
    chmod 666 serveur_compromis/config/database.conf  # Très dangereux !
    
    # Scénario 2 : Script avec SUID mal configuré (simulé)
    echo '#!/bin/bash
    echo "Script sensible"' > serveur_compromis/scripts/backup.sh
    chmod 4755 serveur_compromis/scripts/backup.sh  # SUID activé
    
    # Scénario 3 : Dossier de logs accessible à tous
    chmod 777 serveur_compromis/logs/
  3. Audit manuel des vulnérabilités
    Utilisez ces commandes pour identifier les problèmes :
    # Trouver tous les fichiers world-writable
    find serveur_compromis -perm -o=w -type f
    
    # Trouver tous les fichiers avec SUID/SGID
    find serveur_compromis -type f \( -perm -4000 -o -perm -2000 \)
    
    # Vérifier les dossiers avec permissions trop ouvertes
    find serveur_compromis -type d -perm 777
    
    # Analyser la sortie avec plus de détails
    ls -la serveur_compromis/config/database.conf | awk '{print $1, $9}'
  4. Création et test d'un utilisateur attaquant (simulation)
    Créons un utilisateur pour simuler un attaquant interne :
    # Création de l'utilisateur 'shadow' (simulation d'attaquant)
    sudo adduser --disabled-password --gecos "" shadow
    echo "shadow:shadow123" | sudo chpasswd
    
    # Test d'accès avec l'utilisateur shadow
    sudo -u shadow bash -c "
    echo '=== Test d accès utilisateur shadow ==='
    whoami
    cd /home/kali/mon_lab/serveur_compromis
    echo 'Tentative de lecture database.conf:'
    cat config/database.conf 2>&1 || echo 'Échec - bon!'
    echo 'Tentative d écriture database.conf:'
    echo 'INJECTION' >> config/database.conf 2>&1 && echo 'Réussite - DANGER!' || echo 'Échec - bon!'
    echo '=== Fin test ==='
    "
    
    # Nettoyage immédiat
    sudo deluser --remove-home shadow
  5. Analyse de /etc/sudoers et des privilèges
    Comprendre la configuration des privilèges :
    # Lecture sécurisée du fichier sudoers
    sudo visudo -c                     # Vérification de la syntaxe
    sudo cat /etc/sudoers | grep -v '^#' | grep -v '^$'
    
    # Vérification des membres du groupe sudo
    getent group sudo
    
    # Test des privilèges de l'utilisateur courant
    sudo -l                           # Quelles commandes puis-je exécuter avec sudo ?
  6. Correction sécurisée des vulnérabilités
    Appliquez les corrections de sécurité :
    # Correction 1 : Fichier de configuration sensible
    chmod 600 serveur_compromis/config/database.conf
    chown kali:kali serveur_compromis/config/database.conf
    
    # Correction 2 : Retirer SUID inutile
    chmod 755 serveur_compromis/scripts/backup.sh
    
    # Correction 3 : Permissions de dossier restrictives
    chmod 750 serveur_compromis/logs/
    chmod 750 serveur_compromis/
    
    # Vérification des corrections
    find serveur_compromis -type f -perm /o=w
    find serveur_compromis -type d -perm /o=w
  7. Utilisation de chmod en notation symbolique
    Maîtrisez les deux notations :
    # Notation symbolique (plus lisible pour des ajustements)
    chmod u+rwx,g+rx,o-rwx serveur_compromis/scripts/  # Équivalent à 750
    chmod o-r serveur_compromis/config/database.conf   # Retirer lecture aux autres
    chmod a+x serveur_compromis/scripts/backup.sh      # Ajouter exécution à tous (a = all)
    
    # Comparaison avec notation octale
    chmod 755 serveur_compromis/scripts/backup.sh
    stat -c %A serveur_compromis/scripts/backup.sh     # Affiche en notation symbolique

🎯 Défi d'audit avancé (optionnel)

Créez un script d'audit automatique qui :

#!/bin/bash
echo "=== AUDIT DE SÉCURITÉ PERMISSIONS ==="
echo "1. Fichiers world-writable:"
find /home/kali/mon_lab -perm -o=w -type f 2>/dev/null
echo ""
echo "2. Fichiers avec SUID/SGID:"
find /home/kali/mon_lab -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null
echo ""
echo "3. Dossiers avec permissions 777:"
find /home/kali/mon_lab -type d -perm 777 2>/dev/null

Pour exécuter : chmod +x audit.sh && ./audit.sh > rapport_audit.txt

📋 Objectif de la semaine – Checklist de validation

✅ Compétences techniques acquises

  • Lire et interpréter ls -l sans hésitation
  • Utiliser chmod en notation octale ET symbolique
  • Créer/supprimer des utilisateurs avec adduser/deluser
  • Comprendre la différence entre sudo et su
  • Identifier les permissions dangereuses (777, SUID inutile)
  • Utiliser find pour rechercher des permissions vulnérables

🧠 Changement mental accompli

  • Voir les permissions comme des portes d'accès, pas comme des nombres abstraits
  • Comprendre que "world-writable" = "porte grande ouverte aux attaquants"
  • Appliquer systématiquement le principe du moindre privilège
  • Penser comme un attaquant : "Où sont les permissions trop ouvertes ?"

🔐 Bonne pratique à adopter dès maintenant :

Avant d'exécuter chmod, demandez-vous : "Qui a vraiment besoin de ce fichier ? Quel est le minimum de droits nécessaire ?"

📚 Ressources gratuites recommandées

Pour approfondir :

⚠️ Pièges courants à éviter

  • chmod -R 777 / → Détruit la sécurité de tout le système (NE JAMAIS FAIRE)
  • SUID sur des scripts bash → Faille de sécurité majeure
  • sudo NOPASSWD sans nécessité absolue → Escalade de privilèges facilitée
  • Oublier que les permissions s'héritent (umask)

🔮 Frère d'armes,

Tu viens d'acquérir la deuxième clé de la cité numérique.

Les permissions Linux ne sont pas des nombres abstraits. Ce sont les serrures des portes, les clés des coffres, les gardes des remparts.

Cette semaine, tu as appris à voir ce que la plupart ne voient pas :

  • Un 777 n'est pas un simple paramètre, c'est une porte grande ouverte
  • Un sudo mal configuré n'est pas une commodité, c'est une épée laissée à l'entrée
  • Un fichier world-readable contenant un mot de passe n'est pas une erreur, c'est une invitation

Tu commences maintenant à penser en deux dimensions :

Dimension 1 : "Comment configurer correctement ?"
Dimension 2 : "Comment un attaquant exploiterait-il une mauvaise configuration ?"

Cette double perspective est l'essence même du Gardien numérique.

Dans la semaine 3, nous quitterons la surface pour explorer les souterrains du système. Nous apprendrons à voir ce qui se passe en dessous, à suivre les processus comme un chasseur suit des traces.

Prends le temps de pratiquer. Crée des scénarios, trouve les vulnérabilités, corrige-les. Chaque permission que tu comprends est une porte que tu sauras verrouiller.

La cité se fortifie, clé après clé.

— Platon-Y