Linux
如何在使用者級別覆蓋 /etc/hosts 文件?
可能重複:
簡而言之:我想知道是否有可能獲得一個
~/hosts
可以覆蓋該文件的/etc/hosts
文件,因為我沒有任何特權訪問權限。我正在使用的機器似乎正確配置了正確的 DNS 伺服器。當我嘗試 ping我正在使用的常用機器名稱時,它失敗了。但是當我嘗試通過IP 地址ping 它們時,它會按預期工作。
我想避免因為一台未正確配置的機器而更改我製作的任何腳本和其他肌肉記憶的手工命令行™。我聯繫了系統管理員,但他們還有其他魚要炒。
我該如何實施?
除了 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
)的路徑。