如何设置每个用户的 resolv.conf

如何设置每个用户的 resolv.conf

有没有办法指定每个用户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 服务器,您无需更改解析器配置。您只需要在hostnslookupdig命令中更改 DNS 服务器即可。

host www.google.com 8.8.8.8

您还可以使用 chroot 环境或 Linux 容器 (LXC) 来获得不同的 resolv.conf 文件。

答案4

我也许可以通过以下方法解决这个问题向 NSS 添加服务

相关内容