Jak zabezpieczyć swój system Debian GNU/Linux - rozdział 4

Kategoria: Artykuły, etykiety: bezpieczeństwo, system

Dodany: 2009-08-16 14:26 (zmodyfikowany: 2009-08-16 16:31)
Przez: winnetou

Wyświetleń: 14545

4 Po instalacji

4.1 Poprawki bezpieczeństwa

Jeżeli w trakcie instalacji zapomnieliśmy dopisać repozytorium poprawek bezpieczeństwa do pliku /etc/apt/sources.list powinniśmy to zrobić w tej chwili. Wpisy powinny wyglądać następująco:

deb http://security.debian.org/ wydanie/updates main contrib non-free

deb-src http://security.debian.org/ wydanie/updates main contrib non-free

Gdzie wydanie to:

  • old stable lub etch
  • stable lub lenny
  • testing lub squezze

Jeżeli nie korzystamy z któregoś z dodatkowych repozytoriów (contrib lub non-free) możemy je pominąć.

Następnie należy odświeżyć listę dostępnych pakietów oraz zainstalować dostępne uaktualnienia

apt-get update && apt-get full-upgrade
aptitude update && aptitude dist-upgrade

4.2 Hasło bootloadera

Jeżeli do naszego komputera dostęp mają osoby trzecie to bardzo łatwo mogą dobrać się do systemu i siać spustoszenie. Wystarczy, że na ekranie powitalnym bootloadera wyedytują wpis odpowiedzialny za ładowanie kernela i na końcu dopiszą init=/bin/sh. W tym momencie system wystartuje z automatycznie zalogowanym użytkownikiem root. Aby uniknąć przykrych niespodzianek powinniśmy zabezpieczyć bootloader hasłem.

LiLo: (Linux Loader)

Edytujemy plik /etc/lilo.conf i zawartość:

image=siezka_do_kernela
label=Linux
read-only

zamieniamy na

image=siezka_do_kernela
label=Linux
read-only
password=nasze_haslo
restricted

Końcową czynnością jest przeładowanie ustawień lilo. Dokonujemy tego wydając polecenie

lilo

UWAGA!: Domyślnie plik /etc/lilo.conf ma uprawnienia rw-r--r-- co pozwoli zwykłemu użytkownikowi na podglądnięcie naszego hasła, a co za tym idzie stosowanie go staje się bezsensowne dlatego powinniśmy wszystkim poza właściciele odebrać wszystkie prawa do tego pliku.

GRUB: (GRand Unified Bootloader)

GRUB daje nam troszeczkę większe możliwości. Po pierwsze pozwala przechowywać skrót MD5 hasła. Po drugie plik konfiguracyjny znajduje się w katalogu /boot/grub/ co, przy osobnej partycji /boot stanowi dodatkową ochronę ponieważ partycja ta nie musi być montowana. Aby GRUB był chroniony hasłem do jego pliku konfiuracyjnego /boot/grub/menu.lst wystarczy na początku pliku dodać linijkę:

password nasze_haslo

lub

password --md5 $1$1bf60cc75e1b2963c1c18a8a00402ddf

Oczywiście powinniśmy wybrać hash. Wygenerowanie hasła przebiega następująco:

echo "nasze_haslo" | md5

Wygenerowane hasło kopiujemy i wklejamy do pliku konfiguracyjnego GRUBa. Dodatkowo możemy odebrać wszystkie uprawnienia do tego pliku innym użytkownikom

chmod go= /boot/grub/menu.lst

UWAGA!: w pliku /boot/grub/menu.lst hasło powinniśmy poprzedzić sekwencją $1$ co poinformuje GRUBa o tym, że jest hash wygenerowany algorytmem MD5 i powinien przed porównaniem ze wzorcem z wprowadzonego hasła wygenerować jego skrót.

4.3 Ograniczenia logowania

Kolejną istotnym elementem w kwestii bezpieczeństwa systemu jest nałożenie ograniczeń dotyczących logowania. Dotyczy to zarówno zwykłych użytkowników jak i administratora systemu. O ograniczeniach liczby równoczesnych logowań dla zwykłego użytkownika przeczytasz w rozdziale „Ograniczenia dla użytkowników”. Tutaj omówię restrykcje dotyczące konta root, a właściwie możliwości jego logowania, jak ograniczyć liczbę prób zalogowania się do systemu oraz jak reagować na błędy logowania.

Zacznijmy od ustawień logowania administratora. W katalogu /etc/ znajduje się plik securetty, który zawiera nazwy terminali (bez przedrostka /dev/), na których może się zalogować użytkownik root. Każdy terminal znajduje się w osobnej linii. Domyślnie wpisane są do niego wszystkie dostępne terminale tty. W pliku tym powinna znajdować się tylko jedna konsola RÓŻNA OD /dev/tty1. Szybkie rozwiązanie to wydanie polecenia:

echo "ttyX" > /etc/securetty

Gdzie X należy zastąpić liczbą większą od 1 a mniejszą od ilości, tworzonych podczas startu systemu, terminali. Ilość tworzonych terminali znajduje się w pliku /etc/inittab.

4.4 Wyłączenie możliwości restartu maszyny

4.5 Montowanie partycji

4.6 Moduł PAM

4.7 Ograniczenia dla użytkowników

W interesie każdego administratora powinno leżeć ograniczenie samowolki użytkowników. Można do tego wykorzystać wbudowane narzędzie opierte na PAM. Jednym z takich narzędzi jest /etc/security/limits.conf. Aby z zacząć z niego korzystać w plikach /etc/pam.d/login (i opcjonalnie /etc/pam.d/ssh) musimy odkomentować (lub jeśli nie istnieje to dopisać) linijkę:

session required pam_limits.so

Struktura pliku /etc/security/limits.conf jest następująca:

Kto TypOgraniczenia NazwaOgraniczenie Wartość

Kto może przybierać jedną z trzech wartości:

  • nazwa użytkownika
  • nazwa grupy, która musi być poprzedzona znakiem „@”
  • wildcard **”*** oznaczający wszystkich.

TypOgraniczenia - może przyjąć jedną z wartości:

  • hard — dla limitów nieprzekraczalnych
  • soft — dla limitów, które chwilowo mogą być przekroczone
  • - (pojedynczy minus) — co oznacza wyłączenie danego limitu

NazwaOgraniczenia przyjmuje jedną z poniższych wartości:

  • core — limit rozmiaru1 tak zwanych plików core tworzonych podczas awarii jakiegoś programu.
  • data — uboższa wersja narzędzia quota, ustawia rozmiar przestrzeni dyskowej przydzielonej użytkownikowi/grupie.*
  • fsize — maksymalny rozmiar pojedynczego pliku (przydatne gdy nie chcemy aby użytkownicy trzymali na naszym komputerze filmy czy obrazy ISO)*
  • memlock
  • nofile — maksymalna liczba jednocześnie otwartych plików.
  • rss
  • stack — maksymalny rozmiar stosu
  • cpu — maksymalny dostępny czas procesora, w minutach, dostępny dla pojedynczego procesu - ustawienie tego limitu pozwala zapobiegać sytuacjom gdy użytkownik zechce wykorzystać nasz komputer do kompilacji różnego rodzaju ”kolosów”. To, że ustawimy tutaj limit, np 2min nie oznacza, że użytkownik zostanie wylogowany po 2 minutach.
  • nproc — określa ile procesów może uruchomić użytkownik. Należy zwrócić baczną uwagę na podawane tu ograniczenie. Ustawienie zbyt małej wartości może doprowadzić do tego, że zalogowanie się na dane konto nie będzie możliwe - mimo iż użytkownik nie zrobił jeszcze nic złego. Pamiętajmy, że samo zalogowanie się do systemu uruchamia procesy typu login, powłoka, etc. Ustawienie zbyt dużej wartości (lub całkowite zignorowanie jej) może doprowadzić do (nie)świadomego ataku DoS
  • as
  • maxlogins — maksymalna liczba równoległych logowań.
  • maxsyslogins — maksymalna dopuszczalna liczba jednocześnie zalogowanych użytkowników.
  • priority — priorytet z jakim będą uruchamiane procesy użytkownika. W systemach Linux/Unix priorytet procesu zawiera się w przedziale [-20,20]. Przy czym im niższa wartość priorytetu tym więcej czasu procesora zostaje przydzielone. Standardowo procesy użytkowników uruchamiane są z priorytetem równym 0. Dodatkowo do manipulacji priorytetami służą narzędzia nice oraz renice. Priorytet poniżej zera może ustawić tylko super user
  • locks
  • sigpending — maksymalna ilość oczekujących komunikatów (między procesami) (kernel >2.6.x)
  • msgqueue — dla systemów z krenelem 2.6.x rozmiar kolejki zajmowanej przez komunikaty POSIX
  • nice — maksymalny priorytet jaki użytkownik może ustawić dla procesu.
  • rtprio

*Przy ustalaniu limitu na rozmiar pliku czy dostępnej przestrzeni dyskowej należy zwrócić baczną uwagę na już istniejące pliki, i na pliki z katalogu /etc/skel, które kopiowane są podczas tworzenia nowych kont. Ustawienie maksymalnego rozmiaru pliku na 50kb podczas gdy chociaż jeden z plików konfiguracyjnych zajmuje 100k może zablokować możliwość zalogowania się na konto lub błąd podczas tworzenia konta.

Przykłady użycia. Załóżmy, że nasza maszyna to serwer udostępnia usługi ftp, www oraz konta shellowe. Chcemy ograniczyć użytkownikom z grupy ftp i www rozmiar pliku do 1MB, przydzieloną przestrzeń dyskową do 100MB, oraz zabronić im logowania się przez ssh oraz pozwolić na otwarcie maksymalnie 2 plików.

@ftp   hard   data        102400
@ftp   hard   fsize       1024   
@ftp   hard   maxlogins   0
@ftp   hard   nofile      2
@www   hard   data        102400
@www   hard   fsize       1024
@www   hard   maxlogins   0
@www   hard   nofile      2

Dla użytkownikom posiadającym konta shell chcemy pozwolić na maksymalnie 2 równoległe logowania, przydzielimy 1GB przestrzeni dyskowe i 10MB na pojedynczy plik. Dopuścimy równoczesne otwarcie 5 plików, uruchomienie 10 procesów, ograniczymy czas procesora do 15 minut, pozwolimy zająć maksymalnie 30MB pamięci a uruchamiane przez nich procesy będą miały priorytet 10

@shell   hard   data        1048576
@shell   hard   fsize       10240
@shell   hard   maxlogins   2
@shell   hard   nofile      5
@shell   hard   nproc       10
@shell   hard   priority    15
@shell   hard   cpu         15
@shell   hard   memlock     30720

Dodatkowo dla użytkownika janek zniesiemy limit rozmiaru plików, ilości otwartych plików, oraz zwiększymy liczbę logowań, procesów i czas procesora.

janek   hard   data        1048576
janek   -      fsize       10240
janek   hard   maxlogins   5
janek   -      nofile      5
janek   hard   nproc       30
janek   hard   priority    15
janek   hard   cpu         30
janek   hard   memlock     30720

Uwaga!: Limity użytkowników są ważniejsze od limitów grup. Powiedzmy, że użytkownik janek z powyższego przykładu należy do grupy shell to jedyne ograniczenia jakie będą go dotyczyć to te poprzedzone jego loginem. W przypadku, gdy grupa ma ustawionych więcej ograniczeń to ustawienia użytkownika nadpisują te powtarzające się.

4.8 Quota

4.9 Logi - konfiguracja


  1. Jednostką podstawową dla rozmiaru jest KB.

Wstecz | Spis treści | [Dalej]

OSnews Wykop Blip Flaker Kciuk Śledzik Facebook Identi.ca Twitter del.icio.us Google Bookmarks