# Référence rapide chmod

*Permissions de fichiers, modes numérique et symbolique, bits spéciaux, umask*

> Source: chmod(1) Manuel (page de manuel chmod) · MIT

## Mode numérique

### Chiffres octaux des permissions

| Command | Description |
|---------|-------------|
| `4` | Lecture (r) |
| `2` | Écriture (w) |
| `1` | Exécution (x) |
| `0` | Aucune permission |

### Format à trois chiffres

```
chmod 755 file    # rwxr-xr-x
chmod 644 file    # rw-r--r--
chmod 700 file    # rwx------
chmod 600 file    # rw-------
```

### Calcul des chiffres

| Command | Description |
|---------|-------------|
| `7 (4+2+1)` | rwx — lecture, écriture, exécution |
| `6 (4+2)` | rw- — lecture, écriture |
| `5 (4+1)` | r-x — lecture, exécution |
| `4` | r-- — lecture seule |
| `3 (2+1)` | -wx — écriture, exécution |
| `2` | -w- — écriture seule |
| `1` | --x — exécution seule |
| `0` | --- — aucune permission |

## Mode symbolique

### Syntaxe : [ugoa][+-=][rwxXst]

| Command | Description |
|---------|-------------|
| `u` | Utilisateur (propriétaire) |
| `g` | Groupe |
| `o` | Autres |
| `a` | Tous (u + g + o) |
| `+` | Ajouter une permission |
| `-` | Retirer une permission |
| `=` | Définir une permission exacte |

### Exemples symboliques

```
chmod u+x file         # propriétaire : ajouter exécution
chmod g-w file         # groupe : retirer écriture
chmod o=r file         # autres : lecture seule
chmod a+r file         # tous : ajouter lecture
chmod u+x,g-w,o= file # opérations combinées
```

## Permissions courantes

### Présélections de permissions

| Command | Description |
|---------|-------------|
| `644  rw-r--r--` | Fichier normal — propriétaire rw, autres lecture |
| `755  rwxr-xr-x` | Script/binaire — propriétaire rwx, autres rx |
| `600  rw-------` | Fichier privé — propriétaire seulement |
| `400  r--------` | Lecture seule privée (clés SSH) |
| `666  rw-rw-rw-` | Fichier accessible à tous en écriture (éviter) |
| `777  rwxrwxrwx` | Accès total pour tous (éviter) |

### Référence rapide

```
chmod 644 *.html       # fichiers web : propriétaire rw, monde r
chmod 755 *.sh         # scripts : propriétaire rwx, monde rx
chmod 600 ~/.ssh/id_*  # clés SSH : propriétaire seulement
chmod 400 secret.pem   # certificat : lecture seule
```

## Permissions de répertoires

### Signification des permissions pour les répertoires

| Command | Description |
|---------|-------------|
| `r (4)` | Lister le contenu du répertoire (`ls`) |
| `w (2)` | Créer/supprimer des fichiers dans le répertoire |
| `x (1)` | Accéder (cd dans) au répertoire |
| `rx (5)` | Lister + accéder (typique pour lecture) |
| `rwx (7)` | Contrôle total |

### Permissions courantes pour répertoires

```
chmod 755 dir/     # standard : propriétaire rwx, autres rx
chmod 700 dir/     # privé : propriétaire seulement
chmod 750 dir/     # accès groupe : propriétaire rwx, groupe rx
chmod 1777 /tmp    # sticky bit : seul le propriétaire peut supprimer
```

## Bits spéciaux

### Setuid, Setgid, Sticky

| Command | Description |
|---------|-------------|
| `Setuid (4xxx)` | Exécuter en tant que propriétaire du fichier (ex. `passwd`) |
| `Setgid (2xxx)` | Exécuter avec le groupe du fichier / hériter du groupe du répertoire |
| `Sticky (1xxx)` | Seul le propriétaire peut supprimer des fichiers (ex. `/tmp`) |

### Définir les bits spéciaux

```
chmod 4755 program     # setuid : -rwsr-xr-x
chmod 2755 dir/        # setgid : drwxr-sr-x
chmod 1755 dir/        # sticky : drwxr-xr-t
chmod u+s program      # setuid symbolique
chmod g+s dir/         # setgid symbolique
chmod +t dir/          # sticky bit symbolique
```

## Récursif

### Changements de permissions récursifs

```
chmod -R 755 dir/           # tout mettre à 755 récursivement
chmod -R u+rwX dir/         # propriétaire rw, +x sur les répertoires seulement
chmod -R go-w dir/          # retirer l'écriture pour groupe/autres
```

### Fichiers vs répertoires avec find

```
# mettre les répertoires à 755, les fichiers à 644
find /path -type d -exec chmod 755 {} +
find /path -type f -exec chmod 644 {} +
```

### Majuscule X — Exécution conditionnelle

| Command | Description |
|---------|-------------|
| `x (minuscule)` | Ajouter l'exécution à tous les fichiers et répertoires |
| `X (majuscule)` | Ajouter l'exécution seulement aux répertoires et fichiers déjà exécutables |

## umask

### Fonctionnement du umask

| Command | Description |
|---------|-------------|
| `umask` | Afficher le umask courant |
| `umask 022` | Fichiers : 644, Répertoires : 755 |
| `umask 077` | Fichiers : 600, Répertoires : 700 |
| `umask 002` | Fichiers : 664, Répertoires : 775 |

### Calcul du umask

```
# permission par défaut moins umask = effective
# Fichiers :  666 - 022 = 644 (rw-r--r--)
# Répertoires : 777 - 022 = 755 (rwxr-xr-x)
umask          # afficher le umask courant
umask 022      # valeur typique par défaut
umask -S       # afficher en notation symbolique
```

## Patterns courants

### Cas d'usage courants

| Command | Description |
|---------|-------------|
| `Racine web` | `chmod -R 755 /var/www/html` |
| `Fichier de config` | `chmod 600 app.conf` |
| `Répertoire SSH` | `chmod 700 ~/.ssh` |
| `authorized_keys SSH` | `chmod 600 ~/.ssh/authorized_keys` |
| `Répertoire partagé` | `chmod 2775 /shared` (setgid) |
| `Fichiers de log` | `chmod 640 /var/log/app.log` |
| `Scripts cron` | `chmod 755 /etc/cron.daily/myjob` |
| `Répertoire temporaire` | `chmod 1777 /tmp` (sticky) |

### Afficher les permissions

```
ls -l file.txt       # afficher les permissions
ls -ld dir/          # afficher les permissions du répertoire
stat -c '%A %a %n' * # symbolique + numérique + nom
getfacl file.txt     # afficher les ACL (si utilisées)
```
