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.