Linux

如何在使用者級別覆蓋 /etc/hosts 文件?

  • October 28, 2013

可能重複:

我可以創建一個使用者特定的主機文件來補充 /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)的路徑。

引用自:https://unix.stackexchange.com/questions/57459