简而言之:我想知道是否可以获得一个~/hosts
可以覆盖该/etc/hosts
文件的文件,因为我没有任何特权访问权限。
我正在使用的机器似乎确实配置了正确的 DNS 服务器。当我尝试 ping 普通机器时姓名我正在使用它,它失败了。但是当我尝试通过 ping 他们时IP地址它按预期工作。
我想避免更改任何脚本和其他肌肉记忆手工制作的命令行™是我因为一台配置不当的机器而制作的。我联系了系统管理员,但他们还有其他事情要做。
我怎样才能实现它?
答案1
除了 LD_PRELOAD 技巧之外。如果您不使用,一个简单的替代方法nscd
是复制libnss_files.so
到您自己的某个位置,例如:
mkdir -p -- ~/lib &&
cp /lib/x86_64-linux-gnu/libnss_files.so.2 ~/lib
对副本进行二进制编辑以将/etc/hosts
其替换为相同长度的内容,例如/tmp/hosts
.
perl -pi -e 's:/etc/hosts:/tmp/hosts:g' ~/lib/libnss_files.so.2
编辑/tmp/hosts
以添加所需的条目。并使用
export LD_LIBRARY_PATH=~/lib
来nss_files
查看/tmp/hosts
而不是/etc/hosts
.
相反/tmp/hosts
,你也可以做到/dev/fd//3
,然后做
exec 3< ~/hosts
例如,这将允许不同的命令使用不同的hosts
文件。
$ cat hosts
1.2.3.4 asdasd
$ LD_LIBRARY_PATH=~/lib getent hosts asdasd 3< ~/hosts
1.2.3.4 asdasd
如果nscd
已安装并正在运行,您可以通过执行相同的技巧来绕过它,但这次将libc.so.6
nscd 套接字的路径(类似于/var/run/nscd/socket
)替换为一些不存在的路径。