É possível adicionar uma lista de hosts que são específicos apenas para um determinado usuário? Talvez um arquivo de hosts específicos do usuário?
Esse mecanismo também deve complementar as entradas no /etc/hosts
arquivo.
not-root-user
hosts
redspike
fonte
fonte
Respostas:
A funcionalidade que você está procurando é implementada na glibc. Você pode definir um arquivo de hosts customizados configurando a
HOSTALIASES
variável de ambiente. Os nomes neste arquivo serão selecionados porgethostbyname
(consulte a documentação ).Exemplo (testado no Ubuntu 13.10):
Algumas limitações:
HOSTALIASES
só funciona para aplicativos que usamgetaddrinfo(3)
ougethostbyname(3)
HOSTALIASES
configuração é perdida. ping é root setuid (porque precisa escutar pacotes ICMP), portantoHOSTALIASES
, não funcionará com ping, a menos que você já seja root antes de chamá-lo.fonte
nscd
e está limitado a nomes de host sem um ponto.127.0.0.1 somedomain.com
)getcap /usr/sbin/ping
que você pode ver algo como:/usr/bin/ping = cap_net_admin,cap_net_raw+p
. E tecnicamente é que ele precisa abrir um soquete bruto em vez do ICMP (mas suponho que você possa argumentar que isso é apenas semântica).Ao lado dos
LD_PRELOAD
truques. Uma alternativa simples que pode funcionar em alguns sistemas seria a edição binária de uma cópia da biblioteca do sistema que lida com a resolução do nome do host para substituir/etc/hosts
por um caminho próprio.Por exemplo, no Linux:
Se você não estiver usando
nscd
, copielibnss_files.so
para algum local como:(a biblioteca compartilhada pode estar localizada em outro lugar, por exemplo
/lib/libnss_files.so.2
)Agora, edite a cópia binária para substituir
/etc/hosts
nela com algo do mesmo tamanho/tmp/hosts
.Edite
/tmp/hosts
para adicionar a entrada desejada. E usepara
nss_files
procurar em/tmp/hosts
vez de/etc/hosts
.Em vez de
/tmp/hosts
, você também pode fazê-lo/dev/fd//3
(aqui usando duas barras para que o comprimento de/dev/fd//3
seja o mesmo de/etc/hosts
) ePor exemplo, o que permitiria que comandos diferentes usassem
hosts
arquivos diferentes .Se
nscd
estiver instalado e em execução, você pode ignorá-lo fazendo o mesmo truque, mas desta vezlibc.so.6
e substituindo o caminho para o soquete nscd (algo como/var/run/nscd/socket
) por algum caminho inexistente.fonte
LD_LIBRARY_PATH
para apontar para um diretório de propriedade do usuário significa que qualquer outro processo executado pelo usuário pode usar esse diretório para cooptar quaisquer novos processos gerados pela substituição de bibliotecas. E as atualizaçõeslibnss_files.so
através do gerenciador de pacotes (incluindo atualizações de segurança) não serão refletidas na versão corrigida. ModificarLD_LIBRARY_PATH
geralmente é uma coisa ruim a ser recomendada por outros motivos, mas também é imprudente por causa desses problemas.Espaços de montagem privados criados com o
unshare
comando podem ser usados para fornecer um arquivo / etc / hosts privado a um processo de shell e quaisquer processos filhos subsequentes iniciados a partir desse shell.fonte
unshare(2)
eclone(2)
isso faz parte da mágica aqui. Veja tambémnamespaces(7)
euser_namespaces(7)
.Uma solução é ter cada usuário em separado
chroot
, para que cada um possa ter um separado/etc/hosts
para si.fonte
Eu enfrentei a mesma necessidade, então tentei o libnss-userhosts, mas ele falha em aplicativos multithread. Portanto, eu escrevi libnss-homehosts . É muito novo e testado apenas por mim. Você pode dar uma chance para isso! Ele suporta algumas opções no /etc/host.conf, vários nomes de alias e resolução reversa (endereço para nome).
fonte
Colocar o seguinte em
~/.bashrc
está funcionando para mim no bash. Ele converte o nome do host no comando em um endereço com base nas entradas em~/.hosts
. Se~/.hosts
não existir ou se o nome do host não puder ser encontrado~/.hosts
, o comando será executado normalmente. Isso deve funcionar com os sinalizadores originais das funções relevantes e independentemente de onde o nome do host é colocado em relação aos sinalizadores, por exemploping -i 0.5 host1 -c 3
, funciona. O~/.hosts
arquivo tem preferência sobre qualquer outro local para localizar nomes de host; portanto, se houver nomes de host duplos, o endereço~/.hosts
será usado.Um exemplo de
~/.hosts
é dado abaixo. Segue o mesmo formato que/etc/hosts
. Comentários e espaço em branco são tratados corretamente.fonte
Não tenho certeza se isso iria ajudá-lo, mas eu vim aqui procurando uma maneira de adicionar "hosts" salvos em algum lugar que fosse facilmente acessível apenas ao meu usuário.
Basicamente, eu precisava ser capaz de ssh em determinadas caixas em nossa rede de trabalho, que possui apenas um ponto de entrada.
O que fiz foi adicionar aliases ao meu
.bashrc
arquivo.Por exemplo, se você adicionou:
na parte inferior do seu
~/.bashrc
(~
é o seu diretório inicial). Depois de sair e fazer login novamente, você pode digitarjrfbox
, clicar Entere ele se conectará.fonte
man ssh_config
.~/.bashrc
, basta fazersource ~/.bashrc
.. ~/.bashrc