¿Es posible agregar una lista de hosts que son específicos para un determinado usuario? ¿Quizás un archivo de host específico del usuario?
Este mecanismo también debe complementar las entradas en el /etc/hostsarchivo.
not-root-user
hosts
punta roja
fuente
fuente

Respuestas:
La funcionalidad que busca se implementa en glibc. Puede definir un archivo de hosts personalizado configurando la
HOSTALIASESvariable de entorno. Los nombres en este archivo serán recogidos porgethostbyname(ver documentación ).Ejemplo (probado en Ubuntu 13.10):
Algunas limitaciones
HOSTALIASESsolo funciona para aplicaciones que usangetaddrinfo(3)ogethostbyname(3)HOSTALIASESse pierde la configuración. ping es root setuid (porque necesita escuchar paquetes ICMP), porHOSTALIASESlo que no funcionará con ping a menos que ya sea root antes de llamar a ping.fuente
nscdy está limitado a nombres de host sin un punto.127.0.0.1 somedomain.com)getcap /usr/sbin/pingse puede ver algo como:/usr/bin/ping = cap_net_admin,cap_net_raw+p. Y técnicamente es que necesita abrir un socket sin procesar en lugar de ICMP (pero supongo que podría argumentar que es solo semántica).Al lado de los
LD_PRELOADtrucos. Una alternativa simple que puede funcionar en algunos sistemas sería editar binariamente una copia de la biblioteca del sistema que maneja la resolución del nombre de host para reemplazarla/etc/hostspor una ruta propia.Por ejemplo, en Linux:
Si no está utilizando
nscd, copielibnss_files.soen alguna ubicación propia como:(la biblioteca compartida puede estar ubicada en otro lugar, por ejemplo
/lib/libnss_files.so.2)Ahora, edite binariamente la copia para reemplazarla
/etc/hostspor algo de la misma longitud/tmp/hosts.Editar
/tmp/hostspara agregar la entrada que desee. Y usepara
nss_filesmirar en/tmp/hostslugar de/etc/hosts.En lugar de
/tmp/hosts, también podría hacerlo/dev/fd//3(aquí usando dos barras inclinadas para que la longitud de/dev/fd//3sea la misma que la de/etc/hosts), y hagaPor ejemplo, lo que permitiría que diferentes comandos usen diferentes
hostsarchivos.Si
nscdestá instalado y ejecutándose, puede omitirlo haciendo el mismo truco, pero esta vezlibc.so.6y reemplazando la ruta al zócalo nscd (algo así como/var/run/nscd/socket) con alguna ruta inexistente.fuente
LD_LIBRARY_PATHpara apuntar a un directorio propiedad del usuario significa que cualquier otro proceso ejecutado por el usuario puede usar ese directorio para cooptar cualquier proceso nuevo generado al reemplazar las bibliotecas. Y las actualizaciones alibnss_files.sotravés del administrador de paquetes (incluidas las actualizaciones de seguridad) no se reflejarán en la versión parcheada. EnLD_LIBRARY_PATHgeneral, modificar es algo malo por otras razones, pero también es imprudente debido a esos problemas.Los espacios de montaje privados creados con el
unsharecomando se pueden usar para proporcionar un archivo privado / etc / hosts a un proceso de shell y cualquier proceso secundario posterior iniciado desde ese shell.fuente
unshare(2)yclone(2)eso es parte de la magia aquí. Ver tambiénnamespaces(7)yuser_namespaces(7).Una solución es tener a cada usuario en un sitio separado
chroot, para que cada uno pueda tener un sitio separado/etc/hostspara ellos.fuente
Enfrenté la misma necesidad, así que probé libnss-userhosts, pero falla en aplicaciones multiproceso. Por eso he escrito libnss-homehosts . Es muy nuevo y probado solo por mí. ¡Puedes darle una oportunidad! Admite algunas opciones en /etc/host.conf, múltiples nombres de alias y resolución inversa (dirección a nombre).
fuente
Colocar lo siguiente
~/.bashrcestá funcionando para mí en bash. Convierte el nombre de host en el comando en una dirección basada en las entradas en~/.hosts. Si~/.hostsno existe o si no se puede encontrar el nombre de host~/.hosts, el comando se ejecuta normalmente. Esto debería funcionar con los indicadores originales de las funciones relevantes y sin importar dónde se coloque el nombre de host en relación con los indicadores, por ejemploping -i 0.5 host1 -c 3, funciona. El~/.hostsarchivo tiene preferencia sobre cualquier otra ubicación para encontrar nombres de host, por lo que si hay nombres de host duplicados,~/.hostsse utilizará la dirección .Un ejemplo de
~/.hostsse da a continuación. Sigue el mismo formato que/etc/hosts. Los comentarios y los espacios en blanco se manejan correctamente.fuente
No estoy seguro de si esto podría ayudarlo, pero vine aquí buscando una manera de agregar "hosts" guardados en algún lugar que fuera fácilmente accesible solo para mi usuario.
Básicamente, necesitaba poder ingresar a ciertos cuadros en nuestra red de trabajo, que solo tiene un punto de entrada.
Lo que hice fue agregar alias a mi
.bashrcarchivo.Por ejemplo, si agregó:
en la parte inferior de su
~/.bashrc(~es su directorio de inicio). Luego, después de cerrar sesión y volver a iniciar sesión, puede escribirjrfbox, presionar Entery se conectará.fuente
man ssh_config.~/.bashrc, simplemente hágalosource ~/.bashrc.. ~/.bashrc