Linux Gazette ... making Linux just a little more fun! Linux Security Tips
-- tłumaczenie: Sebastian Pawlak, autor: Kapil Sharma
W artykule tym będę wyjaśniał jak sprawić, aby Linux stał się systemem
bezpieczniejszym.
Tekst ten pozwoli każdemu zwiększyć zabezpieczenia w Linux RedHat.
Zabezpieczanie BIOS
Zawsze zabezpieczaj BIOS hasłem, tak aby uniemożliwić bootowanie komputera
z dyskietki poprzez zmianę ustawień w BIOSie.
Hasło uniemożliwi niepożądanym osobom próby uruchomienia komputera za pomocą
dyskietki systemowej oraz ochroni cię przed próbami zmian w BIOSie (takimi
jak: zezwolenie na bootowanie z dyskietki, CDROMu lub uruchamianie serwera
bez podania hasła).
Zabezpieczanie LILO
Dodaj trzy parametry do pliku "/etc/lilo.conf"; są to time-out, restricted
i password.
Krok 1 Wyedytuj plik "/etc/lilo.conf" i dodaj lub zmodyfikuj trzy opcje: boot=/dev/hda map=/boot/map install=/boot/boot.b time-out=00 # zmień tę linię na 00 prompt Default=linux restricted # dodaj tę linię password=<password> # dodaj tę linię i wpisz swoje hasło image=/boot/vmlinuz-2.2.14-12 label=linux initrd=/boot/initrd-2.2.14-12.img root=/dev/hda6 read-only Krok 2 Plik "/etc/lilo.conf" powinien mieć prawa czytania tylko dla roota, ponieważ zawiera niezakodowane hasła. [root@kapil /]# chmod 600 /etc/lilo.conf (Od teraz inni nie będą mogli odczytać pliku.) Krok 3 Aby zmiany dokonane w pliku "/etc/lilo.conf" dały efekt, musisz uruchomić program lilo. [root@kapil /]# /sbin/lilo -v Krok 4 Dodatkową ochronę stanowi zabezpieczenie pliku "/etc/lilo.conf" przed przypadkową lub celową modyfikacją: [root@kapil /]# chattr +i /etc/lilo.conf Powyższe polecenie spowoduje zablokowanie między innymi prawa do modyfikacji pliku.
Blokowanie wszystkich kont specjalnych
Powinieneś usunąć konta wszystkich domyślnych użytkowników oraz grupy, których
nie używasz w swoim systemie. Są to np.: lp, sync, shutdown, halt, news, uucp,
operator, games, gopher i inne.
Aby skasować użytkowników:
[root@kapil /]# userdel lp
Aby usunąć grupy:
[root#kapil /]# groupdel lp
Wybór właściwego hasła
Powinieneś prześledzić poniższe zalecenie przed wyborem twojego hasła.
Długość hasła: Minimalna liczba znaków w haśle, której wymaga Linux po instalacji to 5. Jest to niewystarczające i powinno być przynajmniej 8 znaków. Aby dokonać tej zmiany, musisz wyedytować plik "/etc/login.defs" i zmienić: PASS_MIN_LEN 5 na PASS_MIN_LEN 8 Plik "/etc/login.defs" jest plikiem konfiguracyjnym dla programu logującego.
Aktywacja wsparcia dla shadow password
Powinieneś uaktywnić cechę systemu zwaną shadow password (na ogół jest ona
aktywowana automatycznie). Możesz użyć programu narzędziowego
"/usr/sbin/authconfig", aby zezwolić na używanie shadow password w
twoim systemie.
Jeżeli wcześnie nie używałeś shadow, a chcesz zmodyfikować
istniejące hasła do współpracy z shadow password możesz użyć programów
konwertujących "pwconv" dla użytkowników oraz "grpconv" dla grup.
Konto roota
Konto roota jest najbardziej uprzywilejowanym kontem w systemie UNIX.
Jeżeli administrator zapomni wylogować się z systemu przed odejściem
od stanowiska, system powinien automatycznie dokonać wylogowania.
Aby tego dokonać, musisz ustawić wartość zmiennej systemowej "TMOUT"
na określoną liczbę sekund.
W tym celu wyedytuj plik "/etc/profile" i dodaj poniższą linię, gdzieś po linii
zawierającej
"HISTFILESIZE=": TMOUT=3600
Wartość, którą wprowadziliśmy do zmiennej "TMOUT" stanowi liczbę sekund i w tym
przypadku reprezentuje jedną godzine. Dodanie powyższej linii będzie powodowało
wylogowanie użytkownika po upływie jednej godziny bezczynności i dotyczy
wszystkich użytkowników. Możesz również dodać linię "TMOUT=..." do indywidualnego
pliku ".bashrc" każdego użytkownika, aby spowodować automatyczne wylogowanie
po upływie pewnego czasu. Aby modyfikacja dała skutek, musisz wylogować się
i zalogować jeszcze raz (jako root).
Zabronienie użytkownikom dostępu do programów przez konsolę
Powinieneś zabronić dostępu przez konsolę do programów takich jak shutdown,
reboot i halt dla użytkowników twojego serwera.
Aby to zrobić, uruchom program:
[root@kapil /]# rm -f /etc/security/console.apps/<servicename>
Gdzie <servicename> stanowi nazwę programu, dla którego chciałbyś zablokować
dostęp przez konsolę.
Zablokuj i odinstaluj wszystkie nieużywane serwisy
Powinieneś zablokować i usunąć wszystkie sewrisy, których nie używasz
w swoim systemie - będziesz miał kilka rzeczy mniej, o które będziesz musiał się
martwić.
W pliku "/etc/inetd.conf" wykomentuj (poprzez dodanie '#' na początku linii) wszystkie
wiersze zawierające niepotrzebne usługi. Następnie auktywnij dokonane zmiany:
Krok 1 Zmień uprawnienia dostępu do pliku "/etc/inetd.conf" na 600, tak aby tylko root mógł czytać i pisać do pliku. [root@kapil /]# chmod 600 /etc/inetd.conf Krok 2 UPEWNIJ się, że posiadaczem pliku jest root. Krok 3 Wyedytuj plik "/etc/inetd.conf" i zablokuj serwisy, takie jak: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger auth - chyba, że planujesz używać, któregoś z nich. Niemniej, jeżeli są wyłączone o wiele mniej ryzykujesz. Krok 4 Wyślij sygnał HUP do procesu inetd (spowoduje to przeładowanie procesu z nową konfiguracją). [root@kapil /]# killall -HUP inetd Krok 5 Zabroń modyfikacji pliku "/etc/inetd.conf" poprzez: [root@kapil /]# chattr +i /etc/inetd.conf Zabezpieczy to plik przed celową lub przypadkową modyfikacją. Jedyna osoba, która może ustawić inny atrybut pliku jest root. Aby zmodyfikować plik, musisz usunąć ten atrybut: [root@kapil /]# chattr -i /etc/inetd.conf
TCP_WRAPPERS
Za pomocą TCP_WRAPPERS możesz zabezpieczyć swój serwer przed atakami z zewnątrz.
Najlepiej jest wykluczyć wszystkie serwery poprzez umieszczenie
"ALL: ALL@ALL, PARANOID" w pliku "/etc/hosts.deny", a następnie podać listę
zaufanych komputerów, które będą miały dostęp do twojego serwera - dokonaj
tego w pliku "/etc/hosts.allow".
TCP_WRAPPERS jest kontrolowany za pomocą dwóch plików ("/etc/hosts.deny" i
"/etc/hosts.allow") i zaprzestaje poszukiwań kolejnych wpisów w tych plikach,
po pierwszym trafieniu.
Krok 1 Dodaj poniższe linie do pliku "/etc/hosts.deny": # Zabroń dostępu wszystkim ALL: ALL@ALL, PARANOID Oznacza to zablokowanie dostępu dla wszystkich usług ze wszystkich adresów, poza tymi wyszczególnionymi w pliku "/etc/hosts.allow". Krok 2 Do pliku "/etc/hosts.allow" dodaj linie: (przykład) ftp: 202.54.15.99 foo.com Krok 3 Program "tcpdchk" pozwala sprawdzić konfigurację tcpd wrapper. Pozwala on zapoznać się z konfiguracją tcp wrapper oraz wykryć potencjalne i rzeczywiste problemy. * Po konfiguracji uruchom program "tcpdchk". [root@kapil /]# tcpdchk
Nie pozwól na to, aby były wyświetlane informacje o twoim systemie (system issue file)
Nie powinieneś wyświetlać twojego system isses file, kiedy ludzie logują się zdalnie
do systemu. Aby zablokować wyświetlanie informacji o systemie, możesz zmodyfikować opcje dla programu telnet w pliku
"/etc/inetd.conf".
Zmodyfikuj linię:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd na telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
Dodanie na końcu opcji "-h" spowoduje, że daemon nie będzie wyświetlał
żadnych informacji, po prostu wyświetli "login:".
Polecam jednak używanie serwera ssh "sshd".
Zmodyfikuj plik "/etc/hosts.conf"
Wpisy w pliku "/etc/hosts.conf" specyfikują jak adresy internetowe rozwijane są w adresy IP.
Wyedytuj plik "/etc/hosts.conf" i dodaj do niego następujące linie:
# Spróbuj odnaleźć nazwę w DNS, następnie w "/etc/hosts" order bind,hosts # Mamy maszyny z wieloma adresami IP multi on # Sprawdź czy nie ma przekłamań w IP nospoof on
Pierwsza opcja oznacza, że najpierw zostanie podjęta próba odszukania adresu w DNS, a następnie
w lokalnym pliku "/etc/hosts". Opcja "multi" determinuje czy serwer może mieć wiele adresów IP
wpisanych w "/etc/hosts" (wielo interfejsowy ethN). Opcja "nospoof" wskazuje, aby system
sprawdzał czy nie dokonuje się "włamania" na nasz serwer poprzez spoofing.
Uodparnianie pliku "/etc/services"
Musisz zabezpieczyć plik "/etc/services" przed nieuprawnionym kasowaniem
lub dodawaniem serwisów.
Aby zabezpieczyć plik "/etc/services", użyj polecenia:
[root@kapil /]# chattr +i /etc/services
Zabroń rootowi logowania z różnych konsoli
Plik "/etc/securetty" pozwala wyszczególnić, na które TTY root będzie mógł
się logować.
Wykomentuj te TTY, na które root nie będzie mógł się logować.
Zablokowanie możliwości użycia polecenia "su" na konto roota
Polecenie "su" (Substitute User) pozwala stać się innym, występującym w
systemie użytkownikiem.
Jeśli nie chcesz, aby ktokolwiek mógł użyć "su" na konto roota
lub chcesz zabronić niektórym osobom dostępu do "su", możesz dodać następujące
dwie linie na początek pliku konfiguracyjnego "su" w katalogu "/etc/pam.d/".
Krok 1 Wyedytuj plik "/etc/pam.d/su" i dodaj dwie linie na początku tego pliku: auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/Pam_wheel.so group=wheel
Oznacza to, że tylko użytkownicy grupy "wheel" będą mogli używać "su" na konto
roota. Możesz dodawać użytkowników go grupy "wheel" -- tylko oni będą mieli
dostęp do "su" na roota.
Historia poleceń shella
Shell zapamiętuje 500 ostatnio wydanych poleceń w pliku "~/.bash_history"
(gdzie "~/" to katalog domowy użytkownika). Taki mechanizm ułatwia użytkownikowi
wydawanie poleceń podobnych do poprzednich. Każdy użytkownik ma plik
z historią w swoim domowym katalogu. Shell powinien pamiętać mniejszą
liczbę poleceń oraz powinien usuwać ją podczas wylogowywania użytkownika.
Krok 1 Zmienne środowiskowe HISTFILESIZE i HISTSIZE inicjalizowane w pliku "/etc/profile" determinują maksymalną liczbę zapamiętywanych poleceń. Rekomendowane jest ustawienie niewielkiej wartości (np. 30) dla obu zmiennych. Wyedytuj plik "/etc/profile" i zmodyfikuj linie: HISTFILESIZE=30 HISTSIZE=30 Krok 2 Administrator powinien dodać do pliku "/etc/skel/Bash_logout" linię: rm -f $HOME/.bash_history Podczas każdego wylogowania, plik z historią danego użytkownika będzie kasowany.
Zabroń restartowania systemu za pomocą kombinacji klawiszy ALT+CTRL+DEL
W pliku "/etc/inittab" wykomentuj (poprzez wpisanie znaku "#" na początku
linii) następującą linię:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Aby zmiany dały efekt wydaj polecenie:
[root@kapil /]# /sbin/init q
Ustaw nowe prawa dostępu do plików w katalogu "/etc/rc.d/init.d"
Ustaw prawa dostępu do plików, tak aby tylko root mógł je czytać i modyfikować.
Pliki te odpowiedzialne są za uruchamianie i zatrzymywanie różnych procesów
podczas uruchamiania systemu.
[root@kapil /]# chmod -R 700 /etc/rc.d/init.d/*
Ukrywanie informacji o systemie
Domyślnie, podczas logowania do systemu, wypisywane są informacje o nazwie
dystrybucji Linuksa, jej wersji, wersji kernela oraz nazwie serwera.
Informacje te mogą być wykorzystane przez crackerów.
Powinieneś powitać użytkowników jedynie napisem "Login:".
Krok 1 W pliku "/etc/rc.d/rc.local" wykomentuj linie, które podane są poniżej: # Ten tekst zostanie zapisany do "/etc/issue" podczas każdego uruchamiania systemu. # Tak więc umieść tu wszystkie polecenia, które mają pojawić się w "/etc/issue". #echo "" > /etc/issue #echo "$R" >> /etc/issue #echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue # #cp -f /etc/issue /etc/issue.net #echo >> /etc/issue Krok 2 Usuń pliki: "issue.net" oraz "issue" w katalogu "/etc": [root@kapil /]# rm -f /etc/issue [root@kapil /]# rm -f /etc/issue.net
Blokowanie nieużywanych programów z prawami SUID / SGID
Użytkownicy systemu mogą uruchamiać programy (z ustawionym SUID), które w trakcie
swojego działania mają uprawnienia roota. Administrator powinien zminimalizować liczbę
takich programów.
Krok 1 * Aby odszukać wszystkie pliki z ustawionym znacznikiem 's' (root-owner programs), użyj: [root@kapil /]# find / -type f \( -perm -04000 -o -perm -02000\) \-exec ls lg {} \; * Aby wyłączyć znacznik SUID w odnalezionych programach użyj: [root@kapil /]# chmod a-s [program]
Podsumowanie
Po zastosowaniu się do powyższych rad, administrator systemu uzyska podstawowy poziom
bezpieczeństwa. Niektórych z powyższych wskazówek nie stosuje się jednorazowo - należy
je stosować nieustannie.
Autor: Kapil Sharma
Email: kapil@linux4biz.net
WWW: http://www.linux4biz.net
Kapil Sharma jest konsultantem do spraw bezpieczeństwa Linuksa i internetu.
Od ponad 2 lat pracuje na różnych systemach Linux / UNIX oraz
zabezpieczeniach internetowych.
Prowadzi stronę internetową http://www.linux4biz.net, na której publikuje
materiały dotyczące Linuksa i UNIXa.