veilletech.fr
23 août Feed du jour
#07 LINUX Article

Ses entrées hosts sans être administrateur

Un geste d'administrateur une fois, et chacun gère ses domaines.

Une extension NSS pour la glibc, écrite en Rust, permet à chaque utilisateur d'un poste Linux d'avoir ses propres entrées de type /etc/hosts dans son dossier personnel. L'installation reste un geste d'administrateur, mais une fois faite, les ajouts de domaines de développement ne demandent plus aucun privilège.

3 min de lecturevidéo 1:17
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Le problème qu'il attaque
  3. Comment ça marche
  4. Les limites, et elles comptent
  5. À retenir

Ce qui se passe

nss-userhosts est une extension au Name Service Switch de la glibc, écrite en Rust, publiée cette semaine sur Codeberg. Elle permet à un utilisateur non privilégié de définir ses propres entrées de résolution de noms, au format /etc/hosts, dans son dossier personnel.

Le dépôt est jeune : première version fonctionnelle et publication le 22 août 2026. C'est un projet d'une personne, quelques centaines de lignes, annoncé comme « à un stade précoce mais utilisable ».

Le problème qu'il attaque

/etc/hosts appartient à root. Toute association nom-adresse pour du développement local — api.monprojet.test vers 127.0.0.1, un alias vers un conteneur, l'adresse d'une machine de test sur le réseau — suppose donc sudo. Deux situations où ça coince :

Les contournements existent — un résolveur local, un proxy, un conteneur qui porte son propre hosts — mais ils ajoutent tous une pièce mobile.

Comment ça marche

Le Name Service Switch de la glibc est le mécanisme qui décide dans quel ordre les sources de résolution sont consultées : fichiers, DNS, mDNS, etc. Chaque source est un module chargeable. nss-userhosts en est un.

Une fois déclaré, il lit les fichiers $HOME/.config/userhosts/*.conf, au format hosts habituel, et combine tous les enregistrements trouvés. IPv4 et IPv6 sont pris en charge.

L'installation, elle, demande bien les droits d'administration :

Terminal
cargo build --release
# la bibliothèque doit être renommée pour que glibc la trouve
mv libnss_userhosts.so libnss_userhosts.so.2
sudo cp libnss_userhosts.so.2 /usr/lib/    # /usr/local/lib ne fonctionne pas

Puis on place le module en tête de la ligne hosts de /etc/nsswitch.conf :

Code
hosts: userhosts mymachines resolve [!UNAVAIL=return] files myhostname dns

Chaque utilisateur crée ensuite son dossier et ses entrées, sans aucun privilège :

Terminal
mkdir --parents ~/.config/userhosts
echo "192.168.1.79 catfeeder" > ~/.config/userhosts/pets.conf
getent ahosts catfeeder

Un paquet est fourni pour Arch (cd packaging && makepkg), et la variable NSS_USERHOSTS_LOG active des messages de débogage sur la sortie d'erreur.

Les limites, et elles comptent

Trois, à connaître avant d'espérer :

L'installation reste un geste root. Le titre est donc à lire correctement : ce n'est pas « du DNS sans administrateur », c'est un geste d'administrateur fait une fois, qui rend ensuite la main aux utilisateurs. Sur un poste d'entreprise verrouillé, il faudra passer par l'équipe qui gère les machines — mais l'argument est plus facile à défendre qu'une demande de sudo permanent.

Seuls les programmes qui passent par le résolveur de la glibc sont concernés. C'est la limite technique de fond. Un binaire Go, qui embarque souvent son propre résolveur, ou un navigateur qui fait de même, ignorera purement et simplement ces entrées. Autrement dit : curl et la plupart des outils système suivront, votre application compilée statiquement peut-être pas. À vérifier avant d'en dépendre.

Le projet est jeune. La résolution inverse (adresse vers nom) n'est pas implémentée, l'emplacement du dossier ne suit pas encore la spécification XDG, et l'auteur annonce avoir peu de temps à y consacrer. À tester dans un conteneur — un Containerfile et une recette just test sont fournis pour ça — avant de le déployer sur une machine dont on dépend.

Source : Codeberg — felixs/nss-userhosts

Fiche de veille rédigée à partir de l'article original. Le contenu ci-dessus est une synthèse personnelle, pas une reproduction.