Zawartość rozdziału:
Niniejszy rozdział skupia się na konfiguracji systemu z punktu widzenia bezpieczeństwa.
Konto root powinno być używane tylko w sytuacjach, w których prawa superużytkownika są niezbędne do wykonania danych czynności administracyjnych. Dlatego też, przed przystąpieniem do dostrajania systemu należy utworzyć grupę oraz konto zwykłego użytkownika, które będzie kontem administratora. Konto to powinno być wykorzystywane m. in. do kompilacji dodatkowego oprogramowania.
# useradd -d /export/home/nazwa_konta -s /bin/jsh \ -c "Imie i nazwisko" -m nazwa_koonta # passwd nazwa_konta New password: ******** Re-enter new password: ******** passwd (SYSTEM): passwd successfully changed for nazwa_konta # chmod 700 /export/home/nazwa_konta
Katalogiem domowym konta root jest standardowo "/", lecz ze względu na szybkie "zaśmiecanie" go przez choćby samo środowisko X-Windows zalecamy jego zmianę na np. "/root" (jak jest to np. w systemach BSD).
Katalog domowy superużytkownika można zmienić w następujący sposób:
mkdir /root chgrp sys /root chmod 700 /root
Następnie należy wydać polecenie:
passwd -h root
oraz podać nowy katalog domowy(/root). Aby powyższa zmiana odniosła skutek należy się przelogować.
Wartość umask konta root powinna być bardziej restrykcyjna niż pozostałych użytkowników i dlatego też linijkę:
umask 0077
należy dodać do skryptu startowego użytkownika root (/root/.profile), który wcześniej należy utworzyć. Jest on o tyle ważny, gdyż wpływa na prawa dostępu tworzonych przez niego katalogów domowych użytkowników, plików tymczasowych itp.
Jedyną możliwością zalogowania się superużytkownika powinno być logowanie bezpośrednio na konsoli w trybie pojedynczego użytkownika (np. w sytuacji awarii dysku itp.) lub za pośrednictwem polecenia /bin/su. Dzięki temu, w celu zalogowania się jako root potrzebne są przynajmniej dwa hasła: jedno do zwykłego konta, a drugie do konta root.
Polecenie su powinno być podstawową (i jedyną - oprócz sytuacji awaryjnych) komendą umożliwiającą uzyskanie powłoki root. Udostępnienie go tylko użytkownikom będących administratorami ograniczy możliwości ataku brutalnego na hasło superużytkownika.
W tym celu można:
chmod og-rwx /usr/bin/su /sbin/su.static setfacl -m u:user_1:--x,u:user_2:--x /usr/bin/su /sbin/su.static setfacl -m m:--x /usr/bin/su /sbin/su.static
gdzie user_1, user_2 są nazwami kont użytkowników uprawnionych do korzystania z polecenia su, lub
groupadd wheel usermod -G wheel nazwa_konta /usr/bin/chgrp wheel /usr/bin/su /sbin/su.static /usr/bin/chmod 4750 /usr/bin/su /usr/bin/chmod 550 /sbin/su.static
Następnie, w pliku /etc/default/login należy zmodyfikować linijkę zawierającą parametr CONSOLE na:
CONSOLE=
Ograniczy to logowanie superużytkownika tylko do konsoli, a jedyną możliwością przejścia na konto root będzie polecenie /bin/su. Należy pamiętać również o zablokowaniu logowania bezpośredniego na konto root przez SSH (OpenSSH). Więcej informacji na ten temat znajduje się w dołączonej do tych pakietów dokumentacji.
Plik /etc/shells jest używany przez oprogramowanie w celu stwierdzenia, czy dana powłoka jest prawidłowa. Plik ten powinien zawierać nazwy wszystkich dostępnych powłok systemowych.
Stosowanie tego typu mechanizmu ma wiele zalet, między innymi niemożliwe jest zalogowanie poprzez ftp, jeżeli nazwa powłoki danego użytkownika nie znajduje się w pliku /etc/shells (co może stanowić kolejną linię ochrony kont systemowych).
A oto i nazwy standardowych powłok, które należy umieścić we wspomnianym pliku:
/bin/sh /bin/jsh /bin/ksh /bin/csh
Prawa dostępu i właściciela pliku należy ustawić następująco:
chmod 644 /etc/shells chgrp sys /etc/shells
Wartość umask należy ustawić na 0022 (lub 0077) przed uruchomieniem demonów.
W tym celu należy stworzyć plik o nazwie /etc/init.d/umask z zawartością:
#!/sbin/sh umask 0022
ustawić grupę właściciela oraz prawa wykonywania:
chgrp sys /etc/init.d/umask chmod 755 /etc/init.d/umask
a następnie utworzyć do niego sztywne łącza:
ln /etc/init.d/umask /etc/rc2.d/S00umask ln /etc/init.d/umask /etc/rcS.d/S00umask
Edycji wymaga również plik /etc/default/login, w którym należy usunąć znak komentarza (#) z linii:
#UMASK=022
oraz wstawić ten znak w linii zawierającej polecenie "umask" w pliku /etc/profile.
Zmienna PATH powinna zawierać tylko "bezpieczne" ścieżki, czyli takie, do których prawa zapisu ma wyłącznie administrator systemu. Nigdy nie powinna ona zawierać katalogu bieżącego ".".
Optymalnie powinna zawierać minimalną liczbę katalogów do przeszukania, jak np.:
PATH=/usr/bin:/usr/sbinZe swojej strony zalecamy jej ustawienie na:
PATH=/usr/bin:/usr/sbin:/usr/ucb:/usr/ccs/bin:/usr/local/bin
Dzięki temu będzie możliwy dostęp bez konieczności podawania ścieżek do poleceń: whereis (/usr/ucb), make (/usr/ccs/bin), gcc (/usr/local/bin) i innych.
Aby ustawić tą zmienną globalnie należy wyedytować następujące pliki:
/etc/default/login /etc/default/su
Plik /etc/default/login ustawia zmienną PATH przy logowaniu, natomiast /etc/default/su po użyciu polecenia /bin/su.
Plik ten jest czytany przy każdorazowym logowaniu do systemu.
Należy dodać do niego następujące linie:
EDITOR=/usr/bin/vi VISUAL=${EDITOR} if [ "$LOGNAME" = "root" ] then PS1="nazwa_hosta# " else PS1="nazwa_hosta$ " fi export EDITOR VISUAL PS1
Zmienne EDITOR oraz VISUAL są wykorzystywane m. in. przez polecenie crontab. Zmienna PS1 pozwoli nam na wyświetlenie nazwy hosta przed znakiem zachęty, oraz ułatwia rozeznanie, czy pracujemy na zwykłym koncie (wyświetlany jest znak "$"), czy na koncie root (wyświetlany jest znak "#")
Ich ustawienie uprości proces dodawania użytkownika oraz pozwoli uniknąć błędów w ich wprowadzaniu. Wartości domyślne polecenia useradd można ustawić tworząc (o ile nie istnieje) plik /usr/sadm/defadduser z następującą zawartością:
defgroup=100 defgname=nazwa_grupy_użytkowników defparent=/home defskel=/etc/skel defshell=/bin/csh definact=0 defexpire=
Prawa dostępu do pliku należy ustawić następująco:
chmod 644 /usr/sadm/defadduser chgrp sys /usr/sadm/defadduser
Obowiązkowym zadaniem po instalacji jest wyłączenie niepotrzebnych zadań z tablicy cron. I tak:
rm /var/spool/cron/crontabs/lp
rm /var/spool/cron/crontabs/adm rm /var/spool/cron/crontabs/sys
rm /var/spool/cron/crontabs/uucp
W tablicy crontab konta root należy skomentować następujące linie:
15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
chmod go-rwx /var/spool/cron/crontabs/*
Pliki te zezwalają na kontrolę dostępu do usług: cron i at. Poniższe polecenia umożliwią korzystanie z tych usług tylko użytkownikowi root:
echo "root" > /etc/cron.d/cron.allow echo "root" > /usr/lib/cron/at.allow cat /etc/passwd | cut -f1 -d: | grep -v root > /usr/lib/cron/at.deny cat /etc/passwd | cut -f1 -d: | grep -v root > /etc/cron.d/cron.deny chgrp sys /etc/cron.d/cron.allow /usr/lib/cron/at.allow chgrp sys /etc/cron.d/cron.deny /usr/lib/cron/at.deny chmod 600 /etc/cron.d/cron.allow /usr/lib/cron/at.allow chmod 600 /etc/cron.d/cron.deny /usr/lib/cron/at.deny
Jedną z większych dziur, które znajdują się niejako "standardowo" zaraz po instalacji systemu jest możliwość logowania się jako superużytkownik za pośrednictwem usługi ftp. Dzięki temu potencjalny intruz ma możliwość przeprowadzenia ataku brutalnego na hasło superużytkownika.
Ze swojej strony zalecamy zablokowanie korzystania z ftp dla wszystkich kont systemowych oraz konta root. W tym celu należy stworzyć plik /etc/ftpusers na bazie istniejącego pliku /etc/passwd:
cat /etc/passwd | cut -f1 -d: > /etc/ftpusers
a następnie usunąć z niego nazwy kont, które są uprawnione do korzystania z ftp.
Poniższe pliki są przeznaczone dla spisu adresów IP "zaufanych" hostów, które mogą uzyskać zdalny dostęp bez podawania hasła.
Ponieważ adres IP może być stosunkowo łatwo sfałszowany, tego typu mechanizm nie powinien być w ogóle używany. Jeżeli jednak usługa taka jest potrzebna (np. ze względów administracyjnych), zalecamy użycie pakietu SSH.
/usr/bin/touch /root/.rhosts /root/.netrc /etc/hosts.equiv chmod 0 /root/.rhosts /root/.netrc /etc/hosts.equiv
Utworzenie powyższych plików ułatwi monitorowanie zmian dokonywanych w ich zawartości przy pomocy narzędzi typu Tripwire.
Na wszelki wypadek należy włączyć wymuszanie używania haseł w usługach rlogin oraz rsh. W tym celu w pliku /etc/pam.conf należy wstawić znak "#" (komentarz) przed liniami:
rlogin auth sufficient /usr/lib/security/pam_rhosts_auth.so.1 rsh auth required /usr/lib/security/pam_rhosts_auth.so.1
oraz dopisać następującą pozycję:
rsh auth required /usr/lib/security/pam_unix.so.1
Jeżeli wyłączyliśmy usługę AutoFS, wówczas - aby umożliwić użytkownikom korzystanie z katalogu /home - należy usunąć katalog /home oraz wykonać łącze symboliczne pomiędzy /export/home i /home:
rm -rf /home ln -s /export/home /home
lub wyedytować plik /etc/vfstab i zamiast montować system plików z katalogami użytkowników pod /export/home można użyć punktu montowania /home i wykonać łącze symboliczne pomiędzy /home i /export/home:
rm -rf /export/home ln -s /home /export/home
AutoFS używa również katalog /net, który w przypadku wyłączenia tej usługi można spokojnie usunąć. Podobnie można postąpić z katalogiem /vol oraz /cdrom, które są również używane przez Volume Management.
Zanim przystąpimy do instalacji dodatkowego oprogramowania zalecamy wykonanie łącza symbolicznego z katalogu /usr/local do /opt. Dzięki temu partycja /usr może zostać zamontowana w trybie tylko-do-odczytu, a dodatkowe oprogramowanie może być często aktualizowane bez konieczności przemontowywania tej partycji w tryb do zapisu:
ln -s /opt /usr/local
Więcej informacji odnośnie planowania partycji znajduje się w punkcie 2.5 i 9.3.
Plik ten powinien zawierać nazwy oraz adresy IP wszystkich komputerów niezbędnych do prawidłowego działania serwera.
Jako minimum powinien mieć wpisy dotyczące nazwy serwera DNS oraz serwera logów.
Naciśnięcie kombinacji klawiszy "STOP-A" umożliwia przejście (w przypadku platformy SPARC) do środowiska OpenBoot PROM. Jeżeli nie chcemy, aby każdy operator konsoli mógł w trakcie działania systemu używać tej kombinacji klawiszy, należy dopisać następującą linijkę do pliku /etc/default/kbd:
KEYBOARD_ABORT=disabled
W przypadku uruchomienia audytu poprzez BSM, skrypt startowy automatycznie dokona powyższego wpisu.
Jeżeli korzystamy z systemu NIS+ należy pamiętać o tym, aby uruchamiać serwer kluczy z opcją "-d".
Uniemożliwi to korzystanie z systemu NIS+ przez użytkownika nobody (czyli nieuwierzytelnionego).
W tym celu w pliku /etc/init.d/rpc należy zmienić linijkę uruchamiającą keyserv (ok. linii 40) z:
/usr/sbin/keyserv >/dev/console 2>&1na:
/usr/sbin/keyserv -d >/dev/console 2>&
Kolejnym potencjalnym zagrożeniem wynikającym ze standardowych ustawień systemu jest wyświetlanie numeru wersji systemu każdemu, kto nawiąże połączenie z serwerem np. za pomocą usługi telnet, ftp, smtp itp. Dzięki takiej informacji intruz może - bez posiadania konta na serwerze - rozpocząć atak poprzez uruchamianie znanych do tej wersji systemu exploitów.
Dlatego też dość ważną czynnością administracyjną jest wyeliminowanie z bannerów powitalnych informacji dotyczących nazwy i wersji systemu (w przypadku Solarisa jest to "SunOS 5.7") lub zastąpienie ich przez wartości fałszywe.
W przypadku serwera ftp należy utworzyć plik /etc/default/ftpd z następującą zawartością:
BANNER=""
oraz ustawić następujące prawa dostępu i grupę właściciela:
chmod 644 /etc/default/ftpd chgrp sys /etc/default/ftpd
W przypadku serwera telnet należy utworzyć plik /etc/default/telnetd i zawrzeć w nim następującą linijkę:
BANNER="\\r\\n"
Powyższy plik również powinien mieć następujące prawa dostępu:
chmod 644 /etc/default/telnetd chgrp sys /etc/default/telnetd
Zawartość tego pliku jest wyświetlana zaraz po zalogowaniu do systemu.
Należy także zwrócić uwagę na komunikaty ukazujące się przy połączeniu do innych portów, np. poczty, ssh itp. Większość z tego typu usług umożliwia ukrycie numeru wersji, a dość często ma możliwość całkowitego wyłączenia bannera powitalnego.
Można również utworzyć dodatkowe bannery powitalne, informujące o np. zakazie dostępu do serwera osobom nie posiadającym konta, konsekwencjach płynących z niestosowania się do regulaminu, itp. W tym celu można utworzyć plik /etc/issue i zawrzeć w nim informacje które mają być wyświetlone przed logowaniem w programie telnet. Można również skorzystać z funkcji programów tcpwrapper lub xinetd, które umożliwiają wyświetlanie takich właśnie bannerów.
Pewnego udoskonalenia wymaga program /usr/lib/newsyslog oraz /etc/init.d/syslog.
Mianowicie wszystkie polecenia:
chmod 644należy zmienić na:
chmod 600
Dzięki takiej zmianie tworzone pliki logów będą mogły być czytane tylko przez administratora, a nie jak przed zmianą - przez każdego.
Aby zablokować możliwość logowania zdalnym użytkownikom z użyciem środowiska graficznego CDE do pliku /usr/dt/config/Xaccess należy dopisać linijkę:
!*
Standardowo serwer dtlogin nasłuchuje na porcie 177 (TCP) oraz 32777 (UDP) i umożliwia zdalne logowanie z użyciem środowiska graficznego.
Standardowo serwer dtlogin nasłuchuje na porcie 177 (TCP) oraz 32777 (UDP) i umożliwia zdalne logowanie z użyciem środowiska graficznego.
Jeżeli korzystamy z vold (Volume Management) należy dodać następujące linijki do /etc/rmmount.conf:
mount hsfs -o nosuid mount ufs -o nosuid
Dzięki tym ustawieniom bity SUID oraz SGID w programach znajdujących się na montowanych dyskach (dyskietkach) przez zwykłych użytkowników będą ignorowane.
W przypadku, gdy nie chcemy współdzielić stacji dyskietek oraz CD-ROM usuwamy następujące linie z sekcji Action:
action cdrom action_filemgr.so action floppy action_filemgr.so action rmscsi action_filemgr.so
Jeżeli zdecydowaliśmy się na używanie Power Management, wówczas możliwość używania polecenia sys-suspend powinniśmy ograniczyć tylko do konta root. W tym celu w pliku /etc/default/sys-suspend należy linijkę:
PERMS=console-ownerzamienić na:
PERMS=-
Im hasło dłuższe, tym bezpieczniejsze. Dlatego też należy w pliku /etc/default/passwd zmienną PASSLENGTH ustawić na wartośc 8. Spowoduje to wymuszenie na użytkownikach wybierania haseł 8-znakowych.
![]() |
![]() |
![]() |