Permissions Linux Pour les Nuls

Linux
950 mots

Laïus

Bonjour ici on va expliquer brièvement comment fonctionne les permissions sur le système de fichiers de Linux.

Définir les Droits

Les permissions servent à attribuer différents droits à différentes personnes ou groupes de personnes pour limiter les accès, c'est une question de sécurité et ça à l'air hyper compliqué quand on voit comment c'est présenté mais en fait c'est facile.

Basiquement il existe 4 droits

  • r ➡ read, permet d'attribuer les droits en lecture
  • w ➡ write, permet d'attribuer les droits en écriture
  • x ➡ execute, permet d'attribuer les droits en exécutions
  • s ➡ suid, c'est le droit qui permet d'exécuter un programme avec les droits de l'utilisateur qui l'a installé (Généralement à part si vous êtes un pentester vous le verrez jamais)

Ces 4 droits on peut les attribuer à 3 catégories différentes :

  1. Utilisateur
  2. Groupe
  3. Autres (Tout le monde en gros)

Maintenant que vous avez cette base. Observons comment voir les droits d'un fichier/dossier/lien symoblique avec ls -l. Vous allez voir que devant chaque élément listé vous aurez une ligne comme celle-ci : drwxr-xr-x, on va la décomposer.

  • Le premier bit sert a voir si l'objet listé est un dossier (d), un fichier (-) ou un lien symbolique (l)
  • Les 3 bits suivants représentent les droits attribués à l'utilisateur ici : rwx (read, write, execute)
  • Les 3 suivants sont ceux attribués au groupe
  • Puis les 3 derniers sont ceux attribués aux autres.

Maintenant que vous avez tout compris sur leur fonctionnement on va voir comment les attribuer, y'a plusieurs manières. Mais ca se fait toujours avec la commande chmod

En Lettres (Symbolique)

Pour attribuer les droits sous formes de lettres rien de plus compliqué ça fonctionne de la manière suivante :

chmod g+rw file.txt # On attribuer les droits en lecture et écriture au groupe (g)
chmod a-rwx # On enlève tous les droits de tout le monde (a signifie all)
chmod u+x # On ajoute les droits en exécution à l'utilisateur

En fait la syntaxe c'est juste chmod Objet+DroitsAttribués fichier.

En Chiffres (Octal)

Les droits peuvent aussi s'attribuer avec des chiffres ils en ont tous un différents et sont additionnable, je m'explique:

  • 1 : execute
  • 2 : write
  • 4 : read
  • 7 : execute+write+read
  • Etc...

En fait les droits sous forme de chiffres s'accordent toujours avec un chiffre dans les centaines car chacun des 3 chiffre de ce nombre représente respectivement l'utilisateur, le groupe, les inconnus. Voici quelques exemples :

chmod 111 jhonny.html # Tout le monde à les droits en exécutions
chmod 707 joe.html # L'utilisateur et les inconnus ont tous les droits
chmod 600 john.html # L'utilisateur peut lire et écrire mais pas exécuter
Etc... 

Droits par Défault

La commande umask permet de définir les permissions par défaut à la création d’un fichier ou dossier. Il faut savoir que par défault :

  • Les fichiers ont des droits 666 c'est à dire read+write pour tout le monde
  • Les dossiers ont des droits 777 c'est à dire read+write+execute pour tout le monde

Umask fonctionne simplement en venant se soustraire à ces permissions par défault par exemple admettons umask 022 :

  • Fichiers: 666 - 022 = 644 donc le groupe et les autres ne pourront, par défault, que lire.
  • Dossiers: 777 - 022 = 755 donc le groupe et les autres ne pourront que lire et exécuter le dossier.

Définir le propriétaire

Chaque fichier sous linux est gouverné par un groupe et un utilisateur (logiquement du même groupe). Le propriétaire d'un fichier peut être changé avec la commande chown. La syntaxe a vraiment rien de compliqué.

sudo chown groupeTechniciens:Jack

Ci-dessus notre cher Jack faisant parti du groupeTechniciens est le propriétaire du fichier.

Les ACLs

ACLs (Acces Control List) est un terme utilisé un peu partout pour définir des listes d'accès de contrôle sur une ou plusieurs choses. Ici c'est simple à faire on peut la créer avec setfacl qui en gros est une concaténation de chmod et chown en une seule commande.

Voici quelques exemples:

setfacl -m u:alice:rw fichier.txt # Donne à l'utilisateur alice lecture/écriture sur fichier.txt.
setfacl -m g:devs:r fichier.txt # Donne au groupe devs un accès en lecture.
setfacl -x u:alice fichier.txt # Supprime les droits ACL donnés à alice.
setfacl -b fichier.txt # Supprime toutes les ACLs du fichier.

On peut voir comment est fait l'accès et le contrôle sur un fichier avec getfacl voici ce que ça donne :

getfacl caca.html                
# file: caca.html
# owner: margoul1
# group: margoul1
user::rwx
user:godsEye:rw-
group::---
mask::rw-
other::rwx

Droits Spéciaux

Avec chattr on peut attribuer des droits spéciaux à un élément.

AttributSyntaxeDescription
i+iImmutable — Impossible de modifier, renommer, supprimer, lier… Même root ne peut rien faire sans retirer l'attribut.
a+aAppend only — On ne peut que rajouter à la fin du fichier (utilisé pour les logs).
eautomatiqueExtents — Utilisé par ext4 pour gérer l’espace de façon optimisée. Pas modifiable manuellement.
j+jData journaling — Toutes les écritures sont journalisées (utile si le système de fichiers supporte ça).
d+dNo dump — Le fichier sera ignoré par dump, une commande de sauvegarde.
s+sSecure deletion — Les blocs sont écrasés avec des zéros quand le fichier est supprimé. (Pas toujours respecté selon le FS.)
u+uUndelete — Le système garde les blocs même après suppression (pour récupération). Peu utilisé.
t+tNo tail-merging — Désactive le regroupement de petits fichiers dans les mêmes blocs (optimisation ext).
c+cCompressed — Le fichier est stocké en compressé (si supporté par le FS, ex : Btrfs, mais pas ext4).
A+ANo atime updates — N’enregistre plus l’accès au fichier (atime) → utile pour les performances.
T+TTop of directory hierarchy — Optimise le placement dans le cache pour ce dossier.
C+CNo copy-on-write (CoW) — Désactive le CoW (utile pour certaines bases de données, sur Btrfs).

Faut bien prendre en compte que tous les attributs ne fonctionnent pas avec tous les systèmes de fichiers. Mais pour un exemple chattr +i fichier.txt le rendra immuable et on pourra voir ce nouvel attribut spécial avec lsattr fichier.txt