ToggleHosts
EACCES: permission denied sur /etc/hosts : comment corriger

EACCES: permission denied sur /etc/hosts : comment corriger

4 min de lecture

Corrigez l’erreur EACCES permission denied sur /etc/hosts en Node.js, bash et sous Windows. Droits root, sudoers, scripts CLI et solutions sécurisées.

Gérez vos fichiers hosts sans terminal

ToggleHosts vous permet de gérer vos environnements visuellement sur Windows, macOS et Linux, avec flush DNS automatique et sauvegardes.

L'erreur EACCES: permission denied sur /etc/hosts survient lorsqu'un script Node.js, un outil CLI ou une commande shell tente d'écrire dans le fichier hosts sans détenir les droits d'administration root. Ce fichier système essentiel est verrouillé par défaut pour empêcher toute altération non contrôlée de la résolution réseau.

Comment corriger l'erreur EACCES: permission denied sur /etc/hosts

Pour corriger l'erreur EACCES: permission denied sur /etc/hosts, exécutez votre commande avec sudo, utilisez la syntaxe echo "127.0.0.1 monapp.test" | sudo tee -a /etc/hosts pour les redirections shell, ou intégrez un module d'élévation de privilèges (comme sudo-prompt) dans vos scripts Node.js.

Comprendre la structure des permissions de /etc/hosts

Sur macOS et Linux, vérifiez les droits actuels du fichier hosts :

BASH
ls -la /etc/hosts

Le terminal affiche généralement :

TEXT
-rw-r--r--  1 root  wheel  213 Aug 17 10:00 /etc/hosts

L'analyse des permissions :

  • Propriétaire (root) : Droits de lecture et écriture (rw-).
  • Groupe (wheel ou root) : Droit de lecture seule (r--).
  • Tous les autres utilisateurs : Droit de lecture seule (r--).

Lorsque votre application Node.js exécute fs.writeFileSync('/etc/hosts', contenu), le noyau bloque l'appel système et renvoie l'erreur POSIX EACCES (code d'erreur 13).

Lisez également notre guide dédié aux permissions refusées sur Mac.

Les 4 méthodes pour résoudre l'erreur

Méthode 1 : L'erreur classique de la redirection shell

Si vous tentez d'ajouter une ligne via cette commande dans le terminal :

BASH
# Ne fonctionne pas :
sudo echo "127.0.0.1 api.local.test" >> /etc/hosts

Le terminal affiche quand même permission denied. La raison : sudo élève uniquement la commande echo, mais l'opérateur de redirection >> est exécuté par votre shell utilisateur actuel non privilégié.

La syntaxe correcte :

BASH
echo "127.0.0.1 api.local.test" | sudo tee -a /etc/hosts > /dev/null

L'utilitaire tee s'exécute avec les droits sudo et écrit directement dans le fichier avec l'option -a (append).

Méthode 2 : Lancer un script Node.js ou un outil de build avec sudo

Pour un script de déploiement local ou d'automatisation :

BASH
sudo node ./scripts/update-hosts.js

Sous Windows (PowerShell) : Ouvrez votre terminal en effectuant un clic droit puis Exécuter en tant qu'administrateur avant de lancer votre commande.

Méthode 3 : Élever les privilèges de manière ciblée en Node.js

Plutôt que d'exécuter l'intégralité de votre application en mode root (ce qui crée un risque de sécurité important avec les dépendances npm), isolez la modification du fichier hosts :

JAVASCRIPT
import sudo from 'sudo-prompt';

const options = {
  name: 'Gestionnaire Hosts Local'
};

const domainEntry = '127.0.0.1 monprojet.test';
const command = `sh -c 'echo "${domainEntry}" >> /etc/hosts'`;

sudo.exec(command, options, (error, stdout, stderr) => {
  if (error) {
    console.error('Erreur lors de la modification des hosts :', error);
    return;
  }
  console.log('Domaine ajouté au fichier hosts avec succès.');
});

Méthode 4 : Restaurer les permissions standards si le fichier est corrompu

Si vous avez accidentellement modifié les droits ou le propriétaire du fichier :

Sur macOS :

BASH
sudo chown root:wheel /etc/hosts
sudo chmod 644 /etc/hosts

Sur Linux (Ubuntu/Debian) :

BASH
sudo chown root:root /etc/hosts
sudo chmod 644 /etc/hosts

Pourquoi il ne faut JAMAIS faire un chmod 777 sur /etc/hosts

Un chmod 777 /etc/hosts rend le fichier modifiable par n'importe quel processus sur votre système.

  • N'importe quel paquet tiers ou script exécuté dans votre terminal pourrait rediriger des noms de domaine légitimes (banques, GitHub, NPM) vers des serveurs malveillants.
  • Le système d'exploitation et certains résolveurs de sécurité peuvent désactiver la lecture d'un fichier hosts dont les permissions sont jugées trop permissives.

Gérer ses environnements en toute sécurité avec ToggleHosts

Au lieu d'éditer manuellement votre fichier avec sudo ou de compromettre la sécurité de votre machine avec des scripts broad-root, une application native comme ToggleHosts gère vos groupes d'hôtes et utilise un helper sécurisé validé par le système pour appliquer les changements sans risque.

À lire aussiRésoudre Permission refusée sur Mac
À lire aussiGuide de dépannage du fichier hosts
Partager cet article

Questions fréquentes

Le fichier /etc/hosts est protégé par le système d’exploitation en écriture seule pour le compte root. Votre script tourne sous votre utilisateur standard sans privilèges élevés.

Non, c’est fortement déconseillé. Un chmod 777 permettrait à n’importe quel script ou dépendance npm non vérifiée de modifier vos résolutions DNS à votre insu.

La redirection shell (>>) est exécutée par votre terminal non privilégié avant que sudo n’agisse. Il faut utiliser la commande echo ... | sudo tee -a /etc/hosts.

Un gestionnaire de hosts dédié comme ToggleHosts utilise un helper privilégié isolé pour appliquer vos règles sans avoir à exécuter tout votre environnement en root.

Articles similaires