Bezpečnost v Unixu

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 mohou 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, mohou 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í:

  1. Minimální počet dní mezi změnami hesla
  2. Maximální počet dní, než musí být heslo změněné
  3. Počet dní s varováním předtím než musí být heslo změněné
  4. Počet dní, po kterých musí být heslo změněné, jinak se účet stane nepoužitelný
  5. Datum (vyjádřené jako počet dní od 1. ledna 1970) kdy platnost účtu vyprší

Tyto hodnoty mohou 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.

Softwarová údržba

Patchování

Operační systémy, stejně jako každý software, mohou obsahovat chyby žádající opravy nebo mohou 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. Minusem 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

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.

Reference

V tomto článku byl použit překlad textu z článku Unix security na anglické Wikipedii.

  1. Levi, Bozidar(2002). UNIX Administration: A Comprehensive Sourcebook for Effective Systems and Network Management.CRC Press, 207. ISBN 0-8493-1351-1.
  2. Chkconfig balíček -Linux / UNIX informace. ExampleNow [online]. [cit. 2011-12-22]. Dostupné z: http://examplenow.com/cs/package/chkconfig/[nedostupný zdroj]

Externí odkazy