Czy można dodać listę hostów specyficznych tylko dla określonego użytkownika? Być może specyficzny dla użytkownika plik hosts?
Mechanizm ten powinien również uzupełniać wpisy w /etc/hosts
pliku.
not-root-user
hosts
redspike
źródło
źródło
Odpowiedzi:
Funkcjonalność, której szukasz, została zaimplementowana w glibc. Możesz zdefiniować niestandardowy plik hosts, ustawiając
HOSTALIASES
zmienną środowiskową. Nazwy w tym pliku zostaną zebrane przezgethostbyname
(patrz dokumentacja ).Przykład (testowany na Ubuntu 13.10):
Niektóre ograniczenia:
HOSTALIASES
działa tylko dla aplikacji używającychgetaddrinfo(3)
lubgethostbyname(3)
HOSTALIASES
ustawienie zostało utracone. ping jest setuid root (ponieważ musi nasłuchiwać pakietów ICMP), więcHOSTALIASES
nie będzie działał z pingiem, chyba że jesteś już rootem przed wywołaniem ping.źródło
nscd
i jest ograniczone do nazw hostów bez kropki.127.0.0.1 somedomain.com
)getcap /usr/sbin/ping
można zobaczyć coś takiego:/usr/bin/ping = cap_net_admin,cap_net_raw+p
. I technicznie jest tak, że musi otworzyć surowe gniazdo zamiast ICMP (ale przypuszczam, że można argumentować, że to tylko semantyka).Oprócz
LD_PRELOAD
sztuczek. Prostą alternatywą, która może działać na kilku systemach, byłaby edycja binarna kopii biblioteki systemowej, która obsługuje rozpoznawanie nazw hostów w celu zastąpienia ich/etc/hosts
własną ścieżką.Na przykład w systemie Linux:
Jeśli nie używasz
nscd
, skopiujlibnss_files.so
do własnej lokalizacji, na przykład:(udostępniona biblioteka może znajdować się w innym miejscu, np.
/lib/libnss_files.so.2
)Teraz edytuj kopię binarnie, aby zamienić
/etc/hosts
tam coś na taką samą długość/tmp/hosts
.Edytuj,
/tmp/hosts
aby dodać żądany wpis. I użyćdla
nss_files
spojrzeć w/tmp/hosts
zamiast/etc/hosts
.Zamiast tego
/tmp/hosts
możesz to zrobić/dev/fd//3
(tutaj, używając dwóch ukośników, aby długość/dev/fd//3
była taka sama jak/etc/hosts
), i wykonajNa przykład, które pozwoliłyby różnym poleceniom korzystać z różnych
hosts
plików.Jeśli
nscd
jest zainstalowany i uruchomiony, możesz go obejść, wykonując tę samą sztuczkę, ale tym razemlibc.so.6
i zastąp ścieżkę do gniazda nscd (coś podobnego/var/run/nscd/socket
) jakąś nieistniejącą ścieżką.źródło
LD_LIBRARY_PATH
wskazania na katalog należący do użytkownika oznacza, że każdy inny proces uruchamiany przez użytkownika może korzystać z tego katalogu, aby dokooptować wszelkie nowe procesy powstałe przez zastąpienie bibliotek. Aktualizacje zalibnss_files.so
pośrednictwem menedżera pakietów (w tym aktualizacje zabezpieczeń) nie będą odzwierciedlone w poprawionej wersji. ModyfikowanieLD_LIBRARY_PATH
jest ogólnie rzecz biorąc złe z innych powodów, ale jest też nierozsądne z powodu tych problemów.Prywatnych obszarów montowania utworzonych za pomocą
unshare
komendy można użyć do udostępnienia prywatnego pliku / etc / hosts procesowi powłoki i wszelkim kolejnym procesom potomnym rozpoczynającym się od tej powłoki.źródło
unshare(2)
iclone(2)
to jest część magii tutaj. Zobacz takżenamespaces(7)
iuser_namespaces(7)
.Jednym z rozwiązań jest umieszczenie każdego użytkownika w osobnym miejscu
chroot
, aby każdy mógł mieć oddzielne/etc/hosts
dla siebie.źródło
Stawiłem czoła tej samej potrzebie, więc wypróbowałem libnss-userhosts, ale nie działa w aplikacjach wielowątkowych. Dlatego napisałem libnss-homehosts . Jest bardzo nowy i przetestowany tylko przeze mnie. Możesz dać temu szansę! Obsługuje niektóre opcje w /etc/host.conf, wiele nazw aliasów i odwrotne rozpoznawanie (adres do nazwy).
źródło
Umieszczenie poniższego
~/.bashrc
działa dla mnie w bash. Konwertuje nazwę hosta w poleceniu na adres oparty na wpisach w~/.hosts
. Jeśli~/.hosts
nie istnieje lub nie można znaleźć nazwy hosta~/.hosts
, polecenie jest wykonywane normalnie. Powinno to działać z oryginalnymi flagami odpowiednich funkcji i niezależnie od tego, gdzie nazwa hosta jest umieszczona względem flag, npping -i 0.5 host1 -c 3
. Działa.~/.hosts
Plik ma pierwszeństwo przed każdym innym miejscu na znalezienie nazwy hostów, więc jeśli są jakieś dupicate hostów, adres w~/.hosts
zostaną wykorzystane.Przykład
~/.hosts
podano poniżej. Ma taki sam format jak/etc/hosts
. Komentarze i białe znaki są obsługiwane poprawnie.źródło
Nie jestem pewien, czy to by ci pomogło, ale przyszedłem tutaj, aby znaleźć sposób dodania zapisanych „hostów” w miejscu łatwo dostępnym tylko dla mojego użytkownika.
Zasadniczo musiałem móc ssh w niektórych polach w naszej sieci roboczej, która ma tylko jeden punkt wejścia.
Dodałem aliasy do mojego
.bashrc
pliku.Na przykład, jeśli dodałeś:
na dole twojego
~/.bashrc
(~
jest twoim katalogiem domowym). Następnie po ponownym wylogowaniu i zalogowaniu się możesz pisaćjrfbox
, naciskać Enter, a nastąpi połączenie.źródło
man ssh_config
.~/.bashrc
, po prostu zrób tosource ~/.bashrc
.. ~/.bashrc