Co jest domyślnie wyłączone na większości serwerów Linux (i dlaczego to ma znaczenie)
Kiedy aprowizujesz świeży serwer Linux — czy to VPS, serwer dedykowany, czy wirtualna maszyna hostowana w chmurze — system uruchamia się w celowo minimalistycznym i wzmocnionym środowisku. To nie jest niedopatrzenie ani niekompletna konfiguracja. To zamierzona filozofia projektowania wbudowana w każdą główną dystrybucję Linuksa.
Nowoczesne kompilacje serwerów Linux usuwają niepotrzebne usługi, protokoły i interfejsy, aby zminimalizować powierzchnię ataku, zaoszczędzić zasoby systemowe i dać administratorom precyzyjną kontrolę nad tym, co działa na ich infrastrukturze. Zrozumienie, co jest domyślnie wyłączone — i dlaczego — jest podstawową wiedzą dla każdego administratora systemów, inżyniera DevOps lub programisty zarządzającego obciążeniami produkcyjnymi.
Ten przewodnik analizuje najczęstsze funkcje i usługi, które są domyślnie wyłączone lub nieobecne na serwerach Linux, wyjaśnia uzasadnienie bezpieczeństwa i operacyjne każdej decyzji oraz pokazuje dokładnie, jak zweryfikować każde ustawienie na własnym systemie.
Dlaczego „Wyłączone domyślnie” to strategia bezpieczeństwa, a nie ograniczenie
Zasada działająca tutaj jest często nazywana „bezpieczne domyślnie, rozszerzalne z wyboru”. Zamiast wysyłać w pełni wyposażony system i ufać administratorom, że go zablokują, nowoczesne dystrybucje Linux wysyłają zablokowany system i ufają administratorom, że włączą tylko to, czego potrzebują.
To podejście bezpośrednio zmniejsza ryzyko błędnej konfiguracji — jednej z głównych przyczyn naruszeń bezpieczeństwa serwerów. Każda usługa, która nie działa, to usługa, która nie może być wykorzystana. Każdy protokół, który nie jest włączony, to protokół, który nie może być przechwycony. Każdy otwarty port, który nie istnieje, to punkt wejścia, który atakujący nie mogą sondować.
Mając ten kontekst, przeanalizujmy każde domyślne ograniczenie szczegółowo.
1. Logowanie SSH jako root
Status: Wyłączone domyślnie na praktycznie wszystkich nowoczesnych dystrybucjach serwerów Linux
Bezpośrednie logowanie root przez SSH jest uniwersalnie wyłączone w nowoczesnych kompilacjach serwerów Linux — i z doskonałych powodów. Zezwolenie na zdalny dostęp root tworzy pojedynczy katastrofalny punkt awarii: jedno skompromitowane hasło daje atakującemu pełną, nieograniczoną kontrolę nad całym systemem.
Prawidłowy przepływ pracy to zalogowanie się jako użytkownik bez uprawnień i eskalacja uprawnień za pomocą sudo lub su tylko gdy jest to konieczne. To tworzy ścieżkę audytu, ogranicza zasięg kradzieży poświadczeń i wymusza celowe działanie przed wykonaniem uprzywilejowanych poleceń.
Jak zweryfikować:
grep PermitRootLogin /etc/ssh/sshd_configOczekiwane wyjście na prawidłowo wzmocnionym serwerze:
PermitRootLogin noJeśli widzisz PermitRootLogin yes lub PermitRootLogin prohibit-password, natychmiast przejrzyj konfigurację SSH i dostosuj ją do polityki bezpieczeństwa organizacji.
Najlepsza praktyka:
Utwórz dedykowanego użytkownika administracyjnego, dodaj go do grupy sudo i upewnij się, że PermitRootLogin no jest ustawione przed wdrożeniem jakiejkolwiek usługi dostępnej publicznie.
2. Uwierzytelnianie hasłem w SSH
Status: Wyłączone domyślnie na większości serwerów aprowizowanych w chmurze
Na wielu platformach chmurowych i w środowiskach hostingu zarządzanego uwierzytelnianie hasłem SSH jest całkowicie wyłączone w momencie aprowizacji. Pary kluczy SSH są jedynym akceptowanym mechanizmem uwierzytelniania.
To znaczna poprawa bezpieczeństwa. Uwierzytelnianie hasłem jest podatne na ataki brute-force, credential stuffing i ataki słownikowe. Klucze SSH — szczególnie gdy są chronione hasłem — są obliczeniowo niemożliwe do brute-force’owania przy obecnej technologii.
Tradycyjne instalacje oparte na ISO mogą nadal domyślnie zezwalać na logowanie hasłem, ale najlepszą praktyką jest wyłączenie ich natychmiast po skonfigurowaniu uwierzytelniania opartego na kluczach.
Jak zweryfikować:
grep PasswordAuthentication /etc/ssh/sshd_configOczekiwane wyjście:
PasswordAuthentication noJak wyłączyć uwierzytelnianie hasłem:
Edytuj /etc/ssh/sshd_config i ustaw:
PasswordAuthentication no
PubkeyAuthentication yesNastępnie przeładuj demona SSH:
# Ubuntu/Debian
sudo systemctl reload ssh
# RHEL/AlmaLinux/Rocky Linux
sudo systemctl reload sshd> Ostrzeżenie: Zawsze potwierdź, że Twój klucz SSH działa przed wyłączeniem uwierzytelniania hasłem, w przeciwnym razie ryzykujesz zablokowanie się na serwerze.
3. Starsze i nieszyfrowane protokoły sieciowe
Status: Nieobecne w nowoczesnych kompilacjach serwerów
Usługi takie jak Telnet, FTP, Rlogin i Rsh nie są instalowane na nowoczesnych obrazach serwerów Linux. Te protokoły zostały zaprojektowane w erze, zanim szyfrowanie było priorytetem. Przesyłają poświadczenia, polecenia i dane w postaci zwykłego tekstu — co czyni je trywialnie łatwymi do przechwycenia za pomocą analizatora pakietów na dowolnym segmencie sieci między klientem a serwerem.
Te protokoły zostały zastąpione bezpieczniejszymi alternatywami:
| Starszy protokół | Bezpieczna zamiana |
|---|---|
| Telnet (port 23) | SSH (port 22) |
| FTP (port 21) | SFTP lub FTPS |
| Rlogin / Rsh | SSH |
Jak zweryfikować, że żadne starsze usługi nie działają:
ss -tulnpJeśli porty 21 (FTP) lub 23 (Telnet) nie pojawiają się w wyjściu, te usługi nie są aktywne. Jeśli się pojawiają, natychmiast zbadaj i usuń lub wyłącz je, chyba że istnieje konkretne, uzasadnione wymaganie.
4. Graficzne interfejsy użytkownika (GUI)
Status: Nie zainstalowane w edycjach serwerowych
Dystrybucje serwerowe — w tym Ubuntu Server, Debian, AlmaLinux, Rocky Linux i CentOS Stream — nie są dostarczane z graficznymi środowiskami pulpitu, takimi jak GNOME, KDE Plasma czy XFCE. To jest celowy i dobrze uzasadniony wybór.
Środowisko GUI:
- Zużywa znaczne zasoby RAM i CPU, które powinny być dedykowane dla obciążeń
- Wprowadza dużą liczbę dodatkowych pakietów oprogramowania, z których każdy stanowi potencjalną lukę w zabezpieczeniach
- Jest całkowicie niepotrzebne do administracji serwerem, która jest wykonywana przez wiersz poleceń przez SSH
Oczekiwanie jest jednoznaczne: serwery są zarządzane przez CLI. Jeśli stwierdzisz, że chcesz graficzny interfejs na serwerze produkcyjnym, to generalnie sygnał, że proces lub przepływ pracy musi być ponownie rozważony.
> Uwaga: Narzędzia takie jak Panele kontrolne VPS — takie jak cPanel, Plesk czy DirectAdmin — zapewniają oparte na sieci graficzne interfejsy zarządzania bez konieczności instalowania pełnego środowiska pulpitu na serwerze.
5. Łańcuchy narzędzi programistycznych i kompilatory
Status: Nie zainstalowane w minimalnych obrazach serwerów
Kompilatory takie jak gcc i narzędzia budowania takie jak make, cmake i autoconf są celowo nieobecne w większości minimalnych obrazów serwerów Linux. Uzasadnienie jest dwojaki:
- Zmniejszony rozmiar obrazu: Obrazy minimalne są szybsze do wdrożenia, łatwiejsze do kopii zapasowej i zużywają mniej zasobów.
- Wzmocnienie bezpieczeństwa: Jeśli atakujący uzyska dostęp do serwera, brak kompilatora uniemożliwia im kompilowanie złośliwych plików binarnych lub kodu exploita bezpośrednio na systemie. To znaczna przeszkoda w wielu łańcuchach ataków.
Jak zweryfikować:
gcc --versionJeśli łańcuch narzędzi nie jest zainstalowany, zobaczysz:
-bash: gcc: command not foundJak zainstalować, jeśli jest wymagane:
# Ubuntu/Debian
sudo apt update && sudo apt install build-essential
# RHEL/AlmaLinux/Rocky Linux
sudo dnf groupinstall "Development Tools"Zainstaluj narzędzia programistyczne tylko na serwerach, gdzie kompilacja jest rzeczywistym wymogiem operacyjnym — takich jak serwery budowania lub środowiska programistyczne — i unikaj instalowania ich na serwerach aplikacji produkcyjnych lub bazach danych.
6. ICMP (Odpowiedzi Ping)
Status: Włączone domyślnie na poziomie systemu operacyjnego; często ograniczone na poziomie sieci/zapory
Serwery Linux domyślnie odpowiadają na żądania echa ICMP (ping) na poziomie systemu operacyjnego. Jednak wiele dostawców hostingu i platform chmurowych blokuje ICMP na poziomie zapory sieciowej lub grupy bezpieczeństwa, co sprawia, że serwery wydają się nieosiągalne dla ping, nawet gdy działają w pełni.
Tłumienie odpowiedzi ICMP sprawia, że serwer jest mniej wykrywalny podczas skanów rozpoznania sieciowego. Jednak utrudnia to również legitymacyjne monitorowanie i diagnostykę — narzędzia takie jak ping i traceroute polegają na ICMP, aby działać prawidłowo.
Jak przetestować:
ping your_server_ipJak zablokować ICMP na poziomie systemu operacyjnego za pomocą iptables (jeśli wymagane):
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROPDecyzja o blokowaniu ICMP powinna być podjęta celowo, ważąc marginalną korzyść bezpieczeństwa względem kosztu operacyjnego dla przepływów pracy monitorowania i rozwiązywania problemów.
7. IPv6
Status: Włączone domyślnie w większości dystrybucji; może być ograniczone na poziomie dostawcy
IPv6 jest włączone domyślnie w nowoczesnych dystrybucjach Linux, w tym Ubuntu, Debian, Fedora i pochodnych RHEL. Jednak wiele dostawców hostingu wyłącza IPv6 na poziomie sieci, jeśli ich infrastruktura go nie obsługuje, co oznacza, że system operacyjny może być skonfigurowany dla IPv6, ale serwer nie będzie miał routowalnego adresu IPv6.
Jak sprawdzić adresy IPv6:
ip a | grep inet6Jeśli pojawia się tylko ::1 (adres loopback), IPv6 nie jest skonfigurowane na poziomie sieci, nawet jeśli jest włączone w systemie operacyjnym.
Jeśli Twoje obciążenie nie wymaga IPv6 i Twój dostawca go nie oferuje, możesz wyłączyć je na poziomie jądra, dodając następujące do /etc/sysctl.conf:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1Następnie zastosuj zmianę:
sudo sysctl -p8. Niepotrzebne usługi systemowe i demony
Status: Różni się w zależności od dystrybucji; instalacje minimalne wyłączają większość nieistotnych usług
Poza wymienionymi powyżej elementami, minimalne instalacje serwerów Linux zazwyczaj wyłączają lub pomijają szereg usług, które są obecne w kompilacjach pełnofunkcyjnych lub dla pulpitów:
- Bluetooth — nieistotne na serwerach; nie zainstalowane
- Avahi/mDNS — odkrywanie sieci lokalnej; niepotrzebne i potencjalnie zagrożenie bezpieczeństwa na serwerach
- Cups (drukowanie) — brak przypadku użycia na serwerze
- ModemManager — nieistotne na sprzęcie serwerowym
- NetworkManager — często zastępowany przez
systemd-networkdlub ręczną konfiguracjęnetplanna serwerach
Jak przeprowadzić audyt uruchomionych usług:
systemctl list-units --type=service --state=runningPrzejrzyj tę listę okresowo i wyłącz każdą usługę, która nie służy udokumentowanemu celowi na tym konkretnym serwerze.
Praktyczna lista kontrolna bezpieczeństwa dla świeżo aprowizowanego serwera Linux
Po aprowizacji nowego serwera — czy to hosting współdzielony uaktualniony do VPS, czy zupełnie nowy serwer dedykowany — przejdź przez tę listę kontrolną, aby potwierdzić swoją bazową postawę bezpieczeństwa:
| Sprawdzenie | Polecenie | Oczekiwany wynik |
|---|---|---|
| Logowanie SSH jako root | grep PermitRootLogin /etc/ssh/sshd_config | no |
| Uwierzytelnianie hasłem | grep PasswordAuthentication /etc/ssh/sshd_config | no |
| Otwarte porty | ss -tulnp | Widoczne tylko oczekiwane porty |
| GCC zainstalowany | ###PPT_ |
