
EACCES: permission denied sur /etc/hosts : comment corriger
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.
Paiement unique
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 :
ls -la /etc/hostsLe terminal affiche généralement :
-rw-r--r-- 1 root wheel 213 Aug 17 10:00 /etc/hostsL'analyse des permissions :
- Propriétaire (
root) : Droits de lecture et écriture (rw-). - Groupe (
wheelouroot) : 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 :
# Ne fonctionne pas :
sudo echo "127.0.0.1 api.local.test" >> /etc/hostsLe 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 :
echo "127.0.0.1 api.local.test" | sudo tee -a /etc/hosts > /dev/nullL'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 :
sudo node ./scripts/update-hosts.jsSous 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 :
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 :
sudo chown root:wheel /etc/hosts
sudo chmod 644 /etc/hostsSur Linux (Ubuntu/Debian) :
sudo chown root:root /etc/hosts
sudo chmod 644 /etc/hostsPourquoi 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.
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
Permission refusée fichier hosts MacDépannage
Permission refusée fichier hosts Mac
7 min de lecture
getaddrinfo ENOTFOUND dans Docker et Node.js : solutionsDépannage
getaddrinfo ENOTFOUND dans Docker et Node.js : solutions
4 min de lecture
Réinitialiser le fichier hosts par défaut (Windows, Mac, Linux)Modifier le fichier hosts
Réinitialiser le fichier hosts par défaut (Windows, Mac, Linux)
4 min de lecture