# 1.4 - Utilisateur, root, su et sudo

Linux sépare les tâches courantes des opérations d'administration. Un utilisateur normal limite l'impact d'une erreur ; `root` possède presque tous les droits sur le système.

## Identifier l'utilisateur et ses groupes

```bash
whoami
id
groups
```

Afficher les sessions ouvertes :

```bash
who
w
```

## Exécuter une commande avec sudo

```bash
sudo systemctl restart ssh
sudo apt update
```

`sudo` exécute uniquement la commande qui suit avec des privilèges élevés. Le mot de passe demandé est normalement celui de l'utilisateur courant.

Tester ses autorisations :

```bash
sudo -v        # valider ou renouveler l'authentification
sudo -l        # lister les commandes autorisées
sudo -k        # oublier immédiatement l'authentification en cache
```

Ouvrir un shell d'administration seulement lorsque cela est nécessaire :

```bash
sudo -i
exit
```

## Différence entre su et sudo

```bash
su - utilisateur
su -
```

- `su - utilisateur` ouvre une session de connexion pour cet utilisateur.
- `su -` tente d'ouvrir une session `root` et demande généralement le mot de passe de `root`.
- `sudo -i` utilise les règles `sudo` et conserve une trace des commandes lancées.

Sur certaines distributions, le compte `root` n'a volontairement pas de mot de passe utilisable ; l'administration passe alors par `sudo`.

## Redirections et privilèges

Cette commande peut échouer, car la redirection `>` est réalisée par le shell normal avant `sudo` :

```bash
sudo echo "127.0.0.1 exemple.local" > /etc/hosts
```

Utiliser `tee` :

```bash
echo "127.0.0.1 exemple.local" | sudo tee -a /etc/hosts
```

Pour modifier un fichier système de manière contrôlée :

```bash
sudoedit /etc/hosts
```

`sudoedit` copie temporairement le fichier, ouvre l'éditeur avec l'identité normale, puis remet le résultat en place avec les droits requis.

## Règles de prudence

- Rester utilisateur normal pour les tâches habituelles.
- Vérifier les chemins avant toute commande précédée de `sudo`.
- Ne jamais lancer un script inconnu avec `curl ... | sudo sh`.
- Ne pas modifier `/etc/sudoers` directement ; utiliser `sudo visudo`.
- Quitter un shell `root` dès la tâche terminée.
- Préférer une commande précise à une session administrateur prolongée.