有没有办法指定每个用户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
或dig
命令中更改 DNS 服务器即可。
host www.google.com 8.8.8.8
您还可以使用 chroot 环境或 Linux 容器 (LXC) 来获得不同的 resolv.conf 文件。
答案4
我也许可以通过以下方法解决这个问题向 NSS 添加服务。