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.

w3cw3c
automatyka przemysłowa