Como posso substituir o arquivo / etc / hosts no nível do usuário? [duplicado]

12

Resumindo: gostaria de saber se é possível obter um arquivo ~/hosts que poderia substituir o arquivo /etc/hosts , já que não tenho acesso privilegiado.

Uma máquina na qual estou trabalhando parece estar configurada corretamente com um servidor DNS correto. Quando tento pingar a máquina usual nome estou trabalhando com ele, ele falha. Mas quando tento fazer um ping por endereço IP , ele funciona como esperado.

Eu quero evitar alterar quaisquer scripts e outras linha de comando manual memorizada e artesanal ™ que fiz por causa de uma única máquina configurada incorretamente. Eu entrei em contato com o administrador do sistema, mas eles têm outros peixes para fritar.

Como posso implementar isso?

    
por yves Baumes 03.12.2012 / 16:17

1 resposta

18

Além dos truques do LD_PRELOAD. Uma alternativa simples, se você não estiver usando nscd , é copiar libnss_files.so para algum local como:

mkdir -p -- ~/lib &&
cp /lib/x86_64-linux-gnu/libnss_files.so.2 ~/lib
Edite binária a cópia para substituir /etc/hosts para algo do mesmo tamanho, como /tmp/hosts .

perl -pi -e 's:/etc/hosts:/tmp/hosts:g' ~/lib/libnss_files.so.2

Edite /tmp/hosts para adicionar a entrada desejada. E use

export LD_LIBRARY_PATH=~/lib

para nss_files procurar em /tmp/hosts em vez de /etc/hosts .

Em vez de /tmp/hosts , você também pode usar /dev/fd//3 e fazer

exec 3< ~/hosts

Por exemplo, o que permitiria que comandos diferentes usassem arquivos hosts diferentes.

$ cat hosts
1.2.3.4 asdasd
$ LD_LIBRARY_PATH=~/lib getent hosts asdasd 3< ~/hosts
1.2.3.4         asdasd

Se nscd estiver instalado e em execução, você pode ignorá-lo fazendo o mesmo truque, mas desta vez para libc.so.6 e substituir o caminho para o soquete nscd (algo como /var/run/nscd/socket ) com algum caminho inexistente. / p>     

por 03.12.2012 / 18:43

Tags