Uruchomienie usługi internetowej, która łączy się z portem 80, zwykle nie wymaga uprawnień sudoer. Ponieważ porty 80/443 są portami systemowymi, co oznacza, że mogą z nich korzystać tylko uprzywilejowani użytkownicy, dlaczego więc te usługi mogą nadal łączyć się z tymi portami?
service
permissions
port-443
adaml
źródło
źródło
Odpowiedzi:
Istnieją zasadniczo dwa różne podejścia:
Początkowo zacznij działać jako root, powiąż z uprzywilejowanym portem, a następnie zejdź do nieuprzywilejowanego użytkownika.
inetd lub xinetd działa uprzywilejowane i przekazuje żądania do serwera WWW działającego nieuprzywilejowanego.
źródło
Myślę, że źle to rozumiesz. Każdy może korzystać z tych portów. Powiązanie z nimi jest operacją uprzywilejowaną.
Uzasadnieniem jest to, że jakiś użytkownik Joe nie powinien mieć możliwości napisania złośliwego serwera WWW, a następnie utworzenia hosta, na którym nie ma żadnych uprawnień administracyjnych. Oczywiście jest to dość słaby model, zwykle nie ma nic, co powstrzymałoby Joe przed podłączeniem własnego komputera do sieci i mógłby mieć uprawnienia administracyjne do każdej maszyny, do której ma fizyczny dostęp.
Zrobię demonstrację z netcat.
Jako zwykły użytkownik nie mogę powiązać z portem 80:
Mogę powiązać z portem 8080:
Tymczasem w innym terminalu mogę połączyć się z portem 80 i wysłać trochę danych i zobaczyć, jak pojawiają się na końcu serwera, który właśnie uruchomiłem:
Jeśli chcę się połączyć z portem 80, muszę być rootem:
Lub mogę przypisać
CAP_NET_BIND_SERVICE
zdolność donc
pliku binarnego:Inną opcją jest napisanie programu serwera tak, aby po jego wywołaniu
listen()
upuścił uprawnienia administratora. Jest to dość powszechne rozwiązanie i zobaczysz je w przypadku większości demonów. Na przykład Apache zaczyna się od init jako root, a następnie upuszcza uprawnienia roota i staje się użytkownikiemwww-data
lub czymś podobnym, gdy jest związany z portem 80. Spróbuj uruchomić/etc/init.d/apache start
jako root, a Apache prawdopodobnie się nie uruchomi.źródło