Jak zabezpečit Unix
Bezpečností v Unixu je myšlena bezpečnost v unixových nebo unix-like operačních systémech. Bezpečné prostředí je dosahováno nejen návrhem konceptu těchto operačních systémů, ale také s pomocí pozorných uživatelů a administrátorských praktik.
Návrh konceptu
Přístupová práva
Jedním ze základních znaků
těchto systémů je systém přístupových práv. Všechny soubory v unixových
souborových systémech můžou dovolovat různý přístup k souborům na základě
určených přístupových práv. Přístupová práva souboru jsou obvykle nastavována
pomocí příkazu chmod a zobrazované příkazem ls. Například:
-r-xr-xr-x 1 root wheel 745720 Nov 28 2011 /bin/sh
Unixová
práva povolují přístup k souboru různým uživatelům - uživatelé mohou tvořit
skupiny a ty mají různá přístupová práva. Složitější unixové souborové systémy
obsahují Access control list (seznam kontroly přístupu) - koncept, který
umožňuje udělovat práva vícero uživatelům nebo skupinám. Např.:
/pvr
[u::rwx,g::r-x,o::r-x/u::rwx,u:Petr:rwx,g::r-x,m::rwx,o::r-x]
V tomto
příkladě, který je výsledkem příkazu chacl, jsou uživateli Petr udělená
zapisovací práva na složku /pvr.
Skupiny uživatelů
Uživatelé Unixových operačních systémů často
patří do skupin se specifickými přístupovými právy. To umožňuje seskupovat
uživatele podle toho, jak velká práva mají mít. Mnoho unixových implementací
přidává další úroveň ochrany vyžadováním členství ve wheel user privileges
group, pokud chtějí používat příkaz su.[1]
Problémy
Většina unixových a unix-like systémů má účet nebo
skupinu, která uživateli umožňuje kompletní kontrolu nad systémem. Takovýto účet
se nazývá root. Pokud přístup k tomuto účtu získá nechtěný uživatel, znamená to
úplný průnik do systému. Pro administraci systému je ale účet root nutný a z
bezpečnostních důvodů není užíván pro běžné potřeby. Používání tohoto účtu lze
monitorovat. Kdo zná televizní postavu Supermana, může si účet root představit
pomocí následujícího příkladu:
Uživatel root účtu je jako Superman, přičemž má i běžný účet -
jako Clark Kent. Clark Kent se stává Supermanem jen tehdy, když je to potřebné k
záchraně lidí. Poté se znovu vrátí do svého "převleku". Root přístup by měl být
používaný stejně.
Uživatelské a administrativní techniky
Unix má velmi
mnoho nástrojů, které dokážou zlepšit bezpečnost, pokud jsou uživateli a
administrátory správně použity.
Hesla
Výběr silného hesla a jeho střežení jsou pravděpodobně
nejdůležitější věci, které může uživatel udělat pro zvýšení bezpečnosti Unixu. V
Unixových systémech jsou nejdůležitější informace o hesle uloženy v souboru
/etc/passwd. Tento soubor udržuje přehled o uživatelích a jejich hlavních
nastavení. Hesla, respektive hashe hesel, můžou být také uloženy v tomto
souboru. Záznamy v /etc/passwd zastupují vždy jeden řádek a mají následující
formu:
nickname:password_hash:UserID:GroupID:Complete_Name:home_dir:shell_bin
Například:
xfze:$1$zuW2nX3sslp3qJm9MYDdglEApAc36r/:1000:100:José Carlos D.
S. Saraiva:/home/xfze:/bin/bash
Od doby kdy všichni uživatelé musí mít práva
na čtení tohoto souboru (aby systém mohl zkontrolovat přihlašovací heslo),
vznikl jeden bezpečnostní problém: každý si mohl číst hashe uživatelských hesel.
K vyřešení tohoto problému vznikl soubor /etc/shadow k uložení hashe hesel, ke
kterému práva na čtení má pouze root. Při utajovaní hesel, druhá položka v řádku
v souboru /etc/passwd (hash hesla) je nahrazená "x", která říká systému, aby
našel příslušné heslo ze souboru /etc/shadow. Soubor /etc/shadow obvykle
obsahuje právě dvě hodnoty:
xfze:$1$zuW2nX3sslp3qJm9MYDdglEApAc36r/:::::
Zbylá políčka v
souboru /etc/shadow obsahují:
Minimální počet dní mezi změnami hesla
Maximální počet dní,
než musí být heslo změněné
Počet dní s varováním předtím než musí být heslo
změněné
Počet dní, po kterých musí být heslo změněné, jinak se účet stane
nepoužitelný
Datum (vyjádřené jako počet dní od 1. ledna 1970) kdy platnost
účtu vyprší
Tyto hodnoty můžou být použité na zvýšení Unixové bezpečnosti
přinucením uživatele zabývat se hesly.
Uživatelé a účty
Administrátoři by měli okamžitě mazat staré
nepoužívané účty.
su, sudo, ssh
Softwarová údržba
Patchování
Operační
systémy, stejně jako každý software, můžou obsahovat chyby žádající opravy nebo
můžou být vylepšované přidáváním nových funkcí. Bezpečné patchování operačního
systému vyžaduje, aby software pocházel z důvěrného zdroje a nebyl pozměněn před
zabalením do balíčku. Mezi běžné metody pro ověřovaní, zdali patche nebyly
pozměněny, patří použití kryptografického hashe, MD5 nebo použití read-only
média. Z bezpečnostního úhlu pohledu, specifikace metody balení, jako je
například RPM Package Manager formát původně z Red Hat Linuxu, nejsou až tak
důležité jako zabezpečení integrity samotného patche.
Distribuce zdrojových kódů
Distribuce zdrojových kódů umožňuje
prohledat kód z důvodu podezřelého obsahu. Mínusem ale je, že uživatel musí být
schopný vykonat bezpečnostní analýzu kódu sám.
RPM Balíčky
Linuxové distribuce, které používají RPM Package
Manager formát pro zabezpečení základní funkcionality a softwarových updatů,
využívají MD5 a GPG pro zabezpečení obsahu. Hodnoty hashe jsou zabaleny spolu se
soubory RPM a ověřované když je balík instalován.
Debian Balíčky
Linuxové distribuce, které používají Debian
.deb balíkovací formát pro zabezpečení základní funkcionality a softwarových
updatů, využívají GPG podpisy pro zabezpečení obsahu. Podpis je vypočítaný v
momentě, kdy je balík vyrobený a ověřovaný později, kdy je balík instalován.
Ostatní prodejci a distribuce
Bez ohledu na prodejce nebo
distribuci, všechny softwarové distribuce by měly poskytovat mechanismus na
ověření, zdali je software legitimní a nebyl modifikován od data, kdy byl
původně zabalen.
Služby
Nepotřebný software by neměl být instalován ani
konfigurován v systému. Software, který není dlouho využíván, by měl být
kompletně odstraněn. Identifikace běžných služeb
netstat -na
lsof
nmap
sockstat -4 (FreeBSD)
Příkazy
inetd a xinetd se chovají jako tzv. super-servery pro síťové protokoly, např.
rlogin, telnet, FTP atd. Vypnutí nepotřebných služeb
použitím chkconfig[2] na Red Hat Linux
použitím /etc/rc.conf a
/usr/local/etc/rc.d na FreeBSD (/etc/rc.local)
použitím rc-update na Gentoo
Linux
Tento přístup je běžně nazýván tzv. proaktivní bezpečností. Existují
operační systémy, které jsou tzv. přirozeně bezpečné. Mimo jiné, volné BSD
distribuce (FreeBSD, NetBSD a OpenBSD) jsou proaktivně bezpečné. Příklad výstupu
příkazu netstat na NetBSD 3.0 pracovní stanici:
$ netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0
localhost.smtp *.* LISTEN
tcp 0 0 *.ssh *.* LISTEN
Active Internet6
connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign
Address (state)
tcp6 0 0 localhost.smtp *.* LISTEN
tcp6 0 0 *.ssh *.*
LISTEN
Active UNIX domain sockets
Address Type Recv-Q Send-Q Inode Conn
Refs Nextref Addr
c0d10d80 dgram 0 0 0 c0cd8680 0 c0cb7000 -> /var/run/log
c0cb7000 dgram 0 0 0 c0cd8680 0 0 -> /var/run/log
c0cd8680 dgram 0 0 cb9639e8
0 c0d10d80 0 /var/run/log
Následující příklad je z BSD systému:
$ sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN
ADDRESS
root sendmail 569 4 tcp localhost.smtp *.*
root sshd 593 4 tcp
*.ssh *.*
Ukazuje, že na tomto stroji služba SSH naslouchá veřejnému síťovému
rozhraní počítače. Sendmail naslouchá jen loopback rozhraní. Přístup k službě
může být dále omezený použitím firewallu.