www server na platformě linux debian
Transkript
! ∀ ! #∃%&%%∋()∗∃∀(+, −−−∗,∀,∀.%∋%#/∀0∋ .12,& %. ROK : 2008 !∀# ∃%&#∋(#(&&) ######################################################### Abstrakt Bakalářská práce se zabývá postupem vytvoření webového serveru realizovaného na operačním systému Debian GNU/Linux. V úvodu představuje GNU/Linux obecně, jeho historii a charakteristiky, dále pak představuje a charakterizuje jeho distribuci Debian. Následně provádí čtenáře procesem instalace operačního systému, konfigurace webového serveru Apache a všech souvisejících komponent (PHP, MySQL, poštovní server, SSH server). Zmiňuje základy správy serveru a podrobněji se věnuje tématu bezpečnosti, a to jak v rámci zabezpečení jednotlivých služeb, které na serveru běží, tak i obecným zásadám bezpečnosti. Podrobněji zmiňuje také konfiguraci firewallu a jeho možnosti. V závěru porovnává přínosy a nevýhody provozu vlastního webového serveru oproti webhostingu a jiným alternativám. Abstract The Bachelor work deals with the process of creating a web server using the Debian GNU/Linux operating system. It introduces GNU/Linux generally, it’s history and characteristics. Then it describes the Debian distribution. Then it guides the reader trough the installation of the operating system, configuration of the Apache web server and all relevant components (PHP, MySQL, mail server, SSH server). Basics of server administration are also described, with greater emphasis on security. It focuses both on general security practices and securing individual services running on web server. It also covers configuration of firewall and it’s possibilites. At the end of the work, it compares pros and cons of having own web server against webosting and other alternatives. Obsah Úvod 1 Platforma Linux Debian 2.1 GNU a Linux . . . . . . . . . . . 2.2 Licence GNU/GPL . . . . . . . . 2.3 Debian . . . . . . . . . . . . . . . 2.4 Debian a server . . . . . . . . . . 2.5 Alternativy pro webový server . . 2.6 Open source a svobodný software 2.7 Svět GNU/Linuxu . . . . . . . . 2.8 Otevřený vývoj . . . . . . . . . . 2.9 Účast komerčních firem . . . . . . . . . . . . . . . 2 2 3 3 4 4 4 5 5 5 . . . . . . . . . . . . . . 6 6 6 7 8 8 9 9 10 11 11 13 14 15 17 . . . . . . . 19 19 19 20 21 22 22 23 Instalace serveru 3.1 Poznámky k instalaci . . . . . . . 3.2 Instalace Debianu . . . . . . . . . 3.2.1 Rozdělení disku . . . . . . 3.2.2 Zbytek instalace . . . . . . 3.3 Základní nastavení . . . . . . . . 3.3.1 Vzdálený přístup . . . . . 3.3.2 Nastavení sítě . . . . . . . 3.3.3 Instalace dalšího softwaru 3.4 MySQL . . . . . . . . . . . . . . 3.5 Poštovní server . . . . . . . . . . 3.5.1 POP3 a IMAP servery . . 3.6 Webový server a PHP . . . . . . 3.6.1 Virtuální servery . . . . . 3.7 Přesný čas . . . . . . . . . . . . . Správa serveru 4.1 Úvod do GNU/Linuxu . . . . . . 4.1.1 Adresářová struktura . . . 4.1.2 Shell . . . . . . . . . . . . 4.1.3 Dokumentace . . . . . . . 4.1.4 Uživatelé, skupiny a práva 4.2 Správa uživatelů . . . . . . . . . 4.3 Správa softwaru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Repositáře Debianu . . . . . . . . . . . . 4.3.2 Práce se správcem balíčků . . . . . . . . 4.3.3 Automatická aktualizace . . . . . . . . . 4.4 Správa služeb . . . . . . . . . . . . . . . . . . . 4.5 Řešení problémů . . . . . . . . . . . . . . . . . 4.6 Bezpečnost . . . . . . . . . . . . . . . . . . . . 4.6.1 Bezpečnostní strategie pro webový server 4.6.2 Typy útoků a útočníků . . . . . . . . . . 4.6.3 Formy útoků . . . . . . . . . . . . . . . 4.6.4 Zabezpečení SSH . . . . . . . . . . . . . 4.6.5 SCP bez shellu . . . . . . . . . . . . . . 4.6.6 Zabezpečení PHP a Apache . . . . . . . 4.6.7 Firewall . . . . . . . . . . . . . . . . . . 4.6.8 Monitorování serveru . . . . . . . . . . . 4.6.9 Fyzická bezpečnost, zálohování . . . . . 4.6.10 Aktivní obrana . . . . . . . . . . . . . . 4.6.11 Bezpečnostní patche jádra . . . . . . . . Analýza alternativ 5.1 Možnosti umístění webu 5.1.1 Webhosting . . . 5.1.2 Server housing . . 5.1.3 Virtuální server . 5.1.4 Vlastní server . . 5.2 Optimální varianta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 24 24 24 25 26 26 27 27 27 29 29 30 35 35 35 36 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 38 38 38 39 39 Závěr 41 Literatura 41 Terminologický slovník 44 1 Úvod Operační systém GNU/Linux je v oblasti webových serverů velmi populární. Webový server Apache, jazyk PHP a databázový server MySQL tvoří stavební kameny značné části webových serverů po celém světě. Tato platforma je také standardem v oblasti webhostingových služeb, kde je široce rozšířená. Cílem této práce je provést čtenáře vytvořením webového serveru na této platformě, základy jeho správy a zabezpečení. Rozsah práce však neumožňuje provést čtenáře veškerými aspekty správy operačního systému GNU/Linux, to by byl námět na podstatně rozsáhlejší dílo. V případě hlubšího zájmu o tuto problematiku odkazuji čtenáře především na materiály, ze kterých jsem čerpal (viz literatura), ale zmíním i jinou dokumentaci, zejména pak tu, která je specifická pro Debian. Abychom porozuměli celé této problematice, osvětlím nejprve základní aspekty GNU/Linuxu jako takového. Představím distribuci Debian GNU/Linux a uvedu její základní charakteristiky. Proces instalace okomentuji spíše stručněji, aby zůstalo dost prostoru pro vysvětlení základů správy GNU/Linuxu a distribuce Debian. Dále proberu základy správy GNU/Linuxu s důrazem na bezpečnost. Bezpečnost rozvedu podrobněji, nejenom z hlediska konfigurace a zabezpečení jednotlivých služeb, ale i z hlediska vhodných postupů a obecných pravidel, která je vhodné dodržovat. Zmíním také možnosti a typy útoků na webový server. V závěru práce provedu rozbor a zhodnocení výhod a nevýhod vytvoření vlastního webového serveru oproti využití různých alternativních služeb (např. webhostingu, server housingu, atd.). U čtenáře předpokládám základní orientaci v IT/ICT a základní znalost síťových služeb a síťových protokolů. 1 2 Platforma Linux Debian Debian je jednou z nejznámějších a také nejstarších žijících distribucí operačního systému GNU/Linux. Abychom porozuměli Debianu, měli bychom si nejprve představit GNU/Linux jako takový. 2.1 GNU a Linux Počátky GNU/Linuxu leží u projektu GNU1 , který založil Richard M. Stallman v roce 1984. Tento projekt si kladl (a stále klade) za cíl vytvořit svobodný operační systém založený na Unixu. Projekt GNU zaštiťuje organizace Free Software Foundation (FSF), tedy Nadace svobodného softwaru. Svobodný software je, jak definuje Richard Stallman[1], takový software, který poskytuje svým uživatelům čtyři základní svobody: • svobodu používat program za jakýmkoliv účelem • svobodu upravit program dle libosti (předpokladem k tomu je přístup ke zdrojovému kódu) • svobodu šířit původní kopie (bezúplatně či komerčně) • svobodu šířit upravené verze (bezúplatně či komerčně) Primární motivací pro Stallmana byla ona zmíněná svoboda. Volba typu operačního systému a jeho architektury byla druhořadá. Stallman se rozhodl pro Unix zejména pro jeho přenositelnost, což, vzhledem k okolnostem, se ukázalo být dobrou volbou. Je jasné, že jedinou možností, jak vytvořit unixový operační systém, který by nebyl zatížen proprietární (nesvobodnou) licencí, bylo začít od nuly. Projektu GNU se podařilo vytvořit funkční svobodné verze mnoha klíčových komponent unixových operačních systémů, s výjimkou jediné - jádra2 (kernelu). V roce 1991 se finský student, Linus Torvalds, rozhodl zveřejnit svůj vlastní kernel založený na Minixu3 , Linux. Díky zveřejnění pod open source licencí se mohlo do vývoje Linuxu zapojit množství dobrovolníků z celého světa. Linux byl brzy přelicencován4 na licenci GNU/GPL, která umožnila jeho integraci s projektem GNU, z právního hlediska. Byla to patrně také volba licence, která zajistila popularitu tohoto projektu mezi mnoha počítačovými odborníky a nadšenci a umožnila jeho rychlý vývoj. Oba projekty bylo brzy možné propojit (jak z právního, tak technického hlediska), a získat tak plnohodnotný (svobodný) unixový operační systém, GNU/Linux. GNU je tzv. rekurzivní akronym, znamená GNU’s Not Unix Projekt GNU vyvíjí jádro HURD, které však stále není zralé pro běžné (zejména pak produkční) použití. 3 Minix je taktéž unixový operační systém 4 Původní licence, kterou Linus pro svoje jádro použil, znemožňovala jeho komerční využití. 1 2 2 2.2. LICENCE GNU/GPL 2.2 KAPITOLA 2. PLATFORMA LINUX DEBIAN Licence GNU/GPL Mnoho komponent projektu GNU a Linux je šířeno pod licencí GNU/GPL. Tato licence bývá označována jako copyleftová, neboť svým způsobem obrací copyright naruby. Zatímco principem copyrightu je dát příslušnou moc nad dílem do rukou jednoho subjektu, copyleft je metoda, jak tomu zabránit. Licence GNU/GPL zaručuje uživatelům všechny čtyři svobody, které definují pojem „svobodný softwareÿ, avšak nepovoluje změnu licence. Není tedy možné (resp. legální), aby nějaký subjekt vzal produkt šířený pod licencí GNU/GPL, upravil jej, změnil licenci a dále šířil. Licence GNU/GPL[15] však nebrání: • komerční distribuci původního nebo odvozeného díla • komerčnímu využití díla • využití díla k vytvoření uzavřeného produktu5 2.3 Debian Vzhledem k tomu, že projekty GNU, Linux a další vznikaly odděleně, byla jejich instalace velmi náročná (časově i technicky). Z tohoto důvodu začaly vznikat linuxové distribuce, které celý proces značně zjednodušily. Linuxové distribuce jsou v podstatě samostatně funkční celky (resp. operační systémy), které je zpravidla možné nainstalovat6 . Různé distribuce bývají přizpůsobeny různým účelům, některé se hodí na desktop, jiné na server a některé jsou vytvořeny pro velice úzké využití (např. na router, apod.). Distribuce Debian vznikla v roce 1993, jedná se tedy o rozvinutou distribuci s dlouhou tradicí a velmi specifickými rysy. Se svými uživateli uzavírá jakousi „společenskou smlouvuÿ[3] (social contract), kde se zavazuje především k tomu, že zůstane svobodnou distribucí, nástroje pro správu distribuce budou taktéž svobodné a že nebude před svými uživateli zamlčovat problémy. Debian je nekomerční distribuce, je tedy k dispozici zdarma. Na Debianu jsou založené některé jiné distribuce, a to jak nekomerční (Ubuntu), tak komerční (Linspire). Debian je vyvíjen a udržován ve třech větvích. Jádro vývoje se děje v rámci tzv. unstable (nestabilní) větve. V této větvi bývá nejčerstvější software, ale, jak už název naznačuje, stabilita není garantována a občas se stane, že něco nefunguje, přestane fungovat či, v extrémním případě, dojde k nějakému vážnému problému. Větev s názvem testing je zdrojem pro vydání následující stabilní distribuce, což se děje jednou za delší období. Komponenty v této větvi se pak „zmrazíÿ7 a za nějakou dobu vyjde nová stabilní verze. Mnoha z dalších specifik Debianu se budu věnovat později v rámci základů správy systému. Pro tuto chvíli je pro nás podstatné, že Debian je k dispozici bezplatně a Toto se týká zejména používání příslušných prostředků (např. editor a kompilátor) pro tvorbu uzavřeného softwaru. Je však třeba dát pozor na licence jednotlivých knihoven. Software využívající knihovnu šířenou pod licencí GNU/GPL musí být také šířen pod GNU/GPL. 6 Výjimku tvoří tzv. live distribuce, které běží přímo z média a ne vždy instalaci umožňují. 7 Zmrazení znamená, že se do testovací větve přijímají už jen opravy chyb a nikoliv nové verze komponent. 5 3 2.4. DEBIAN A SERVER KAPITOLA 2. PLATFORMA LINUX DEBIAN obsahuje výhradně software s open source licencí, který je možné používat legálně za jakýmkoliv účelem (tedy i komerčně). Současně je pro nás důležité vědět, že tento software není nijak omezen, ve smyslu funkčnosti, podobně jako třeba proprietární software distribuovaný zdarma (shareware, freeware). 2.4 Debian a server Pro nasazení na webový server má Debian jak své výhody, tak nevýhody. Delší vývojový cyklus (v řádu let) znamená, že po nějaké době od vydání stabilní verze bude software v distribuci zastarávat. Pokud je prioritou při nasazení webového serveru podpora nejnovějších technologií, jakmile jsou k dispozici, není Debian ideální volbou, ačkoliv se tento problém snaží řešit projekt Debian Backports8 . Naopak, pokud je cílem stabilita a spolehlivost, je Debian vynikající volbou. Samotná konzervativnost Debianu je tedy výhodou i nevýhodou. Pro uživatele, kteří chtějí kompromis mezi aktuálností jednotlivých komponent a stabilitou, mohu nabídnout alternativu v podobě distribuce Ubuntu. Ta vychází z Debianu, ale má mnohem kratší vývojový cyklus (vychází dvakrát ročně). Existuje přímo verze určená pro servery a spravuje se velmi podobně jako Debian (ne však úplně stejně). 2.5 Alternativy pro webový server Je samozřejmě možné na webový server nainstalovat úplně jinou linuxovou distribuci, a to podle požadavků, které na server máme. Debian je na servery nasazován často, ale to nic nemění na tom, že ani Debian nemůže vyhovět požadavkům každého správce. Jiné distribuce mohou poskytovat výhody (ale také nevýhody), které Debian nemá. Do světa open source, popřípadě svobodného softwaru, chcete-li, patří i operační systémy z rodiny BSD, tedy FreeBSD, OpenBSD a NetBSD. Tyto systémy jsou k dispozici za podobných podmínek jako GNU/Linux, jejich zdrojové kódy jsou otevřené a je možné je stejně tak dobře použít na serverech. Probírání těchto alternativ a vhodnosti jejich použití pro webový server však není předmětem této práce. 2.6 Open source a svobodný software GNU/Linux lze označit jako svobodný i open source software. Tyto pojmy jsou podobné, ale neznamenají totéž. Open source software je (zjednodušeně) software, který má volně přístupný zdrojový kód. Přesnou definici open source softwaru převzala OSI (Open Source Initiative) ze společenské smlouvy Debianu[3]. Svobodný software je definován čtyřmi základními svobodami (viz výše). Hnutí stojící za každým z těchto pojmů má odlišné cíle. FSF9 je hnutí s politickým rozměrem, usilující o svobodu (softwaru). Open source hnutí se zaměřuje zejména na 8 9 http://www.backports.org/ Free Software Foundation 4 2.7. SVĚT GNU/LINUXU KAPITOLA 2. PLATFORMA LINUX DEBIAN výhody open source modelu vývoje, tedy situace, kdy se díky otevřenosti zdrojového kódu může vývoje softwaru účastnit značné množství vývojářů. 2.7 Svět GNU/Linuxu GNU/Linux je velmi dobře znám zejména v oblasti serverů a v některých specifických oblastech (superpočítače). Na desktopech má zatím velmi malý tržní podíl. Prostředí GNU/Linuxu je značně heterogenní. Existují řádově stovky distribucí GNU/Linuxu, přičemž rozdíly mezi distribucemi bývají značné. Díky otevřenosti si může každý uživatel přizpůsobit GNU/Linux podle svých potřeb, což ústí ve vznik mnoha různých projektů s různými cíli. 2.8 Otevřený vývoj Nejenom zdrojový kód je v případě GNU/Linuxu otevřený. Stejně tak je otevřený i jeho vývoj, jehož se účastní nespočet dobrovolníků (ale i komerčních firem, viz dále) z celého světa. Rozsáhlejší projekty (třeba Linux nebo Debian) mívají jistou strukturu a hierarchii, v rámci které je vývoj realizován. 2.9 Účast komerčních firem Kromě nevýdělečných organizací se vývoje GNU/Linuxu účastní i komerční firmy (např. Novell, Red Hat, apod.). Jejich aktivity bývají zaměřeny dle vlastních záměrů, které příslušné firmy sledují. Přesto realizují změny, ze kterých zpětně těží další subjekty (a projekty). 5 3 Instalace serveru Aktuální stabilní verze Debianu k datu publikace práce je verze 4.0 s kódovým označením „Etchÿ. Debian je možné stáhnout1 v několika podobách. Buď jako kompletní distribuce na 21 CD nebo 3 DVD, nebo v minimalistické distribuci na 1 CD (resp. mini-CD) určené k síťové instalaci (netinst). Na serveru lze očekávat dostupnost rychlého připojení k síti, což činí ideální volbou právě médium určené k síťové instalaci. Je samozřejmě možné stáhnout i kompletní instalační média, avšak to není nutné. To, co na distribučním médiu není, lze bez problémů doinstalovat ze sítě. Debian navíc řadí software na instalační média podle jeho popularity, takže je šance, že na prvním médiu bude vše, co potřebujeme. Vzhledem k tomu, že my budeme z médií instalovat pouze základ systému a vše ostatní budeme stahovat ze sítě, můžeme použít jakékoliv médium. Debian lze instalovat i na starší počítače, ze kterých lze rovněž postavit webový server. Mně se, kupříkladu, podařilo úspěšně nainstalovat Debian na Pentium-100 s 32 MB RAM a 1,5 GB pevným diskem. V případě instalace na starší počítače je dobré vědět, že Debian nabízí i obrazy pro instalaci z disket. 3.1 Poznámky k instalaci Naši instalaci budeme provádět s následující strategií. Nejprve nainstalujeme základní systém Debianu, a teprve po instalaci budeme přidávat další software dle potřeby. Získáme tak systém, ve kterém nám poběží jenom to, co si sami nainstalujeme, bez zbytečností navíc. Na server nebudeme instalovat grafické prostředí. Pro webový server není grafické prostředí nutné, a stejně tak není nutné pro jeho správu (Debian je linuxová distribuce zaměřená na pokročilejší uživatele, a proto neobsahuje příliš nástrojů na konfiguraci systému v grafickém prostředí). Vzdálený přístup na server nám bude zajišťovat OpenSSH server, který nainstalujeme později a který nám umožní dostat se k příkazové řádce na serveru, odkud budeme moci provádět správu systému. 3.2 Instalace Debianu Instalátor Debianu používá textový režim. Fáze instalace zahrnují základní nastavení, nastavení sítě, rozdělení disku, zadání hesla superuživatele, vytvoření uživatelského účtu, instalaci základu systému, nastavení správce balíčků, instalaci doplňkového softwaru, instalaci zavaděče a reboot do nově nainstalovaného systému. 1 http://www.debian.org/distrib/ 6 3.2. INSTALACE DEBIANU KAPITOLA 3. INSTALACE SERVERU Nebudu procházet celým procesem zbytečně podrobně, zaměřím se na ta nejpodstatnější nastavení a fáze instalace, s důrazem na to, jak změnit příslušné nastavení po instalaci, pokud to bude třeba. Po startu instalátoru jsme nejprve dotázáni na volbu jazyka, která ovlivní jak jazyk instalátoru, tak výchozí nastavení jazyka po instalaci. V případě, že v této fázi zvolíme angličtinu a později budeme chtít přidat podporu pro české prostředí, dosáhneme toho již v nainstalovaném systému příkazem (zadaném s právy uživatele root): dpkg-reconfigure locales Následně vybereme naše umístění, tedy Českou republiku, která se skrývá pod volbou other. Poté nastavíme výchozí rozložení klávesnice (dle vlastních preferencí). V konfiguraci sítě můžeme použít buď DHCP, nebo zadat údaje ručně. To záleží na poskytovateli připojení k Internetu. Pokud uspěje automatické nastavení sítě pomocí DHCP, ponecháme příslušné nastavení k pozdější změně. Název serveru můžeme volit libovolně, doménu bychom pak měli nastavit podle příslušného DNS záznamu naší hlavní domény, ale není to vyloženě nutné (nastavení jednotlivých služeb je na tomto nastavení nezávislé). 3.2.1 Rozdělení disku Rozdělování pevného disku je třeba věnovat zvýšenou pozornost. V úvahu přichází rozdělení do fyzických a logických oddílů nebo použití LVM. LVM2 je vrstva nad fyzickými zařízeními, která umožňuje za běhu měnit velikost logických oddílů. Je to ovšem vrstva navíc, která může zkomplikovat případné záchranné operace. Instalátor nabízí možnost asistovaného vytvoření rozdělení disku s užitím LVM, popřípadě ještě se šifrováním. Linux umožňuje i vytvoření vlastního softwarového RAIDu, což je možné nastavit přímo v modulu instalátoru pro dělení disku, dokonce i ve spolupráci s LVM. Co se týče konfigurace jednotlivých oddílů, je třeba vytvořit minimálně dva oddíly, a sice odkládací oddíl (swap) a kořenový oddíl (/). Na serveru je však vhodné vyhradit oddíly ještě některým dalším adresářům, alespoň takto: • / - kořenový oddíl (minimálně 5GB, optimálně alespoň 10GB) • /home - domovské adresáře uživatelů (dle libosti) • /var - proměnlivá data (alespoň 1GB, lépe 5GB) • /var/log - systémové logy (alespoň 1GB) Velikost oddílu určeného pro swap může být podle potřeb i několik GB. Při běhu systému je nutné, aby bylo vždy k dispozici volné místo v adresářích /var a /tmp. Oddělení /var/log pomůže zabránit DoS útoku v situaci, kdy se útočník pokusí nějakou aktivitou zaplnit systémové logy. Z výběru souborových systémů pro jednotlivé oddíly doporučuji ext3, léty prověřený, spolehlivý souborový systém. 2 Logical Volume Management, více viz http://www.tldp.org/HOWTO/LVM-HOWTO/ 7 3.3. ZÁKLADNÍ NASTAVENÍ 3.2.2 KAPITOLA 3. INSTALACE SERVERU Zbytek instalace Pro superuživatele (uživatele root) je třeba zvolit, pokud možno, co nejsilnější heslo. Heslo uživatele root lze po instalaci kdykoliv změnit příkazem (zadaným s právy uživatele root): passwd Následuje vytvoření uživatelského účtu. Ten budeme dále využívat ke vzdálenému přístupu (vzdálené přihlášení uživatele root nepovolíme). Je vhodné zvolit méně obvyklé jméno a rozumně silné heslo. Po instalaci základu systému bychom měli nastavit zrcadlo, ze kterého budeme stahovat veškerý software. Ze seznamu vybereme některé, které je nám nejblíže, tj. některé umístěné v České republice. Instalátor nám nabídne účast v soutěži popularity jednotlivých balíčků, což nejspíše odmítneme. Výsledky této (anonymní) analýzy jsou pak používány při sestavování instalačních médií, kde je používanější software umístěn co nejblíže prvnímu médiu, méně používaný software je pak na dalších médiích. Díky tomu máme velkou šanci najít většinu potřebného softwaru na prvním médiu. To se samozřejmě netýká média určeného pro síťovou instalaci. Instalátor nám dále nabídne možnost nainstalovat další software, kde však zvolíme pouze „Standardní systémÿ. Jednotlivé komponenty budeme instalovat a konfigurovat později. Následuje instalace zavaděče, který instalujeme do MBR3 primárního disku. Zavaděč (bootloader) je program určený pro zavádění operačních systémů4 . Linuxové zavaděče jsou dva, LILO a GRUB. V případě Debianu je výchozí zavaděč5 GRUB, který vyniká možností upravovat konfiguraci zavaděče ještě před zavedením operačního systému. Poslední fází je ukončení instalace a reboot do nově nainstalovaného systému. Po startu systému se přihlásíme jako root a budeme pokračovat v konfiguraci jednotlivých komponent webového serveru. 3.3 Základní nastavení Nejprve upravíme soubor /etc/apt/sources.list, který obsahuje seznam zdrojů, ze kterých čerpá správce balíčků, třeba pomocí editoru Nano: nano /etc/apt/sources.list V tomto souboru zakomentujeme (vložíme křížek na začátek řádku) zdroj označující instalační CD. Poté provedeme následující dva příkazy: Master Boot Record, fyzicky prvních 512 bytů na pevném disku. Prvních 446 bytů tvoří kód zavaděče, následujících 64 bytů tvoří partition table (tabulka rozdělení disku) se 4 záznamy o jednotlivých primárních oddílech, každý po 16 bytech). Zbývající 2 byty tvoří tzv. magic number. 4 Linuxové zavaděče jsou běžně schopné zavádět i jiné operační systémy (provedením volby po spuštění počítače). V případě zavádění Linuxu běžně umožňují upravovat parametry předané samotnému jádru. 5 LILO lze nainstalovat tak, že zvolíme „zpětÿ a v hlavní nabídce si potom vybereme jiný zavaděč.[14] 3 8 3.3. ZÁKLADNÍ NASTAVENÍ KAPITOLA 3. INSTALACE SERVERU apt-get update apt-get upgrade Prvním příkazem synchronizujeme lokální databázi správce balíčků s jednotlivými zdroji. Druhým pak provedeme aktualizaci všech balíčků na nejnovější verzi. Případné dotazy odsouhlasíme. 3.3.1 Vzdálený přístup Následně nainstalujeme OpenSSH klienta a server určený pro vzdálený přístup k serveru. To provedeme příkazem: apt-get install ssh openssh-server Prakticky každá linuxová (a unixová) distribuce má k dispozici SSH klienta. Pro operační systémy Windows je k dispozici SSH klient Putty6 . OpenSSH můžeme použít nejen pro vzdálenou správu systému, ale také pro přenos souborů na server místo FTP. Za tímto účelem existuje nástroj scp pro unixové systémy (je součástí distribuce ssh klienta) a WinSCP7 pro systémy Windows. 3.3.2 Nastavení sítě Pokud jsme při instalaci nechali síť nastavit přes DHCP, měli bychom nyní upravit nastavení sítě na statickou IP adresu. Toho docílíme editací souboru /etc/network/interfaces: nano /etc/network/interfaces Soubor upravíme tak, aby odpovídal následujícímu vzoru: auto lo eth0 iface lo inet loopback iface eth0 inet static address 1.2.3.4 netmask 255.255.255.0 gateway 4.3.2.1 Může se stát, že náš server má přiřazeno více IP adres, a my chceme všechny využít na jednom rozhraní. Za tímto účelem přidáme nové síťové rozhraní eth0:0 (dále pak eth0:1, atd.), například: iface eth0:0 inet static address 192.168.0.1 netmask 255.255.255.0 6 7 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html http://winscp.net/ 9 3.3. ZÁKLADNÍ NASTAVENÍ KAPITOLA 3. INSTALACE SERVERU Pokud bychom měli další síťovou kartu nebo další port na síťové kartě, použijeme přímo příslušná zařízení eth1, eth2, apod. DNS servery se nastavují v souboru /etc/resolv.conf. Zkontrolujeme tedy, že se v tomto souboru nacházejí ty správné DNS servery: nano /etc/resolv.conf Tento soubor má jednoduchou syntaxi: nameserver 1.2.3.4 nameserver 2.3.4.5 Následně necháme změnit nastavení sítě podle námi provedených úprav: /etc/init.d/networking restart IP adresy, které patří našemu serveru, zapíšeme do /etc/hosts: nano /etc/hosts Tento soubor má na jednotlivých řádcích IP adresu a příslušné názvy, které jí náležejí. V našem případě by tento soubor mohl vypadat nějak takto: 127.0.0.1 1.2.3.4 2.3.4.5 localhost.localdomain localhost server1.domena.cz server1 server2.domena.cz server2 Nepovinným krokem je změna názvu serveru v souboru /etc/hostname: echo server.domena.cz > /etc/hostname K promítnutí této změny je třeba restartu systému (příkaz restart). 3.3.3 Instalace dalšího softwaru Následně nainstalujeme některý další software, který se nám později hodí. Následující příkaz je třeba umístit na jednu řádku[4]: apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev linux-kernel-headers lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ mc Patrně nejužitečnější pro začínající administrátory je panelový diskový manažer, Midnight Commander (balíček mc). Jeho součástí je i editor (mcedit), který lze použít samostatně. 10 3.4. MYSQL 3.4 KAPITOLA 3. INSTALACE SERVERU MySQL Nejprve nainstalujeme potřebné balíčky obsahující MySQL[4]: apt-get install mysql-server mysql-client libmysqlclient15-dev Nyní je třeba zvážit, chceme-li MySQL provozovat jako síťový server (a mít k databázi přístup zvnějšku nebo jako lokální službu, která bude omezena pouze na server samotný a nebude umožňovat přihlášení z jiného počítače. Je jasné, že každá síťová služba přístupná zvnějšku představuje potenciální bezpečnostní riziko. Výchozí konfigurace databáze toto hledisko bere v úvahu a MySQL běží jen jako lokální služba. Pokud chceme toto nastavení změnit, upravíme soubor /etc/mysql/my.cnf a zakomentujeme následující řádku: #bind-address = 127.0.0.1 Po této úpravě je třeba MySQL server restartovat: /etc/init.d/mysql restart K zajištění základní bezpečnosti je rovněž třeba změnit heslo administrátora databáze: mysqladmin -u root password heslo mysqladmin -h server1.domena.cz -u root password heslo 3.5 Poštovní server Jako poštovní server lze doporučit Postfix. My jej nainstalujeme a nakonfigurujeme tak, aby využíval TLS a SMTP autorizaci. To nám zajistí ochranu před útočníky, kteří využívají nezabezpečené, otevřené poštovní servery k rozesílání spamu. Nejprve nainstalujeme Postfix (příkaz je nutné umístit na jednu řádku)[4]: apt-get install postfix libsasl2 sasl2-bin libsasl2-modules libdb3-util procmail Debian se nás zeptá nejprve na typ konfigurace poštovního serveru. Zvolíme „Internet Siteÿ. Dále po nás bude požadovat doménové jméno serveru, pro který bude Postfix přijímat poštu. My však potřebujeme upravit konfiguraci Postfixu poněkud více, a proto po instalaci nastavení Postfixu změníme: dpkg-reconfigure postfix Na první otázku odpovíme stejně jako dříve. Další otázkou bude, kam má směřovat pošta pro uživatele root. Bývá vhodné nechat tuto poštu přeposílat do schránky uživatelského účtu, který využíváme ke správě serveru. Jako e-mailovou adresu můžeme tedy uvést: 11 3.5. POŠTOVNÍ SERVER KAPITOLA 3. INSTALACE SERVERU uzivatel@localhost Doménové jméno poštovního serveru ponecháme, jak jsme ho nastavili dříve. Následně budeme mít možnost specifikovat, pro které domény budeme přijímat poštu. Zadáme tedy všechny domény, které budou směřovat na IP adresu serveru, a zakončíme je označením localhost, takto: server1.domena.cz, localhost.localdomain, localhost Na otázku, zda-li vynutit synchronní aktualizace poštovní fronty odpovíme ne, z místních sítí ponecháme 127.0.0.0/8, povolíme používání procmailu pro místní doručování pošty, zvolíme limit pro velikost poštovní schránky, zbylé volby ponecháme ve výchozím nastavení. Pak provedeme následující příkazy[4]: postconf -e ’smtpd_sasl_local_domain =’ postconf -e ’smtpd_sasl_auth_enable = yes’ postconf -e ’smtpd_sasl_security_options = noanonymous’ postconf -e ’broken_sasl_auth_clients = yes’ postconf -e ’smtpd_recipient_restrictions = permit_sasl_authenticated, \ permit_mynetworks,reject_unauth_destination’ postconf -e ’inet_interfaces = all’ echo ’pwcheck_method: saslauthd’ >> /etc/postfix/sasl/smtpd.conf echo ’mech_list: plain login’ >> /etc/postfix/sasl/smtpd.conf Nyní vygenerujeme certifikát[4]: mkdir /etc/postfix/ssl cd /etc/postfix/ssl/ openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 chmod 600 smtpd.key openssl req -new -key smtpd.key -out smtpd.csr openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out \ smtpd.crt openssl rsa -in smtpd.key -out smtpd.key.unencrypted mv -f smtpd.key.unencrypted smtpd.key openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out \ cacert.pem -days 3650 A nakonfigurujeme Postfix k využívání TLS[4]: postconf postconf postconf postconf postconf postconf postconf postconf -e -e -e -e -e -e -e -e ’smtpd_tls_auth_only = no’ ’smtp_use_tls = yes’ ’smtpd_use_tls = yes’ ’smtp_tls_note_starttls_offer = yes’ ’smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key’ ’smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt’ ’smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem’ ’smtpd_tls_loglevel = 1’ 12 3.5. POŠTOVNÍ SERVER postconf postconf postconf postconf -e -e -e -e KAPITOLA 3. INSTALACE SERVERU ’smtpd_tls_received_header = yes’ ’smtpd_tls_session_cache_timeout = 3600s’ ’tls_random_source = dev:/dev/urandom’ ’myhostname = server1.domena.cz’ Nyní Postfix restartujeme: /etc/init.d/postfix restart Aby ověřování uživatelů pomocí saslauthd fungovalo správně, musíme ještě provést pár drobných úprav[4]. Nejprve provedeme příkaz: mkdir -p /var/spool/postfix/var/run/saslauthd Pak upravíme soubor /etc/default/saslauthd, kde nastavíme proměnnou START na yes a řádku s OPTIONS upravíme do následující podoby: OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" Nyní spustíme saslauthd: /etc/init.d/saslauthd start 3.5.1 POP3 a IMAP servery K vybírání pošty se nám hodí POP3 a IMAP servery. Ty nainstalujeme příkazem[4]: apt-get install courier-authdaemon courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl gamin libgamin0 libglib2.0-0 Při konfiguraci příslušných balíčků budeme dotázáni, zda-li chceme vytvořit adresáře pro webovou administraci. Zvolíme ne. Dále budeme dotázáni, zda-li bude vyžadováno použití SSL certifikátu. Odpovíme ano. Jako poslední krok nakonfigurujeme Postfix, aby využíval poštovní schránky typu Maildir. Výchozí instalace používá typ mbox, což je jeden soubor obsahující veškerou poštu pro daného uživatele. Toto řešení má některé nevýhody, mezi které patří možné problémy se zamykáním schránky, na které jsem sám v praxi narazil. V případě poštovních schránek v podobě Maildiru problémy se zamykáním odpadají a s maily je možné manipulovat samostatně, neboť každému e-mailu je vyhrazen právě jeden soubor. Postfix nakonfigurujeme pro poštovní schránky typu Maildir pomocí následujících příkazů[4]: postconf -e ’home_mailbox = Maildir/’ postconf -e ’mailbox_command =’ /etc/init.d/postfix restart 13 3.6. WEBOVÝ SERVER A PHP 3.6 KAPITOLA 3. INSTALACE SERVERU Webový server a PHP V této práci předvedu instalaci a konfiguraci webového serveru Apache, který je v oblasti webových serverů standardem, avšak pro úplnost musím zmínit i existenci alternativ, které mohou být v některých případech lepším řešením. Jeden z velmi populárních serverů je lighttpd8 , odlehčený webový server, který by měl být rychlejší, ale přitom nabízet dostatek funkcí pro běžné použití. Existuje také celá řada minimalistických serverů, které jsou vhodné zejména pro statický obsah (např. thttpd9 ). Pokud tedy neuvažujeme o běžné platformě pro webové servery zahrnující Linux, Apache, MySQL a PHP (tato platforma se označuje jako LAMP) a máme jiné požadavky, měli bychom zvážit, jestli by nebylo vhodnější zvolit jiný webový server. Dlužno dodat, že některé z těchto serverů se také konfigurují mnohem snadněji než Apache. Webový server Apache nejprve nainstalujeme, a to pomocí následujícího příkazu (opět je nutné zapsat příkaz na jeden řádek)[4]: apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert Následně nainstalujeme PHP5 spolu s některými jeho moduly[4]: apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl Nyní upravíme soubor /etc/apache2/ports.conf a vložíme na jeho konec následující řádku: Listen 443 Tím zajistíme, že webový server bude naslouchat i na portu 443, který náleží službě HTTPS. Následně aktivujeme dva moduly Apache, modul ssl a rewrite. a2enmod ssl a2enmod rewrite Tato úprava se projeví po znovunačtení konfigurace Apache, což provedeme příkazem: /etc/init.d/apache2 force-reload Aby bylo možné využívat protokolu HTTPS, je třeba pro Apache vygenerovat SSL certifikát. V předchozím vydání Debianu s názvem Sarge byl k tomuto účelu k dispozici skript, který v aktuální verzi Debianu není. Je tedy třeba certifikát vygenerovat ručně, příkazem[6]: 8 9 http://www.lighttpd.net/ http://www.acme.com/software/thttpd/ 14 3.6. WEBOVÝ SERVER A PHP KAPITOLA 3. INSTALACE SERVERU openssl req -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem \ -keyout /etc/apache2/apache.pem Následně upravíme přístupová práva k certifikátu tak, aby jej uživatelé nemohli přečíst: chmod 600 /etc/apache2/apache.pem 3.6.1 Virtuální servery Apache umožňuje použití tzv. virtuálních serverů. Tak může více domén směřovat na jeden server a každé může být určena jiná webová prezentace v jiném adresáři s jinou konfigurací a třeba i jiným zabezpečením. Konfiguraci jednotlivých virtuálních serverů je vhodné udržovat odděleně, s jedním konfiguračním souborem určeným pro jeden virtuální server. Výchozí konfigurace Apache obsahuje výchozí virtuální server, jehož konfigurace se nachází v souboru: /etc/apache2/sites-available/default Pokud odstraníme přebytečné volby a komentáře, může výchozí konfigurace virtuálního serveru vypadat takto: NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /var/www/> Options -Indexes AllowOverride None Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost> V této konfiguraci se bude jednat o výchozí virtuální server, jehož prezentace se zobrazí, pokud klient nezadá v prohlížeči URL domény, pro kterou máme již vytvořený jiný virtuální server. Nyní si popíšeme podstatné části tohoto konfiguračního souboru. Volba DocumentRoot označuje adresář s webovou prezentací pro daný virtuální server. Parametry jednotlivých adresářů můžeme specifikovat pomocí značky <Directory /adresar>, do které umístíme jednotlivé volby. 15 3.6. WEBOVÝ SERVER A PHP KAPITOLA 3. INSTALACE SERVERU Řádek AllowOverride None způsobí, že nebude možné používat soubor .htaccess v rámci příslušného adresáře webové prezentace. V tomto souboru je obvykle možné leckterá nastavení serveru upravit nebo dokonce přenastavit. Z bezpečnostního hlediska je tedy lepší, pokud se tato volba použije. Volba Options umožňuje dále nastavit některé parametry příslušného adresáře. Z bezpečnostního hlediska je vhodné explicitně zrušit vytváření indexů obsahu adresáře tam, kde chybí výchozí soubor úvodu webové prezentace (např. index.html). To zajišťuje parametr -Indexes. Následují nastavení souborů, do kterých se budou ukládat logy. Pro každý virtuální server je možné specifikovat jiný soubor s logem. Pokud budeme vytvářet nový virtuální server, můžeme tak učinit pomocí následujícího prototypu konfiguračního souboru: NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName www.domena.cz ServerAlias domena.cz *.domena.cz DocumentRoot /var/www/www.domena.cz <Directory /var/www/www.domena.cz> Options -Indexes AllowOverride None Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error-domena.cz.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName www.domena.cz ServerAlias domena.cz *.domena.cz DocumentRoot /var/www/www.domena.cz <Directory /var/www/www.domena.cz> Options -Indexes AllowOverride None Order allow,deny Allow from all </Directory> SSLEngine On SSLCertificateFile /etc/apache2/apache.pem ErrorLog /var/log/apache2/error-domena.cz.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost> 16 3.7. PŘESNÝ ČAS KAPITOLA 3. INSTALACE SERVERU Na tomto vzoru konfiguračního souboru je vidět použití protokolu HTTPS, který je třeba specifikovat nejprve úpravou portů u volby NameVirtualHost a dále uvedením voleb SSLEngine On a SSLCertificateFile. Název domény je specifikován pomocí volby ServerName. Volba ServerAlias umožňuje specifikovat alternativní doménová jména, ke kterým bude Apache přiřazovat příslušnou webovou prezentaci ve specifickém adresáři. Významy jednotlivých voleb a podrobnější informace naleznete v dokumentaci webového serveru Apache[5]. Z důvodu usnadnění zálohování a využití volného místa doporučuji přesunout webové prezentace z /var/www někam jinam, třeba do /home. Pomocí volby DocumentRoot je možné specifikovat libovolné umístění. Jednotlivé virtuální servery lze spravovat pomocí dvou příkazů, a sice a2ensite a a2dissite, kterými „aktivujemeÿ určitý virtuální server (resp. jeho příslušný konfigurační soubor) nebo jej deaktivujeme. Po provedení těchto akcí je třeba nechat Apache znovu načíst konfiguraci (viz výše). 3.7 Přesný čas Už kvůli poštovnímu serveru je vhodné zajistit, aby server vždy disponoval přesným časem. Toto zajistí časový server, NTP. Jeho instalaci provedeme příkazem: apt-get install ntp Výchozí nastavení časového serveru není třeba měnit. Server využije rozsáhlou databázi časových serverů, se kterými bude synchronizovat systémový čas. Je možné specifikovat vlastní časové servery, avšak při jejich volbě je třeba respektovat obecná pravidla pro používání časových serverů, tedy nezatěžovat zbytečně servery úrovně stratum 110 , pokud není třeba přesnost v řádu milisekund, což na webovém serveru nepředpokládám, úplně postačí volit servery z úrovně stratum 3 nebo 4. Alternativou k použití časového serveru je použití nástroje ntpdate, který umožňuje provádět jednorázovou (skokovou) změnu systémového času dle časového serveru. Nástroj nainstalujeme pomocí příkazu: apt-get install ntpdate Jednorázovou synchronizaci času s časovým serverem provedeme příkazem: ntpdate casovy.server.net Aby se čas synchronizoval pravidelně, vytvoříme skript, který se bude spouštět každou hodinu a bude synchronizovat čas se zadaným časovým serverem. Soubor se skriptem vytvoříme příkazem: nano /etc/cron.hourly/time-sync Časové servery jsou řazeny do jednotlivých úrovní podle toho, jak jsou „vzdálenyÿ spolehlivému zdroji času. Servery napojené na příslušná zařízení pro získávání přesného času jsou na úrovni stratum 1, od nich přebírají čas servery stratum 2, od těch zase přebírají čas servery stratum 3, atd. 10 17 3.7. PŘESNÝ ČAS KAPITOLA 3. INSTALACE SERVERU Do souboru umístíme následující: #!/bin/bash ntpdate casovy.server.net Soubor uložíme a přidáme oprávnění k jeho spouštění: chmod a+x /etc/cron.hourly/time-sync Jméno souboru si můžeme zvolit dle libosti, ale umístit jej musíme do adresáře /etc/cron.hourly, neboť všechny spustitelné soubory v tomto adresáři se každou hodinu spustí. 18 4 Správa serveru Abychom mohli spravovat webový server postavený na GNU/Linuxu, měli bychom být s tímto operačním systémem a prací v něm seznámeni. 4.1 Úvod do GNU/Linuxu GNU/Linux je unixový operační systém. Existují dva základní principy fungování unixových systémů. V těchto systémech platí, že neexistuje jeden nástroj pro realizaci více činností1 , ale mnoho nástrojů, kde každý dělá jenom jednu věc, ale dělá ji dobře, a tyto nástroje je možné propojit pomocí příkazové řádky, a získat tak přesně tu funkcionalitu, kterou požadujeme. Druhá charakteristika unixových systémů je fakt, že vše je soubor. Tudíž i kus hardwaru je v systému reprezentován souborem (nebo i více soubory), se kterým je možné provádět běžné operace (samozřejmě dle toho, co hardware umožňuje). Pro představu, první SATA/SCSI disk je reprezentován souborem /dev/sda. Pokud zkopírujeme jeho obsah do jiného souboru, získáme soubor se stejným obsahem, jaký má celý tento disk. 4.1.1 Adresářová struktura Unixové systémy nepoužívají logické jednotky označené písmeny. Všechny souborové systémy se připojují do jednoho velkého adresářového stromu. Jednotlivé souborové systémy je možné připojovat, odpojovat nebo měnit jejich parametry pomocí programů mount a umount. Adresářová struktura v unixových systémech má svůj význam i systém. Pokusím se ve stručnosti vysvětlit, co najdeme v jednotlivých adresářích. Podotýkám, že adresářová struktura začíná kořenovým adresářem, který se označuje lomítkem2 : • /bin - klíčové (uživatelem) spustitelné programy pro spuštění a provoz systému • /sbin - klíčové (uživatelem root) spustitelné programy pro spuštění a provoz systému • /lib - klíčové knihovny a moduly jádra • /boot - obrazy jader a konfigurace zavaděče3 • /dev - speciální soubory reprezentující jednotlivá zařízení Dnešní linuxové distribuce obsahují řadu softwaru, pro které toto neplatí. Ale ten se v základu systému a v rámci správy serveru příliš nevyskytuje. 2 Pozor, v operačních systémech od Microsoftu se pro oddělení jednotlivých adresářů (resp. složek) používá zpětné lomítko. V unixových systémech má zpětné lomítko úplně jiný význam (neguje význam speciálního znaku). 3 Přesněji, pouze konfigurace zavaděče GRUB se nachází v tomto adresáři. 1 19 4.1. ÚVOD DO GNU/LINUXU KAPITOLA 4. SPRÁVA SERVERU • /home - domovské adresáře uživatelů (jméno adresáře odpovídá uživatelskému jménu) • /media, /mnt - adresáře určené k připojení dalších souborových systémů (CD/DVD, jiné oddíly, apod.) • /opt - místo pro instalaci softwaru, který nevyužívá unixovou hierarchii adresářů • /proc - speciální adresář se speciálními soubory, které umožňují číst informace z jádra a měnit jeho parametry (za běhu) • /root - domovský adresář uživatele root • /sys - speciální adresář podobný /proc zaměřený na hardware • /tmp - adresář s dočasnými soubory (zde musí být pro správný provoz mnoha programů volné místo) • /usr - druhotná hierarchie (s adresáři bin, lib, sbin, apod.) určená pro software, který není třeba k základnímu fungovaní operačního systému • /var - proměnlivá data (nalezneme tu třeba adresář se systémovými logy (/var/log) a různé citlivé adresáře, kde je taktéž třeba zajistit volné místo) 4.1.2 Shell Základním stavebním kamenem unixových systémů je interpret příkazové řádky (shell). Linuxové distribuce (včetně Debianu) sice obsahují grafické prostředí, a usnadňují tak práci se systémem i běžným uživatelům, avšak na serveru (přesněji na webovém serveru) nemá grafické prostředí opodstatnění. Pro správu systému a realizaci všech potřebných činností budeme používat příkazovou řádku. Základy práce s příkazovou řádkou (shellem) si nyní probereme. Budu předpokládat práci s výchozím shellem, který se nazývá Bash. Po přihlášení nám shell zobrazí výzvu (prompt), kam budeme zadávat jednotlivé příkazy. Tato výzva zpravidla obsahuje naše uživatelské jméno, jméno serveru a aktuální adresář. Je zakončena buď znakem $, který naznačuje, že nemáme oprávnění uživatele root, nebo znakem #, který značí, že jsme přihlášeni jako uživatel root. Příkazy mohou mít parametry, popřípadě volby. Oddělovacím znakem je mezera. Kurzorové šipky je možné používat k pohybu po zadávaném příkazu a ten libovolně upravovat. Šipkami nahoru a dolů se pohybujeme v historii dříve zadávaných příkazů. Užitečnou funkcí při zadávání názvů souborů nebo cest k souborům je doplňování, ke kterému využíváme tabulátor. Velmi užitečným programem pro realizaci různých činností s příkazovou řádkou je Midnight Commander, který spustíme příkazem mc. 20 4.1. ÚVOD DO GNU/LINUXU 4.1.3 KAPITOLA 4. SPRÁVA SERVERU Dokumentace Je jasné, že v tak rozsáhlém systému, jakým je GNU/Linux, se nelze orientovat bez podrobné dokumentace. Tu členíme do několika kategorií: • programová dokumentace, manuálové stránky • distribuční dokumentace • obecná dokumentace (knihy, články, weby o GNU/Linuxu) Jelikož používáme Debian, je vhodné v první řadě doporučit studium oficiální dokumentace této distribuce. Tuto dokumentaci nalezneme na adrese: • http://www.debian.org/doc/ Tato dokumentace je velmi podrobná a obsahuje mnoho informací o specifikách Debianu. Lze také doporučit studium některé obecnější dokumentace, která třeba poskytuje podrobnější pohled na GNU/Linux a některé obecnější záležitosti, třeba práci v příkazové řádce, kterou je třeba ke správě linuxového serveru ovládat alespoň na základní úrovni. Je však také dobré vědět, že existuje dokumentace přístupná v rámci systému jako takového. Sem řadíme manuálové stránky a doplňující programovou dokumentaci. Manuálové stránky vyvoláme příkazem man. Používání manuálových stránek je popsáno v manuálové stránce programu man. Tu lze vyvolat zapsáním příkazu: man man Manuálové stránky mají jednotlivé příkazy, ale také třeba konfigurační soubory. Pokud bych se rád dozvěděl více o příkazu mount, zapíši příkaz: man mount Pokud bych se chtěl dozvědět více o konfiguračním souboru fstab, zapíši příkaz: man fstab Jednotlivé konfigurační soubory mnohdy samy o sobě obsahují komentáře (většinou uvozené křížkem), kde jednotlivé volby podrobně popisují. Debian běžně obsahuje nejenom manuálové stránky, ale i další dokumentaci k jednotlivým balíčkům, a to v adresáři /usr/share/doc. Bývají zde uloženy vzory konfiguračních souborů, soubory README a poznámky pro balíček od tvůrců Debianu. Jedno z úskalí dokumentace ke GNU/Linuxu, které je nutné zmínit, je zastarávání dokumentace. Zatímco některé věci téměř nezastarávají (práce s příkazovou řádkou), jiné záležitosti se poměrně rychle mění. Zejména různé návody a postupy jsou specifické třeba výhradně pro konkrétní verzi distribuce, přičemž v následující verzi již bude třeba použít jiného postupu. Toto se týká jak nastavení systému, tak konfigurace služeb. Příkladem může být v našem postupu konfigurace generování certifikátu pro Apache, které v předchozí verzi Debianu4 zajišťoval skript, který byl součástí distribuce Apache, avšak v aktuální verzi tento skript chybí a certifikát je nutné vygenerovat ručně. Sám tedy spíše doporučuji preferovat dokumentaci, která je čerstvějšího data. 4 S kódovým označením Sarge 21 4.2. SPRÁVA UŽIVATELŮ 4.1.4 KAPITOLA 4. SPRÁVA SERVERU Uživatelé, skupiny a práva Systém přístupových práv v unixových systémech rozeznává tři subjekty. Vlastníka souboru (příslušného uživatele), skupinu (soubor patří vždy jen do jedné skupiny, uživatel může patřit do více skupin) a ostatní (ti, kdo nejsou ani vlastníkem, ani nepatří do dané skupiny). Existují tři hlavní přístupová práva pro každý z těchto tří subjektů, právo ke čtení, právo k zápisu a právo ke spuštění (resp. vykonání kódu). V případě adresářů přísluší právo ke čtení možnosti vypsat obsah adresáře, právo k zápisu přísluší možnosti vytvářet, upravovat a mazat soubory v daném adresáři a právo ke spuštění přísluší možnosti adresář otevřít (příkaz cd). Existují tři speciální přístupová práva, set-UID, set-GID a tzv. sticky bit. Pro adresáře má podstatný význam sticky bit, který znemožní uživatelům mazat soubory, které jim nepatří, i když mají do příslušného adresáře přístup (toto právo je nezbytně nutné pro adresář /tmp). V případě souborů je nejpodstatnější set UID právo, které zajistí, že program spuštěný uživatelem bude spuštěn s právy svého vlastníka. Tak je zajištěno, aby uživatel mohl realizovat činnosti, ke kterými by jinak potřeboval oprávnění uživatele root. Přístupová práva a vlastnictví souborů a adresářů se upravují pomocí příkazů chmod a chown. Mezi uživateli má speciální postavení uživatel root (superuživatel), pro kterého žádná omezení neplatí. Z tohoto důvodu je třeba být velice opatrný při provádění činností s právy uživatele root. Kupříkladu, snaha vymazat veškerý obsah adresáře /tmp/neco pomocí příkazu rm -rf může při obyčejném překlepu způsobit katastrofu. Pokud bychom oddělili úvodní lomítko a zapsali: rm -rf / tmp/neco pak by se začal mazat rekurzivně celý adresářový strom a všechno, co je na něj připojené. Takový příkaz by spolehlivě zničil celý systém. 4.2 Správa uživatelů K běžné správě uživatelů slouží příkazy adduser a deluser. Ty umožňují vytváření uživatelských účtů a jejich mazání. K úpravě uživatelských účtů slouží příkaz usermod a ke změně hesla příkaz passwd. Pro vytváření uživatelů za pomoci skriptů se hodí neinteraktivní verze příkazů pro zakládání a rušení uživatelských účtů, a sice příkazy useradd a userdel. Poštovní schránku získá uživatel automaticky, avšak u typu schránky Maildir je třeba nejprve založit příslušnou strukturu adresářů. Toho lze snadno docílit třeba tak, že uživateli zašleme úvodní e-mail: echo "Vitejte na serveru domena.cz" | mail -s "Uvitani" uzivatel@localhost Program mail je součástí balíčku mailutils, který můžeme nainstalovat příkazem: apt-get install mailutils 22 4.3. SPRÁVA SOFTWARU KAPITOLA 4. SPRÁVA SERVERU Pokud chceme uživateli založit databázi a přístup k ní, musíme se obrátit na možnosti příslušné databáze (v našem případě MySQL). Databázi můžeme založit takto[11]: mysqladmin create databaze Uživatele s přístupem k této databázi založíme takto: echo "GRANT ALL ON uzivatel.databaze to uzivatel.localhost \ IDENTIFIED BY ’heslo’;" | mysql --user=root mysql 4.3 Správa softwaru Správu softwaru v GNU/Linuxu obvykle zajišťuje centrální nástroj, správce balíčků. V případě distribuce Debian je správcem balíčků Apt. Na balíček lze nahlížet obecně jako na komponentu. Může se jednat o konkrétní program, ale také knihovnu, dokumentaci k programu, datové soubory k programu, hlavičkové soubory5 , apod. Balíčky se nacházejí v tzv. repositářích. To jsou umístění (ať už fyzická - CD/DVD média, nebo síťová, s konkrétním URL), kde se kromě vlastních balíčků nachází i jejich index, který umožňuje správci balíčků udržovat přehled o obsahu jednotlivých repositářů. Mezi balíčky existují tzv. závislostní vazby. Typicky je to závislost programu na nějaké knihovně, kterou pro svou funkci využívá. Může se ale jednat i o jinou formu závislosti, třeba balíček se spustitelnými soubory nějakého programu bude závislý na balíčku, který obsahuje jeho datové soubory. Správce balíčků si udržuje informace o obsahu repositářů, ale také o obsahu systému (resp. o nainstalovaných balíčcích). Sám se skládá z více částí, instalaci balíčků nezajišťuje sám, nýbrž pomocí nízkoúrovňového nástroje (v Debianu je to dpkg). Jenom správce balíčků umí řešit závislostní vazby. Příslušné nízkoúrovňové nástroje toto neumí. Je tedy vhodné pro instalaci softwaru upřednostňovat primárně správce balíčků. Stejně tak software, který je v oficiálních repositářích Debianu, je podporován, tzn. pokud se v některém programu třeba objeví bezpečnostní chyba, bude brzy k dispozici aktualizovaný balíček. 4.3.1 Repositáře Debianu Repositáře Debianu jsou tři. Hlavní repositář je main a obsahuje pouze software, který vyhovuje požadavkům Debianu (tj. svobodný software). Repositář contrib obsahuje svobodný software, který však závisí na nějakém nesvobodném, který je zpravidla v repositáři non-free. Jednotlivé repositáře lze přidávat, ubírat a upravovat v souboru /etc/apt/sources.list. Hlavičkové soubory jsou nutné pro kompilaci softwaru. V Debianu jsou od jednotlivých knihoven odděleny a bývají v balíčcích s přídomkem -dev. 5 23 4.4. SPRÁVA SLUŽEB 4.3.2 KAPITOLA 4. SPRÁVA SERVERU Práce se správcem balíčků Pro příkazovou řádku má správce balíčků Debianu nástroj apt-get. Před kterýmkoliv úkonem, který zahrnuje instalaci nebo aktualizaci softwaru je vhodné nejprve aktualizovat jeho databázi: apt-get update Instalaci softwaru zvládneme již na základě předchozí kapitoly: apt-get install jmeno_balicku Jelikož si správce balíčků udržuje podrobné informace o nainstalovaných balíčcích a jejich verzích, stejně jako o balíčcích, které jsou k dispozici v repositářích, je aktualizace systému velmi jednoduchá: apt-get upgrade Výhodou tohoto procesu je, že tímto způsobem dojde k aktualizaci veškerého softwaru, který jsme instalovali (s výjimkou toho, který jsme neinstalovali z oficiálních repositářů). V případě změny repositářů (např. z repositářů pro stabilní větev na repositáře z testovací větve) je třeba vyřešit závislosti poněkud agresivnějším způsobem (včetně odstranění některých balíčků). To zajišťuje následující příkaz: apt-get dist-upgrade 4.3.3 Automatická aktualizace Pomocí plánovače úloh (cron) můžeme poměrně snadno vytvořit skript, který zajistí automatickou aktualizaci systému třeba každý den. Do souboru /etc/cron.daily/upgrade vložíme následující obsah: #!/bin/bash apt-get update apt-get -y upgrade A následně přidáme právo na spuštění: chmod a+x /etc/cron.daily/upgrade 4.4 Správa služeb Jak již nyní čtenář bezpochyby tuší, jednotlivé služby se konfigurují prostřednictvím editace příslušných textových souborů v adresáři /etc. Tyto soubory bývají okomentované a mívají podrobnou dokumentaci jak v manuálových stránkách, tak na webových stránkách příslušného projektu. Běh služeb lze ovládat pomocí skriptů v /etc/init.d. Službu lze zastavit: 24 4.5. ŘEŠENÍ PROBLÉMŮ KAPITOLA 4. SPRÁVA SERVERU /etc/init.d/apache2 stop A opět spustit: /etc/init.d/apache2 start Obě akce lze provést rychle za sebou pro minimalizaci výpadku: /etc/init.d/apache2 restart To však ne vždy bývá dobré provádět za provozu, zejména, když to není nezbytně nutné. Třeba zrovna Apache umí znovu načíst svou konfiguraci, aniž by musel být ukončen: /etc/init.d/apache2 reload Před touto akcí je velmi vhodné pečlivě zkontrolovat konfigurační soubory, jestli v nich není někde chyba. Pokud ano, služba se odmítne znovu spustit a nastane delší výpadek. Apache má nástroj, který umožní prověřit konfigurační soubory: apache2ctl configtest Ne všechny služby mají podobné možnosti a nástroje. V takovém případě lze experimenty v produkčním prostředí omezit na dobu, kdy server využívá co nejméně klientů (třeba v noci). 4.5 Řešení problémů K řešení jakéhokoliv problému je třeba nejprve získat potřebné informace. Informace o proběhlých událostech obsahují systémové logy a logy některých služeb v adresáři /var/log. Pokud o problému informuje nějaká chybová hláška, bývá vhodné ji přímo zadat do vyhledávače. V mnoha případech tak snadno najdeme přímo řešení našeho problému. Ne vždy bývají směrodatné informace z logů. Pak přichází na řadu diagnostické nástroje. K diagnostice problémů se sítí se hodí nástroje jako netstat, ping, host a ifconfig. Informace o procesech nám podá top, popřípadě jeho vylepšená verze htop, kterou doporučuji nainstalovat a používat. Činnost jednotlivých programů lze velmi podobně sledovat pomocí nástrojů typu strace. Informace o používání systémových prostředků nám podá lsof. Při „divnémÿ chování některých programů bývá vhodné nejprve zkontrolovat, jestli je na oddílech (zejména na těch obsahujících adresáře /tmp a /var) volné místo. To lze realizovat příkazem: df -h Informace o jádře (zejména o proběhlých událostech) lze získat příkazem dmesg. Máme-li dostatek informací o problému a zejména jeho příčinách, měli bychom být schopni jej vyřešit. Pokud toho schopni nejsme, ať již pro nedostatek informací či nejasnost v rámci řešení problému, nezbude než se obrátit buď do nějakého diskusního fóra či e-mailové konference, popřípadě na placenou podporu, pokud ji využíváme. 25 4.6. BEZPEČNOST 4.6 KAPITOLA 4. SPRÁVA SERVERU Bezpečnost Bezpečnost obecně je vhodné vnímat nikoliv jako stav nebo dokonce jako produkt, který lze někde zakoupit, nýbrž jako cyklický proces zahrnující následující fáze: • analýza a formulace bezpečnostní strategie • implementace • monitorování • událost (krize) V první fázi bychom měli provést analýzu a vytvořit komplexní strategii pro zajištění bezpečnosti. Ta by měla zahrnovat jak bezpečnostní opatření týkající se možných útoků ze sítě, tak opatření zajišťující fyzickou bezpečnost, odolnost proti výpadkům, atd. V tomto směru je třeba zvážit, jaká opatření se vyplatí provést a která jsou již mimo naše možnosti. Kupříkladu, odolnost proti výpadkům a související řešení s vysokou dostupností by velmi pravděpodobně vyžadovalo značné investice do hardwaru a správy. Ve druhé fázi provedeme realizaci této strategie. Následuje fáze monitorování, kdy bychom měli prověřit, zda bezpečnostní opatření, která jsme implementovali, skutečně fungují, a kdy bychom měli zároveň příslušný server sledovat, abychom mohli odhalit jak případný útok, tak nějaký problém (třeba s hardwarem). Čtvrtá fáze představuje nějakou podstatnou změnu, která nás donutí cyklus opakovat. To může být nové zjištění, změna vedení v organizaci, výměna klíčového pracovníka, ale i skutečný bezpečnostní incident. Pokud dojde k incidentu, doporučuje se především zachovat chladnou hlavu, nepanikařit, získat o průniku všechny důležité informace, a teprve potom odstavit server a provést obnovu ze záloh. Je též vhodné serveru po útoku věnovat zvýšenou pozornost a důkladně jej monitorovat. 4.6.1 Bezpečnostní strategie pro webový server Bezpečnostní strategie musí respektovat náš záměr. Pokud bychom chtěli provozovat webhosting, budeme muset některá bezpečnostní opatření omezit kvůli požadavkům klientů. Naopak, pokud budeme provozovat vlastní server, na kterém bude výhradně náš vlastní obsah, budeme moci server zabezpečit o něco lépe. Obecně, existují tři potenciální rizikové oblasti. Možný útok zvnějšku, útok zevnitř a fyzická bezpečnost. Fyzické bezpečnosti se budu věnovat na závěr. Útok zvnějšku představuje hlavní oblast, na kterou se správci serverů zaměřují. Všechny síťové služby, které hodláme na serveru provozovat, je třeba zabezpečit, pokud možno již od základu. Pokud nepotřebujeme, aby daná služba byla k dispozici zvnějšku, nastavíme ji tak, aby „naslouchalaÿ pouze na lokálním síťovém rozhraní (viz MySQL výše). Pokud je služba veřejná (na webovém serveru to bude určitě alespoň samotný webový server), přístup k ní omezit nemůžeme, ale měli bychom se snažit ji zabezpečit. Kromě bezpečnostních opatření v konfiguraci je to v každém případě pravidelná aktualizace. 26 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU Útok zevnitř představuje mnohem vážnější problém, avšak díky systému přístupových práv lze riziko zneužití oprávněného přístupu podstatně snížit. Obecně, ani pro poskytování webhostingu není třeba zákazníkům umožnit vzdálený přístup k příkazové řádce. Na závěr je třeba dodat, že žádná bezpečnostní opatření nemohou zajistit stoprocentní bezpečnost (snad s výjimkou odpojení serveru od sítě, a to jak sítě Internet, tak od té elektrické). Riziko incidentu lze snížit, ale nikoliv eliminovat. 4.6.2 Typy útoků a útočníků Útoky ze sítě můžeme rozdělit do dvou kategorií, útoky cílené a útoky náhodné. Náhodné útoky realizují zejména automatizované nástroje, které procházejí určitý rozsah IP adres, hledají přístupné služby, a v nich pak jednotlivé zranitelnosti. Proti těmto útokům pomůže dodržet základní bezpečnostní pravidla (silná hesla, pravidelná aktualizace). Útoky cílené jsou útoky směřované útočníkem vědomě a přímo na náš server, patrně s nějakým záměrem. Tyto útoky jsou mnohem nebezpečnější, protože jsou realizovány člověkem a nikoliv automatem. Proti těmto útokům pomůže důkladné zabezpečení služeb a monitorování serveru. Útočníci mohou být méně zkušení a využívat pouze příslušných automatizovaných nástrojů bez hlubších znalostí principu fungování sítí a serverů, nebo mohou být zkušení. Je jasné, že ti zkušení budou představovat větší riziko, pokud začnou cíleně útočit na náš server, ale pravděpodobnost setkání s nimi je relativně malá (je jich málo). Naopak útoky z řad začínajících útočníků je mnoho. Naštěstí nepředstavují příliš velké riziko. 4.6.3 Formy útoků Útoky se mohou zaměřovat buď na nějakou zranitelnost v některé z veřejně přístupných služeb, nebo se pokoušet o získání přístupu uhádnutím správného uživatelského jména a hesla i v zabezpečené službě. Proti první skupině útoků pomůže zabezpečení služeb a pravidelná aktualizace, proti druhé silná hesla (popřípadě omezení počtu přihlášení za jednotku času). 4.6.4 Zabezpečení SSH Možností zabezpečení SSH je mnoho, já se zaměřím na ty nejpodstatnější. Konfiguračním souborem pro OpenSSH server je /etc/ssh/sshd_config. Nejprve omezíme protokoly, které bude server umožňovat použít, na verzi 2: Protocol 2 Následně zakážeme vzdálené přihlášení uživatele root: PermitRootLogin no Ujistíme se, že následující volby jsou nastaveny tak, jak je naznačeno: 27 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU PermitEmptyPasswords no StrictModes yes UsePAM yes X11Forwarding no UsePrivilegeSeparation yes Další alternativy zabezpečení SSH je třeba zvážit. První možností je nechat službu běžet na jiném portu než 22. Můžeme zvolit některý z vyšších portů: Port 12345 Toto opatření nezabrání útokům na SSH (útočník může nejprve provést portscan, čímž SSH běžící na jiném portu odhalí), ale zabrání většině automatizovaných útoků, protože ty bývají napevno nastavené na port 22. Toto opatření není příliš vhodné, máli náš server více uživatelů (třeba v případě provozu webhostingových služeb), neboť představuje komplikace při nastavení SSH/SCP klientů. Druhou možností je použití autentikace pomocí klíčů a zakázat přihlášení pomocí hesla. Tato možnost zahrnuje použití asymetrické kryptografie, nejprve vytvoříme pár klíčů: ssh-keygen Po vygenerování klíče důrazně doporučuji klíč ochránit heslem. Veřejný klíč, .ssh/id_rsa.pub, zkopírujeme na server do domovského adresáře uživatelského účtu, který budeme chtít pro přihlášení použít, přesněji do souboru .ssh/authorized_keys. Soukromý klíč, .ssh/id_rsa pak budeme využívat k přihlášení k serveru, tj. musíme ho mít k dispozici všude tam, odkud se budeme hlásit na server. V konfiguračním souboru OpenSSH serveru pak můžeme znemožnit přihlášení pomocí hesla: PasswordAuthentication no Nevýhoda tohoto postupu spočívá v nutnosti mít klíč po ruce na každé stanici, ze které se budeme chtít hlásit k serveru. Stejně tak není možné znemožnit přihlašování pomocí hesla na serveru s více uživateli, nebo v případě provozování webhostingových služeb. Další metoda ochrany SSH, kterou zmíním, je využití některého z dalších zabezpečovacích programů (např. denyhosts nebo fail2ban). Tyto nástroje analyzují neúspěšné pokusy o přihlášení a v případě, že příslušná IP adresa překročí povolený počet neúspěšných přihlášení za nastavený časový interval, přístup k SSH z dané IP adresy bude zablokován. Je třeba poznamenat, že tyto služby mohou být zneužity k DoS6 útoku, popřípadě, při restriktivním nastavení, mohou zamezit možnosti přihlášení oprávněného uživatele, zadal-li několikrát po sobě špatně heslo. Poslední možností pro ochranu SSH, kterou zmíním, je tzv. port knocking7 . Ve výchozím stavu je přístup k portu se službou SSH uzavřen. V případě, že správce zašle určité pakety na určité porty serveru, bude tento požadavek zachycen a dojde k otevření firewallu pro IP adresu, ze které tyto pakety přišly. Tato metoda ochrany služeb má však jednu podstatnou nevýhodu - útočník, který naslouchá síťovému provozu, může příslušnou sekvenci paketů odhalit a využít. 6 7 Denial of Service http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki 28 4.6. BEZPEČNOST 4.6.5 KAPITOLA 4. SPRÁVA SERVERU SCP bez shellu Využívat pro přenos souborů na server protokol FTP je čirý hazard. Jméno a heslo uživatele putují sítí nezašifrované a je možné je snadno odposlechnout. Proto je vhodné použít některou ze šifrovaných služeb, třeba SCP. SCP je protokol pro přenos souborů přes šifrované spojení. Zajišťuje jej server OpenSSH. V tomto případě nám může vadit, že se uživatel může vzdáleně přihlásit i přes SSH, a získat tak přístup k příkazové řádce. Tento problém můžeme vyřešit následujícím způsobem[7]. Nejprve nainstalujeme program scponly: apt-get install scponly Dále přidáme program /usr/bin/scponlyc do seznamu platných shellů v /etc/shells (pozor, dvě většítka jsou nutná): echo "/usr/bin/scponlyc" >> /etc/shells Následně upravíme záznam v /etc/passwd u každého uživatele, který by neměl mít přístup k SSH tak, že vyměníme jeho výchozí shell za výše zmíněný program. Běžný uživatelský záznam v tomto souboru vypadá takto: michal:x:1000:1000:michal,,,:/home/michal:/bin/bash Poslední položku (oddělovačem je dvojtečka) tvoří výchozí shell uživatele. My jej změníme na /usr/bin/scponlyc: michal:x:1000:1000:michal,,,:/home/michal:/usr/bin/scponlyc Tuto operaci naštěstí nemusíme provádět ručně, postačí použít příkaz: usermod -s /usr/bin/scponlyc uzivatel 4.6.6 Zabezpečení PHP a Apache Část zabezpečení Apache jsme již probírali dříve, v rámci jeho konfigurace. Značnou část zabezpečení Apache provádí distributor, procesy Apache běží s minimálními právy. To, co jsem dosud nezmínil, je problém se symbolickými odkazy a jejich následováním. Bylo by vhodné, pokud to není nezbytně nutné, zakázat následování symbolických odkazů[8, str. 432]. Toho je možné využít k úniku některých citlivějších informací (oprávněným uživatelem). To provedeme uvedením parametru -FollowSymlinks volby Options v každé sekci <Directory> u jednotlivých virtuálních serverů. Co se týká zabezpečení PHP, rozhoduje samozřejmě v první řadě bezpečnost příslušné webové aplikace. Pokud aplikace napsaná v PHP není psána s ohledem na bezpečnost, bude představovat jistý bezpečnostní problém, přinejmenším pro službu, která na ní bude postavena. Lze tedy v první řadě doporučit použití těch webových aplikací, které na bezpečnost dbají. 29 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU Výchozí konfigurace PHP v Debianu je, dle textu samotného konfiguračního souboru, určena pro účely vývoje, nikoliv k nasazení na produkční server. Naštěstí není potřeba něco rozsáhle přenastavovat, úplně postačí využít některý z alternativních konfiguračních souborů pro PHP, který byl nainstalován spolu s distribucí PHP. Pro běžné užití se hodí php.ini-recommended, kterým nahradíme běžný konfigurační soubor PHP příkazem: cp /usr/share/doc/php5/examples/php.ini-recommended \ /etc/php5/apache2/php.ini Existuje ještě restriktivnější konfigurace určená pro vysokou bezpečnost (avšak na úkor funkčnosti řady aplikací). Tu můžeme použít takto: cp /usr/share/doc/php5/examples/php.ini-paranoid /etc/php5/apache2/php.ini Tuto konfiguraci je potřeba lehce upravit, jinak nebude fungovat. Musíme najít řádku s open_basedir a tam změnit php4 na php5 a specifikovat adresář s weby (výchozí nastavení je /var/www). Výběr konfiguračního souboru, popřípadě jeho vlastní úpravy, ponechám na čtenáři. Za základ bezpečnosti PHP ovšem považuji nastavení alespoň následujících voleb tak, jak je naznačeno: register_globals off safe_mode on Zabezpečením PHP (zejména pak z pohledu programátora) se zabývá do větší hloubky PHP Security Guide[9]. Konfigurační soubory PHP v Debianu jsou velmi podobně okomentované, není tedy problém si je přizpůsobit dle vlastních požadavků. 4.6.7 Firewall Firewall je vhodné brát spíše jako doplňující vrstvu zabezpečení. Jednotlivé služby je možné nastavit tak, aby firewallu nebylo třeba8 . Výjimky potvrzující pravidlo existují9 , avšak v naší konfiguraci nikoliv. Debian je znám tím, že ve výchozí instalaci žádný firewall nastavený není. V případě operačního systému GNU/Linux obecně je firewall de facto přímou součástí jádra, tedy Linuxu. Politiku a pravidla firewallu lze pak nastavit pomocí některých nástrojů, které jsou k tomu určené (např. iptables). My si ukážeme, jak vytvořit firewall pro server a vysvětlíme si, jak funguje. Firewall v Linuxu se jmenuje Netfilter10 a jedná se o stavový firewall. To znamená, že umí rozeznat, ke kterému spojení příslušný paket patří. Této funkcionality můžeme využít k jednoduchému sestavení účinného firewallu (viz dále). To zahrnuje využití možností řízení přístupu přímo v rámci daných služeb a jejich konfiguraci takovým způsobem, aby „naslouchalyÿ na tom správném síťovém rozhraní, tj. pokud není nutné, aby daná služba byla přístupná ze sítě, lze ji nakonfigurovat tak, aby poslouchala pouze na lokálním síťovém rozhraní. 9 Příkladem z mé praxe může být třeba server ejabberd, Jabber/XMPP server napsaný v Erlangu, který naslouchá na síti v rámci dvou portů, které nelze v konfiguraci jakkoliv upravit. 10 http://www.netfilter.org/ 8 30 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU Síťový provoz je rozdělen do tří řetězů (INPUT, OUTPUT a FORWARD). Všechny pakety, které přichází ze sítě na náš server, budou procházet řetězem INPUT. Naopak všechny pakety směřující z našeho serveru ven budou procházet řetězem OUTPUT. Pakety, které server obdrží, ale které budou směřovat jinam než na něj, budou procházet řetězem FORWARD. V rámci každého řetězu je možné specifikovat: • politiku (výchozí akci, která se provede, pokud paket nevyhoví žádnému pravidlu) • pravidla pro zpracování paketů V jednotlivých pravidlech je možné specifikovat jednak podmínky, za kterých paket pravidlu vyhoví, a jednak akci, která se s takovým paketem provede. Mezi výchozí tři akce patří ACCEPT (přijetí paketu), DROP (zahození paketu) a REJECT (odmítnutí paketu). Abychom mohli pravidla nastavovat, potřebujeme nainstalovat příslušný nástroj: apt-get install iptables Aktuální podobný výpis konfigurace firewallu obdržíme po zapsání: iptables -L -n -v Výchozí konfigurace veškerý provoz povoluje (s výjimkou směrování paketů, které je třeba ještě povolit v jádře). Abychom nemuseli jednotlivá pravidla zadávat ručně po každém startu systému, vytvoříme si shellový skript s firewallem, který bude spuštěn před nastavením síťového rozhraní. Vytvoříme tedy soubor /etc/init.d/firewall a upravíme konfiguraci síťových rozhraní v /etc/network/interfaces. Relevantní fragment tohoto konfiguračního souboru může vypadat třeba takto: iface eth0 address netmask gateway inet static 1.2.3.4 255.255.255.0 4.3.2.1 My využijeme volbu pre-up, v rámci které specifikujeme soubor, který má být spuštěn ještě před tím, než se aktivuje toto síťové rozhraní. Za tuto volbu umístíme cestu k našemu skriptu s firewallem: iface eth0 inet static address 1.2.3.4 netmask 255.255.255.0 gateway 4.3.2.1 pre-up /etc/init.d/firewall Souboru se skriptem přidáme práva pro spouštění: chmod a+x /etc/init.d/firewall 31 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU Do tohoto souboru můžeme následně zapsat tento obsah: #!/bin/bash # vymazani vsech pravidel a vlastnich retezu iptables -F iptables -X # nastaveni iptables -P iptables -P iptables -P vychozi politiky INPUT DROP OUTPUT ACCEPT FORWARD DROP # nastaveni vlastnich retezu iptables -N ssh iptables -A ssh -m limit --limit 5/min --limit-burst 10 -j LOG \ --log-level 7 --log-prefix "iptables (ssh): " iptables -A ssh -j ACCEPT # nastaveni iptables -A iptables -A iptables -A jednotlivych pravidel INPUT -i lo -j ACCEPT INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT INPUT -m state --state INVALID -j DROP iptables iptables iptables iptables INPUT INPUT INPUT INPUT -A -A -A -A -p -p -p -p tcp tcp tcp tcp --dport --dport --dport --dport 80 -j ACCEPT 443 -j ACCEPT 25 -j ACCEPT 22 -m state --state NEW -j ssh Na tomto jednoduchém skriptu jsem se pokusil ukázat základy stavby firewallu v Linuxu. První dva příkazy mažou vlastní řetězy i pravidla (to je reset firewallu), dále následuje nastavení výchozí politiky pro všechny tři základní řetězy. Je naznačena i tvorba vlastního řetězu, v tomto případě jím budou procházet všechny pokusy o vytvoření nového SSH spojení (pakety náležející existujícím SSH spojením tímto řetězem procházet nebudou). Velmi podstatná jsou první tři pravidla pro řetěz INPUT, ta si nyní vysvětlíme podrobněji. iptables -A INPUT -i lo -j ACCEPT Toto pravidlo je nesmírně důležité, a také je nesmírně důležité, aby bylo v pořadí první (pakety prochází pravidly postupně). Povoluje totiž síťový provoz v rámci lokální smyčky (local loopback), nebo, chcete-li, místního síťového rozhraní. Vzhledem k tomu, že mnoho služeb v GNU/Linuxu komunikuje přes místní síť, je nezbytně nutné toto povolit. Toto pravidlo nepředstavuje žádný bezpečnostní problém, neboť místní síťové rozhraní není nijak propojeno s vnějším světem. Následují dvě pravidla využívající faktu, že linuxový firewall je stavový: 32 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state INVALID -j DROP První pravidlo povolí průchod všem paketům, které patří k již vytvořeným (established) spojením, a také všem paketům, které jsou k nim vztaženy (related). Druhý řádek naopak zahazuje všechny neplatné (invalid) pakety. Následující pravidla povolují příchozí spojení pro jednotlivé služby: iptables -A INPUT -p tcp --dport 80 -j ACCEPT Všimněme si, že je specifikován kromě portu i protokol (TCP). Stavového firewallu je rovněž možné využít pro specifikaci pokusu o navázání spojení, což je naznačeno v tomto příkladě: iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ssh Vidíme zde i odlišnou výchozí akci, kterou není přijetí paketu, ale jeho předání řetězu ssh. V tomto řetězu specifikujeme, že se nová SSH spojení budou zaznamenávat do systémového logu, ale současně zabráníme možnému DoS útoku rychlého zaplnění logů při mnoha pokusech o spojení za krátký časový interval tím, že aplikujeme omezení pomocí modulu limit: iptables -A ssh -m limit --limit 5/min --limit-burst 10 -j LOG \ --log-level 7 --log-prefix "iptables (ssh): " Modul limit nabízí možnost omezit počet průchozích paketů. Nejprve specifikujeme průměrnou hodnotu počtu požadavků za jednotku času (v tomto případě 5 za minutu). Poté specifikujeme, kolik požadavků může být obslouženo najednou, aniž by byl limit aktivován (v tomto případě 10). Tudíž, v tomto případě může tímto pravidlem projít 10 paketů najednou, a teprve poté se aktivuje limit, který propustí 5 paketů za minutu. Pokud nebude přicházet žádný požadavek o spojení, zvýší se o jednotku za každý uběhlý interval počet paketů, které filtr propustí najednou, do maximální hodnoty specifikované v „limit burstÿ. Firewallu je možné využít k omezení přístupu k některým službám (např. SSH). Je možné omezit provoz jen pro určitou IP adresu: iptables -A INPUT -s 1.2.3.4 -p tcp --dport 22 -j ACCEPT Je možné omezit i počet průchozích paketů za jednotku času, pomocí modulu limit: iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min \ --limit-burst 10 -j ACCEPT Toto řešení sice snadno umožní DoS útok, čímž znemožní správci se vzdáleně přihlásit, ale útočník bude mít problém při útoku hrubou silou, kdy by zkoušel všechny možné kombinace jmen a hesel. Stejně jako je možné omezit provoz na určitou IP adresu, je možné určitou IP adresu zablokovat: 33 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU iptables -I INPUT -s 1.2.3.4 -j DROP Zablokovat lze i sítě: iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j DROP iptables -I INPUT -s 192.0.0.0/8 -j DROP Jak je patrné z předchozího příkladu, blokování je možné omezit jen na určitý port nebo specifikovat jiné podmínky. Blokovat lze i celé rozsahy sítí: iptables -I INPUT -m iprange --src-range 83.16.64.15-83.16.64.20 -j DROP Všimněme si, že v ukázkách výše byla použita volba -I. Dosud používaná volba -A přidá pravidlo na konec řetězu. Naopak volba -I přidá pravidlo na jeho začátek. V případě blokování IP adres je vhodnější příslušná pravidla přidat právě na začátek řetězu INPUT. Stejně jako je možné pravidla přidávat, je možné je i mazat, a to pomocí volby -D: iptables -D INPUT -s 1.2.3.4 -j DROP Možnosti konfigurace firewallu v Linuxu jsou značné. Demonstroval jsem pouze základy a některá možná opatření v různých situacích. Mnohem více informací o nastavení firewallu se dozvíte z příslušné dokumentace: man iptables Firewall je možné doplnit ještě úpravou konfigurace Linuxu pro práci se sítí. V této práci se omezím jen na jeden příklad. Tyto parametry se nastavují v rámci rozhraní pro komunikaci s jádrem, které sídlí v adresáři /proc. Jednotlivé parametry lze nastavit buď jako součást nějakého skriptu (bývá vhodné tyto řádky umístit do skriptu, který nastavuje firewall), takto: echo "1" > /proc/sys/net/ipv4/tcp_syncookies Popřípadě je možné adekvátně upravit soubor /etc/sysctl.conf, tedy přidat následující řádky: net/ipv4/tcp_syncookies=1 Parametr tcp_syncookies nastavuje ochranu jádra proti SYN flood útoku, tedy proti zahlcení serveru požadavky o spojení. Další možnosti úpravy konfigurace jádra při práci se sítí probírá následující dokument: • http://iptables-tutorial.frozentux.net/other/ip-sysctl.txt Tímto způsobem lze velmi precizně upravovat práci Linuxu se sítí. Mnoho dalších nastavení může pomoci i v jiných situacích, třeba v případě routeru. To je však mimo zaměření této práce. 34 4.6. BEZPEČNOST 4.6.8 KAPITOLA 4. SPRÁVA SERVERU Monitorování serveru Abychom mohli včas reagovat na vzniklé problémy, měli bychom server monitorovat. To zahrnuje zejména sledování systémových logů, kde se zaznamenávají podstatné proběhlé události. Pro tento účel existuje řada nástrojů. Doporučit mohu program logcheck, který je spouštěn z cronu jednou za určitou dobu. Tuto dobu lze upravit editací souboru /etc/cron.d/logcheck, výchozí nastavení je spouštění každou hodinu. Program lze konfigurovat pomocí souboru /etc/logcheck/logcheck.conf, kde doporučuji nastavit proměnnou REPORTLEVEL na „serverÿ. Pozornost doporučuji věnovat také proměnné SENDMAILTO, kde osobně doporučuji nastavit minimálně dva e-maily, jeden pro náš účet na serveru, druhý na jiném serveru (pokud se nějaký útočník do systému probourá, mohl by pozměnit i příslušný e-mail). Zpočátku bude logcheck zasílat mnoho zpráv, včetně těch nedůležitých. V adresáři /etc/logcheck/ignore.d.server je pak možné specifikovat pomocí regulárních výrazů typy hlášek, které bude logcheck filtrovat. Tímto způsobem lze dosáhnout toho, že budeme dostávat pouze ty hlášky, které mají podstatný význam a nebudeme muset procházet všechno. 4.6.9 Fyzická bezpečnost, zálohování Fyzickou bezpečnost přenechám k úvaze čtenáři. Pokud jsou na serveru citlivá data a je třeba zajistit jejich bezpečnost vůči útočníkovi s fyzickým přístupem k serveru, může pomoci diskové šifrování11 nebo ostraha. Diskové šifrování není optimální volbou z hlediska dostupnosti serveru (po výpadku systém znovu nenastartuje a bude čekat na heslo. Součástí fyzické bezpečnosti serveru je i zajištění zálohování. Za tímto účelem existuje řada nástrojů, přičemž každý z nich se hodí pro jinou zálohovací strategii. Uvedu tedy spíše jen některé alternativy: • rsync (pouze pro plné zálohy) • rdiff-backup (zálohování založené na rsync s možností vzdáleného a rozdílového zálohování) • duplicity (jako předchozí s možností šifrování pomocí GnuPG) • atd. 4.6.10 Aktivní obrana Aktivní obranu tvoří tzv. IDS, tedy Intrusion Detection Systems. To jsou programy, které umí detekovat různé typy aktivit útočníků (zejména portscany), zaznamenávat je a určitým způsobem na ně reagovat (třeba zablokováním určité IP adresy). Příkladem takového IDS je třeba Snort12 ). 11 12 http://luks.endorphin.org/ http://www.snort.org/ 35 4.6. BEZPEČNOST KAPITOLA 4. SPRÁVA SERVERU Patří sem i různé nástroje pro zajištění integrity (resp. zjišťování úpravy některých systémových komponent), např. AIDE13 . Těmito nástroji se v této práci do hloubky zabývat nebudu, neboť poněkud přesahují její rámec. Existují ovšem jiné užitečné nástroje, které představím. Jsou to detektory průniků (umí zjistit některé nesrovnalosti, změněné systémové komponenty nebo detekovat rootkity14 ). V repositářích Debianu jsou k dispozici dva z těchto nástrojů: • chkrootkit • rkhunter Jistě je vhodné tyto nástroje nainstalovat a občas (nebo třeba každý den, pomocí cronu) je spouštět. 4.6.11 Bezpečnostní patche jádra K dodatečnému zajištění bezpečnosti lze použít i speciální bezpečnostní patche jádra (Linuxu). Sem patří dva typičtí představitelé: • SE Linux (Security Enhanced Linux) • grsecurity Oba projekty nabízí dodatečnou ochranu nad rámec toho, co zajišťuje jádro samo o sobě. V Debianu neexistují oficiální distribuční balíčky s jádrem upraveným o grsecurity patch, takže jediná možnost, jak tento patch využít, je zkompilovat si vlastní jádro. Tento postup však vzhledem k okolnostem nelze příliš doporučit. Jednak je samotná kompilace jádra poměrně složitá, a pak, v případě objevení nějaké chyby v dané verzi jádra, je nutné provádět rekompilaci. Existuje sice neoficiální repositář s takto upravenými jádry, ale jde-li o bezpečnost, je otázkou, jestli je vhodné věřit zpravidla jednomu člověku, který na svém webu nabídne daný repositář. SE Linux je v jádrech Debianu zahrnut, ale ve výchozí konfiguraci není povolen. SE Linux je poměrně složitý a pokročilý nástroj pro zabezpečení systému, a jeho popis a nastavení je mimo rozsah této práce. Proto pouze odkážu zájemce na příslušnou dokumentaci: • http://wiki.debian.org/SELinux/Setup • http://www.nsa.gov/selinux/ 13 http://www.cs.tut.fi/~rammer/aide.html Rootkit je označení pro nástroj využívaný útočníky k usnadnění převzetí systému, vytvoření zadních vrátek pro útočníka a skrývání jeho přítomnosti v systému. 14 36 5 Analýza alternativ Nyní se budeme zabývat tím, jaké jsou alternativy k instalaci a provozu vlastního webového serveru, z hlediska financí, technických aspektů a našich cílů. Ačkoliv je finanční hledisko řešení hostingu jistě velmi podstatné, ne vždy bude toto hledisko jediným a ne vždy bude toto hledisko na prvním místě. To, na co se musíme zaměřit v první řadě, jsou naše požadavky, tedy to, co vlastně od webových služeb čekáme, primárně pak to, co od nich nezbytně potřebujeme. Je jasné, že některé alternativy nebudou v určitých situacích vzhledem k určitým našim požadavkům přípustné, ačkoliv budou jednoznačně levnější. Kupříkladu, pokud budeme chtít na serveru ukládat nějaká citlivá data, budeme tíhnout spíše k použití vlastního serveru, který můžeme mít pod kontrolou, a bezpečnost těchto dat tak lépe zajistit, přičemž cenové hledisko bude v této situaci druhořadé. Druhou věcí, kterou musíme zvážit, jsou naše možnosti. Zde se jedná nejenom o naše možnosti z hlediska dostupných financí, ale také o možnosti z hlediska personálu (zkušenosti se správou serverů) a technologie (máme k dispozici hardware pro vytvoření vlastního serveru, nebo je třeba jej nakoupit?). S tím souvisejí i různé možnosti snížení nákladů rozdělením mezi více subjektů. Kupříkladu, vlastní server i jeho správa mohou být nákladné (viz dále), ale pokud se dohodne více lidí (nebo dokonce organizací), že budou server využívat společně, a na nákladech se podílet, dojde k podstatnému snížení nákladů na „uživateleÿ. V rámci této analýzy se nebudu zabývat problematikou domén, zmíním jen, že v případě webhostingu bývá možné získat doménu třetího řádu bezplatně, a ušetřit tak náklady na zřízení a provoz domény druhého řádu1 . Naopak u ostatních variant je zřízení vlastní domény nutné. 5.1 Možnosti umístění webu V současné době je webový server možné provozovat či využívat následujícími způsoby: • outsourcing - webhosting • vlastní server v serverovně • pronajatý server v serverovně • virtuální server • vlastní server ve firmě / doma Pokud se však jedná např. o firemní web, nepůsobí doména třetího řádu příliš reprezentativně. V případě prezentace firem důrazně doporučuji vlastní doménu. 1 37 5.1. MOŽNOSTI UMÍSTĚNÍ WEBU 5.1.1 KAPITOLA 5. ANALÝZA ALTERNATIV Webhosting Pokud vyjdeme z aktuálního ceníku2 renomované společnosti Ignum.cz, je možné pořídit webhosting za 150Kč měsíčně (bez DPH) a získat 150MB prostoru. Pokud bychom se podívali jinam (třeba na ceník Klenot.cz), můžeme najít i 2GB prostoru za 25 Kč měsíčně (včetně DPH). Existuje samozřejmě i celá řada freehostingů, kde sice není nic garantováno, ale kde je cena nulová. Webhosting je tedy v dnešní době možné pořídit velmi levně (i zdarma). V případě zvolení této možnosti se navíc nemusíme starat o správu a zabezpečení serveru, to vše je v režii provozovatele. Z hlediska nákladů na provoz a správu se tedy jedná o optimální variantu. Na stranu druhou, toto řešení nemáme pod kontrolou, a pokud máme jiné než standardní požadavky (PHP, MySQL), může se cena služby vyšplhat i mnohem výše. Kupříkladu, takový Python nabízí Klenot.cz až v cenové variantě za 250 Kč měsíčně s DPH. Problémem, který v rámci webhostingu může nastat, je nadměrná zátěž serveru. Pokud potřebujeme hostovat web s mnoha přístupy, lze očekávat vyšší cenu za službu. 5.1.2 Server housing Server housing představuje umístění vlastního nebo pronajatého serveru v serverovně, která má (zpravidla) klimatizaci, zálohu napájení a personál (popřípadě službu), který může při problémech se vzdálenou správou pomoci. Cena této služby se liší jak dle poskytovatele, tak podle toho, jestli máme nebo nemáme vlastní server. Máme-li vlastní server, pohybuje se cena server housingu přibližně od jednoho tisíce Kč měsíčně. Coolhousing.net nabízí tuto službu už od 1 150 Kč, Ignum.cz od 2 190 Kč měsíčně bez DPH (1U). Pronájem serveru pak cenu zvýší zhruba o jeden tisíc, Ignum.cz, kupříkladu, nabízí pronájem dedikovaného serveru za 2 290 Kč měsíčně bez DPH. Je třeba dodat, že různé serverovny bývají různě vybaveny. Zde je opět nutné přihlédnout k našim požadavkům a zvolit takovou službu, která jim vyhovuje. Výhodou této varianty je plná kontrola nad serverem a technologiemi (resp. službami), které na něj nasadíme. Stejně tak nebývá problém se zátěží serveru tak, jak tomu někdy bývá při využívání webhostingových služeb (viz výše). Oproti webhostingu je však třeba počítat s nutností správy daného serveru. Zatímco v případě webhostingu se o server stará provozovatel, v tomto případě jsme to my, kdo musí správu serveru zajistit. 5.1.3 Virtuální server Virtuální servery bývají podstatně levnější než server housing, avšak jsou také o to méně výkonné a zpravidla na ně nelze nainstalovat distribuci dle vlastního výběru. Společnost Ignum.cz nabízí virtuální server už od 490 Kč bez DPH za měsíc. Pipni.cz nabízí virtuální server dokonce i bezplatně, samozřejmě bez garance. Výhodou virtuálního serveru je jistá kontrola nad daným systémem a možnost vlastní konfigurace jednotlivých služeb, včetně nasazení technologií (resp. služeb), které 2 Ceníky jsou aktuální ke 24. 12. 2007 38 5.2. OPTIMÁLNÍ VARIANTA KAPITOLA 5. ANALÝZA ALTERNATIV třeba nebývají v nabídkách webhostingových služeb tak časté. Oproti server housingu je toto řešení také podstatně levnější. Virtuální server se však nehodí pro provoz webu s mnoha přístupy (jeho výkon je značně limitován), a stejně tak to není řešení, které by bylo zcela pod naší kontrolou (minimálně z hlediska hardwaru a fyzického přístupu k serveru). 5.1.4 Vlastní server Kromě možnosti objednat server housing pro vlastní server je možné jej provozovat buď přímo v prostorách organizace či v domácích podmínkách. Zde záleží především na našich možnostech, tedy na tom, jaký hardware máme k dispozici a hlavně, jaké připojení na Internet máme k dispozici. Požadavkem pro provoz jakéhokoliv serveru je veřejná IP adresa, v případě webového serveru (kvůli DNS záznamům) mohu důrazně doporučit i statickou IP adresu. Problémem mnoha poskytovatelů připojení je také nedostatečný upstream, tedy množství dat za jednotku času, které může plynout od nás směrem ven. To je typické třeba pro ADSL. Tato varianta je tedy limitována tím, co máme v dané lokalitě k dispozici, tedy zejména poskytovatelem připojení. Většinou asi nebude možné uvažovat o provozu serveru s mnoha přístupy, ale pro menší server s méně přístupy to může být optimální řešení, zejména pak v situaci, kdy máme k dispozici jak hardware, tak vhodné připojení. Náklady této varianty pak do značné míry splývají s náklady za elektřinu (provoz serveru) a náklady na připojení. Vzhledem k tomu, že za připojení platíme většinou tak jako tak, jedná se o variantu s velmi nízkými dodatečnými náklady. Nevýhody pak pokrývají ještě nutnost správy serveru, podobně jako v případě varianty server housingu. 5.2 Optimální varianta Rád bych dal jasnou odpověď na otázku, která z výše uvedených variant je ta optimální, ale nemohu. Jak už bylo řečeno v úvodu kapitoly, záleží primárně na tom, jakou službu potřebujeme, resp. jaké jsou naše požadavky. Těm musíme přizpůsobit naši volbu. Stejně tak záleží na tom, jaké máme možnosti (zejména u poslední varianty, vlastního serveru), a to jak z hlediska prostředků, tak z hlediska personálu a jeho znalostí. Pro mne, linuxového správce, je třeba vlastní server preferovanou volbou, protože mám potřebné znalosti a schopnosti, abych server spravoval. Pokud bych ale uvažoval o optimálním řešení pro firmu, která nemá linuxového správce (nebo někoho, kdo by se jím mohl stát), pak bych se především informoval o nějaké možnosti outsourcingu správy příslušného serveru. To bude ovšem nákladnější řešení, zejména, pokud je požadavkem vyšší dostupnost a rychlá reakce na případné problémy. V tomto případě by bylo možná vhodnější preferovat úplný outsourcing a využít některou z webhostingových služeb. Dalším možným řešením, které již bylo naznačeno v úvodu kapitoly, je možnost rozdělit náklady mezi více subjektů, popřípadě je možné zvážit i tu možnost, že se 39 5.2. OPTIMÁLNÍ VARIANTA KAPITOLA 5. ANALÝZA ALTERNATIV subjekt rozhodne sám na daném serveru provozovat webhosting (vedle svých vlastních webů). Pro jednotlivce (a čtenáře této práce), kteří GNU/Linux dosud nepoznali, znamená vlastní server především nutnost investice vlastního (volného) času, který lze samozřejmě využít i jinak. Optimální varianta tedy závisí především na záměru, kterého se snažíme dosáhnout a na našich možnostech. 40 6 Závěr V této práci jsem představil platformu Debian GNU/Linux pro tvorbu webového serveru. Popsal jsem proces instalace a konfigurace všech běžných služeb, které na webových serverech běží, a zmínil jsem i alternativní webové servery. Provedl jsem také analýzu alternativ, aby mohl čtenář zvážit, jestli se vyplatí provoz vlastního serveru na této platformě nebo zvolit nějakou alternativní možnost. Je třeba zmínit, že informace obsažené v této práci nestačí jako základ pro linuxového správce. Ačkoliv jsem se snažil uvést to nejpodstatnější, musel jsem vynechat některé oblasti, které by samy o sobě zabraly rozměry této práce (a nejspíše je i přesáhly), a které je třeba znát, máme-li spravovat linuxový server. Tyto oblasti zahrnují mj. architekturu GNU/Linuxu a práci s příkazovou řádkou. Provoz webového serveru ve vlastní režii tedy vyžaduje poněkud rozsáhlejší znalosti. Naštěstí existuje nespočet publikací i on-line dokumentace, které se správě GNU/Linuxu i Debianu do podrobna věnují, a to v adekvátním rozsahu. Doporučit mohu zejména [12] a [13] (viz literatura). V průběhu práce jsem taktéž odkazoval na některé materiály, zejména online. Dokumentace je sice dostatek, ale vzhledem k velmi rychlému vývoji GNU/Linuxu a souvisejících projektů má některá dokumentace tendenci zastarávat (zejména ta, která je orientována na postupy). Pro tuto oblast je vhodné hledat aktuální dokumentaci především na webu, a to na příslušných projektových stránkách. Pomoc při řešení problémů i získávání dalších znalostí poskytují nejrůznější diskusní fóra a e-mailové konference. GNU/Linux je dynamický, flexibilní a rychle se rozvíjející open source operační systém, který pomáhá vyvíjet ohromné množství dobrovolníků i firem z celého světa a který lze nasadit v mnoha situacích a v mnoha rolích. Webových serverů postavených na GNU/Linuxu je nespočet a Debian je jednou z předních distribucí GNU/Linuxu, jejíž vhodnost pro použití na webovém serveru je neoddiskutovatelná, ať už pro svou kvalitu či stabilitu. Pro nasazení ve firemním prostředí má Debian ještě jednu výhodu, jedná se o nekomerční linuxovou distribuci, kterou lze užívat i pro komerční účely bez nutnosti platit poplatky za licence. Debian obsahuje ve výchozích repositářích pouze software s open source licencemi. Není tedy třeba provádět audit jednotlivých balíčků (resp. programů), je-li možné ten či onen program používat komerčně. 41 Literatura [1] STALLMAN, R. The GNU Project [online]. URL: http://www.gnu.org/gnu/thegnuproject.html [cit. 2007-10-12] [2] SPI, The Debian GNU/Linux FAQ [online]. URL: http://www.debian.org/doc/FAQ/ch-basic_defs.en.html [cit. 2007-1012] [3] SPI, Debian Social Contract [online]. URL: http://www.debian.org/social_contract [cit. 2007-10-12] [4] HowToForge, The Perfect Setup - Debian Etch (Debian 4.0) [online]. URL: http://howtoforge.com/perfect_setup_debian_etch [cit. 2007-10-15] [5] The Apache Software Foundation Apache HTTP Server Version 2.2 Documentation [online]. URL: http://httpd.apache.org/docs/2.2/ [cit. 2007-10-15] [6] Debian Admin Install and Configure Apache2 with PHP5 and SSL Support in Debian Etch [online]. URL: http://www.debianadmin.com/ install-and-configure-apache2-with-php5-and-ssl-support-in-debian-etch. html [cit. 2007-10-16] [7] BURDA, Z. OpenSSH [online]. URL: http://www.zdenda.com/openssh [cit. 2007-10-17] [8] HATCH, B., LEE, J., KURTZ, G., Hacking bez tajemství, Brno: Computer Press, 2003. 644 s. ISBN: 80-7226-869-4 [9] PHP Security Consorcium, PHP Security Guide URL: http://phpsec.org/projects/guide/ [cit. 2007-10-20] [online]. [10] Wikimedia Foundation, Wikipedie: Otevřená encyklopedie [online]. URL: http: //cs.wikipedia.org/ [cit. 2007-10-20]. [11] MySQL AB, MySQL 5.0 Reference Manual [online]. URL: http://dev.mysql.com/doc/refman/5.0/en/index.html [cit. 200710-25]. [12] VYCHODIL, V. Operační systém Linux, Příručka českého uživatele, Brno: Computer Press, 2003. 260 s. ISBN: 80-7226-333-1 [13] NEMETH, E., SYNDER, G., TRENT R. Linux, Kompletní příručka administrátora, Brno: Computer Press, 2004. 828 s. ISBN: 80-7226-919-4 42 LITERATURA LITERATURA [14] Debian Installer team Debian GNU/Linux Installation Guide [online]. URL: http://www.debian.org/releases/stable/i386/ [cit. 2007-12-30] [15] Free Software Foundation GNU GENERAL PUBLIC LICENSE [online]. URL: http://www.gnu.org/copyleft/gpl.html [cit. 2007-12-30] 43 Terminologický slovník adresář - unixové označení pro speciální typ souboru, který odkazuje na jiné soubory (a adresáře); ekvivalent termínu „složkaÿ adresářová struktura - označení pro unixovou hierarchii adresářů, počínaje kořenovým adresářem, kde se na různé adresáře váží různé souborové systémy Apache - vedoucí webový server na trhu; existuje ve verzích pro GNU/Linux i MS Windows Apt - správce balíčků typický pro Debian a na něm postavené distribuce balíček - komponenta systému, např. program, dokumentace k programu, knihovna, apod. copyleft - metoda, při které je copyrightu využíváno k dosažení opaku toho, k čemu je určen; spočívá v nutnosti zachovat licenci při šíření daného programu cron - systémový plánovač, plánovač úloh; program, který spouští jiné programy v zadaný čas Debian GNU/Linux - jedna z nejstarších linuxových distribucí démon - označení pro službu, resp. program běžící na pozadí distribuce Linuxu - konkrétní operační systém založený na GNU/Linuxu DoS útok - typ útoku, který zahlcením kapacit služby nebo serveru znemožní používání serveru běžnými klienty ext3 - jeden ze souborových systémů pro GNU/Linux firewall - paketový filtr, který je obvykle určen k omezení přístupu k jednotlivým síťovým službám GNU - GNU’s not Unix, svobodný operační systém postavený podle Unixu. GNU/Linux - korektní označení pro operační systémy založené na projektech GNU a Linux GNU/GPL - nejpoužívanější open source licence, přesněji licence pro svobodný software; má charakter copyleftu IDS - Intrusion Detection Systems, nástroje pro aktivní ochranu před útočníky; jsou schopné detekovat jejich aktivity a adekvátně na ně reagovat iptables - nástroj pro nastavení pravidel firewallu Linuxu Linux - jádro operačního systému založené na Unixu; zkrácené označení pro operační systémy postavené na Linuxu log - protokol zaznamenávající zpravidla proběhlé události v čase manuálové stránky - „vestavěnáÿ nápověda v unixových systémech, zpřístupňuje ji program man modul jádra - ovladač či jiná funkcionalita, kterou lze do jádra zavádět nebo ji z něj odebírat za běhu Netfilter - označení pro firewall v Linuxu, název konkrétního projektu, který tento firewall tvoří a spravuje NTP - síťový protokol určený pro časovou synchronizaci; démon zajišťující časovou synchronizaci s časovými servery Open Source - software, který má volně dostupné zdrojové kódy OpenSSH - SSH server, který je běžně k dispozici v linuxových distribucích portscan - inventarizace cíle útočníkem, která zpravidla hledá na cíli otevřené porty Postfix - linuxový poštovní (SMTP, MTA) server proprietární software - nesvobodný software, uzavřený software, software, pro který nejsou veřejně dostupné zdrojové kódy repositář - skladiště balíčků; může se jednat o instalační médium, ale také o síťový zdroj rootkit - sada nástrojů, které usnadňují převzetí systému útočníkem, zajišťují útočníkovi zadní vrátka a pomáhají mu maskovat jeho přítomnost v systému SCP - protokol pro zabezpečený přenos souborů postavený na SSH server housing - umístění vlastního nebo pronajatého serveru v serverovně souborový systém - systém pravidel pro organizaci dat do struktury adresářů a souborů shell - příkazový interpret skript - soubor obsahující sadu příkazů pro příkazový interpret správce balíčků - komplexní centrální nástroj pro správu softwaru, který je přítomen ve většině linuxových distribucí a který zajišťuje instalaci, odinstalaci a aktualizaci veškerého softwaru v rámci systému SSH - protokol pro zabezpečené vzdálené přihlášení k serveru (na úrovni příkazové řádky) svobodný software - software, který svým uživatelům poskytuje možnost neomezeného používání, možnost software studovat a upravovat (předpokladem k tomu je přístup ke zdrojovému kódu) 44 LITERATURA LITERATURA a možnost software dále šířit (i za úplatu), v původní či upravené verzi Unix - operační systém vytvořený roku 1969 v Bell Laboratories virtuální server - server pracující v rámci virtuálního stroje, který běží (zpravidla spolu s dalšími virtuálními servery) na určitém fyzickém serveru 45
Podobné dokumenty
Pieri VBA Bio 2
Údaje na tomto technickém listu jsou v souladu s našimi dosavadními poznatky a zkušenostmi2 Jelikož se při zpracování a použi tí našich
produktů může projevit vliv mnoha činitelůB je třebaB aby zpr...
Deset ukázkových stran tohoto čísla najdete na www.linuxexpres.cz
nestabilními balíčky, jen abyste konečně vyzkoušeli ten úžasný 3D desktop nebo novou
verzi svého oblíbeného programu, pak je tu pro vás právě Sabayon. Jiří Němec.
S touto distribucí jsem se seznámi...
Demonstrační robotická platforma - Real-time laboratoř
• robot bude schopen se autonomně pohybovat v neznámém prostředí,
• robot se bude vyhýbat překážkám a osobám,
• robot bude v určeném prostoru plnit předepsanou úlohu a reagovat na změnu
polohy prvk...
Číslo 7 / 2010
není jednoduché. Předpokládá to mít opravdu hluboké přesvědčení o tom, že lidský život není jenom hmotný a viditelný, ale že pro člověka j e stále důležité, aby dal vody živé
své duši. .Jestliže kd...
Sestava 1 - Akademie věd České republiky
v roce 2016, v dalším roce na 29 272 miliard korun až
ke 29 872 miliardám korun v roce 2018. Vicepremiér pro vědu Pavel
Bělobrádek věří, že tato historicky nejvyšší suma umožní stabilizaci systému ...
Databázové systémy I.
být v databázi uloženo. Definuje se účel (k čemu databáze slouží) a úkony které může uživatel s daty
provádět Výsledkem první fáze je konceptuální model který popisuje data na abstraktní úrovni.
Vý...
Vylaďte si desktop
software ve vaší bance jinde než
na serverech?
Linux mimo servery nepoužíváme. Pro vývoj se často
používá Eclipse, což ale nelze považovat za typické
nasazení otevřeného software pro běžné uživatele.
2004 / 18 září
že při registraci „superpředplatného“ dostanu s časopisem i 8×
DVD. Jedná se o DVD filmy, nebo
jsou to DVD disky s programy?
Redakce: Časopis Computer
je časopis věnující se převážně
počítačům, int...