Есть ли способ указать для каждого пользователя resolv.conf
?
Я обнаружил расплывчатые ссылки на возможность наличия файла хоста для каждого пользователя, но меня это не интересует, меня на самом деле интересует полная resolv.conf
, потому что я хочу установить разные серверы имен.
Если вы спрашиваете, зачем нужна проверка cjdns сервер (ы) имен в многопользовательской среде, в которой я не хочу влиять на других пользователей системы.
Возможно ли злоупотребление системой nsswitch?
Пространства имен локальной файловой системы - ваш друг, хотя для их настройки требуются права 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
Простой ответ - НЕТ ....
Однако, если вам нужно настроить разные виртуальные машины для каждого пользователя, у вас может быть шанс делать то, что вы хотите.
Однако это кажется немного бессмысленным.
Чтобы протестировать DNS-сервер, вам не нужно изменять конфигурацию преобразователя. Вам просто нужно изменить DNS-сервер в host
, nslookup
или dig
команда.
host www.google.com 8.8.8.8
Вы также можете использовать среду chroot или контейнеры Linux (LXC), чтобы иметь другой файл resolv.conf.
Я мог бы решить эту проблему добавление услуги в NSS.