Est-il possible d'ajouter une liste d'hôtes uniquement spécifiques à un utilisateur donné? Peut-être un fichier d'hôtes spécifique à l'utilisateur?
Ce mécanisme devrait également compléter les entrées du /etc/hosts
fichier.
not-root-user
hosts
pic rouge
la source
la source
Réponses:
La fonctionnalité que vous recherchez est implémentée dans glibc. Vous pouvez définir un fichier d'hôtes personnalisé en définissant la
HOSTALIASES
variable d'environnement. Les noms dans ce fichier seront récupérés pargethostbyname
(voir documentation ).Exemple (testé sur Ubuntu 13.10):
Quelques limitations:
HOSTALIASES
ne fonctionne que pour les applications utilisantgetaddrinfo(3)
ougethostbyname(3)
HOSTALIASES
paramètre est perdu. ping est setuid root (car il doit écouter les paquets ICMP), ilHOSTALIASES
ne fonctionnera donc pas avec ping sauf si vous êtes déjà root avant d'appeler ping.la source
nscd
et est limité aux noms d’hôte sans point.127.0.0.1 somedomain.com
)getcap /usr/sbin/ping
vous pouvez voir quelque chose comme:/usr/bin/ping = cap_net_admin,cap_net_raw+p
. Et techniquement, il faut ouvrir une socket raw plutôt que ICMP (mais je suppose que vous pourriez soutenir que ce n’est que de la sémantique).À côté des
LD_PRELOAD
astuces. Une alternative simple pouvant fonctionner sur quelques systèmes serait d'éditer, en binaire, une copie de la bibliothèque système qui gère la résolution du nom d'hôte afin de la remplacer/etc/hosts
par votre propre chemin.Par exemple, sous Linux:
Si vous ne l'utilisez pas
nscd
, copiez-lelibnss_files.so
dans un emplacement de votre choix, par exemple:(la bibliothèque partagée peut être située ailleurs, par exemple
/lib/libnss_files.so.2
)Maintenant, éditez binaire la copie pour la remplacer
/etc/hosts
par quelque chose de la même longueur/tmp/hosts
.Modifier
/tmp/hosts
pour ajouter l'entrée souhaitée. Et utilisepour
nss_files
regarder au/tmp/hosts
lieu de/etc/hosts
.Au lieu de
/tmp/hosts
, vous pouvez aussi le faire/dev/fd//3
(ici, en utilisant deux barres obliques pour que la longueur de/dev/fd//3
soit la même que celle de/etc/hosts
), et nePar exemple, cela permettrait à différentes commandes d'utiliser différents
hosts
fichiers.Si
nscd
est installé et en cours d'exécution, vous pouvez le contourner en procédant de la même manière, mais cette fois pourlibc.so.6
et remplacez le chemin d'accès à la socket nscd (quelque chose comme/var/run/nscd/socket
) par un chemin inexistant.la source
LD_LIBRARY_PATH
de pointage vers un répertoire appartenant à l'utilisateur signifie que tout autre processus exécuté par l'utilisateur peut utiliser ce répertoire pour coopter tout nouveau processus généré par le remplacement de bibliothèques. Et les mises à jourlibnss_files.so
via le gestionnaire de paquets (y compris les mises à jour de sécurité) ne seront pas reflétées dans la version corrigée. La modificationLD_LIBRARY_PATH
est généralement une mauvaise chose à recommander pour d'autres raisons, mais elle est également déconseillée à cause de ces problèmes.Les espaces de montage privés créés avec la
unshare
commande peuvent être utilisés pour fournir un fichier privé / etc / hosts à un processus shell et à tous les processus enfants ultérieurs démarrés à partir de ce shell.la source
unshare(2)
etclone(2)
cela fait partie de la magie ici. Voir aussinamespaces(7)
etuser_namespaces(7)
.Une solution consiste à placer chaque utilisateur de manière distincte
chroot
, de manière à ce que chacun puisse avoir sa propre/etc/hosts
identité.la source
J'ai rencontré le même besoin, j'ai donc essayé libnss-userhosts, mais cela échouait dans les applications multithread. Par conséquent, j'ai écrit libnss-homehosts . C'est très nouveau et testé seulement par moi. Vous pouvez donner une chance pour cela! Il prend en charge certaines options de /etc/host.conf, plusieurs noms d’alias et la résolution inverse (adresse à nom).
la source
Placer les éléments suivants dans
~/.bashrc
fonctionne pour moi en bash. Il convertit le nom d'hôte de la commande en une adresse basée sur les entrées de~/.hosts
. S'il~/.hosts
n'existe pas ou si le nom d'hôte est introuvable~/.hosts
, la commande s'exécute normalement. Cela devrait fonctionner avec les indicateurs d'origine des fonctions pertinentes et sans indiquer l'emplacement où le nom d'hôte est placé par rapport aux indicateurs, par exempleping -i 0.5 host1 -c 3
, travaux. Le~/.hosts
fichier a la préférence sur tout autre emplacement pour la recherche de noms d’hôte. Ainsi, s’il existe des noms d’hôte doubles, l’adresse~/.hosts
sera utilisée.Un exemple de
~/.hosts
est donné ci-dessous. Il suit le même format que/etc/hosts
. Les commentaires et les espaces sont gérés correctement.la source
Je ne suis pas sûr que cela puisse vous aider, mais je suis venu ici pour trouver un moyen d'ajouter des "hôtes" enregistrés dans un endroit facilement accessible à l'utilisateur.
En gros, je devais être capable de ssh dans certaines boîtes de notre réseau de travail, qui n’avait qu’un seul point d’entrée.
Ce que j'ai fait a été d'ajouter des alias à mon
.bashrc
fichier.Par exemple, si vous avez ajouté:
au bas de votre
~/.bashrc
(~
est votre répertoire personnel). Ensuite, après vous être déconnecté et reconnecté, vous pouvez taperjrfbox
, cliquer Enteret il se connectera.la source
man ssh_config
.~/.bashrc
, il vous suffit de le fairesource ~/.bashrc
.. ~/.bashrc