Ist es möglich, eine Liste von Hosts hinzuzufügen, die nur für einen bestimmten Benutzer spezifisch sind? Vielleicht eine benutzerspezifische Hosts-Datei?
Dieser Mechanismus sollte auch die Einträge in der /etc/hosts
Datei ergänzen .
not-root-user
hosts
Redspike
quelle
quelle
Antworten:
Die von Ihnen gesuchte Funktionalität ist in glibc implementiert. Sie können eine benutzerdefinierte Hostdatei definieren, indem Sie die
HOSTALIASES
Umgebungsvariable festlegen . Die Namen in dieser Datei werden von übernommengethostbyname
(siehe Dokumentation ).Beispiel (getestet auf Ubuntu 13.10):
Einige Einschränkungen:
HOSTALIASES
Funktioniert nur für Anwendungen, diegetaddrinfo(3)
oder verwendengethostbyname(3)
HOSTALIASES
Einstellung verloren geht. ping ist setuid root (da es auf ICMP-Pakete warten muss),HOSTALIASES
funktioniert also nicht mit ping, es sei denn, Sie sind bereits root, bevor Sie ping aufrufen.quelle
nscd
Hostnamen ohne Punkt verwenden.127.0.0.1 somedomain.com
)getcap /usr/sbin/ping
könnten Sie sehen so etwas wie:/usr/bin/ping = cap_net_admin,cap_net_raw+p
. Und technisch gesehen muss es eher einen Raw-Socket als einen ICMP-Socket öffnen (aber ich nehme an, Sie könnten argumentieren, dass dies nur eine Semantik ist).Neben den
LD_PRELOAD
Tricks. Eine einfache Alternative, die auf einigen Systemen funktionieren kann, besteht darin, eine Kopie der Systembibliothek, die die Auflösung von Hostnamen handhabt, binär zu bearbeiten und durch/etc/hosts
einen eigenen Pfad zu ersetzen .Zum Beispiel unter Linux:
Wenn Sie nicht verwenden
nscd
, kopieren Sielibnss_files.so
an einen Ort Ihrer Wahl wie:(Die gemeinsam genutzte Bibliothek kann sich an einer anderen Stelle befinden, z. B.
/lib/libnss_files.so.2
)Bearbeiten Sie die Kopie nun binär, um sie durch eine Kopie zu ersetzen
/etc/hosts
, die der Länge der Kopie entspricht/tmp/hosts
.Bearbeiten Sie
/tmp/hosts
, um den gewünschten Eintrag hinzuzufügen. Und benutzefür
nss_files
schauen in/tmp/hosts
statt/etc/hosts
.Stattdessen
/tmp/hosts
könnten Sie es auch machen/dev/fd//3
(hier mit zwei Schrägstrichen, so dass die Länge/dev/fd//3
der gleiche ist wie die von/etc/hosts
) und tunZum Beispiel, was es unterschiedlichen Befehlen erlauben würde, unterschiedliche
hosts
Dateien zu verwenden.Wenn
nscd
es installiert ist und ausgeführt wird, können Sie es umgehen, indem Sie denselben Trick ausführen, aber diesmallibc.so.6
den Pfad zum nscd-Socket (so etwas wie/var/run/nscd/socket
) durch einen nicht vorhandenen Pfad ersetzen .quelle
LD_LIBRARY_PATH
auf ein Verzeichnis verweisen, dessen Eigentümer der Benutzer ist, kann jeder andere vom Benutzer ausgeführte Prozess dieses Verzeichnis verwenden, um alle neuen Prozesse zu übernehmen, die durch das Ersetzen von Bibliotheken entstehen. Und Updateslibnss_files.so
über den Paketmanager (einschließlich Sicherheitsupdates) werden in der gepatchten Version nicht berücksichtigt. Das ÄndernLD_LIBRARY_PATH
ist im Allgemeinen aus anderen Gründen nicht empfehlenswert, aber aufgrund dieser Probleme auch nicht sinnvoll.Private Mountspaces, die mit dem
unshare
Befehl erstellt wurden, können verwendet werden, um eine private Datei / etc / hosts für einen Shell-Prozess und alle nachfolgenden untergeordneten Prozesse bereitzustellen, die von dieser Shell gestartet werden.quelle
unshare(2)
undclone(2)
das ist ein Teil der Magie hier. Siehe auchnamespaces(7)
unduser_namespaces(7)
.Eine Lösung besteht darin, jeden Benutzer in einem eigenen zu haben
chroot
, sodass jeder für sich einen eigenen Benutzer haben kann/etc/hosts
.quelle
Ich hatte das gleiche Bedürfnis, also habe ich libnss-userhosts ausprobiert, aber es schlägt bei Multithread-Anwendungen fehl. Deshalb habe ich libnss-homehosts geschrieben . Es ist sehr neu und nur von mir getestet. Sie können eine Chance dafür geben! Es werden einige Optionen in /etc/host.conf, mehrere Aliasnamen und die umgekehrte Auflösung (von Adresse zu Name) unterstützt.
quelle
Folgendes einzutragen
~/.bashrc
funktioniert für mich in der Bash. Es konvertiert den Hostnamen im Befehl in eine Adresse, die auf Einträgen in basiert~/.hosts
. Falls~/.hosts
nicht vorhanden oder der Hostname nicht vorhanden ist~/.hosts
, wird der Befehl wie gewohnt ausgeführt. Dies sollte mit den ursprünglichen Flags der relevanten Funktionen funktionieren und unabhängig davon, wo der Hostname relativ zu den Flags platziert ist, zping -i 0.5 host1 -c 3
. B. funktioniert. Die~/.hosts
Datei hat Vorrang vor jedem anderen Speicherort für die Suche nach Hostnamen. Wenn also doppelte Hostnamen vorhanden sind, wird die Adresse in~/.hosts
verwendet.Ein Beispiel für
~/.hosts
ist unten angegeben. Es folgt dem gleichen Format wie/etc/hosts
. Kommentare und Leerzeichen werden korrekt behandelt.quelle
Ich bin mir nicht sicher, ob dies Ihnen helfen würde, aber ich bin hierher gekommen, um nach einer Möglichkeit zu suchen, gespeicherte "Hosts" irgendwo hinzuzufügen, auf die nur mein Benutzer Zugriff hatte.
Ich musste grundsätzlich in der Lage sein, in bestimmte Kästchen in unserem Arbeitsnetzwerk zu sshen, das nur einen Einstiegspunkt hat.
Ich habe meiner
.bashrc
Datei Aliase hinzugefügt .Wenn Sie beispielsweise Folgendes hinzugefügt haben:
am unteren Rand Ihres
~/.bashrc
(~
ist Ihr Home-Verzeichnis). Dann , nachdem Sie sich abmelden und erneut anmelden, können Sie gebenjrfbox
, treffen Enter, und es wird eine Verbindung.quelle
man ssh_config
.~/.bashrc
, gehen Sie einfachsource ~/.bashrc
.. ~/.bashrc