有沒有辦法指定每個使用者resolv.conf
?
我發現的是對每個用戶主機檔案的可能性的模糊引用,但我對此不感興趣,我實際上對完整的興趣resolv.conf
,因為我想設定不同的名稱伺服器。
如果你問為什麼要測試中文域名我不想影響系統的其他使用者的多用戶環境中的名稱伺服器。
是否有可能濫用 nsswitch 系統?
答案1
本機檔案系統名稱空間是您的朋友,儘管它們確實需要 root 權限才能設定。
sudo unshare --mount bash -s <<'EOF'
mount --bind /path/to/your/resolv.conf /etc/resolv.conf
sudo -u username-to-run-as command-to-run-with-alternate-resolv-conf
EOF
如果您想要一個可以使用更新的 resolv.conf 來執行任意命令的腳本,請考慮:
#!/bin/bash
## usage: with-custom-resolver /path/to/resolv.conf cmd arg1 arg2 ...
## ...note that this requires root.
script=""
add_cmd() {
local cmd_str
printf -v cmd_str '%q ' "$@"
script+="$cmd_str"$'\n'
}
resolv_conf=$1; shift
[[ $EUID = 0 ]] || { echo "Must be run as root" >&2; exit 1; }
[[ -e $resolv_conf ]] || { echo "No file found at: $resolv_conf" >&2; exit 1; }
add_cmd mount --bind "$resolv_conf" /etc/resolv.conf
add_cmd exec "$@"
unshare --mount sh -e -c "$script"
因此,這可以用作:
with-custom-resolver your-resolv.conf sudo -u someuser some-command arg1
答案2
簡單的回答—不…
但是,如果您要為每個使用者設定不同的虛擬機,您可能有機會做您想做的事情。
不過似乎有點無意義。
答案3
若要測試 DNS 伺服器,您不需要變更解析器配置。您只需在host
,nslookup
或命令中更改 DNS 伺服器即可dig
。
host www.google.com 8.8.8.8
您也可以使用 chroot 環境或 Linux 容器 (LXC) 來擁有不同的 resolv.conf 檔案。
答案4
我也許可以透過以下方式解決這個問題為 NSS 新增服務。