Permissions, utilisateurs et processus

Permissions, utilisateurs et processus

Le système de permissions Linux

Linux est un système multi-utilisateurs. Chaque fichier et répertoire possède des permissions qui contrôlent qui peut lire, écrire ou exécuter.

Comprendre les permissions

$ ls -la
-rw-r--r--  1 sacha  dev   4096 mars  28 10:00 config.json
drwxr-xr-x  3 sacha  dev   4096 mars  28 10:00 src/
-rwxr-x---  1 root   admin 8192 mars  28 10:00 deploy.sh

Décomposition : -rw-r--r--

-    rw-    r--    r--
│    │      │      └── Autres (other) : lecture seule
│    │      └── Groupe (group) : lecture seule
│    └── Propriétaire (user) : lecture + écriture
└── Type (- = fichier, d = répertoire, l = lien symbolique)
Lettre Signification Sur un fichier Sur un répertoire
r Read (lecture) Lire le contenu Lister le contenu
w Write (écriture) Modifier le contenu Créer/supprimer des fichiers
x Execute (exécution) Exécuter comme programme Entrer dans le répertoire

Notation numérique (octale)

Chaque permission a une valeur : r=4, w=2, x=1

rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4

Exemples courants :

  • 755rwxr-xr-x — scripts exécutables, répertoires
  • 644rw-r--r-- — fichiers de configuration
  • 600rw------- — clés SSH, fichiers sensibles
  • 700rwx------ — répertoire .ssh

Modifier les permissions

# Avec la notation symbolique
chmod u+x script.sh             # Ajouter exécution au propriétaire
chmod g-w fichier.txt           # Retirer écriture au groupe
chmod o-rwx secret.key          # Retirer tout aux autres
chmod a+r document.pdf          # Ajouter lecture à tous

# Avec la notation numérique
chmod 755 script.sh
chmod 644 config.json
chmod 600 ~/.ssh/id_rsa

# Récursivement
chmod -R 755 /var/www/html/

Changer le propriétaire

# Changer le propriétaire
chown sacha fichier.txt
chown sacha:dev fichier.txt     # Propriétaire ET groupe

# Récursivement
chown -R www-data:www-data /var/www/

# Changer uniquement le groupe
chgrp dev projet/

Gestion des utilisateurs et groupes

Utilisateurs

# Voir l'utilisateur courant
whoami
id                              # Détails complets (uid, gid, groupes)

# Créer un utilisateur
sudo useradd -m -s /bin/bash jean    # -m crée le home, -s définit le shell
sudo passwd jean                      # Définir le mot de passe

# Modifier un utilisateur
sudo usermod -aG docker jean         # Ajouter au groupe docker
sudo usermod -s /bin/zsh jean        # Changer le shell

# Supprimer un utilisateur
sudo userdel -r jean                 # -r supprime aussi le home

# Lister les utilisateurs
cat /etc/passwd

Groupes

# Créer un groupe
sudo groupadd developpeurs

# Ajouter un utilisateur à un groupe
sudo usermod -aG developpeurs jean

# Voir les groupes d'un utilisateur
groups jean

# Lister tous les groupes
cat /etc/group

sudo — exécuter en tant qu'administrateur

# Exécuter une commande en root
sudo apt update
sudo systemctl restart nginx

# Ouvrir un shell root (⚠️ à utiliser avec précaution)
sudo -i

# Exécuter en tant qu'un autre utilisateur
sudo -u postgres psql

Gestion des processus

Un processus est un programme en cours d'exécution. Chaque processus a un identifiant unique : le PID.

Visualiser les processus

# Liste des processus de l'utilisateur
ps

# Tous les processus du système
ps aux
ps aux | grep nginx

# Arborescence des processus
pstree

# Moniteur en temps réel
top
htop                            # Version améliorée (à installer)

Comprendre la sortie de ps aux

USER     PID  %CPU %MEM    VSZ   RSS TTY  STAT START   TIME COMMAND
root       1   0.0  0.1 169436 13296 ?    Ss   mars27  0:02 /sbin/init
sacha   1234   2.5  1.2 456780 98456 ?    Sl   10:00   0:45 node server.js
www-data 567   0.1  0.3 123456 24680 ?    S    09:30   0:12 nginx: worker
Colonne Description
USER Propriétaire du processus
PID Identifiant unique
%CPU / %MEM Utilisation des ressources
STAT État (S=sleeping, R=running, Z=zombie)
COMMAND Commande qui a lancé le processus

Gérer les processus

# Lancer un processus en arrière-plan
node server.js &

# Voir les jobs en arrière-plan
jobs

# Ramener un job au premier plan
fg %1

# Envoyer au second plan
bg %1

# Arrêter un processus
kill 1234                       # Signal TERM (arrêt propre)
kill -9 1234                    # Signal KILL (arrêt forcé)
killall nginx                   # Arrêter tous les processus nginx

# Trouver le PID d'un processus
pgrep nginx
pidof nginx

Services avec systemd

Sur les distributions modernes, systemd gère les services :

# Gérer un service
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx      # Recharger la config sans couper

# Activer/désactiver au démarrage
sudo systemctl enable nginx
sudo systemctl disable nginx

# Vérifier le statut
sudo systemctl status nginx

# Voir les logs d'un service
sudo journalctl -u nginx
sudo journalctl -u nginx -f     # Suivre en temps réel
sudo journalctl -u nginx --since "1 hour ago"

Gestion des paquets

Sur Debian/Ubuntu (apt)

# Mettre à jour la liste des paquets
sudo apt update

# Mettre à jour les paquets installés
sudo apt upgrade

# Installer un paquet
sudo apt install nginx curl git

# Supprimer un paquet
sudo apt remove nginx
sudo apt purge nginx             # Supprimer aussi la configuration

# Rechercher un paquet
apt search nodejs

Sur CentOS/Rocky (dnf)

sudo dnf update
sudo dnf install nginx
sudo dnf remove nginx
dnf search nodejs

Bonnes pratiques

  1. Principe du moindre privilège : n'accordez que les permissions nécessaires
  2. N'utilisez pas root au quotidien — préférez sudo commande par commande
  3. Protégez les clés SSH avec chmod 600
  4. Vérifiez les processus régulièrement avec htop
  5. Utilisez systemd pour gérer vos services en production
  6. Gardez le système à jour avec des mises à jour régulières