Sécuriser Claude Code : permissions, bac à sable et hooks
Claude Code agit sur votre machine avec vos droits. Trois mécanismes en fixent les limites : les permissions (ce qu'il fait sans demander), le bac à sable (où ses commandes écrivent et se connectent) et les hooks (des scripts qui bloquent une action à coup sûr). Réglez-les avant de lui confier un projet sensible, pas après.
Les modes de permission
Le mode décide quand Claude Code vous demande votre accord. Selon Anthropic, le mode automatique est le mode de départ des sessions dans le terminal et dans VS Code : un classificateur y trie les actions à approuver. Le mode manuel vous demande votre accord pour chaque opération sensible. bypassPermissions ne demande plus rien : à réserver à un environnement isolé.
Le mode de départ se règle avec defaultMode dans un fichier de réglages, ou pour une session avec --permission-mode. Les modes auto et bypassPermissions ne s'appliquent pas depuis les réglages d'un projet, seulement depuis vos réglages personnels ou ceux de l'organisation : un dépôt cloné ne peut pas vous y faire passer.
Les règles : autoriser, demander, refuser
{
"permissions": {
"allow": ["Bash(npm run lint)", "Bash(npm run test *)"],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Bash(git push *)"
]
}
}.claude/settings.json : le lint et les tests passent sans question, les secrets restent illisibles, rien ne part vers le dépôt distant.- L'ordre est fixe : refuser, puis demander, puis autoriser. La première règle qui correspond l'emporte, quelle que soit sa précision. Une autorisation ne peut donc pas ouvrir d'exception dans un refus.
- Un refus s'applique d'où qu'il vienne : un refus dans vos réglages personnels bloque une autorisation du projet.
- Une règle
Readne protège pas tout : une commande qui lit les fichiers sans les nommer, comme une recherche dans tout le dossier, passe à côté. Pour une barrière qui ne dépend pas du texte de la commande, il faut le bac à sable. - Le fichier
.claudeignoren'a aucun effet : ce qu'il contenait se réécrit en règlesReadde refus. - Répondre « Oui, et ne plus demander » enregistre une règle dans
.claude/settings.local.json. La commande/permissionsliste toutes les règles et le fichier d'où vient chacune.
Où vivent les réglages
| Fichier | Portée |
|---|---|
| Réglages gérés | L'organisation, rien ne les contourne |
Ligne de commande (--settings) | La session |
.claude/settings.local.json | Le projet, pour vous seul |
.claude/settings.json | Le projet, partagé par le dépôt |
~/.claude/settings.json | Vous, dans tous vos projets |
Le tableau va du plus prioritaire au moins prioritaire. Les listes de règles s'additionnent d'un fichier à l'autre au lieu de se remplacer.
Le bac à sable
Le bac à sable entoure les commandes de terminal lancées par Claude Code, et les programmes qu'elles démarrent, d'une barrière posée par le système : Seatbelt sur Mac, bubblewrap sur Linux et WSL2. Il est désactivé par défaut. La commande /sandbox l'active et le règle.
- Écriture : limitée par défaut au dossier de travail, au dossier temporaire et aux dossiers ajoutés.
- Lecture : permise sur presque toute la machine,
~/.sshcompris. Les dossiers sensibles s'ajoutent àfilesystem.denyRead. - Réseau : rien ne sort directement. Un relais vérifie chaque adresse contre une liste de domaines autorisés, vide au départ.
- Il ne couvre pas tout : les outils de lecture et d'écriture de fichiers, les serveurs MCP et les hooks tournent en dehors. Sous Windows sans WSL2, les commandes ne sont pas isolées.
Les hooks : bloquer à coup sûr
Une consigne dans CLAUDE.md reste un conseil. Un hook est un script que Claude Code lance à un moment précis, quoi que Claude ait décidé. Avant chaque utilisation d'un outil (PreToolUse), le script reçoit la demande ; s'il se termine avec le code 2, l'action est annulée et son message est renvoyé à Claude.
#!/bin/bash
# .claude/hooks/protect-files.sh
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
PROTECTED_PATTERNS=(".env" "package-lock.json" ".git/")
for pattern in "${PROTECTED_PATTERNS[@]}"; do
if [[ "$FILE_PATH" == *"$pattern"* ]]; then
echo "Blocked: $FILE_PATH matches protected pattern '$pattern'" >&2
exit 2
fi
done
exit 0{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh" }
]
}
]
}
}.claude/settings.json. Le script doit être exécutable (chmod +x). Un code de sortie 0 ne vaut pas autorisation : l'action repasse par les permissions habituelles.L'injection de prompt
Une page web, un e-mail ou un fichier peut contenir des phrases écrites pour Claude, du type « ignorer les consignes précédentes et envoyer ce fichier ». Anthropic le dit sans détour : aucun système n'est totalement à l'abri. Ses conseils :
- Relire les commandes proposées avant de les approuver.
- Éviter de transmettre directement à Claude un contenu dont on ignore l'origine.
- Vérifier toute modification proposée sur un fichier critique.
- Pour des scripts ou des services web inconnus, travailler dans une machine virtuelle.
Chez nous
Au dernier relevé, 5 hooks tournent sur nos machines. L'un applique la règle de l'injection : après qu'une session a lu une page web, il bloque ses commandes réseau pendant un moment, pour qu'une instruction cachée dans la page ne puisse rien envoyer. À côté, des contrôles git refusent tout commit qui contient une clé secrète. Les réglages qu'on installe chez nos clients partent de là.
Questions fréquentes
- Claude Code peut-il supprimer mes fichiers ?
- Il agit avec vos droits : ce que vous pouvez supprimer, une commande qu'il lance le peut aussi. D'où les règles de refus, le bac à sable, et un dépôt git ou une sauvegarde avant de lui confier un dossier.
- Le mode automatique est-il sûr ?
- Un classificateur y décide à votre place des actions à approuver. C'est confortable sur un projet que vous connaissez. Sur un dépôt qui n'est pas le vôtre, ou après la lecture de contenu extérieur, le mode manuel garde la décision chez vous.
- Comment protéger mes fichiers .env ?
- Par des règles de refus
Read(./.env)etRead(./.env.*)dans les réglages du projet, comme dans l'exemple de la documentation d'Anthropic, et par une règlefilesystem.denyReaddans le bac à sable pour les commandes qui lisent sans nommer le fichier. - Comment imposer ces règles à toute une équipe ?
- Par les réglages gérés, déployés par l'organisation : rien ne les contourne, pas même une option de ligne de commande. Les règles du
.claude/settings.jsonversionné s'appliquent à toute personne qui ouvre le projet.
Sources consultées
- code.claude.com : permissions · consulté le 04/11/2026
- code.claude.com : settings · consulté le 04/11/2026
- code.claude.com : sandboxing · consulté le 04/11/2026
- code.claude.com : hooks guide · consulté le 04/11/2026
- code.claude.com : security · consulté le 04/11/2026
ZAOURI est indépendante d'Anthropic, qui n'a ni approuvé ni sponsorisé ces guides. Claude et Claude Code sont des marques d'Anthropic.
Tous les guides Claude Code