www server na platformě linux debian

Transkript

www server na platformě linux debian
!
∀
!
#∃%&%%∋()∗∃∀(+,
−−−∗,∀,∀.%∋%#/∀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

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...

Více

Deset ukázkových stran tohoto čísla najdete na www.linuxexpres.cz

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...

Více

Demonstrační robotická platforma - Real-time laboratoř

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...

Více

Číslo 7 / 2010

Čí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...

Více

Sestava 1 - Akademie věd České republiky

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 ...

Více

Databázové systémy I.

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ý...

Více

Vylaďte si desktop

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.

Více

2004 / 18 září

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...

Více