---
title: "Permissions fichiers Linux"
domain: sysadmin
subdomain: linux
type: snippet
tags: [linux, permissions, chmod, chown, acl, suid, sgid]
difficulty: beginner
status: stable
updated: "2025-05-10"
---
## Lecture des permissions

```bash
ls -la
# -rwxr-xr-- 1 alice devs 4096 May 10 12:00 script.sh
#  ||||||||| 
#  |||||||||└─ autres : r-- (4)
#  |||||└────── groupe : r-x (5)
#  ||└────────── user  : rwx (7)
#  |└──────────── type : - fichier, d dossier, l symlink
```

## chmod — Changer les permissions

```bash
# Notation numérique (octal)
chmod 755 {{FILE}}   # rwxr-xr-x
chmod 644 {{FILE}}   # rw-r--r--
chmod 600 {{FILE}}   # rw-------  (ex: clé privée SSH)
chmod 700 {{DIR}}    # rwx------  (répertoire privé)

# Notation symbolique
chmod u+x {{FILE}}          # ajouter exec à owner
chmod g-w {{FILE}}          # retirer write au groupe
chmod o=r {{FILE}}          # others = read seulement
chmod a+r {{FILE}}          # all (u+g+o) → read
chmod ug=rwx,o= {{FILE}}    # owner+group=full, others=rien

# Récursif
chmod -R 755 {{DIR}}
chmod -R u+X {{DIR}}   # +X = exec seulement si déjà exec ou dossier

# Référence : copier les droits d'un autre fichier
chmod --reference=fichier_source {{FILE}}
```

## chown — Changer le propriétaire

```bash
# Changer owner
chown {{USER}} {{FILE}}

# Changer owner et groupe
chown {{USER}}:{{GROUP}} {{FILE}}

# Changer seulement le groupe
chown :{{GROUP}} {{FILE}}
# ou
chgrp {{GROUP}} {{FILE}}

# Récursif
chown -R {{USER}}:{{GROUP}} {{DIR}}

# Ne pas suivre les symlinks
chown -h {{USER}} symlink
```

## Bits spéciaux : SUID / SGID / Sticky

```bash
# SUID (4xxx) — s'exécute avec les droits du owner
chmod u+s {{FILE}}
chmod 4755 {{FILE}}   # rwsr-xr-x
# Ex: /usr/bin/passwd (SUID root pour changer le mot de passe)

# SGID (2xxx) — s'exécute avec les droits du groupe
chmod g+s {{DIR}}
chmod 2755 {{DIR}}    # drwxr-sr-x
# Sur un répertoire : les nouveaux fichiers héritent du groupe

# Sticky bit (1xxx) — seul le owner peut supprimer dans ce dossier
chmod +t {{DIR}}
chmod 1777 {{DIR}}    # drwxrwxrwt
# Ex: /tmp — tout le monde peut écrire mais pas supprimer les fichiers des autres

# Chercher les fichiers SUID/SGID (audit sécurité)
find / -perm -4000 -type f 2>/dev/null   # SUID
find / -perm -2000 -type f 2>/dev/null   # SGID
find / -perm -1000 -type d 2>/dev/null   # Sticky
```

## ACL — Droits fins par utilisateur

```bash
# Voir les ACL
getfacl {{FILE}}

# Ajouter des droits à un utilisateur spécifique
setfacl -m u:{{USER}}:rwx {{FILE}}

# Ajouter des droits à un groupe spécifique
setfacl -m g:{{GROUP}}:r {{FILE}}

# ACL par défaut sur un répertoire (héritées par les nouveaux fichiers)
setfacl -d -m u:{{USER}}:rwx {{DIR}}

# Supprimer une ACL spécifique
setfacl -x u:{{USER}} {{FILE}}

# Supprimer toutes les ACL
setfacl -b {{FILE}}

# Copier les ACL d'un fichier vers un autre
getfacl fichier_source | setfacl --set-file=- fichier_dest
```

## umask — Permissions par défaut

```bash
# Voir le umask actuel
umask

# Calculer : 0666 - umask = droits fichier, 0777 - umask = droits dossier
# umask 022 → fichiers: 644 (rw-r--r--), dossiers: 755 (rwxr-xr-x)
# umask 027 → fichiers: 640 (rw-r-----), dossiers: 750 (rwxr-x---)

# Changer temporairement
umask 027

# Changer de façon permanente (dans ~/.bashrc ou /etc/profile)
echo "umask 027" >> /etc/profile
```

## Attributs étendus (chattr / lsattr)

```bash
# Rendre un fichier immuable (même root ne peut pas le modifier)
chattr +i {{FILE}}

# Retirer l'immuabilité
chattr -i {{FILE}}

# Append-only (log files)
chattr +a {{FILE}}

# Voir les attributs
lsattr {{FILE}}
lsattr -R {{DIR}}
```

<Tip>
Pour les audits sécurité : `find / -perm -4000 2>/dev/null` liste tous les binaires SUID — comparer avec une baseline connue. Un SUID sur un éditeur ou interpréteur (vim, python, bash) permet une escalade de privilèges triviale.
</Tip>
