VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika
We b o v á a p l i k a c e p ro s p r á v u webhostingového serveru bakalářská práce
Autor: Štěpán Andrle Vedoucí práce: PaedDr. František Smrčka, Ph.D. Jihlava 2014
Abstrakt Tato bakalářská práce pojednává o webové aplikaci pro nastavení a správu webhostingu (multihostingu). Umožňuje správu více hostingů na jednom serveru. Dovoluje přístup uživatelům, kteří nejsou striktně vázáni na jednu doménu, ale mohou jich obsluhovat více. Každý uživatel může mít libovolný počet poštovních účtů, FTP přístupů a přístupů k databázi.
Klíčová slova webhosting, multihosting, hosting, doména, internet, web, stránka, apache, linux
Abstract This bachelor work deals with web application for adjustment and management of webhosting (multihosting). It is capable of managing multiple hosts on one server. It allows access to users, which are not strictly bound to specific domain, but they cat manage more of them. Evere user can have arbitrary number of mail account, FTP accesses and accesses to the database.
Key words webhosting, multihosting, hosting, domain, internet, web, page, apache, linux
Poděkování Na tomto místě bych rád poděkoval svému vedoucímu práce PaedDr. Františku Smrčkovi, Ph.D. za možnost vytvářet bakalářskou práci pod jeho vedením.
Obsah Úvod.................................................................................................................................. 9 1
Seznam použitých internetových zdrojů ......................................................................... 49 Seznam použité literatury .......................................... Chyba! Záložka není definována. Seznam obrázků .............................................................................................................. 50 Seznam příkladů ............................................................................................................. 51 Přílohy............................................................................................................................. 52 1
Obsah přiloženého CD ............................................................................................ 52
7
Seznam použitý zkratek
CSS
– Cascading Style Sheets – styly pro HTML
DB
– databáze
DNS
– Domain Name Server – server pro evidenci adres a IP adres
FTP
– File Transport Protocol – protokol pro přenos souborů
Gid
– Group identifier – Identifikátor skupiny (Unixové systémy)
HTML
– HyperText Markup Language – značkovací jazyk
HTTP
– Hypertext Transfer Protocol – přenos webových stránek
IMAP
– Internet Message Access Protocol – protokol pro správu pošty
MD5
– Message-Digest algorithm – hashovací algoritmus
JS
– JavaScript – skriptovací jazyk vykonávaný na straně uživatele
OS
– Operating systém – operační systém
PECL
– PHP Extension Community Library – knihovna PHP
PHP
– Hypertext Preprocessor – jazyk vykonávaný na straně serveru
POP3
– Post Office Protocol (verze 3) – protokol pro stahování pošty
SHA1
– Secure hash algorithm – šifrovací algoritmus
SMTP
– Simple Mail Transport Protocol – protokol pro distribuci pošty
SQL
– Structured Query Language – dotazovací jazyk DB
SSH
– Secure Shell – vzdálená obsluha systému
Uid
– User identifier – Identifikátor uživatele (Unixové systémy)
UTF
– UCS Transformation Format (Universal Character Set) kódování
8
Úvod Tato bakalářská práce pojednává o návrhu a vytvoření aplikace pro správu webhostingového serveru. Krom samotné aplikace zde uvedu i přehled nastavení serveru, jelikož je to nezbytné pro správné pochopení fungování celé aplikace. Téma práce vychází z tématu praxe. V práci dále využiji semestrální projekt. Praxe byla vedena ve firmě Ing. František Prachař (dále jen „firma“), kde tato aplikace vznikla. Následný semestrální projekt stručně pojednával o nastavení serveru a návrhu aplikace. Cílem a výstupem této práce bude samostatná aplikace vytvořená v programovacím jazyku PHP1. Její součástí bude i základní zobrazení pomocí HTML2 a grafická úprava CSS3. Pro uživatelskou přívětivost bude aplikace doplněna o JS4. Data budou uložena v několika databázích typu MySQL5. Mezi základní požadavky na funkcionalitu aplikace patří kompletní správa domén, zabezpečený přístup více uživatelů (více typů oprávnění), centrální nastavení dalších účtů na jednom místě (pošta, FTP6 a databáze). Ovládání aplikace musí být jednoduché, aby ji mohl ovládat i uživatel neznalý nastavení serveru. Dalším požadavkem je interaktivní webová konzole pro přístup k serveru přes SSH7. Tento požadavek je však sekundární a bude implementován až po kompletním alfa testování (testování před zavedením aplikace). Předem bych chtěl upozornit, že v dokumentu budu používat slova hosting a doména, přestože aplikace slouží výhradně k nastavení hostingu. Pojmem doména je rozuměn samotný tvar jména. Popis rozdílu mezi hostingem a doménou popíši v další kapitole.
1 2 3 4 5 6 7
PHP HTML CSS JS MySQL FTP SSH
– Hypertext Preprocessor – skriptovací jazyk vykonávaný na straně serveru – HyperText Markup Language – značkovací jazyk – Cascading Style Sheets – styly pro HTML – JavaScript – skriptovací jazyk vykonávaný na straně uživatele – Databázová aplikace – File Transport Protocol – protokol pro přenos souborů – Secure Shell – vzdálená obsluha systému
9
1 Teoretický úvod V této kapitole se pokusím rychle a srozumitelně shrnout názvosloví a problematiku webhostingů a celkově fungování internetu.
1.1 Směrování dotazů v internetu Internet je veliká síť spojující obrovské množství počítačů na celém světě. Tyto počítače jsou identifikovány jejich IP adresami. V dnešní době se jedná již o verzi IPv6 (Internet protokol verze 6), jejíž tvar dovoluje 3,4×1038 adres (počítačů). Předchozí verze IPv4 (Internet protokol verze 4) umožňovala evidenci 4×109 adres. Tvar těchto adres je příliš složitý na to, aby si je uživatel pamatoval. [8] Zde nastupují DNS8 servery, které umožňují používání uživatelsky přívětivých internetových adres. Pokud uživatel zadá internetovou adresu (např. www.google.cz), dotaz nejdříve putuje na DNS server, který v záznamech vyhledá příslušnou IP adresu serveru (počítače). Poté již dotaz putuje na konkrétní počítač, který již sám vyhodnocuje dotaz a odpovídá na něj. [8]
1.2 Porty Nyní již máme dotaz nasměrovaný na správný počítač. Je nutno ho tedy správně zpracovat. Jelikož na počítač může chodit více různých dotazů, ne jen žádosti na webové stránky, je nutné tyto požadavky směrovat po správných portech. Výchozí port pro požadování webových stránek je port 80. Pro FTP přístup je to port 21. a jsou další služby, které vyžadují přístup z internetu a každá má svůj vlastní port. Dalšími službami jsou SSH, POP39, IMAP10 a SMTP11. [1][3] Pokud požadavek putuje na správnou adresu se správným portem, očekává ho na cílovém počítači aplikace, která na dotaz odpoví.
8 9 10 11
DNS POP3 IMAP SMTP
– Domain Name Server – server pro evidenci adres a IP adres – Post Office Protocol (verze 3) – protokol pro stahování pošty – Internet Message Access Protocol – protokol pro správu pošty – Simple Mail Transport Protocol – protokol pro distribuci pošty
10
1.3 Apache2 Apache2 je webhostingová aplikace odpovědná za zpracování dotazů na portu 80, tj. dotazů na internetové stránky. Aplikace se podívá na tvar dotazu (doménu) a vyhledá příslušný soubor, který zpracuje pomocí PHP překladače (pokud se jedná o PHP soubor) a odešle uživateli výsledek ve formátu HTML (společně s JS a CSS). Pokud není uvedený konkrétní soubor, aplikace hledá soubor se jménem index (možné přípony html, php, xhtml, htm – priorita dle pořadí). [1]
1.4 PHP překladač (Hypertext Preprocessor – původně Personal Home Page). PHP je skriptovací jazyk zpracovávaný na straně serveru. Rozhoduje o tom, jaké informace uživateli poslat, jakož i zpracovává informace od uživatele. [2]
1.5 HTML značkovací jazyk a CSS styly (HyperText Markup Language & Cascading Style Sheets) HTML je značkovací jazyk, který je odesílán uživateli. Říká, jakým způsobem se mají data členit. CSS jazyk poté říká, jak mají být odeslané objekty graficky zobrazeny. [9]
1.6 JS jazyk (JavaScript – skriptovací jazyk vykonávaný na straně uživatele) Tento jazyk zodpovídá za dynamické chování stránky na straně uživatele. Nejčastěji se můžeme setkat s grafickými prvky nebo se zjednodušení zacházení se stránkami. V aplikaci využívám knihovnu jQuery. Tato knihovna je velikým usnadněním práce, jakož i zjednodušením a zpřehledněním zápisu.
1.7 SQL jazyk (Structured Query Language – strukturovaný dotazovací jazyk databáze) Tento jazyk vykonávaný PHP je zodpovědný za komunikaci s databází. Tj. čtení, ukládání a mazání dat. 11
2 Firma V této kapitole shrnu prostředí, ve kterém byla aplikace vyvíjena.
2.1 Původní stav Firma má pronajatý server, který obsluhuje pouze jeden technik. Pokud chce technik přidat doménu, musí ručně vytvářet prostor pro stránky, databázi, poštovní účty a všechny přístupy. Tento postup dává prostor chybám. Navíc další problém nastává v případě, že je potřeba udělat nějaká změna na serveru, třebaže minoritní, a technik je indisponován. Na serveru je nainstalován OS12 z rodiny Linux a to Debian. Jedná se o aktuální stabilní verzi bez grafického prostředí. Kromě spousty standardních aplikací a jiných aplikací pro zjednodušení obsluhy server obsahuje tyto aplikace:
Apache2
– aplikace zajišťující komunikaci pomocí protokolu HTTP13. Stávající nastavení je statické a naprosto standardní. Není využit ani modul Macro pro domény, ale každá doména má konfiguraci psanou ručně.
MySQL
– aplikace zprostředkující databázové služby. Nastavení je standardní a postačující beze změn i pro budoucí nastavení serveru.
Pure–FTPd
– aplikace umožňující uživatelům správu souborů. Evidence uživatelů je již v původní podobě realizována databázově.
Postfix
– aplikace pro distribuci pošty. Evidence uživatelů je opět řešená pomocí záznamů v databázi.
12 13
OS HTTP
– Operating system – operační systém – Hypertext Transfer Protocol – přenos webových stránek
12
2.2 Analýza trhu a možné alternativy Problematikou správy webhostingu (též multihostingu) se již zabývá mnoho aplikací. Mezi nejznámější patří cPanel a ZPanel. Přestože se jedná o profesionální aplikace, uživatelská náročnost je poměrně vysoká. Navíc cPanel je komerční aplikací tzn. další náklady pro firmu a nemožnost (popřípadě snížená možnost) vlastní úpravy. [4][5][6] Další aplikací v této doméně je OpenPanel, která se pyšní jednoduchostí a uživatelskou přívětivostí. [4][7] Přes profesionální řešení těchto aplikací, velké množství konkurenčních serverů nabízejících webhostingové služby využívá vlastního prostředí. Přes vyšší náklady se to vyplatí, neboť mají neomezené možnosti v úpravách systému (v rámci technologií) a dostupnější podporu. K tomuto řešení se přiklonila i firma Ing. František Prachař.
2.3 Cíl Mým cílem je co možná nejvíce zachovat systém tak, jak jsou na něj zvyklí. Je avšak zapotřebí překonfigurovat většinu aplikací. Beze změny zůstane pouze nastavení databáze. Nejvíce změn prodělá Apache2. Přestože obsahuje velké množství modulů, nenabízí mi přesně to, co potřebuji. Výsledné nastavení tedy bude kombinací více postupů. Zde je důležité dbát na zabezpečení. A to se netýká pouze útoků zvenčí (jiný počítač), ale také zevnitř (se serveru z jiné domény).
2.4 Nastavení serveru Nastavení serveru se stává z nastavení všech dříve jmenovaných aplikací i aplikací dalších, jako jsou například iptables (firewall – filtrování přístupů zvenčí), cron (plánování událostí) a samozřejmě SSH daemon (vzdálená obsluha serveru). Při odkazování v konfiguraci se budu odvolávat k jednotlivým souborům a složkám. Nebudu uvádět absolutní cestu, ale bude platit, že se vztahuje k aktuálně popisované aplikaci. Např. /etc/apache2
13
2.4.1 Souborový systém Přestože rozmístění souborů není přímo nastavení, jedná se o nezbytnou součást pro pochopení fungování serveru. Je na tom založeno směrování dotazů. Dle požadavků firmy základní cesta ke všem uživatelským souborům je /mnt/data Kompletní rozdělení složek lze nejlépe vyjádřit stromovým strukturou.
archive
fyzické uložení souborů data
– privátní soubory
htdocs – veřejné souboru
log
session14 umístění session dat
vmail
webalizer generovaná statistika
webhost
evidence přístupů a chyb
emaily
aktivní domény odkazy do archive
Obrázek 1: Souborová struktura
Z této struktury vyplývá, že můžeme přistupovat buďto ke všem doménám, nebo pouze k aktivním. Složka data slouží pro privátní soubory přístupné pouze přes FTP (datové uložiště) a složka htdocs obsahuje subdomény a soubory přístupné z internetu. Subdoména „_“ je vytvořena u každé domény jako symbolický odkaz na subdoménu „www“ a nemůže být uživatelem smazána. Využívá se v případě, že není zadána žádná doména. [1]
14
SESSION
– permanentní spojení klienta a serveru
14
2.4.2 Webhosting – Apache2 Konfigurace Apache2 funguje na principu aktivování a nakonfigurování správných zásuvných modulů, které jsou k dispozici již při instalaci aplikace se základním nastavením. Uvedu zde pouze 2 základní moduly, které zajišťují komunikaci s klientem (vzdáleným počítačem). Tj. zajišťují správné směrování požadavků na domény. Kromě modulů je důležité také nastavit hlavní doménu. Toto nastavení je ve složce „sites–enabled“ v souboru „default“ a využije se, pokud je zadána doména, která není ve složce „webhost“. To jsou domény neaktivní nebo špatně směrované na server. Je tedy vhodné zde uvést cestu k hlavním stránkám serveru. [1] Mod_vhost_alias Tento modul slouží k nasměrování požadavku dle adresy. Konkrétní nastavení: VirtualDocumentRoot
/mnt/data/webhost/%–2.0.%–1/htdocs/%–3+
Jak je ze zápisu vidět, pracujeme se složkou webhost, tedy pouze s aktivními doménami. V případě, že zadaná adresa (doména nebo subdoména) neexistuje (nebo je neaktivní), zobrazí se chyba 404. Doporučuji nastavit globální a lokální přesměrování této chyby. V případě, že subdoména není uvedena, je stránka přesměrována na hlavní subdoménu („www“ patřičné domény). (Část řetězce %–3+ je nahrazena podtržítkem.) [1] Mod_macro Modul sloužící k nastavení dotazů pro jednotlivé domény. Velkou roli zde hraje zabezpečení. Příkazem „php_admin_value“ se dynamicky upravuje nastavení PHP překladače. Nastavují se mu hodnoty „open_basedir“, „doc_root“ a „session.save_path“ patřící konkrétní doméně, které zakazují přístup k jiným složkám než vlastním (například jiných domén). Také se zde nastavují separované logy pro jednotlivé domény. Toto nastavení zle snadno rozšířit o další příkazy [2]. Makro je voláno při startu serveru souborem, který pro každou doménu obsahuje řádek Use Vhost domena.tld Soubor je generován automaticky při změně nastavení a pracuje se všemi doménami. 15
Je důležité, aby při startu aplikace bylo načteno PHP dříve než modul, jelikož se k PHP v makru odkazujeme. Moduly ve složce „mods-enabled“ (aktivní moduly) se načítají dle abecedy. Soubory patřící PHP se musí proto přejmenovat (např. „a_php.conf“). [1]
2.4.3 Interpret – PHP Většina nastavení překladače není potřeba upravovat, ale z důvodu zabezpečení jsou globálně vypnuty funkce PHP spouštějící shellové příkazy („exec“ atd.). Další důležitá nastavení jsou definována dynamicky a byla popsána v předchozí kapitole. [1][2] Dále je potřeba doinstaloval PECL15 balík „ssh2“ odpovědný za spouštění skriptů aplikace na straně serveru. [2]
2.4.4 FTP přístupy – Pure–ftpd Konfigurace této aplikace probíhá nastavením přístupových údajů k databázi a dále obsahuje seznam SQL příkazů pro získání dat z databáze. Bohužel pure–ftpd–mysql (rozšíření základního Pure–FTPd) nepodporuje nastavení kvót pro skupinu uživatelů, tudíž pro sledování velikosti složky domény je zapotřebí další aplikace. Toto řešení je však nutné pouze v případě, že majitel dovolí doménám vlastnit více FTP účtů. To však není hlavním požadavkem a po domluvě s firmou byl tento požadavek označen jako nefunkční a bude řešen při budoucí spolupráci.
2.4.5 Pošta – Postfix a další Nastavení Postfixu je již hotové. Ovšem bylo zapotřebí ho zkontrolovat. A to nastavení virtuálních uživatelů v souboru „main.cf“ a všechny soubory ze složky „sql“ v nichž jsou uvedeny přístupové údaje k databázi a SQL příkazy pro získání dat. Pro jednoduchou a kompletní správu pošty využiji aplikace Postfix Admin. Ta umožňuje kompletní správu poštovních účtů včetně položek, které ve většině případů zůstanou defaultní a pro webhostingovou aplikaci by byly pouze matoucí. Jako online poštovního klienta bych doporučil použití aplikace Roundcube. Její ovládání je velice intuitivní a nabízí vše, co uživatel může požadovat. Navíc je snadno rozšiřitelná jak oficiálními, tak uživatelskými balíky. 15
PEC L
– PHP Extension Community Library – knihovna PHP
16
3 Návrh webové aplikace Webová aplikace slouží jak zaměstnancům firmy, tak jejím klientům. Umožňuje nastavení hostingů a uživatelů.
3.1 Objektový návrh Jako základní objekty (entity) lze považovat uživatele a doménu. Doména pak dále obsahuje subdomény a statistiky. Uživatelé mají FTP přístupy, přístupy k databázi a poštu. Nejlépe to vystihuje následující objektový diagram.
Obrázek 2: Objektový model
Z diagramu vyplývá, že jeden uživatel může být veden u více domén. U každé domény je vedeno, jaká k ní má uživatel práva. Může tedy mít práva k nastavení jedné domény a jiná práva k doméně druhé. Statistika je zvláštní objekt, který se skládá se statistik pro každou doménu, měsíc a protokol. Například pro doménu unt.cz, měsíc leden a protokol HTTP je vedena statistika přenosu dat. Vedle protokolu HTTP se počítá se statistikami FTP přenosů. Také tento návrh umožňuje, aby jeden uživatel vlastnil více FTP přístupů, poštovních účtů i přístupů k databázi. 17
3.2 Uživatelé a diagram užití Rozlišujeme 3 typy uživatelů. Uživatele, administrátora a superuživatele. Jejich možnosti popisuje následující diagram užití. Veřejnost nemá přístup k žádným informacím kromě odkazu na hlavní stránku.
Obrázek 3: Případy užití
Administrátor má všechna práva jako uživatel a superuživatel má všechna práva.
3.3 Datová struktura V této kapitole uvedu strukturu dat uložených v databázi. Každá aplikace, která využívá databázi jako uložiště má vlastní databázi a vlastní přístupové údaje. Například aplikace Pure-FTPd má přístup pouze do vlastní databáze (pureftpd), ale nemá přístup do ostatních databází (např. postfix). K těmto databázím přidám ještě databázi sloužící webhostingové aplikaci k uložení dat. Mezi těmito daty budou také relační tabulky spojující uživatele aplikace s účty pro FTP, poštu a databázi.
18
3.3.1 Datová struktura – Postfix Postfix je poštovní distributor. Má na starosti správné směrování elektronické pošty v rámci i mimo rámec serveru. Směrování se zpracovává na základě emailové adresy příjemce. Její globální část (za zavináčem) slouží hlavně k nasměrování pošty na správný server (pomocí DNS). Poté celá adresa nám přesně identifikuje poštovní účet. Databáze se skládá z velkého množství tabulek (13). Jsou jimi: „admin“, „alias“, „alias-domain“, „config“, „domain“, „domain_admins“, „fetchmail“, „log“, „mailbox“, „quota“, „quota2“, „vacation“ a „vacation_notification“. Zásadní roli hrají ale pouze 4 z nich, které opět popíši pomocí obrázku.
Obrázek 4: Datová struktura Postfixu
Nutno však dodat, že tento systém, přestože vygenerovaný samotnou aplikací, nedovoluje přiřazení správy více domén jednomu administrátorovi. To lze jednoduše opravit přidáním atributu „domain“ do primárního klíče (identifikátoru) relační tabulky „domain_admins“. Výsledný primární klíč je tedy kombinací atributů „username“ a „domain“. „Mailbox“ obsahuje jednotlivé poštovní účty. 19
3.3.2 Datová struktura – Pure–FTPd Databáze Pure-FTPd obsahuje pouze jednu tabulku. Tou je tabulka „ftpuser“. Tabulka obsahuje následující atributy:
User
Uid
ULBandwith
IPAccess
Status
Gid
DLBandwith
QuotaSize
Password
Dir
Comment
QuotaFile
Pomocí těchto atributů se nastavuje jméno, heslo (šifrované SHA116), status, složka do které má uživatel přístup, šířka pásma pro stahování a odesílání, komentář, přístupové IP adresy, limity. Také se nastavuje číslo uživatele a skupiny (Uid17 a Gid18), který přistupuje k souborům. Zde využíváme virtuálních uživatelů. To znamená, že je vytvořen jeden uživatel (např. „ftpuser“) a jeho skupina, který má přístup k souborům všech hostingů a zabezpečení řeší aplikace sama (nastavení „chrootEveryone“).
3.3.3 Datová struktura – MySQL Databázová aplikace používá databázi pro ukládání informací sama o sobě. Jediné dvě tabulky, které zde popíši, jsou tabulky „user“ a „db“. Jak z názvu vyplývá, tabulka „user“ obsahuje informace o uživatelích, kteří mají přístup do databáze. Heslo k účtům je ukládáno v hash formě generované algoritmem PASSWORD19. Tabulka „db“ poté obsahuje informace o tom, ke kterým databázím má uživatel která přístupová práva.
16 17 18 19
SHA1 Uid Gid PASSWORD
– Secure hash algorithm – šifrovací algoritmus – User identifier – Identifikátor uživatele (Unixové systémy) – Group identifier – Identifikátor skupiny (Unixové systémy) – šifrovací algoritmus MySQL
20
3.3.4 Datová struktura – Webhosting Informace o aplikaci, jejích doménách a uživatelích jsou také ukládány do databáze. Databáze v současné podobě obsahuje 10 tabulek. Config
– tabulka obsahující nastavení aplikace a defaultní (výchozí) hodnoty
uživatelských účtů. Domain
– tabulka uchovává seznam všech hostingů. Obsahuje jméno, datum
vzniku a expirace a unikátní číslo. Toto číslo neslouží jako identifikátor domény, ale jako identifikace uživatelských účtů, jejichž uživatelskému jménu předchází toto číslo a tečka. Redirect
– tabulka obsahuje aliasy k subdoménám. Kromě jména aliasu
a identifikačního čísla subdomény obsahuje také informaci o tom, zda je alias aktivní. RefFTP
– relační tabulka spojující uživatele s FTP účty. Relační tabulka
umožňuje vazbu M ku N, ale v tomto případě se jedná pouze o 1 ku N. Tabulka obsahuje přihlašovací jméno uživatele a jméno ftp účtu. Také obsahuje identifikační číslo domény. RefPostfix
– relační tabulka propojující uživatele s poštovními účty. Struktura
tabulky stejná jako u předchozí tabulky s rozdílem, že se jedná o poštovní účty. Rights
– tabulka evidující přístupová práva uživatelů k jednotlivým hostingům.
Tabulka obsahuje doménu, přihlašovací jméno uživatele a typ oprávnění. SQL
– poslední relační tabulka evidující SQL účty.
Subdomains – tabulka obsahující seznam subdomén. Struktura je doména, subdoména (bez doménové části – např. „www“) a identifikační číslo subdomény. Timestamps – tabulka obsahující seznam uživatelů a jejich časových známek. Jedná se o čas posledního zpracování dat. Tato problematika bude popsána později. Users
– tabulka evidující všechny uživatele aplikace. Heslo je zde ukládáno
pouze v šifrování typu MD520, ale je rozšířeno o sůl (rozšíření původního hesla o další znaky).
20
MD5
– Message-Digest algorithm – hashovací algoritmus
21
3.4 Diagramy aktivit V této kapitole bych rád popsal pár diagramů aktivit. Zaměřím se na ty nejsložitější operace, které správně nastíní fungování aplikace. Velká část aktivit, alespoň většina aktivit superuživatelů, je složena ze dvou částí. Jednou částí je skript v PHP a druhou jsou skripty vykonávané na úrovni serveru. Tyto služby jsou spouštěné z aplikace webovým SSH klientem. Ten však potřebuje přístup k serveru. Tj. potřebuje jeho adresu, uživatelské jméno a heslo. Tento uživatel musí mít dostatečná oprávnění ke spouštění těchto skriptů. Heslo pro SSH klienta nemůže být uloženo v aplikaci, protože by muselo být uloženo v nezašifrované formě a to z hlediska bezpečnosti je nepřijatelné. Proto aplikace dovoluje superuživateli zadat heslo k předdefinovanému uživateli serveru. Toto heslo je poté uloženo v SESSION proměnných až do odhlášení uživatele (nebo vypršení proměnných).
3.4.1
Diagram aktivit – vytvoření nového hostingu
Nejsložitějším úkolem aplikace je zavádění nového hostingu. Proto tento proces je vhodným kandidátem pro popsání nastavení hostingu se všemi součástmi a znázornění komunikace aplikace se serverem. Následující diagram aktivit popisuje postup při zakládání nového hostingu:
21
Inicializace aktivity
Ověření, zda doména již existuje (ověření dostupnosti serveru přes SSH)
Vytvoření místa na disku (kopírování a úprava šablony)
Zápis dat do DB21 – doména, administrátor a jeho přístupy k FTP, DB a poště
Smazání dosavadního postupu, pokud se vyskytla chyba
Zobrazení hlášky o stavu.
Vrácení ovládání uživateli.
DB
– databáze
22
Obrázek 5: Aktivitní diagram – Nový hosting
Z diagramu vyplývá, že v průběhu aktivity se kontroluje postup, zda nedošlo k nějakým chybám. Pokud došlo k chybě, musí se průběh až do výskytu chyby vrátit. Vytváření prostoru pro hosting je až poslední v pořadí zápisů, protože náprava je nejnáročnější a navíc je zde nejmenší pravděpodobnost výskytu chyby. Pokud by byla chyba v přístupových právech, nespustil by se skript a nebylo by co napravovat s výjimkou databáze. Pokud by již doména existovala, nahlásilo by to chybu již na začátku aktivity.
23
3.4.2 Diagram aktivit – smazání hostingu Tato aktivita je opět velice náročná. Hlavně z důvodu, že dochází k záloze veškerých dat, která se budou mazat. To znamená zálohu záznamů aplikace, databáze hostingu, záznamy pro propojené účty dalších aplikací a zálohu všech uživatelský souborů včetně emailů.
Obrázek 6: Aktivitní diagram – Smazání hostingu
Popis diagramu (stejné prvky vizte předchozí diagram):
Záloha dat z databází – webhosting, pureftpd, postfix Záloha souborů – uživatelské, emaily a uživatelská DB
Smazání hostingu
24
4
Aplikace
Strukturu aplikace lze nejlépe popsat opět pomocí obrázku. Složka „admin“ představuje subdoménu.
„index.php“ řídí základní strukturu stránky vkládáním ostatních souborů.
„function.php“ obsahuje všechny funkce, které nejsou vázány na objekt.
„config.php“
obsahuje
nastavení
aplikace
a serveru.
„404.php“ je stránka, která se zobrazí v případě, že požadovaná stránka není nalezena.
„.htaccess“ je soubor určující další pravidla pro Apache2.
První složkou v seznamu je složka „bash“, která obsahuje skripty v jazyce Bash a Python. Tyto skripty jsou spouštěny pomocí SSH klienta. Další složka je „css“. Ta obsahuje soubor s kaskádovými styly. Složka „js“ je složka obsahující soubory s funkcemi v jazyce JavaScript. Využívám knihovny jQuery a jejího pluginu „cookie“. Složka „img“ obsahuje obrázky aplikace. Složka „lang“ obsahuje soubor se všemi texty. Prozatím je hotova pouze česká verze, ale struktura souboru je natolik jasná, že další jazykové mutace si může uživatel napsat sám. Volba konkrétního souboru je poté v souboru „config.php“.
25 Obrázek 7: Struktura aplikace
Složka „classes“ obsahuje všechny soubory s příslušnými třídami.
Zatím
využívám
třídy
hlavně
k ukládání
a zpracování dat z databáze. V dalším vývoji je rozšířím přímo o komunikaci s databází. [10] Třída „host“ je základní třídou. Objekty představují jednotlivé hostingy. Obsahuje seznamy objektů typu „subdomain“ a „user“. Třída „subdomain“ obsahuje seznam objektů typu „alias“. Třída „user“ představující uživatele obsahuje seznamy objektů typů „ftp“ a „post“ (FTP a poštovní účty) a seznam řetězců reprezentujících přístup do SQL (řetězec je jméno SQL uživatele). Třída „traffic“ slouží jako evidence přehledu přenosu dat pro konkrétní hosting. Obsahuje objekty typu „port“. Třída „port“ obsahuje objekty typu „month“. Složka „script“ obsahuje jednotlivé stránky, které připravují data pro zobrazení. Poté se vkládá odpovídající soubor ze složky „parts“, který data správně vypíše. Dále ve složce „parts“ se nachází jednotlivé oddíly šablony stránky. Jedná se o soubory „header.php“, „menu.php“, „menu-ssh.php“, „body.php“ a „footer.php“. Složka „scripts“ dále obsahuje nějaké čistě skriptovací soubory. Jedná se hlavně o soubor „catch.php“, který je vkládán před načtením dat. Soubor zpracovává příchozí uživatelská data všech stránek. Dále obsahuje soubor „logout.php“, který uživatele odhlásí a přesměruje na přihlašovací stránku. Obrázek 8: Struktura aplikace 2
26
4.1 Vzhled Vzhled aplikace byl vytvořen dle rčení „méně je více“. Grafické zobrazení je tedy velice jednoduché a snaží se o co největší přehlednost. Další obrázek zobrazuje přihlašovací stránku. Znovu upozorňuji, že veškeré texty, které jsou na stránce zobrazeny, jsou uloženy v souboru „cs.lang“. Jsou tedy jednoduše upravitelné na jednom místě.
Menu je konstruováno dle webové aplikace phpMyAdmin. Mělo by to býti na první pohled přehledné a uživatelsky přívětivé. Předpokládám, že každý uživatel, který se do aplikace přihlásí, zachází s databází tímto způsobem. A pokud ne, první stránka, která se po přihlášení zobrazí, je uvítací stránka s popisem menu. Samotné menu je rozděleno do 5 sekcí. Obecné Sekce obecné obsahuje odkaz na úvodní stránku, odkaz na změnu hesla a odkaz na odhlášení. Heslo k SSH Kolonka zadání hesla pro SSH klienta. Zobrazí se pouze superuživateli. Přehled Sekce přehled slouží k celkovému náhledu na hostingy pro superuživatele. Obsahuje možnost „Aktualizovat“, „Nový hosting“, „Přehled hostingů“ a „Superuživatelé“. Hostingy Tato sekce je základní menu pro administrátory jednotlivých domén. Obsahuje roletkové menu se seznamem dostupných hostingů. Další volby poté budou vztahovány k aktuálnímu hostingu. Dále menu obsahuje položky „Uživatelé“, „Detaily“ a „Přehled průtoku dat“. Ostatní stránky Poslední sekcí menu jsou ostatní stránky. Jsou to odkazy (definované v souboru „conf.php“) na stránky dalších aplikací:
Poštovní správce
– Postfix Admin
Databáze
– phpMyAdmin
Přehled průtoku dat
– Webalizer
Poštovní klient
– Roundcube 28
4.3 Změna hesla Heslo je evidováno zvlášť k aplikaci a zvlášť k ostatním účtům. Položka „Změnit heslo“ v menu umožňuje změnit heslo k aplikaci. Pro jeho změnu je potřeba zadat staré heslo a dvakrát nové.
Obrázek 11: ScreenShot – Změna hesla
4.4 Aktualizovat „Aktualizovat“ je stránka dostupná pouze superuživatelům. Pokud je zadáno heslo k SSH, spustí se skript „actualize“ ze složky „bash“. Tento skript prochází všechny domény a eviduje jejich subdomény do databáze.
4.5 Nový hosting Tato položka je asi tou nejdůležitější stránkou v celé aplikaci. Její role je totiž zásadní z hlediska usnadnění práce. Po otevření stránky se nám zobrazí následující tabulka dovolující navolení správných parametrů. Opět je požadováno heslo k SSH.
Obrázek 12: ScreenShot – Nový hosting
29
Položka „Expirace“ je automaticky předvyplněná datem dne za rok. Položka „Administrátor“ nám dovoluje vybrat stávajícího uživatele, tj. rozšířit mu práva na nový hosting, nebo založit nového uživatele. Dále stránka umožňuje zadat heslo nebo ho automaticky vygenerovat. To je generováno z malých a velkých písmen a číslic v celkové délce 8 znaků. Další možností je odeslání vytvořených přístupových údajů a dalších informací na zadaný email. Tyto informace si můžeme, ale nemusíme, nechat zobrazit po ukončení aktivity. Toto je vhodné v případě, že je nový hosting zakládán za přítomnosti dalších lidí, kteří by neměli vidět heslo. Skript, který zpracovává údaje z tohoto formuláře, není jako jeden z mála uložený v souboru „catch.php“, ale z důvodu složitosti je obsažen v souboru „newHost.php“ ve složce „scripts“. A protože vždy po vytvoření nového hostingu dojde k výpisu stavu, není potřeba skript spouštět před samotným načtením dat z databáze.
4.6 Přehled hostingů Stránka „Přehled hostingů“ je základní přehled celé aplikace. Je dostupný pouze pro superuživatele. Na této stránce se zobrazuje přehled všech hostingů. Navíc hostingy, které jsou kolem data expirace nebo již expirovaly, jsou zvýrazněny. Ke každému hostingu je uveden datum vzniku i expirace, počet subdomén, uživatelů i jednotlivých účtů. Po kliknutí na název hostingu se zobrazí přehled uživatelů hostingu. Jedná se o stejný přehled, který je dostupný z další sekce menu položkou „Uživatelé“. Vlevo od každého hostingu je zaškrtávací políčko. To umožňuje po jeho zaškrtnutí a kliknutí na odkaz „Smazat vybrané“ smazat celý hosting. Tento systém umožňuje rychlé mazání více domén zároveň. Při mazání domény dochází k záloze všech údajů. Mazání nebo obnova archivovaných hostingů zatím není aplikací implementována. Nejedná se o uživatelský požadavek. Ale jistě v dalších verzích aplikace bude tento systém umožněn. Na dalším obrázku je vidět přehled hostingů i se zvýrazněnými hostingy.
30
Obrázek 13: ScreenShot – Přehled hostingů
4.7
Superuživatelé
Seznam superuživatelů má vlastní stránku, neboť nejsou přiřazeni žádné konkrétní doméně. Seznam vypadá stejně jako seznam uživatelů a po kliknutí na uživatele se zobrazí stejný přehled. Opět je možnost smazat vybrané uživatele a vytvořit nového.
Obrázek 14: ScreenShot – Superuživatelé
31
4.8 Uživatelé Tato stránka je dostupná buď z odkazu „Uživatelé“, kdy se otevírá aktivní hosting, nebo ze seznamu hostingů. Ve vrchní části stránky jsou základní informace o hostingu. Jsou zde uvedeny data vzniku a expirace (také čas od vzniku a čas do expirace), a je vypsána první subdoména s počtem subdomén (-1 za již vypsanou). Tato hlavička je stejná jako hlavička přehledu subdomén, na níž je možné se dostat po kliknutí na subdoménu, nebo kliknutí na položku „Detaily“ v menu. Superuživatelé mají právo zde změnit datum expirace. Dále následuje seznam všech uživatelů vedených k tomuto hostingu společně s počtem účtů k nim vedených. Po kliknutí na jméno uživatele se otevře okno s přehledem uživatele. Opět jsou dostupné operace smazání uživatele a vytvoření nového uživatele.
Obrázek 15: ScreenShot – Uživatelé
4.9 Subdomény Stránka obsahuje hlavičku stejnou jako na stránce přehledu uživatelů. Pod ní se nachází seznam subdomén zobrazený stejným způsobem jako seznam uživatelů.
Obrázek 16: ScreenShot – Subdomény (bez hlavičky)
32
4.10 Uživatel Přehled uživatele se skládá ze 4 částí. 1. část obsahuje hlavičku s informacemi o uživateli. Jeho jméno, práva k aktuálnímu hostingu a další domény, ke kterým má nějaká práva. Je zde možnost změny jména a hesla. Je možné změnit i přístupová práva, ale není možné přiřazovat větší práva, než má přihlášený uživatel.
Obrázek 17: ScreenShot – Přehled uživatele
Další části jsou poštovní účty, FTP přístupy a přístupy do databáze. Všechny 3 části mají stejnou strukturu s výjimkou zobrazovaných informací (a upravovaných). 2. část – pošta – zobrazuje adresu účtu, jméno uživatele, zda je účet aktivní a limity. V současné verzi jsou limity nastaveny na výchozí hodnotu (uloženou v databázi v tabulce „conf“) a nemůžou být aplikací změněny. Při kliknutí na hodnotu ve sloupci „Aktivní“ se provede negace této hodnoty. Úprava řádku dovoluje změnit jméno a heslo. 33
3. část – FTP – zobrazuje uživatelské jméno účtu a kořenový adresář. Cesta tohoto adresáře je relativní k doméně. Pokud tedy vyplníme „htdocs“, uživatel bude mít přístup k subdoménám, ale ne k privátním datům ve složce „data“. Úprava dovoluje změnu adresáře a hesla. 4. část – SQL – obsahuje pouze uživatelské jméno. Zde je možné měnit pouze heslo.
4.11 Subdoména Stránka přehledu subdomény opět obsahuje hlavičku, která zobrazuje pouze adresu subdomény. Následuje seznam aliasů této subdomény a jejich stav (aktivní). Změna subdomény v aktuální verzi není možná. Aliasy domény lze přidávat a mazat. Je možné jim opět měnit stav kliknutím na aktuální stav.
Obrázek 19: ScreenShot – Subdoména
34
4.12 Přehled průtoku dat Tato stránka zobrazuje přehled průtoku dat. A to jak data žádaná webovými prohlížeči (port http – 80), ale i přenos souborů pomocí FTP (port 21). První tabulka obsahuje součet obou portů, druhá porty zvlášť. V druhé tabulce je možnost kliknutí na jednotlivé porty, nebo i měsíce a zobrazí se detailní výpis průtoku dat (generovaný aplikací Webalizer). Kliknutím na jméno hostingu se daná adresa otevře. Za účelem ušetření místa nejsou u čísel uváděny jednotky. Ty jsou rozlišeny pomocí barvy čísel.
Obrázek 20: ScreenShot – Přehled průtoku dat
4.13 Přehled průtoku dat – přehled portu Konkrétní přehledy jsou stránky generovány přímo aplikací Webalizer, ale z důvodu pohodlí jsou tyto přehledy vkládány do webhostingové aplikace (pomocí iframe). Na následujícím obrázku je vidět přehled průtoku dat hlavní domény. Zobrazený graf přibližně odpovídá poměru provedené práce na tomto projektu za jednotlivé měsíce.
35
Obrázek 21: ScreenShot – Přehled průtoku dat (hosting unt.cz)
4.14 Přehled průtoku dat – přehled měsíce Kliknutím na konkrétní číslo v přehledu průtoku dat, nebo na měsíc na stránce vygenerované aplikací Webalizer, je možné se dostat na přehled přenosu průtoku dat za konkrétní měsíc. Na dalším obrázku je opět hosting unt.cz.
36
Obrázek 22: ScreenShot – Přehled průtoku dat – průměrně na hodinu
Obrázek zobrazuje graf průměrného rozložení přenesených dat na denní hodinu. Opět graf vypovídá o pracovních hodinách při vývoji projektu.
37
5 Zdrojový kód V této kapitole bych rád popsal pár mých funkcí a postupů. Jedná se hlavně o zabezpečení a zjednodušení práce.
5.1 Zabezpečení vkládání a definice globálních konstant Na následujícím příkladu je výpis části skriptu ze souboru „config.php“. První tři řádky definují zabezpečení proti špatnému vkládání souboru. Tyto 3 řádky jsou uvedeny v každém souboru, kromě souboru „index.php“, kde je uvedena definice proměnné „secure“. Hodnota této proměnné je libovolná a je stejná pro celou aplikaci. Při zavádění aplikace by měl uživatel tuto hodnotu změnit. V dalších verzích aplikace bude k dispozici instalační skript, jehož součástí bude tato úprava. V praxi to znamená, že pokud není nadefinována proměnná, nebo není shodná s verzí uvedenou v aktuálním souboru, ukončí se její zpracování. Jedná se totiž o špatné vkládání stránky. Zabrání to uživateli otevřít přímo soubor nebo soubor vkládat do cizích stránek. Nepatřičné vložení stránky do cizích stránek by mohlo mít za následek například získání přístupu do databáze. Další řádky definují globální konstanty. Tj. proměnné, které zůstávají stejné v celé aplikaci. Tyto proměnné se pak používají ve zbytku aplikace. Tímto způsobem je docíleno ucelené konfigurace. 5. řádek („language“) nastavuje jazykové prostředí aplikace. Tento soubor, jazykový soubor a případně úvodní stránka jsou jediné soubory, které musí uživatel nastavit. 1 2 3 4 5 6 7 8 9 10 11 12
Příklad 1: Zabezpečení vkládání a definice globálních konstant
38
5.2 Zabezpečení proti dvojitému odeslání dat Další problematika webových systémů zpracovávajících uživatelská data je dvojité odeslání dat. Dochází k nim při aktualizaci stránky v místě, kde data byla přijata. To může způsobovat různé chyby od vložení špatných dat až po selhání aplikace. Původním řešením tohoto problému bylo odchytávání klávesy F5, která slouží k aktualizaci prohlížeče. Při detekování stisknutí klávesy se zrušilo její provádění. Toto ovšem fungovalo pouze v případě, že byla aktivní aplikace, ne přímo webový prohlížeč. Navíc to nezabezpečovalo použití přímo ikonky pro aktualizace, ale naprostá většina uživatelů používá klávesu F5. Stávající nastavení používá časových známek. Tyto známky jsou pro každého uživatele ukládány do databáze. Časová známka je generována pokaždé, když uživatel odesílá nějaká data. Pokud již tato časová známka v databázi je, nebo je starší, jak ta v databázi, nevykoná se žádná operace. Po úspěšném provedení operace se časová známka v databázi aktualizuje. Tento systém má slabinu v tom případě, kdy se odesílají dvě sady dat ve stejném momentě (stejné vteřině). To se může stát hlavně v případě, že by stejný účet využívalo více uživatelů. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Příklad 2: Zabezpečení proti dvojitému odeslání dat – ověření
39
5.3 Obsluha SSH klienta K ovládání SSH klienta využívám funkci, která spustí předložené instrukce a vrátí výstup. Tato funkce je základem pro budoucí interaktivní řádku pro kompletní ovládání serveru. Funkce nepožaduje přesný počet parametrů, ale vyhodnotí všechny, které dostane. Pokud funkce nedostane jako 1. parametr otevřenou relaci SSH, vytvoří novou a na konci funkce ji zavře. Pokud se nepodaří připojit k serveru, funkce vyhodí výjimku. Poté funkce vykoná každý parametr (kontroluje, zda se jedná o dotaz – řetězec) a výsledky (standardní a chybové) uloží do pole. [2]
5.4 Podpora jazykových mutací Systém dovoluje velice rychle přepínat mezi jazykovými mutacemi. Zatím je hotová pouze česká verze a její nastavení je statické pro celou aplikaci. Do budoucna počítám s volbou jazyku přímo v aplikaci. Všechny řetězce jsou uloženy v poli, kde index je předpis v anglickém jazyce a hodnota je finální verze v daném jazyce. Kromě řetězců soubor obsahuje předpis pro email zasílaný při vytváření hostingu a speciální znaky daného jazyka (v případě češtiny diakritika). Tady je potřeba podotknout, že aplikace pracuje v kódování UTF-822 a při použití složitějších písem může být zapotřebí toto kódování změnit na UTF-16. [9] Další příklad ukazuje předlohu mailu. Předloha musí obsahovat 12 řetězců „%s”, které při použití budou zastoupeny proměnnými. Popis jednotlivých proměnných je uveden před samotnou definicí.
byl Vám vytvořen hosting pro doménu %s Vaše přihlašovací údaje: Jméno: %s Heslo: %s Vaše doména: %s Webhostingová administrace: %s Emailová administrace: %s Emailový klient: %s Databázový klient: %s Přehled přenosu dat: %s V případě dotazů se prosím obraťte na vlastníka webhostingu: %s nebo administrátora: %s Zpráva byla vygenerována automaticky, neodpovídejte na ni. S pozdravem %s";
Příklad 4: Předloha emailu
22
UTF
– UCS Transformation Format (Universal Character Set) – kódování
41
5.5 Odesílání formuláře Při odesílání dat v aplikaci se před samotným odesláním spouští JavaScriptová funkce (jQuery). A to funkce pro vygenerování časové známky. Následující příklad ukazuje část kódu zodpovědného za tuto činnost. Pro každý formulář na stránce se detekuje jeho odeslání a poté se k němu připojí nová data. Data jsou na pohled skryta, jmenují se „timestamp“ a mají hodnotu počtu vteřin (počítáno od 1. 1. 1970) při odeslání formuláře. 1 2 3 4 5 6 7 8 9 10 11 12 13
Další důležitou funkcí JavaScriptu je nastavení odkazů pro odeslání dat. Standardně se o to starají tlačítka, ale ne vždy je graficky vhodné jejich použití. Toto využívám hlavně u seznamů, jejichž řádky obsahují zatrhávací políčko. Informace o tom, jaké políčko bylo zatrženo, se posílá jako formulářová data. Není tedy možné tuto informaci získat v případě použití standardního odkazu. Další výhodou funkce na následujícím příkladu je, že dovoluje odeslání dat s různými dalšími informacemi. Například pokud k odeslaným datům připojím informaci „Smazat“, označené řádky se smažou. Pokud připojím „Upravit“, nabídne se možnost s úpravou prvního označeného řádku.
42
Funkce obsahuje 3 parametry (odesílatel, jméno dat, hodnota dat), přičemž 3. parametr je volitelný. Pokud není uveden, použije se hodnota „true“. Poté funkce hledá nejbližší formulář, kterému připojí data a formulář odešle. 1 2 3 4 5 6 7 8 9 10
function prePost(obj, name, value) { if(typeof value === "undefined") value = 'true'; var f = $(obj).closest('form'); f.append( $('') .attr({'type': 'hidden', 'name': name, 'value': value}) ); f.submit(); }
Příklad 6: Odeslání formulářových dat odkazem
Na dalším příkladu popíši použití této funkce. V kódu vypisuji odkaz a vedle něj tlačítko pro případ zakázaného JavaScriptu. Původně je odkaz skrytý. JavaScript potom odkaz
zobrazí
a skryje
tlačítko.
Odkaz
jako
adresu
využívá
konstrukce
„javascript:void(0)“, která zapříčiní, že po kliknutí na odkaz se neprovede jeho původní operace. Tato funkcionalita by měla být možná i pomocí „#“, ale to mi v určitých situacích nevyhovovalo.
1 2 3 4 5 6 7 8 9 10 11 12 13
" />
Příklad 7: Použití odkazu pro odeslání formulářových dat
43
6 Testování Největší podíl testování byl přímo při vývoji aplikace. Po naprogramování nějaké části aplikace byla tato část zkontrolována a po naprogramování více částí byla zkontrolována celá aplikace. Uvedu zde některé stěžejní testy provedené na verzi obsažené v příloze.
6.1 Komunikace pomocí SSH Komunikace pomocí SSH se serverem je základem ovládání serveru. Přestože se snažím o co možná největší správu databází, některé operace je nutné provádět na úrovní serveru. Zadání: Otevření stránky „Aktualizace“ bez zadaného hesla k SSH. Výsledek: Zobrazení varovného upozornění, že heslo není vyplněno.
Obrázek 23: ScreenShot – Hláška „Varování“
Zadání: Otevření stránky „Aktualizace“ se špatně zadaným heslem. Výsledek: Zobrazení chybové hlášky, že heslo není správné.
Obrázek 24: ScreenShot – Hláška „Chyba“
Obdobná hláška se zobrazí, pokud se aplikaci nepodaří nalézt server. Aplikace také provádí dodatečnou kontrolu, zda je spojení opravdu navázáno, což by mělo odhalit jakoukoliv nespecifikovanou chybu.
44
6.2 Nový hosting Zadání: Vytvořit nový hosting s následujícími údaji.
Výsledek: Na stránce zobrazena informace o přenačtení konfigurace aplikace Apache2. Dále informace o tom, že byl hosting úspěšně vytvořen a uživatelské jméno a heslo nového uživatele. Také zobrazena hláška o odeslání emailu na zadanou adresu. Email byl doručen ve správném tvaru s českou diakritikou. Jeho doručení trvalo déle, neboť server byl zařazen na Greylist23 a akceptováno bylo až druhé doručení. Ověření: Po vložení záznamu „ostrytest.cz“ a „www.ostrytest.cz“ do souboru „hosts“ („lokální DNS“), byly tyto dvě adresy dostupné. Zobrazila se výchozí úvodní stránka. Dále se vytvořil administrátor domény. Ten je uvedený v přehledu i s vytvořeným přístupem FTP a k databázi. Jak FTP přístup, tak přístup do databáze, je funkční.
6.3 Změna přístupů V této kapitole bych rád otestoval editaci uživatele a vytváření, úpravu a mazání přístupů uživatele. Budu pokračovat v datech z předchozího testu a použiji uživatele „146.admin“ (Tomáš Lakatoš). Jedná se o úpravy dostupné na stránce přehledu uživatele.
Greylist je aplikace evidující databázi důvěryhodných serverů. Pokud přijde email z neznámé adresy, zablokuje se jeho zpracování a odpoví se odesílateli, ať to zkusí znovu za pár minut. Další email již server příjme. Jedná se o první linii ochrany před spamboty (programy odesílající nevyžádané emaily), kteří se většinou pokoušejí o doručení pouze jednou. 23
45
Úprava uživatele Zadání: Změnit jméno a rozšířit přístupová práva na další hosting. (Heslo nebude změněno.) Výsledek: Zobrazilo se nové jméno a přibyl nový řádek „ostatní domény“ s hodnotou nového hostingu. Ověření: Kliknutí na jméno hostingu v řádku „ostatní domény“ otevře stránku s přehledem přístupů pro nově přiřazený hosting. Změna hesla uživatele Zadání: Změnit heslo uživatele. Výsledek: Vypsána hláška „Byla provedena změna hesla a uživatelských údajů.“. Ověření: Přihlášení pod novým heslem úspěšné.
Obrázek 25: ScreenShot – Hláška „V pořádku"
Správa poštovních účtů Zadání: Vytvoření, úprava a smazání poštovního účtů. Otestování funkčnosti. Postup: Vytvoření dvou poštovních účtů. Přihlášení do aplikace Roundcube. Odeslání emailu z jednoho účtu na druhý. Změna hesla a jména druhého účtu a opětovné přihlášení. Smazání prvního účtu. Výsledek: Vše úspěšné. Email dorazil okamžitě.24 Poznámka: Smazání poštovního účtu proběhlo pouze na úrovni databáze. Emaily tohoto účtu zůstaly na disku zachovány. Při dalším vývoji bude implementována záloha těchto souborů a smazání z původního umístění. Testováno na virtuálním stroji. Za účelem správného doručení byl upraven soubor „/etc/hosts“, který určuje, že email má zůstat na stejném serveru. V ostré verzi toto nebude třeba, jelikož tato konfigurace bude globálně na DNS serverech. 24
46
Správa FTP přístupů Zadání: Vytvoření přístupu k FTP s cestou „htdocs“. Kontrola přihlášení a pokus o změnu souboru (ověření práv). Změna hesla a opětovného přihlášení. Smazání účtu. Výsledek: Vytvoření úspěšné. Přihlášení se zdařilo a přístup byl umožněn pouze do složky „htdocs“ (nikoliv do kořenové složky a složky „data“). Nahrání a přepsání náhodného souboru úspěšné. Po změně hesla v aplikaci je možné se přihlásit pouze novým heslem. Smazání účtu v pořádku. Správa SQL Zadání: Vytvoření, úprava a smazání SQL účtů. Otestování funkčnosti. Postup: Vytvoření SQL účtu. Přihlášení do aplikace phpMyAdmin. Kontrola oprávnění k databázi upravovaného hostingu. Změna hesla a opětovné přihlášení. Smazání účtu. Výsledek: Vytvoření a přihlášení v pořádku. Práva uživatele obsahovala možnost vytvářet, měnit, naplňovat, zobrazovat a mazat tabulky. Nikoliv však vytvářet nebo mazat databáze. Změna hesla, opětovné přihlášení i smazání účtu v pořádku.
6.4 Správa subdomén Zadání: Vytvořit subdoménu pomocí FTP. Aktualizovat seznam subdomén. Vytvořit neexistující subdoménu pomocí aplikace. Smazat subdoménu. Výsledek: Vše v pořádku. Neexistující subdoména označena červeně jako neexistující.
Obrázek 26: ScreenShot – Subdomény (test)
47
7 Závěr Po všech testech se konfigurace serveru ukázala jako zcela vyhovující. Návrh aplikace umožňuje všechny zadané požadavky. Samotná implementace obsahuje všechny důležité aktivity, které byly firmou požadovány, ale jsou další, které je potřeba implementovat. Jedná se o mnohem obsáhlejší projekt, než se na začátku zdálo, proto bude potřeba další spolupráce s firmou na vývoji.
7.1 Současný stav implementace Aplikace dovoluje uživateli vytvářet hostingy, jejich uživatele. Uživatelům je možno přiřadit více poštovních účtů, FTP a SQL přístupů. Některá uživatelská data je možné měnit i později (ne všechna z důvodu zachování konzistence). Heslo uživatel mění zvlášť pro aplikaci a zvlášť pro všechny další přístupy. Správa subdomén a jejich aliasů je kompletní. Mazání přístupových údajů je v pořádku. Avšak je potřeba ještě implementovat zálohu emailů mazaných poštovních účtů. Nyní jsou emaily ponechány. Mazání domén a uživatelů je implementováno, ale zaslouží si mnohem více testování, než zatím bylo provedeno, proto zatím není zpřístupněno. Záloha domény je hotova s výjimkou zálohy emailů. Správa subdomén a alisů je kompletní.
7.2 Další vývoj Firma souhlasí s dalším vývojem aplikace, přičemž prioritu klade na dokončení zálohování při mazání a správu zálohovaných dat. Poté bude následovat alfa testování a zavedení aplikace do firmy.
7.3 Nefunkční požadavky Jediným nefunkčním požadavkem a problémem je sledování velikosti hostingu při více uživatelích. Systém dokáže sledovat objem jedné složky a ten omezit, ale pokud uživatel bude mít přístup jen k jedné doméně, bude sledován obsah pouze této domény. Řešením tohoto problému by mohla být další aplikace, nebo jiná FTP aplikace. 48
Seznam použité literatury Internetové zdroje 1. The Apache HTTP Server Project [online]. 2014 [cit. 2014–02–11]. Dostupné z: http://httpd.apache.org 2. PHP: Hypertext Preprocessor [online]. 2014 [cit. 2014–4–13]. Dostupné z: http://www.php.net/manual/en/ini.core.php 3. Pure–FTPd
Seznam příkladů Příklad 1: Zabezpečení vkládání a definice globálních konstant .................................... 38 Příklad 2: Zabezpečení proti dvojitému odeslání dat – ověření...................................... 39 Příklad 3: Ovládání SSH klienta ..................................................................................... 40 Příklad 4: Předloha emailu .............................................................................................. 41 Příklad 5: Generování časové známky............................................................................ 42 Příklad 6: Odeslání formulářových dat odkazem ........................................................... 43 Příklad 7: Použití odkazu pro odeslání formulářových dat ............................................. 43
51
Přílohy 1. Obsah přiloženého CD Na přiloženém CD se v kořenovém adresáři nachází tato bakalářská práce ve formátu bakalarska_prace.pdf s jednoduchým návodem navod.txt pro obsluhu programu.
52
2. Manuál Toto je manuál k aplikaci Webhosting vytvořené pro firmu Ing. František Prachař a použité jako bakalářská práce na škole Vysoká škola polytechnická Jihlava studentem Štěpán Andrle. První stranou při otevření aplikace (ve virtuálním prostředí a předpokládám i po nasazení na adrese „admin.unt.cz“) je přihlášení. Pro testovací účely jsou předvytvořeny dva účty. Jedná se o účet superuživatele jménem „su“ a heslem „su“ a účet administrátora domény jménem „admin“ a heslem „admin“. Po zadání správné kombinace jména a hesla budete přihlášeni do aplikace. Pokud kombinace není správná, budete na to upozorněni. Vlevo na stránce je základní menu. To je rozděleno do 5 částí. Všech pět částí vidí pouze superuživatel (např. „su“). Společná sekce Jedná se o sekci „Obecné“, „Hostingy“ a „Ostatní stránky“. Sekce „Ostatní stránky“ obsahuje odkazy na další aplikace nainstalované na serveru. Jedná se o aplikace Postfix Admin (správa poštovních účtů), phpMyAdmin (správa databáze), Webalizer (statistika průtoku dat) a Roundcube (poštovní klient). Pro přihlášení do těchto aplikací je potřeba mít vytvořeny patřičné účty. Ty se nastavují v přehledu uživatele. Výjimkou je Postfix Admin, kam se může přihlásit pouze původní administrátor domény (nebo nově vytvořený aplikací samotnou). Sekce „Obecné“ obsahuje základní informace o aplikaci. Prvním odkazem je samo slovo „Obecné“ a po jeho aktivaci se otevře stránka s popisem menu. Dalším odkazem je „Změnit heslo“. Jak názem napovídá, stránka slouží ke změně hesla. Jedná se pouze o heslo k aplikaci, nikoliv k ostatním aplikacím (ze sekce „Ostatní aplikace“). Pro změnu hesla musí uživatel zadat původní heslo a dvakrát nové (kontrola). Po úspěšné změně hesla dojde k odhlášení uživatele. K samotnému odhlášení slouží i další odkaz této sekce. Tím je odkaz „Odhlásit“. Poslední společnou sekcí (a tou hlavní) je sekce „Hostingy“. Ta slouží k nastavení hostingů a uživatelů. Sekce obsahuje roletkové menu, kde si uživatel může vybrat, který 53
hosting chce spravovat. Jedná-li se o superuživatele, vidí všechny hostingy. Administrátor a uživatel vidí jen hostingy, které má přiřazeny. Hosting je změněn okamžitě po kliknutí na jiný hosting, což teoreticky může vést ke ztrátě dat (rozepsaných, nikoliv uložených). Prvním odkazem v této sekci jsou „Uživatelé“. Odkaz zobrazí přehled uživatelů. V případě uživatele (práva) se zobrazí pouze jeho vlastní přehled. Přehled uživatele zobrazuje ve vrchní části hlavičku se základními údaji. Uživatel zde může změnit jméno (nejedná se o přihlašovací jméno), heslo k účtu a přístupová práva uživatele. Uživatel nemůže nastavit větší práva, než sám má. Další sekce dovolují správu poštovních účtů, přístupů pomocí FTP a přístupů do databáze. Vždy se účty nastavují pro konkrétní hosting. To znamená, že v případě poštovních účtů se vytváří účty s globální složkou dané domény. V případě FTP účtu má účet přístup jen ke konkrétní složce pod daným hostingem. Přístup k databázi zase dovoluje spravovat pouze databázi daného hostingu. Všechny sekce fungují na stejném principu. Můžeme zde přidat nový záznam, upravit první označený, nebo smazat všechny označené. Při zakládání a úpravě se liší pouze data, která můžeme měnit, ale vždy je možné změnit heslo. U poštovních účtů můžeme navíc změnit jméno, a zda je účet aktivní. U FTP přístupů se jedná o cestu, do které má účet přístup. Jedná se o cestu relativní (začínající v kořenovém adresáři domény). U cesty je automaticky ověřen správný tvar (lomítko před a za cestou) a v případě, že cesta není platná, záznam se zobrazí červeně. Dalším odkazem jsou „Detaily“. Ty dovolují správu subdomén a jejich aliasů. Subdomény je možné zadat ručně, nebo jsou do databáze automaticky přidávány možností „Aktualizovat“ (sekce „Přehled“, pouze superuživatel). Opět pokud subdoména (složka) neexistuje, je záznam označen červeně. Po kliknutí na jméno subdomény se zobrazí přehled subdomény, kde je možné u subdomény spravovat aliasy. Posledním odkazem této sekce je „Přehled průtoku dat“. Tato stránka obsahuje dvě tabulky. První tabulka je součet průtoku dat. Aktivní jsou pouze jména domén, která odkazují právě na samotnou doménu. Druhá tabulka rozlišuje data přenesená uživateli do prohlížeče a data přenesená pomocí FTP. Aktivní jsou navíc jména protokolů u každé domény (vedoucí na celkový přehled domény a protokolu), ale také čísla 54
v tabulce (vedoucí na přehled konkrétního měsíce). Čísla v tabulce nemají zobrazenou žádnou jednotku, ale jednotka je rozlišena barvou (legenda je vlevo v hlavičce tabulky). Část pro superuživatele Superuživatelé vidí ještě další dvě části menu. Jednou je „Heslo k SSH“. Jedná se o helso k účtu na serveru. Pokud je heslo zadáno, má uživatel možnost aktualizovat seznam subdomén (odkaz „Aktualizovat“) a vytvářet nové hostingy (odkaz „Nový hosting“). Odkaz nový hosting otevře stránku, kde je potřeba vyplnit údaje o novém hostingu. Jedná se o jméno hostingu, datum expirace (výchozí hodnota je datum dne za rok), administrátor (možnost vytvoření nového nebo použití stávajícího – rozšíření práv). Dále heslo administrátora (možnost vygenerování náhodného hesla – 8 znaků, velká a malá písmena a čísla). Stránka také dovoluje odeslat vytvořené údaje na email nebo zobrazit na stránce po dokončení procesu. Další částí je přehled hostingů, kde jsou zvýrazněny hostingy kolem data expirace a červěně označeny ty hostingy, které již expirovaly. U každého hostingu je zobrazen počet uživatelů a subdomén a počet jednotlivých přístupů. Zde je také možnost smazat více hostingů jejich vybráním a kliknutím na odkaz „Smazat vybrané“. Po kliknutí na jméno hostingu je zobrazen přehled uživatelů daného hostingu. Přehled uživatelů zobrazuje hlavičku obsahující informace o doméně a odkaz na přehled subdomén (řádek „Subdomény“ s aktivním jménem první subdomény). Dále zobrazuje seznam uživatelů a první z každého přístupu a jejich počet (-1 za vypsaný). Po kliknutí na jméno uživatele se zobrazí přehled uživatele, který byl popsán dříve. Jak přehled uživatelů, tak přehled subdomén dovoluje změnit datum expirace.