Dlaczego pierwsze 1024 porty są ograniczone tylko do użytkownika root?


53

To bardziej bezczynna ciekawość niż cokolwiek innego. Mój przyjaciel zapytał mnie „jaki zakres portów może używać tylko root w Linuksie?” Powiedziałem mu, że 0-1024 są ograniczone. Potem zapytał mnie, dlaczego tak jest i ... byłem zagubiony. Nie mam pojęcia.

Czy istnieje powód, dla którego porty te są ograniczone, a 1025-65535 nie?

Większość głównych usług sieciowych (HTTP, FTP, SSH, Telnet, HTTPS, POP, SMTP itp.) Znajduje się w tym zakresie, więc możliwe odpowiedzi, o których pomyślałem:

  • Niezaufany użytkownik może uruchomić program, który nasłuchiwał na tych portach w celu uzyskania szczegółów logowania.
  • Niezaufany użytkownik może uruchomić nieautoryzowaną aplikację serwera.

Czy ktoś może tu rzucić światło?

Odpowiedzi:


52

Załóżmy, że wymieniasz dane z komputerem na porcie <1024 i wiesz, że na komputerze działa jakaś odmiana Uniksa. Wtedy wiesz, że usługa uruchomiona na tym porcie jest zatwierdzona przez administratora systemu: działa jako root, a przynajmniej musiała zostać uruchomiona jako root.

W szerokim, dzikim świecie Internetu nie ma to znaczenia. Większość serwerów jest administrowana przez te same osoby, co usługi na nich działające; nie ufasz korzeniom bardziej niż innym użytkownikom.

W przypadku maszyn z wieloma użytkownikami, zwłaszcza w sieci lokalnej, może to mieć znaczenie. Na przykład, kilka dni przed kryptografii cywilnej popularna metoda wykonywania poleceń powłoki na innym urządzeniu był rsh( R Emote SH ell); możesz użyć uwierzytelniania za pomocą hasła lub możesz uwierzytelnić tylko przez udowodnienie, że jesteś użytkownikiem X na komputerze A (z komputerem B wiedzącym, że X @ A może zalogować się jako X @ B bez hasła). Jak to udowodnić? rshKlient jest setuid root i używa <numer portu 1024, więc serwer wie, że klient to rozmawia jest godny zaufania i nie skłamie co do których użytkownik na A powołuje go. Podobnie NFS został zaprojektowany tak, aby był przejrzysty w odniesieniu do użytkowników i uprawnień, więc powszechną konfiguracją było to, że w sieci lokalnej każda maszyna korzystała z tej samej bazy danych użytkowników, a użytkownik N na A instalujący systemy plików z serwera B uzyskał uprawnienia użytkownika N na B. Ponownie fakt, że klient NFS pochodzi z numeru portu <1024, dowodzi, że root w A sprawdził klienta NFS, co ma upewnić się, że jeśli przesyła żądanie rzekomo od użytkownika N, to żądanie to naprawdę jest od użytkownika N.

Nieautoryzowani użytkownicy, którzy nie mogą uruchomić serwerów na niskich portach, to kolejna korzyść, ale nie główna. W tamtych czasach fałszowanie było dość nowością, a użytkownicy korzystający z serwerów fałszowania byliby szybko eliminowani przez czujnych administratorów.


2
A więc rodzaj uwierzytelnienia biednego człowieka? Czy ta konwencja ma jakąkolwiek rzeczywistą korzyść w nowoczesnych * systemach operacyjnych typu nix?
Andrew Lambert,

2
@Amazed: Świat unix jest konserwatywny, więc pytanie brzmi: „Czy to powoduje jakieś problemy?” (i należy na nie odpowiedzieć z pełną świadomością, że każdy serwer, który warto uruchomić, ma argument wiersza poleceń do zmiany portu).
dmckee,

5
@dmckee można również argumentować, że taki projekt prowadzi do większej liczby serwerów działających jako root, nawet jeśli mają one opcję uruchamiania na alternatywnych portach.
Andrew Lambert,

5
@Amazed To wciąż może być czasem przydatne w sieciach lokalnych. Nie sądzę, że prowadzi to do większej liczby serwerów działających jako root, usługi mogą powiązać port, a następnie zrzucić uprawnienia lub użyć funkcji, jeśli są dostępne, lub administrator może przekierować port w konfiguracji zapory. Nie sądzę, żeby zostałby wprowadzony, gdyby dziś został opracowany unix, ale to nie boli.
Gilles „SO- przestań być zły”,

1
Ten nonsens powinien już dawno zniknąć z jądra. Żaden numer portu nie powinien mieć żadnego specjalnego znaczenia. „Argumentacja” stojąca za tym projektem jest od dawna nieaktualna (sądzę, że była kontrowersyjna nawet w czasie projektowania). Co gorsza, implikacja dotyczy specjalnych zakresów liczb, które są „godne zaufania”. Serwery WWW muszą być wykonywane jako root, aby obsługiwać strony internetowe. Jeden exploit i serwer dziur zniknęły. A po co? Dla starszych projektów, które nigdy nawet nie zadziałały.
masi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.