¿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/hosts
archivo.
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
HOSTALIASES
variable de entorno. Los nombres en este archivo serán recogidos porgethostbyname
(ver documentación ).Ejemplo (probado en Ubuntu 13.10):
Algunas limitaciones
HOSTALIASES
solo funciona para aplicaciones que usangetaddrinfo(3)
ogethostbyname(3)
HOSTALIASES
se pierde la configuración. ping es root setuid (porque necesita escuchar paquetes ICMP), porHOSTALIASES
lo que no funcionará con ping a menos que ya sea root antes de llamar a ping.fuente
nscd
y está limitado a nombres de host sin un punto.127.0.0.1 somedomain.com
)getcap /usr/sbin/ping
se 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_PRELOAD
trucos. 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/hosts
por una ruta propia.Por ejemplo, en Linux:
Si no está utilizando
nscd
, copielibnss_files.so
en 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/hosts
por algo de la misma longitud/tmp/hosts
.Editar
/tmp/hosts
para agregar la entrada que desee. Y usepara
nss_files
mirar en/tmp/hosts
lugar 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//3
sea la misma que la de/etc/hosts
), y hagaPor ejemplo, lo que permitiría que diferentes comandos usen diferentes
hosts
archivos.Si
nscd
está instalado y ejecutándose, puede omitirlo haciendo el mismo truco, pero esta vezlibc.so.6
y reemplazando la ruta al zócalo nscd (algo así como/var/run/nscd/socket
) con alguna ruta inexistente.fuente
LD_LIBRARY_PATH
para 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.so
través del administrador de paquetes (incluidas las actualizaciones de seguridad) no se reflejarán en la versión parcheada. EnLD_LIBRARY_PATH
general, modificar es algo malo por otras razones, pero también es imprudente debido a esos problemas.Los espacios de montaje privados creados con el
unshare
comando 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/hosts
para 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
~/.bashrc
está funcionando para mí en bash. Convierte el nombre de host en el comando en una dirección basada en las entradas en~/.hosts
. Si~/.hosts
no 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~/.hosts
archivo tiene preferencia sobre cualquier otra ubicación para encontrar nombres de host, por lo que si hay nombres de host duplicados,~/.hosts
se utilizará la dirección .Un ejemplo de
~/.hosts
se 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
.bashrc
archivo.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