Gentoo Logo

1.  Dostępne do odczytu dla wszystkich

Zwykli użytkownicy nie powinni mieć dostępu do plików konfiguracyjnych i zawierających hasła. Jeśli włamywaczowi uda się wykraść hasła z bazy danych lub strony internetowej to będzie mógł podmienić albo nawet usunąć nasze pliki. Właśnie to jest powodem, dla którego warto uważnie ustawić prawa do wszystkich ważnych plików. Jeśli jest się pewnym, że z danego pliku będzie korzystał wyłącznie root należy ustawić jego prawa na 0600 i przypisać plik odpowiedniemu użytkownikowi przy pomocy polecenia chown.

1.  Dostępne do zapisu dla wszystkich

Listing 1.1: Znajdowanie takich plików i katalogów

# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; 2>/dev/null >writable.txt
# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; 2>/dev/null >>writable.txt

Polecenie to utworzy listę plików z prawami do zapisu dla wszystkich użytkowników lub grup. Należy sprawdzić prawa, a następnie usunąć zapisywalność przy pomocy polecenia /bin/chmod o-w dla każdego z plików.

1.  Pliki z bitami SUID i SGID

Pliki z ustawionymi bitami SUID i SGID uruchamiane są zawsze z prawami dostępu swojego właściciela, a nie z prawami osoby je uruchamiającej. Normalnie bity te są ustawiane na programach, które do poprawnej pracy wymagają praw roota. Jeśli taki plik zawiera błąd może spowodować kompromitację lokalnego konta root. W związku z takim niebezpieczeństwem należy za wszelką cenę unikać ustawiania tych bitów. Jeśli któryś z takich plików nie jest używany wykonujemy na nim polecenie chmod 0 lub odmergowujemy pakiet do którego należy (pakiety do którego należą dane pliki wyszukujemy przy pomocy polecenia equery; jeśli nie ma takiego polecenia należy zainstalować pakiet gentoolkit). W każdym innym wypadku należy użyć polecenia chmod -s do zdjęcia bitu SUID.

Listing 1.1: Znajdowanie plików z bitem SUID

# find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -lg {} \; 2>/dev/null >suidfiles.txt

To polecenie utworzy plik z listą wszystkich programów, które mają ustawione bity SUID i SGID.

Listing 1.1: Lista plików binarnych z suidem

/bin/su
/bin/ping
/bin/mount
/bin/umount
/var/qmail/bin/qmail-queue
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/crontab
/usr/bin/chage
/usr/bin/expiry
/usr/bin/sperl5.6.1
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/procmail
/usr/bin/suidperl
/usr/lib/misc/pt_chown
/usr/sbin/unix_chkpwd
/usr/sbin/traceroute
/usr/sbin/pwdb_chkpwd

Domyślnie Gentoo nie zawiera wielu plików SUID (chociaż ich ilość zależy od tego jakie programy są zainstalowane). Większość komend nie powinna być uruchamiana przez zwykłych użytkowników z prawami roota. Polecamy zdjęcie bitów SUID z programów ping, mount, umount, chfn, chsh, newgrp, suidperl, pt_chown i traceroute. Dokonuje się tego przy pomocy polecenia chmod -s. Nie należy usuwać tego bitu z su, qmail-queue czy unix_chkpwd. Usunięcie setuid z tych plików spowoduje utratę możliwości przełączania się na konto superużytkownika czy otrzymywania poczty. Usuwając SUID odbieramy zwykłemu użytkownikowi (lub włamywaczowi) możliwość uzyskania dostępu do konta roota przez któryś z tych plików.

Jedyne plikami z SUID w moim systemie to: su, passwd, gpasswd, qmail-queue, unix_chkpwd i pwdb_chkpwd. Każdy kto używa serwera X może potrzebować jeszcze kilku, ponieważ serwer korzysta czasem z rozszerzonego dostępu, oferowanego przez bity SUID.

1.  Twarde dowiązania do plików binarnych z SUID/SGID

Plik można uznać za skasowany tylko wtedy gdy nie istnieją żadne na niego wskazujące odnośniki. Może to wydawać się dziwne, ale na przykład plik /usr/bin/perl jest wyłącznie odnośnikiem do inody gdzie znajdują się właściwe dane. Do pliku może istnieć nieskończenie duża ilość dowiązań i dopóki wszystkie nie zostaną skasowane plik wciąż istnieje.

Jeśli użytkownicy posiadają dostęp do partycji nie zamontowanej z opcjami nosuid i noexec (na przykład gdy /tmp, /home lub /var/tmp nie znajdują się na osobnych partycjach) należy się upewnić, że nie będą mieli możliwości utworzenia twardego dowiązania do plików binarnych i korzystania z nich np. po uaktualnieniu przez Portage pliku do nowej, nie zawierającej błędów wersji.

Ostrzeżenie: Jeśli otrzymamy od Portage ostrzeżenie o istniejących twardych dowiązaniach, a użytkownicy mają dostęp do partycji umożliwiającej wykonywanie plików SUID/SGID należy uważnie przeczytać ten rozdział. Jeden z użytkowników może podejmować próbę obejścia uaktualnień poprzez zatrzymanie przestarzałej wersji programu. Jeśli użytkownicy nie mogą tworzyć własnych plików SUID lub uruchamiać programów poprzez dynamiczny program ładujący (partycje zamontowane jako noexec) nie ma powodu do zmartwień.

Uwaga: Użytkownik nie musi posiadać prawa odczytu pliku, aby móc utworzyć do niego dowiązanie, wystarczy, że ma prawa do katalogu go zawierającego.

Aby sprawdzić ilość istniejących dowiązań do danego pliku należy skorzystać z polecenia stat.

Listing 1.1: Polecenie stat

$ stat /bin/su
  File: `/bin/su'
  Size: 29350           Blocks: 64         IO Block: 131072 regular file
Device: 900h/2304d      Inode: 2057419     Links: 1
Access: (4711/-rws--x--x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2005-02-07 01:59:35.000000000 +0000
Modify: 2004-11-04 01:46:17.000000000 +0000
Change: 2004-11-04 01:46:17.000000000 +0000

Do znajdowania plików z ustawionymi bitami SUID i SGID korzystamy z programu find.

Listing 1.1: Znajdowanie wielokrotnie zlinkowanych plików binarnych z bitem suid/sgid

$ find / -type f \( -perm -004000 -o -perm -002000 \) -links +1 -ls

Zaktualizowano 16 września 2006

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.