So legen Sie eine resolv.conf für jeden Benutzer fest

So legen Sie eine resolv.conf für jeden Benutzer fest

Gibt es eine Möglichkeit, einen Wert pro Benutzer anzugeben resolv.conf?

Ich habe vage Hinweise auf die Möglichkeit gefunden, für jeden Benutzer eine eigene Hostdatei zu haben, aber daran bin ich nicht interessiert. Eigentlich bin ich an einer vollständigen interessiert resolv.conf, weil ich unterschiedliche Nameserver einrichten möchte.

Wenn Sie fragen, warum der Punkt ist testencjdnsNameserver in einer Mehrbenutzerumgebung, in der ich andere Benutzer des Systems nicht beeinträchtigen möchte.

Wäre es möglich, das NSswitch-System möglicherweise zu missbrauchen?

Antwort1

Lokale Dateisystem-Namespaces sind Ihr Freund, für die Einrichtung sind allerdings Root-Berechtigungen erforderlich.

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

Wenn Sie ein Skript möchten, das einen beliebigen Befehl mit Ihrer aktualisierten Datei „resolv.conf“ ausführt, beachten Sie Folgendes:

#!/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"

Dies könnte also wie folgt verwendet werden:

with-custom-resolver your-resolv.conf sudo -u someuser some-command arg1

Antwort2

Einfache Antwort – NEIN …

Wenn Sie jedoch für jeden Benutzer eine andere virtuelle Maschine einrichten, haben Sie möglicherweise die Möglichkeit, das Gewünschte zu erreichen.

Scheint jedoch ein wenig sinnlos.

Antwort3

Um einen DNS-Server zu testen, müssen Sie die Resolver-Konfiguration nicht ändern. Sie müssen lediglich den DNS-Server im Befehl host, nslookupoder ändern dig.

host www.google.com 8.8.8.8

Sie können auch eine Chroot-Umgebung oder Linux Containers (LXC) verwenden, um eine andere resolv.conf-Datei zu haben.

Antwort4

Ich könnte das Problem vielleicht lösen, indem ichHinzufügen eines Dienstes zu NSS.

verwandte Informationen