System Linux uznawany jest do dziś jako jeden z najbezpieczniejszych systemów, zarówno dla użytkowników domowych, jak i również serwerów. Nie jest najczęściej wybieranym systemem na komputery domowe, jednak jeżeli chodzi o serwery, to jest głównym systemem, na którym większość serwerów się opiera. W wielu miejscach przeczytasz, że powodem takiej decyzji jest to, że posiada on inny sposób zarządzania, bardziej bezpieczny. I tak rzeczywiście jest. Sposób zarządzania użytkownikami i uprawnieniami, choć niejednemu administratorowi sprawił problemy, to jednak po jego opanowaniu jest wzorowo zorganizowany. Jednak innym czynnikiem wpływającym na bezpieczeństwo serwerów Linux było to, że potocznie określani hakerzy pomijali go w wielu swoich działaniach. Głównym celem były serwery bazujące na Windows. Oczywiście nie twierdzę, że włamań do miejsc na których zainstalowany był Linux nie było. Jednak statystycznie było ich znacznie mniej niż w przypadku serwerów Windows. Poznaj podstawy bezpieczeństwa serwerów Linux.
Oprogramowanie typu malware występuje na każdym rodzaju systemu! Tylko w przypadku Linux było ono pomijane i dlatego oprogramowania typu malware było bardzo mało. Drugą przyczyną jest to, że system Linux uruchamia inaczej pliki wykonywalne, w związku z tym zainstalowanie złośliwego oprogramowania w tym systemie nie odbywa się tak samo jak w przypadku Windowsa.
Dlatego jeżeli trzymasz się zasady nic mi nie grozi bo mam Linux, to jesteś w ogromnym błędzie! Jest on tak samo narażony na ataki jak każdy inny system. Szczególnie, jeżeli wykorzystujesz go jako serwer. W tym wypadku musisz zwrócić szczególną uwagę, aby wbudowane mechanizmy zabezpieczające wzmocnić.
W tym materiale chcę pokazać kilka sposobów oraz programów, które wspomogą w takich działaniach. Niestety, nie jest to wszystko ponieważ musiałbym napisać o tym książkę. Natomiast w tym materiale chcę pokazać te które uważam, za tak zwane must have. Poznaj podstawy bezpieczeństwa serwerów Linux.
Ostatni webinar w tym roku!
Zapraszamy na bezpłatny webinar poświęcony roli sztucznej inteligencji w zarządzaniu infrastrukturą IT, zarówno w dużych serwerowniach, jak i w środowiskach homelab.
W trakcie wydarzenia dowiesz się, jak AI może wspierać codzienną pracę administratora, pomagając w automatyzacji procesów, monitorowaniu zasobów, analizie danych oraz zwiększaniu efektywności operacyjnej.
Zapisy na: https://asdevops.pl/warsztaty/
Aktualizacja serwera
Należy odróżnić aktualizację systemu od aktualizacji dystrybucji. W przypadku aktualizacji systemu jest to opcja jak najbardziej pożądana. Niemniej jednak aktualizacja dystrybucji do najnowszej może przysporzyć sporo kłopotów. Szczególnie w przypadku serwera. Dlatego bardzo ważna jest aktualizacja systemu, ponieważ posiada ona najczęściej tylko łatki bezpieczeństwa. Natomiast aktualizacja dystrybucji powoduje często modyfikację wersji zainstalowanego oprogramowania, co może przyczynić się do ogromnych komplikacji.
W celu aktualizacji w systemie Debian oraz opartych o niego:
sudo apt update && sudo apt upgrade
W przypadku systemu Red Hat Enterprise Linux oraz opartych o niego:
sudo dnf upgrade
lub
sudo yum upgrade
Repozytoria serwera
Repozytoria mają ogromne znaczenie w związku z poprzednim paragrafem. To dzięki nim po wprowadzeniu odpowiedniej komendy systemowej nasze oprogramowanie jest aktualizowane. Dlatego bardzo istotne jest, aby nie dodawać do repozytoriów serwera oprogramowania firm trzecich. Ma to ogromne znaczenie pod względem bezpieczeństwa.
sudo zamiast root
Stwórz konto uprzywilejowane zamiast korzystać z konta root. Zaloguj się z jego użyciem zamiast korzystać z konta root.
Po pierwsze tworzymy konto użytkownika:
adduser <nazwa-użytkownika>
Zostaniesz poproszony o uzupełnienie podstawowych informacji. Pamiętaj, aby utworzyć dość skomplikowane hasło umożliwiające logowanie do twojego konta.
Po uzupełnieniu wszystkich niezbędnych informacji należy jeszcze konto dodać do grupy sudo. Robisz to w następujący sposób:
usermod -a -G sudo <nazwa-użytkownika>
Deaktywacja konta root
Kolejnym krokiem jest zablokowanie możliwości logowania za pomocą konta root. W celu uniemożliwienia logowania na konto root musimy dostać się na konto superużytkownika:
sudo -s
Następnie blokujemy możliwość logowania na konto:
passwd -l root
Po wprowadzenia powyższego polecenie nie będzie można połączyć się z kontem root.
Logowanie przy pomocy bezpiecznego SSH
W celu zapewnienia bezpieczeństwa należy zmienić sposób logowania przy pomocy ssh. Wszystkie zmiany należy wykonać w pliku /etc/ssh/sshd_config. Edytujemy go w następujący sposób:
sudo nano -w /etc/ssh/sshd_config
Odnajdujemy linię
#PermitRootLogin prohibit-password
i zmieniamy na:
PermitRootLogin no
Kolejnym krokiem jest ustawienie innego portu do logowania przy pomocy ssh. Opcja ta znajduje się na samym początku pliku. Powinna wyglądać w następujący sposób:
#Port 22
Dlatego usuwamy # i określamy port.
Port 3333
Możemy jeszcze zmusić usługę do logowania tylko przy pomocy IPv4:
#AddressFamily any
Zamieniamy na:
AddressFamily inet
Po wprowadzeniu powyższych zmian zapisujemy i wychodzimy z pliku.
Pozostaje zrestartować usługę, aby móc wprowadzić zmiany:
sudo systemctl restart sshd
Teraz, aby zalogować się przy musimy podać port jaki wprowadziliśmy w pliku konfiguracyjnym:
ssh <nazwa-użytkownika>@<adres> -p 3333
SELinux uruchomienie lub instalacja
W skrócie SELinux polega na określeniu polityki bezpieczeństwa do jakiej ma się stosować cały system. Jest warty uwagi oraz wnikliwego zapoznania się ponieważ powstał na zlecenie NASA i od jądra 2.6. jest wbudowany w dystrybucjach opartych o Red Hat Enterprise Linux. Posiada już przygotowane polityki bezpieczeństwa, dlatego nie jesteśmy pozostawieni z tym sami sobie. Bardzo dobra dokumentacja znajduje się pod tym adresem. Natomiast jeżeli korzystasz z serwera bazującego na Ubuntu lub Debianie to polecam https://wiki.debian.org/SELinux.
Firewall
Bardzo istotnym elementem zarówno komputera domowego, jak i również serwera jest odpowiednio skonfigurowany firewall. Najczęściej uruchamiany jest po wykonaniu niezbędnej konfiguracji i wymaga kilku, kilkunastu testów sprawdzających jego działanie.
W przypadku serwera Ubuntu
Instalacja firewalla:
sudo apt install ufw
Dodanie odpowiednich portów:
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
Oczywiście lista jest przykładowa.
Te trzy są najczęściej udostępniane. W przypadku tego firewalla i apache2 możesz jeszcze skorzystać z:
sudo ufw allow in "Apache Full"
Udostępni niezbędne porty aby można było korzystać z serwera apache2.
Aktywowanie firewalla:
sudo ufw enable
Restartowanie:
sudo ufw restart
I sprawdzanie statusu:
sudo ufw status
W przypadku serwera CentOS Stream:
Aplikacja firewall-cmd jest automatycznie zainstalowana dlatego nie musimy przeprowadzać żadnej.
Dodanie odpowiednich portów:
firewall-cmd --add-service={ssh,http,https} --permanent
Dodawanie portów ręcznie:
firewall-cmd --add-port={<port>/<typ tcp lub udp>} --permanent
Przeładowanie firewalla:
firewall-cmd --reload
Aktywowanie firewalla:
sudo systemctl enable --now firewalld
Szyfrowana komunikacja
Do komunikacji z serwerem oraz przesyłania plików zawsze stosuj połączenie szyfrowane. Najlepszymi narzędziami do tego celu są ssh, rsync, scp, sftp. W przypadku braku szyfrowania dane przesyłane do serwera mogą w niewidoczny sposób zostać przechwycone oraz zmodyfikowane. Narzędziem, które może wspomóc w tych działaniach jest https://www.gnupg.org/ .
Nie korzystaj z przestarzałych poleceń
Do poleceń, z których nie powinieneś korzystać należą FTP, Telnet i Rlogin, Rsh. Nie są określane jako bezpieczne, dlatego niezwłocznie powinieneś je usunąć ze swojego serwera. Zwróć uwagę na nazwy z poprzedniego paragrafu. Wszystkie tam wymienione posiadają pierwszą literę s która oznacza secure, czyli bezpieczna.
W przypadku serwera opartego o pakiety .deb powinieneś usunąć następujące narzędzia:
sudo apt purge xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
W przypadku serwerów opartych o pakiety .rpm:
sudo yum erase xinetd ypserv tftp-server telnet-server rsh-server
Stosowanie zasady minimalistycznej
Jest to serwer, dlatego powinien zawierać oprogramowanie niezbędne do jego funkcjonowania. Z tego względu zawsze warto sprawdzić jakie oprogramowanie jest aktualnie zainstalowane. Następnie zbędne usunąć. Jak najmniejsza liczba oprogramowania zmniejsza ryzyko znalezienia luki w oprogramowaniu. Drugim powodem stosowania takiej hierarchii jest utrzymanie porządku w systemie.
APT
W systemach opartych o apt do usuwania pakietów polecam:
sudo apt remove
sudo apt purge
Do wyświetlania list:
sudo apt list
Do czyszczenia:
sudo apt clean
sudo apt autoremove
YUM
W systemach opartych o yum do usuwania pakietów polecam:
sudo yum remove
sudo yum erase
Do wyświetlania list:
sudo yum list
Do czyszczenia:
sudo yum clean
sudo yum autoremove
Jeden serwer jedna usługa
Dobrym rozwiązaniem będzie stosowanie się do zasady jeden serwer – jedna usługa. Zapewni to dodatkowe bezpieczeństwo, ponieważ gdy ktoś uzyska dostęp do jednego z serwerów, to otrzyma tylko dostęp do częściowych danych. Takie rozbicie w wielu przypadkach może okazać się dość kosztowne, dlatego alternatywnym rozwiązaniem jest skorzystanie z dockera lub też wirtualizacji. Dzięki tym narzędziom uruchomisz na jednym serwerze oddzielne instancje usług. Gdy jedna z maszyn lub jeden z kontenerów, będzie zawierał lukę w usłudze, to pozostałe już nie. Dlatego dostęp będzie ograniczony do maszyny lub kontenera, który miał daną dziurawą usługę uruchomioną.
Pamiętaj o silnych hasłach
Podstawowym narzędziem obrony jest silne hasło. Korzystanie z połączenia słów i liczby odeszło do lamusa. Tworzenie takich haseł jest bardzo niebezpieczne i nie powinno mieć miejsca, szczególnie w przypadku serwerów. W związku z tym pamiętaj, aby hasło zawierało więcej niż 8 znaków, w którym znajdować powinna się kombinacja znaków, liczb oraz liter zarówno dużych i małych. Osobiście uważam, że nie powinieneś stosować się do zasady 8 znaków tylko hasła zawsze tworzyć dłuższe. Jeżeli ktoś będzie próbował złamać hasło najprawdopodobniej zacznie od kombinacji 8 znakowej.
Konfiguracja konieczności zmiana hasła
Nawet najbardziej skomplikowane hasła co jakiś czas powinny być zmieniane. Szczególnie w przypadku serwera. Do tego służy polecenie chage dostępne w systemach Linux. Zerknijmy na poniższy przykład:
sudo chage -M 30 -m 7 -W 5 kgodzisz
-M - maksymalna ilość dni za jaki ma nastąpić zmiana hasła
-m - minimalna ważność hasła
-W - przed jaką ilością dni mamy zostać poinformowani o konieczności zmiany hasła
Na końcu podajemy login naszego konta. Aby uzyskać informacje o wprowadzonych ustawieniach korzystamy z polecenia:
chage -l kgodzisz
Ostatnia zmiana hasła : gru 05, 2022
Hasło traci ważność : sty 04, 2023
Hasło nieaktywne : nigdy
Konto traci ważność : nigdy
Minimalna ilość dni pomiędzy zmianami hasła : 7
Maksymalna ilość dni pomiędzy zmianami hasła : 30
Liczba dni ostrzeżenia, zanim ważność hasła upłynie : 5
Piszę ten artykuł 5 grudnia 2022 roku, a przykład dotyczy systemu Red Hat Enterprise Linux 8.
Ustaw blokowanie konta po nieudanych próbach logowania
Jest to bardzo ważne ustawienie w przypadku słownikowych prób złamania hasła. W tym wypadku powinniśmy ustawić limit możliwości błędnych prób logowania. Robimy to przy pomocy polecenia:
sudo faillog -m 3 -u darki
Ustawiamy trzy możliwe próby błędnego logowania. Na końcu znajduje się nazwa konta. W celu wyświetlenia ustawień korzystamy z polecenia:
sudo faillog -u darki
Login Nieudane Maks. Ostatnio Na
darki 0 3 01/01/70 01:00:00 +0100
Wyłączenie zbędnych usług
Tak jak w przypadku zbędnego oprogramowania, należy pozbyć się zbędnych usług i pozostawić tylko te niezbędne do prawidłowego funkcjonowania serwera oraz niezbędnych narzędzi. Do wyświetlenia listy korzystamy z:
sudo systemctl list-unit-files --type=service
W celu wyłączenia usługi posługujemy się poleceniem:
sudo systemctl stop <nazwa-usługi>
sudo systemctl disable <nazwa-usługi>
Wyszukiwanie plików o niewłaściwych uprawnieniach
Listę plików posiadających podejrzane uprawnienia uzyskamy przy pomocy polecenia:
sudo find /<nazwa-katalogu> -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
Do wyświetlenia listy plików bez przypisanego właściciela używamy polecenia:
sudo find /<nazwa-katalogu> -xdev \( -nouser -o -nogroup \) -print
Każdemu z powyższych wyników należy się dokładnie przyjrzeć i nadać odpowiednie prawa lub usunąć.
Wyłącz obsługę niepotrzebnych urządzeń
Dla serwera zbędna jest możliwość obsługi portów usb. W związku z tym należy ją wyłączyć. Plik odpowiadający za to znajduje się w katalogu:
cd /lib/modules/$(uname -r)/kernel/drivers/usb/storage/
W przypadku Red Hat Enterprise Linux korzystamy z polecenia zmieniającego nazwę w następujący sposób:
sudo mv usb-storage.ko.xz usb-storage.ko.xz.blacklist
W przypadku systemu Debian korzystamy z polecenia zmieniającego nazwę w następujący sposób:
sudo mv usb-storage.ko usb-storage.ko.blacklist
Różnica jest tylko w końcówce nazwy pliku. Dlatego jeżeli spotkałbyś się z błędem zerknij w katalog jak nazywa się plik odpowiadający za USB.
Inne przydatne oprogramowanie
ClamAV
Do bardzo przydatnych programów zaliczamy darmowy ClamAV, który będzie służył jako skaner wirusów w systemie. Tak jak wspomniałem na początku tego materiału, system Linux nie jest pozbawiony zagrożeń, dlatego ważne jest, aby takie skanowania regularnie przeprowadzić.
Instalacja w systemie Debian i pochodnych:
sudo apt install clamav
Instalacja w systemie Red Hat Enterprise Linux i pochodnych:
sudo dnf install clamav
sudo yum install clamav
Uruchomienie skanowania:
sudo clamscan <ścieżka-do-skanowanego-katalogu>
chrootkit
Następnym bardzo pomocnym narzędziem będzie wyszukujące rootkity na naszym serwerze:
sudo apt install chkrootkit
Przeprowadzenie skanowania:
sudo chkrootkit
Podstawy bezpieczeństwa serwerów Linux – skanery podatności oraz monitoring
Do innych pomocnych narzędzi, z których warto skorzystać są skanery podatności jak na przykład Greenbone Vulnerability Manager czy też Zabbix, o którym bardzo dużo piszemy na blogu oraz prowadzimy szkolenie znajdujące się pod tym adresem.
Podsumowanie – podstawy bezpieczeństwa serwerów Linux
Zapewnienie bezpieczeństwa serwera nie należy do spraw łatwych. Prezentowane ustawienia należą do podstawowych, które powinien zawierać każdy serwer. Niemniej jednak jest to temat o tyle szeroki, że powstała już niejedna książka z tego zakresu. Jeżeli jesteś zainteresowany lub konieczne jest, abyś zapoznał się ze szczegółami to albo poszukaj publikacji w formie papierowej, albo zapraszam do naszego kursu znajdującego się pod tym adresem. W przypadku tego drugiego nie pozostaniesz sam, tak jak w przypadku książki. Posiadamy grupę na discordzie czy też na facebooku, gdzie w razie problemów będziesz mógł poprosić o pomoc. Mam nadzieję, że dzięki wpisowi znasz podstawy bezpieczeństwa serwerów Linux.
Chcesz poczytać więcej o Linuxie? Przeczytaj nasze wpisy blogowe!