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>