Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Une petite erreur qui donne root (moindre privilège)

Après cette leçon: Je peux expliquer comment une erreur permet de devenir root et comment la corriger.

Leçon de 55 min7 commandesLab d’élévation de privilèges Linux : un binaire setuid, une règle sudo, une tâche cron

Un prestataire avec la clé de tout

Pour qu’un prestataire corrige un fichier de configuration, un administrateur lui donne sudo pour un seul éditeur, sans mot de passe.

Un an plus tard, un audit révèle que ce prestataire pouvait devenir root à tout moment. L’éditeur était la porte.

À la fin de cette leçon

Remarque

Je peux expliquer comment une erreur permet de devenir root et comment la corriger.

Mots-clés

MotCe que ça veut direExemple
Privilègele pouvoir d’un compte sur la machine
Moindre privilègedonner à chaque compte seulement le pouvoir que son travail demande
Setuidun réglage de fichier : il tourne avec son propriétaire, quel que soit celui qui le lance-rwsr-xr-x
Règle sudoune ligne qui dit qui peut lancer quoi en root
Auditvérifier un système avec une liste d’erreurs connues

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

La règle d’or

Attention

Regardez seulement la machine de ce labo. Elle est à vous seul et ne peut atteindre personne d’autre. Faire cela sur une machine qui n’est pas la vôtre, sans permission, est puni par la loi.

Setuid lance un fichier avec son propriétaire

La plupart des programmes tournent avec les droits de celui qui les lance. Un programme setuid tourne avec les droits de son propriétaire.

Certains en ont besoin. passwd doit modifier un fichier protégé. Mais un programme setuid appartenant à root, qui n’aurait jamais dû l’être, est un chemin vers root.

Trouver les programmes setuid

Commande
find /usr/local/bin /usr/bin -perm -4000 -type f

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Regarder le premier

Commande
ls -l /usr/local/bin/sysfind

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : lire le s

ModeSens
-rwxr-xr-xUn programme ordinaire
-rwsr-xr-xSetuid : il tourne avec son propriétaire
-rwxr-sr-xSetgid : il tourne avec son groupe

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une règle sudo peut être trop large

Une règle sudo nomme un utilisateur, ce qu’il peut devenir et quels programmes il peut lancer. NOPASSWD veut dire qu’aucun mot de passe n’est demandé.

Nommer un seul programme semble sûr. Ça ne l’est pas si ce programme peut en lancer un autre. Un éditeur, un afficheur de pages ou find peuvent ouvrir un shell. Un shell ouvert dans sudo est un shell root.

Que peut lancer le compte intern ?

Commande
sudo -l -U intern

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

La règle elle-même

Commande
sudo cat /etc/sudoers.d/90-lab-intern

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : règles étroites et larges

RègleRisqueMieux
ops ALL=(ALL) NOPASSWD: ALLRoot pour tout, sans mot de passeNommer les quelques commandes utiles
presta ALL=(root) NOPASSWD: /usr/bin/vimvim peut ouvrir un shellLaisser sudoedit modifier un seul fichier
web ALL=(root) /usr/bin/systemctl restart boutiqueÉtroite : une seule commande exacteLa garder telle quelle

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Erreur fréquente

Attention

Beaucoup de gens pensent qu’une règle sudo pour un seul programme est étroite. Elle ne l’est que si ce programme ne peut pas en lancer d’autres. Avant d’en autoriser un, demandez-vous : peut-il ouvrir un shell, ou un autre fichier en root ?

Root fait confiance au script qu’il lance

Le cron de root lance un script chaque minute. Si n’importe qui peut modifier ce script, n’importe qui peut faire exécuter ses commandes par root.

La règle est simple. Un fichier que root lance appartient à root, et personne d’autre ne peut y écrire. Le dossier qui le contient compte aussi.

Trouver les fichiers que tous peuvent modifier

Commande
find /opt -perm -o+w -type f

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le mode, le propriétaire et le nom

Commande
stat -c "%a %U %n" /opt/maintenance/cleanup.sh

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Root le lance-t-il vraiment ?

Commande
sudo crontab -l -u root

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les trois erreurs et leur correction

ErreurComment la repérerComment la fermer
Une copie setuid d’un outilfind avec -perm -4000chmod u-s, ou supprimer la copie
Une règle sudo trop largesudo -l et /etc/sudoers.dNommer des commandes exactes, ou sudoedit
Un script de root que tous peuvent modifierfind avec -perm -o+wchmod 755 et propriétaire root

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Faites le labo, puis fermez la faille

Astuce

Le labo vous demande d’utiliser une de ces erreurs sur votre propre machine et d’écrire ce que vous avez fait. Faites-le d’abord. Ensuite, notez dans votre compte rendu comment vous fermeriez la faille, avec le tableau ci-dessus.

Pour aller plus loin

Lancez find /opt /usr/local/bin /etc/cron.d -type f -perm /022. Le /022 veut dire « le groupe ou les autres peuvent écrire ».

Pour chaque ligne affichée, notez trois choses dans votre compte rendu. Qui peut modifier le fichier ? Qui le lance ? Quelle commande unique ferme la faille ?

À propos de ce labo et de sa source: Lab d’élévation de privilèges Linux : un binaire setuid, une règle sudo, une tâche cron

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.