Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních služeb v Praze
Oskar Altman
Odlehčený streamovací server pro domácí použití Bakalářská práce
2011
Prohlášení
Prohlašuji, že jsem bakalářskou práci na téma Odlehčený streamovací server pro domácí použití vypracoval samostatně a použil pouze zdrojů, které cituji a uvádím v seznamu použité literatury.
V Praze dne 19. prosince 2011
………………………. podpis autora
Název bakalářské práce: Odlehčený streamovací sever pro domácí použití
Abstrakt: Cílem této práce je navrhnout a realizovat řešení pro příjem, zpracování a následné vysílání pozemního televizního signálu označované zkratkou DVB-T do lokální sítě LAN. Studie popisuje návrh a implementaci řešení na vlastní server. Součástí práce je návrh webového rozhraní pro snadné ovládání vysílání a plánování nahrávání televizních pořadů. Práce obsahuje popis získání, instalace a konfigurace aplikací, které jsou zapotřebí k realizaci. Studie se také zabývá bezpečností celého řešení a popisuje klíčová bezpečnostní opatření na straně serveru.
Klíčová slova: DVB, streamování do sítě LAN, plánování nahrávání, dekódování videa, Apache, PHP, MySQL, Getstream-poempel, online rozhraní.
Title of the Bachelor´s thesis: Lightweight streaming server for home use
Abstract: This thesis is focused on solution for processing and streaming DVB-T signal to local network. Thesis describes whole lightweight solution with installation and configuration system and aplications. Thesis also describe own design of online interface for easy control of streaming or planning recording from DVB-T LAN stream. Another component of this document are security key issues of used applications.
Key words: DVB, streaming to LAN, planinng recording, video encoding, Apache, MySQL, PHP, Getstream-poempel, online interface.
Obsah 1
2
Úvod.................................................................................................................................... 7 1.1
Úvod do problematiky DVB ......................................................................................... 7
1.2
Požadavky na realizaci ................................................................................................. 9
1.1.1
Rozdělení požadavků na realizaci řešení .............................................................. 9
1.1.2
Podrobná analýza požadavků ............................................................................. 10
Realizace vlastního řešení................................................................................................. 14 2.1
Instalace OS................................................................................................................ 14
2.2
Konfigurace systémových služeb na serveru ............................................................. 15
2.2.1
Webový server Apache. ...................................................................................... 15
2.2.2
Skriptovací jazyk PHP .......................................................................................... 16
2.2.3
Databázový server MySQL .................................................................................. 17
2.2.4
Nástroje pro práci s DVB v Linuxu ...................................................................... 18
2.3
Konfigurace systému.................................................................................................. 20
2.3.1
Aktualizace data a času ...................................................................................... 20
2.3.2
Konfigurace služeb po startu systému ............................................................... 20
2.4
Zabezpečení serveru .................................................................................................. 21
2.4.1
Šifrování komunikace mezi klientem a webovým serverem .............................. 21
2.4.2
Nastavení autorizace uživatelů oproti webovému serveru ............................... 23
2.4.3
Vynucení přístupu přes protokol HTTPS ............................................................. 24
2.4.4
Konfigurace firewallu na serveru........................................................................ 24
2.4.5
Konfigurace firewallu na výchozí bráně (gateway) ............................................ 26
2.5
Realizace aplikačního rozhraní................................................................................... 27
3
Vlastní přínos .................................................................................................................... 32
4
Závěr ................................................................................................................................. 33 5
Literatura .................................................................................................................................. 35 Seznam příloh ........................................................................................................................... 36 Seznam obrázků........................................................................................................................ 37 Přílohy ....................................................................................................................................... 38
6
1 Úvod V úvodní kapitole je popsána problematika DVB vysílání v domácím prostředí. Jsou zde definovány požadavky na realizaci a implementaci odlehčeného řešení včetně specifikace funkcionality webového rozhraní, které bude sloužit k jednoduchému ovládání vysílání DVB-T signálu v rámci lokální sítě a plánování nahrávání pořadů z televize.
1.1 Úvod do problematiky DVB Téma absolventské práce jsem zvolil, protože jsem hledal nenáročné řešení pro příjem, zpracování a vysílání pozemního televizního signálu v rámci domácí lokální sítě, které lze implementovat na můj stávající server. V rámci prohloubení svých znalostí programování webových stránek v jazyce PHP, jsem se rozhodl vytvořit webový front end k celému řešení. Práce řeší otázku, jak uspokojit požadavky všech členů rodiny co se týče nahrávání a sledování televizních pořadů a zároveň minimalizovat náklady na realizaci. Například v některých domácnostech společně bydlí rodiče, děti i prarodiče. To jsou tři generace. Každá má velmi odlišné požadavky na sledování televizních pořadů. Jejich požadavky lze uspokojit nákupem několika televizorů a k tomu ještě několika nahrávacích zařízení. To je poměrně nákladné řešení. Za předpokladu, že alespoň jeden člen z každé generace vlastní osobní počítač, lze uvedenou problematiku vyřešit nákupem televizních tunerů v provedení do PCI, PCI-E nebo USB. Cena jednoho tuneru se pohybuje kolem jednoho až dvou tisíc korun. To je mnohem levnější než nákup nové televize. Ovšem i použití televizních tunerů má své nevýhody. Výrobci dodávají k televizním tunerům software, pomocí kterého lze jednoduše ovládat vysílání, některé umí i pokročilejší funkce jako je nahrávání pořadů, dekódování videa v reálném čase nebo pauza aktuálního vysílání atd. Jenže právě tyto operace jsou velmi náročné na hardwarové prostředky počítače. Pro majitele netbooků, je takové řešení nemyslitelné, protože mohou použít jen televizní tunery v provedení do USB, které mají vyšší provozní režii než tunery v provedení do PCI slotu. Netbooky jsou vybaveny úspornými procesory s maximální spotřebou kolem 10 Wattů. Takové procesory nejsou schopny v reálném čase dekódovat video při zachování snímkovací frekvence 25 snímků za sekundu.
7
Tato práce si klade za cíl řešení výše nastíněných problémů. To znamená řešení domácího vysílání a nahrávání televizního signálu dostupné pro více uživatelů, které má nízkou režii a pohodlné ovládání realizované přes webové rozhraní. Řešení bude realizováno jako serverová služba, která bude dostupná na zvolené IP adrese a definovaném portu. Uživatel použije klienta pro přehrávání DVB-T vysílání, dle své libosti, za předpokladu podpory přehrávání HTTP streamu na straně klienta. Pokud bychom nekladli důraz na odlehčené provedení celého řešení, existuje spousta aplikací, které umí přijímat, dekódovat i nahrávat DVB-T signál. Jedním ze známých multimediálních opensource přehrávačů, který to umí, je VLC player [12]. Jenže VLC player má poměrně velkou režii. Další ještě více propracovaný software, který řeší danou problematiku je MythTV [7]. MythTV zvládá všechny výše zmiňované funkce, dokonce podporuje plánování nahrávání pomocí EPG signálu. To je signál, který se vysílá v multiplexu společně s kanály. Každý vysílaný program v televizi má svoje unikátní ID, které se vysílá v EPG signálu. Jediné co třeba udělat, je stáhnout televizní program na týden dopředu v XML formátu a ten importovat do aplikace MythTV. Řešení pomocí tohoto software je velmi náročné na hardwarové prostředky, především na procesor a operační paměť. Pro splnění vytyčeného cíle práce je zapotřebí splnit tyto dílčí úkony: o Zohlednit stávající hardware a jeho omezení z pohledů hardwarových prostředků, použitého operačního systému nebo počtu volných slotů k osazení televizními tunery o Zvolit vhodné aplikace pro realizaci řešení o Zjistit na jakých frekvencích se vysílají jednotlivé multiplexy v Praze o Zjistit jaké programy se vysílají v jednotlivých multiplexech o Vytvořit skripty pro automatizaci procesu spouštění vysílání o Zvolit vhodné nastavení aplikace pro dekódování nahraných videí, tak aby nahraná videa měla rozumnou velikost a kvalitu obrazu o Zajistit implementaci nové služby, aniž by došlo k omezení stávajících služeb na serveru nebo narušení bezpečnosti systému o Navrhnout a vytvořit víceuživatelské webové rozhraní pro snadné ovládání vysílání a plánování nahrávání televizních pořadů 8
1.2 Požadavky na realizaci 1.1.1 Rozdělení požadavků na realizaci řešení Systémové požadavky o Realizace na stávajícím hardware o Nízké počáteční náklady o Nízké provozní náklady o Co nejnižší režie celého řešení Bezpečnostní požadavky o Šifrovaná komunikace mezi klientem a serverem při práci s webovým rozhraním o Vynucení přístupu přes zabezpečené spojení pomocí protokolu HTTPS o Databázový systém poběží lokálně na serveru o Uživatelská hesla budou kryptována pomocí kryptovací funkce SHA1 o Všechny procesy vysílání a nahrávání poběží pod běžným uživatelem o Video archiv bude online přístupný a bude vyžadovat autorizaci uživatele o Webové rozhraní bude ošetřeno oproti SQL injekcím o Aplikační logika nebude mít přímý přístup do systému, ale pouze přes příkazové prostředí systému, do kterého se přihlásí lokálně pomocí SSH Uživatelské požadavky o Zobrazení aktuálně naplánovaných videí a jejich barevné rozdělení dle stavu nahrávání o Zobrazení informací o vysílání (zapnuto/vypnuto, multiplex) o Podpora více uživatelů o Snadné plánování nahrávání o Snadné ovládání vysílání o Odkazy na video archiv a televizní program o Logování událostí do databáze 9
o Úspěšné i neúspěšné pokusy o přihlášení do aplikace o Zapnutí, vypnutí nebo změna vysílaného multiplexu o Naplánování nahrávání o Odhlášení uživatele z aplikace o Logika aplikace Kontrola jestli se právě nahrává, pokud ano nedovolí uživateli přepnout vysílaný multiplex Kontrola správného zadání časových údajů při plánování nahrávání
1.1.2 Podrobná analýza požadavků Jedním z požadavků je využít k realizaci stávající hardware. Jedná se o stolní počítač se základní deskou s integrovaným procesorem Intel Atom D510 a integrovanou grafickou kartou. Stroj disponuje dvěma moduly RAM o celkové kapacitě 4GB. K ukládání dat slouží dva pevné disky, každý má kapacitu 1,5TB. Pro snížení pravděpodobnosti ztráty dat je v systému se nakonfigurován softwarový RAID 1 (viz konfigurace OS). Celková výsledná použitelná kapacita disků v zapojení typu RAID 1 je 1,5TB. Řada procesorů Intel Atom je známá svojí nízkou spotřebou, která se pohybuje od 4 do 13W TDP podle verze procesoru. V tomto případě se jedná o verzi Intel Atom D510. Je to dvoujádrový procesor s frekvencí 1,6GHz a maximálním výstupním výkonem 13W. Pro příjem DVB-T signálu poslouží TV karta AverTV Hybrid Super 007 v provedení do PCI slotu. TV karta byla zvolena s ohledem na dobrou podporu v Linuxu. Základní deska disponuje pouze jedním PCI slotem. To přináší omezení, které bude třeba vyřešit v návrhu. V jednu chvíli bude server schopen naladit, a tudíž i vysílat pouze jeden multiplex. Je tedy potřeba zajistit přepínání multiplexů, které se budou streamovat podle potřeby uživatele. Při nahrávání televizních pořadů, je důležité zajistit, aby v době nahrávání nedošlo k přepnutí vysílaného multiplexu. Z výše uvedených důvodů, bude aplikace ovládána přes webové rozhraní, jehož logika se postará o správnou režii celého řešení. Hlavním požadavkem je nenáročnost použitých aplikací i samotného operačního systému. Jako operační systém byl zvolen Linux [12], protože je velmi stabilní a může běžet na plnohodnotné úrovni bez zbytečně zatěžujícího grafického prostředí. Nesporná výhoda Linuxu oproti jiným OS je jeho nulová pořizovací cena. 10
Ze softwaru pro příjem, zpracování a vysílaní DVB-T signálu v rámci lokální sítě byl nakonec vybrán program Getstream-poempel, který vyvinul Michael Meier [10]. Getstreampoempel je převzatý z aplikace Getstream, kterou vytvořil Florian Lohoff. V obou případech je jedná o opensource aplikace distribuované pod licencí GNU GPL v.2 [8]. Hlavní rozdíl mezi aplikacemi je v zápisu konfigurace. Getstream-poempel má logičtější a přehlednější zápis konfiguračního souboru. Další rozdíly jsou popsány na webu autora aplikace. Getstreampoempel je unikátní a velmi odlehčená aplikace, která signál z televizního tuneru vysílá po síti tak jak je v původním formátu. To je klíčová vlastnost a má největší podíl na nízké režii celého řešení, protože se video nemusí dekódovat v reálném čase. Přepínání multiplexů a plánování nahrávání je možné ovládat z příkazové řádky Linuxu. Nicméně taková forma ovládání je vhodná pouze pro někoho, kdo již umí alespoň trochu ovládat příkazové prostředí Linuxu [8]. Pro běžného uživatele bude vhodnější zvolit formu ovládání přes webové rozhraní, které bude online dostupné z internetu i lokální sítě na adrese https://tv.edulinux.info. Webové rozhraní bude realizováno za pomocí webového serveru Apache [3] s použitím skriptovacího jazyka PHP a databáze MySQL [5]. Webové rozhraní bude jednoduché, přehledné a uživatelsky přívětivé. Rozhraní bude podporovat více uživatelů, dále bude možné zapnout a vypnout streamování na síti nebo přepnout vysílaný multiplex. Mezi další funkce patří plánování nahrávání, výpis aktuálně naplánovaných akcí a kontrola nahrávání, která během nahrávání nedovolí uživateli přepnout vysílaný multiplex. Nahrané video se automaticky dekóduje do MPEG-4 formátu. Původní video se smaže a nové dekódované video se uloží na disk do složky, která bude přístupná danému uživateli přes web jako video archiv z adresy https://tv-archiv.edulinux.info. Uživateli se nakonec odešle email s odkazem na uložené video. Aplikace bude rozlišovat mezi běžným uživatelem a administrátorem. Administrátor bude mít k dispozici navíc možnost výpisu událostí, které zachycují jednotlivé úkony uživatelů při práci s aplikací do databáze. Mezi takové úkony patří přihlášení a odhlášení uživatele do aplikace. Změna vysílaného multiplexu, naplánování nahrávání nebo špatné pokusy o přihlášení do aplikace. Správce bude mít k dispozici výpis všech nahraných videí společně s informací kdy, co a kdo nahrál. Správce bude mít přístup k administraci databáze přes online administrační rozhraní Phpmyadmin [5], které bude dostupné na adrese https://pma.edulinux.info. 11
Obrázek č. 1. - Usecase diagram uživatelských akcí Z pohledu bezpečnosti potřebujeme zajistit vynucení přístupu přes HTTPS protokol. To znamená, že Apache sice bude naslouchat požadavkům také na portu 80 (http protokol), ale jakmile obdrží požadavek přes http protokol, vyzve klienta, aby svůj požadavek upravil a znovu odeslal přes protokol HTTPS. Tím se vyhneme nežádoucímu odposlechnutí uživatelského jména a hesla během komunikace mezi klientem a serverem. Uživatelské přístupy budou uloženy v databázi, odkud je logika aplikace bude číst. Uživatelská hesla se budou ukládat do databáze takovým způsobem, že se z hesla nejprve vytvoří jeho otisk pomocí hashovaní funkce SHA1. To znamená, že během přihlašovacího procesu aplikace vygeneruje otisk hesla zadaného uživatelem pomocí hashovaní funkce SHA1 a tento otisk porovná s otiskem, který je uložen v databázi. Pokud jsou otisky shodné, uživatel bude úspěšně přihlášen.
12
Samotná aplikační logika nebude mít přímý přístup k operačnímu systému. V PHP existuje funkce exec(), pomocí které můžeme zadávat systémové příkazy do příkazového řádku. Aplikační logika bude předávat systémové příkazy pomocí lokálního přístupu do systémové konzole pomocí služby SSH a za použití autorizace privátním klíčem [8]. To znamená, že v systému bude existovat uživatel, který bude mít oprávnění spouštět skripty, které zajistí zapnutí streamování, nahrávání a dekódování nahraných videí. Přihlášení aplikační logiky do systému je zajištěno pomocí privátního klíče vygenerovaného funkcí RSA o délce klíče 1024 bitů. Tento klíč je umístěn v zabezpečené složce na webovém serveru, do které nemá nikdo přístup, pouze aplikační logika. Toto má výhodu, že aplikace použije soubor s uloženým klíčem na serveru a nemusí mít ve zdrojovém kódu uložené uživatelské heslo v čitelné podobě. Další výhodou je, že veškeré úkony na pozadí serveru se provádějí pod jednotným uživatelským účtem, jehož akce se logují do systému.
13
2 Realizace vlastního řešení Tato kapitola popisuje výběr vhodného softwaru a jeho konfiguraci na domácím serveru s operačním systémem Linux, distribuce Debian. Je zde popsána konfigurace webového serveru Apache, databázového serveru MySQL a skriptovacího jazyka PHP. Dále je popsáno, jak se pracuje s nástroji pro příjem DVB-T signálu. Klíčovou záležitostí je nastavení aplikace getstream-poempel. Významnou část kapitoly tvoří popis zabezpečení serveru a služeb na něm běžících. V poslední části kapitoly se týká realizace webového rozhraní pomocí skriptovacího jazyka PHP.
2.1 Instalace OS Již je k dispozici připravený server s operačním systémem Linux distribuce Debian. Pro ucelenost této práce popíšu v několika krocích získání instalačního media a několik možností jak nabootovat instalační médium. Po získání obrazu instalačního média z repozitáře ČVUT (viz http://ftp.sh.cvut.cz/MIRRORS/debian-cd/current/amd64/iso-cd/) zvolíme vhodnou formu instalačního média. V případě, že vlastníme externí / interní CD-ROM mechaniku, vypálíme obraz instalačního média na CD. Další možností je zkopírovat obraz instalačního média na USB flash disk. Také můžeme využít metody instalace OS ze sítě. Tato metoda se nazývá PXE boot [8]. Pro použití metody PXE boot je potřeba mít v sítí server, na který se nakopírují
soubory obrazu
instalačního
média.
Mezi tyto
soubory
patří jádro
a obraz systému. Na serveru se nastaví služba TFTP a DHCP. Do konfigurace DHCP serveru se přidají 2 parametry, které při procesu přiřazení IP adresy, společně s IP adresou sdělí klientovi adresu TFTP serveru v síti a název souboru, na který se má klient dotázat. Klient po obdržení IP adresy pošle požadavek na stažení souboru z TFTP serveru. V tomto souboru jsou odkazy na jádro a obraz instalačního systému, které si klient stáhne z TFTP serveru. Výhoda PXE boot metody spočívá v možnosti snadné instalace OS ze sítě LAN. Každý si může vytvořit vlastní instalační menu, které nabídne na výběr k instalaci několik různých operačních systémů nebo jejich verzí. Zvolili jsme obraz instalačního média, který obsahuje pouze základní komponenty OS a ostatní aplikace, které budeme chtít nainstalovat, se stáhnou z repozitáře během procesu 14
instalace (za předpokladu, že máme funkční připojení k internetu). Instalační médium díky tomu zabírá jen pár stovek MB, obvykle do 500 MB. Průvodce instalace OS nás provede základní konfigurací systému, volbou požadovaných aplikací atd. Nová verze instalačního průvodce umožňuje nakonfigurovat softwarový RAID. Volíme softwarový RAID typu 1 tzv. mirroring. Obsah jednoho disku bude shodný s obsahem druhého disku. Disky rozdělíme podle potřeby na jednotlivé oddíly a nakonec oddíly zformátujeme zvoleným formátem systému souborů. Byly zvoleny 3 oddíly. Kořenový oddíl pro operační systém (/), oddíl pro domovské adresáře uživatelů (/home) a oddíl pro data (/data). Dále se nastavil swap oddíl. To je vyhrazené místo na disku, které se dočasně využívá jako odkládací prostor, když je nedostatek paměti RAM. Po rozdělení disků se zvolí aplikace, které se společně se systémem nainstalují. Seznam aplikací potřebných k realizaci: o Webový server: Apache 2.2.16 o Databázový server: MySQL 5.1.49 o Souborový server: Samba 3.5.6 o Skriptovací jazyk: PHP 5.3.3 o Nástroje pro práci s DVB-T: Dvb-apps, Dvbtune, Getstream-poempel, o Další aplikace: Cron, Wget, SSH, Openssl, Ffmpeg, Phpmyadmin, Sendmail.
2.2 Konfigurace systémových služeb na serveru 2.2.1 Webový server Apache. Konfigurační soubory Apache se nacházejí v adresáři /atc/apache2/. Webový front end bude dostupný z URL adresy http://tv.edulinux.info. Administrační rozhraní k databázi bude mít adresu pma.edulinux.info. Nahraná a zkonvertovaná videa se budou ukládat do složky /data/dvbt/, která bude dostupná přes web z adresy http://tv-archiv.edulinux.info. To vše bude zajišťovat jeden webový server.
15
Webový server Apache [3] standardně umožňuje konfiguraci pouze jedné kořenové složky, ve které jsou umístěny zdrojové kódy webových stránek nebo soubory. Takže v případě, že chceme mít na serveru online rozhraní pro ovládání DVB-T tuneru, rozhraní pro administraci databáze a video archiv nahraných videí, budou jednotlivá rozhraní dostupná z adresy edulinux.info/pma nebo edulinux.info/tv-archiv. V zadání požadujeme použití doménových adres třetího řádu, jako je například tv-archiv.edulinux.info. Proto Apache umožňuje konfiguraci takzvaných virtuálních hostů (kontextů). V praxi to pak funguje tak, že do konfigurace Apache přidáme kontext Virtualhost a pro každou aplikaci, webovou stránku atd. vytvoříme v konfiguraci kontext Virtualhost, kterému definujeme název virtuálního kontextu, cesty k souborům s logy, cestu do kořenového adresáře virtuálního kontextu a případně další vlastnosti, jako je například šifrování komunikace mezi klientem a serverem pomocí SSL/TLS vrstvy nebo autorizaci uživatelů při přístupu na server pomocí modulu do Apache [4] (viz kapitola zabezpečení serveru). Příklad konfigurace virtuálního kontextu pro naše online rozhraní na ovládání DVB-T tuneru je uveden v příloze č. 11. Díky virtuálním kontextům, můžeme hostovat na webserveru i webové stránky či aplikace třetích stran. Každý HTTP požadavek, který Apache obdrží, se porovná s názvy virtuálních kontextů a poté se požadavek přiřadí do příslušného kontextu. Pro snadnou administraci databáze MySQL nainstalujeme phpmyadmin. Do konfigurace
Apache
vložíme
další
virtuální
kontext,
kterému
nastavíme
jméno
pma.edulinux.info. Phpmyadmin bude pak dostupný na adrese http://pma.edulinux.info. Protože protokol HTTP posílá hesla zadaná uživatelem v plaintextu (=v čitelné podobě), hrozí odposlechnutí hesla uživatele třetí stranou. Proto přidáme do konfigurace několik direktiv, které zajistí vynucení šifrování komunikace mezi klientem a serverem (viz kapitola 2.4.1).
2.2.2 Skriptovací jazyk PHP Jedná se o nejrozšířenější jazyk pro programování dynamických webových stránek nebo online aplikací [5]. Příkazem aptitude install php5 nainstalujeme skriptovací jazyk PHP verze 5. Protože online rozhraní pracuje s databází MySQL [5] a přihlašuje se na server pod uživatelem, který pak spouští jednotlivé procesy, je 16
zapotřebí doinstalovat podporu PHP pro služby SSH a MYSQL. Po instalaci dodatečných modulů, ověříme, zda se nám dané moduly načítají do konfigurace PHP. Ve složce /etc/php5/conf.d/ by se měli nacházet soubory s příponou „ini“, ve kterých je definován název modulu. Hlavní konfigurační soubor php.ini se nachází ve složce /etc/php5/apache2/. Pomocí funkce phpinfo() se může vygenerovat HMTL kód, který zobrazí aktuální nastavení PHP včetně výpisu aktuálních hodnot proměnných, informací o načtených modulech a jejich nastaveních. Vytvoříme soubor info.php a v něm zavoláme výše uvedenou funkci, která vygeneruje přehlednou tabulku v HTML kódu. Poté do prohlížeče zadáme adresu http://edulinux.info/info.php a za předpokladu, že je soubor info.php správně umístěn, zobrazí se zmiňovaná tabulka s informacemi o nastavení PHP.
2.2.3 Databázový server MySQL Databázi MySQL nainstalujeme příkazem aptitude install mysql-server Po instalaci spustíme službu a přihlásíme se jako uživatel root do databáze příkazem mysql –u root Prvotní přihlášení je bez hesla. Ihned po přihlášení je dobré si změnit heslo pro uživatele root. Pro jednodušší a přehlednější ovládání databáze nainstalujeme na server Phpmyadmin. To je online rozhraní pro administraci databáze MySQL [5]. Rozhraní je dostupné na adrese http://pma.edulinux.info. Po přihlášení do Phpmyadmin založíme novou databázi s názvem dvbt a nového uživatele dvbt, kterému přiřadíme veškerá oprávnění pro databázi dvbt. Dále založíme tři tabulky. Jejich návrh je zobrazen na obrázku č. 2.
Obrázek č. 2 - Návrh databázového systému pro webové rozhraní
17
V souboru /etc/mysql/my.cnf se nachází konfigurace databáze. Databázi nastavíme, aby se služba spouštěla pouze lokálně. Tím zamezíme případným nechtěným pokusům o přihlášení k databázi ze sítě.
2.2.4 Nástroje pro práci s DVB v Linuxu Instalace televizního tuneru v Linuxu obnáší získání firmware, který je potřeba nahrát do složky /lib/firmware/. Dále je nutné zavést potřebné ovladače do jádra systému (dvbcore, saa7134). Příkazem lsmod vypíšeme aktuální moduly zavedené do jádra. Příkaz lspci vypíše všechna PCI zařízení. Pokud systém vidí televizní tuner a zároveň máme zavedené příslušné ovladače v jádře systému, měli bychom pomocí příkazu dmesg vidět zprávu o úspěšném nahrání firmwaru pro televizní tuner. K naladění tuneru, zjištění informací o vysílaných multiplexech a jejich kanálech slouží aplikace w-scan. aptitude install dvb-apps w-scan Výše uvedený příkaz nainstaluje aplikace w-scan, tzap, scan. Nyní můžeme zjistit, co se v naší lokalitě vysílá za multiplexy pomocí příkazu w_scan -c cz –f t –x > multiplexy Parametr –c určuje zemi, -f udává typ DVB vysílání a poslední parametr –x říká, aby se vygeneroval výstup pro použití nástroje scan. Vytvoří se soubor multiplexy a v něm je seznam českých multiplexů, jejich frekvence a další informace. Takto vypadá obsah souboru multiplexy z 29.11.2011: T 634000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE T 730000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE T 778000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE T 818000000 8MHz AUTO AUTO AUTO AUTO AUTO NONE 18
# CESKE RADIOKOMUNIKACE # SIT 1 CESKA TELEVIZE # Sit 3-Czech Digital Group # Telefonica o2
Pomocí nástroje scan zjistíme, jaké kanály se vysílají v příslušných multiplexech. Příkaz scan multiplexy > kanaly.conf vytvoří soubor kanaly.conf, ve kterém bude seznam vysílaných kanálu z jednotlivých multiplexů. Ukázka obsahu souboru kanaly.conf, který byl vygenerován pomocí nástroje scan z druhého multiplexu ze dne 29.11.2011 je: NOVACINEMA:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_6 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:401:411:514 NOVA:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRAN SMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:101:111:513 BARRANDOVTV:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_ 64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:301:311:2049 PrimaCOOL:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64 :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:501:511:770 Výpis celého souboru je v příloze č. 7. Síla signálu přijímaného kanálu ČT1 se dá zjistit pomocí příkazu: tzap –c kanaly.conf „CT1“ Výstup vypadá takto: using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0' tuning to 730000000 Hz video pid 0x0101, audio pid 0x0111 status 00 | signal 9c9c | snr 4a4a | ber 0001fffe | unc 00000000 | status 1f | signal 9d9d | snr fbfb | ber 00000824 | unc ffffffff | FE_HAS_LOCK status 1f | signal 9d9d | snr fdfd | ber 00000776 | unc 00000000 | FE_HAS_LOCK Hodnoty jsou uváděny v hexadecimálních jednotkách. Pokud je tedy hodnota signálu ffff jedná se o maximální sílu signálu. SNR udává odstup signálu od šumu. Ber udává zkreslení signálu. Nástroj tzap slouží k nalezení vhodné pozice pro anténu tuneru. Klíčovou aplikací je Getstream-poempel. Pomocí příkazu wget http://www.mulder.franken.de/getstream-poempel/getstream-poempel20060526.tar.gz stáhneme zdrojové kódy aplikace. Následně rozbalíme příkazem tar xzvf ./getstream-poempel-20060526.tar.gz Pak se přepneme do adresáře se zdrojovými kódy a zkompilujeme příkazem make 19
Protože je k dispozici pouze jeden TV tuner, rozdělíme si konfiguraci na 3 části. Momentálně jsou v Praze vysílané 4 multiplexy, ale ten čtvrtý je testovací a nebudu ho již nadále zmiňovat. Připravíme si tedy 3 startovací skripty, které spustí Getstream-poempel a naladí ho na jeden ze tří multiplexů. To znamená rozdělit soubor kanaly.conf na 3 části, dle jednotlivých
multiplexů.
Soubory
jsou
pojmenované
jako
acko730mhz.conf,
becko634mhz.conf a cecko818mhz.conf. Jednotlivé spouštěcí skripty se od sebe liší v souboru, který definuje kanály příslušných multiplexů a v nastavení streamování, konkrétně v portech, kam se streamují jednotlivé kanály. Konfigurace jednotlivých startovacích skriptů, jsou uvedeny v příloze.
2.3 Konfigurace systému 2.3.1 Aktualizace data a času Nástroj pro aktualizaci data a času v Linuxu je ntp [8]. Příkazem /etc/init.d/ntp start se spustí služba a příkazem ntpq –p zjistíme, dle jakých serverů se provádí časová aktualizace. Konfigurace se nachází v /etc/ntp.conf a není třeba ji upravovat.
2.3.2 Konfigurace služeb po startu systému Pro snadné ovládání služeb, které se spouští po startu systému, slouží nástroj chkconfig. V tomto případě požadujeme, aby se po zapnutí nebo restartu serveru všechny potřebné služby spustily automaticky po startu systému. Jedná se především o tyto služby: o o o o o
ntp ssh apache2 mysql cron
-> -> -> -> ->
aktualizace data a času ssh démon webový server databázový server služba pro periodické spouštění úloh
20
2.4 Zabezpečení serveru 2.4.1 Šifrování komunikace mezi klientem a webovým serverem Abychom mohli šifrovat komunikaci mezi klientem a webovým serverem za pomocí SSL/TLS vrstvy, je potřeba nastavit webový server tak, aby naslouchal požadavkům také na portu 443, což je standardně definovaný port pro tento účel. Dále je potřeba vytvořit certifikáty (ověřené /neověřené), které se uloží na server a podle kterých se bude komunikace mezi klientem a serverem šifrovat. Podle certifikační politiky máme několik možností jak získat platný certifikát. Za pomocí nástroje Openssl si můžeme vygenerovat tzv. žádost o podpis certifikátu [8]. Tato žádost se pak odešle certifikační autoritě (třetí strana), která žádost podepíše za finanční poplatek a odešle nám podepsaný certifikát. Seznam platných certifikačních autorit je integrovaný v prohlížeči a ten pak ověřuje, zda je certifikát ověřený platnou certifikační autoritou či nikoliv. Tady chci upozornit na fakt, že důvěryhodná certifikační autorita je taková, kterou někdo nějak určil jako důvěryhodnou. Jediné co nám v této oblasti zajišťuje důvěryhodnost je finanční poplatek za podepsání certifikátu a naše vlastní důvěra v organizaci, která toto provádí. Další možností je vygenerovat si vlastní certifikační autoritu, kterou pak podepíšeme žádost o podpis certifikátu. Takto vytvořená certifikační autorita samozřejmě není na seznamu platných certifikačních autorit. Pokud ji ale importujeme do prohlížeče, bude to mít stejný efekt jako by byla platná. Jedinou nevýhodou je, že ji musíme importovat do každého webového prohlížeče, který chceme používat. Rozdíl mezi důvěryhodným a nedůvěryhodným certifikátem spočívá v zobrazení upozornění o nedůvěryhodnosti webové zdroje při prvotním pokusu o přístup. Poslední možností, je tzv. sám sebou podepsaný certifikát. Takto vygenerovaný certifikát, poslouží dobře pro naše účely, ale webový prohlížeč nám stále bude zobrazovat upozornění o nebezpečnosti webové stránky. Výsledný efekt je stejný jako v případě, že máme vlastní certifikační autoritu, ale neimportovali jsme ji do prohlížeče. Tudíž upozornění o nedůvěryhodnosti webového zdroje se nezbavíme. Pokud použijeme sám sebou podepsaný certifikát, ušetříme si tři kroky (generování certifikační autority, generování žádosti o podpis certifikátu a samotný podpis certifikátu).
21
Generování certifikátů a certifikačních autorit umožňuje nástroj Openssl. Pro vytvoření certifikační autority je nutné vygenerovat RSA klíč o velikosti 1024, 2048 nebo 4096 bitů [8]. Postupně vytvoříme certifikáty pro všechna webová rozhraní. Sám sebou podepsaný certifikát a jeho privátní klíč se vytvoří příkazem: openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout tv.edulinux.info.key -out tv.edulinux.info.crt Nakonec je zapotřebí upravit konfigurační kontext virtuálního hostu Apache, do kterého přidáme direktivy, které nám umožní šifrovat komunikaci mezi klientem a serverem. SSLEngine on SSLCertificateFile /var/www/tv/conf/tv.edulinux.info.crt SSLCertificateKeyFile /var/www/tv/conf/tv.edulinux.info.key Direktivou
SSLEngine
zapneme
šifrování.
Pomocí
direktivy
SSLCertificateFile
a SSLCertificateKeyFile sdělíme webovému serveru Apache, kde se na disku nachází privátní klíč a certifikát [4]. Ověříme, zda má Apache právo přístupu k daným souborům pomocí příkazu: ls -al /var/www/tv/conf Soubory by měly patřit pod uživatele a skupinu www-data a měly by mít nastavené právo pro čtení pro vlastníka souboru a žádná práva pro skupinu nebo ostatní uživatele. Toho lze docílit příkazy chown (změna vlastníka souboru) a chmod (změna přístupových práv k souborům). Ukázka výsledné konfigurace celého virtuálního hostu je uvedena v příloze č. 7. Na závěr zkontrolujeme, jestli máme v konfiguraci povolen modul mod_ssl. Pokud ne, tak ho přidáme a restartujeme webový server. Příkazem netstat -ntlp | grep apache vypíšeme všechny služby běžící na serveru společně s informacemi na jaké adrese a portu naslouchají požadavků, ale jen ty řádky, které obsahují slovo „apache“ [8]. Pomocí webového prohlížeče zkusíme zadat adresu https://tv.edulinux.info a pokud se nám zobrazí varování a nedůvěryhodnosti webové stránky, na kterou přistupujeme, je vše v pořádku.
22
2.4.2 Nastavení autorizace uživatelů oproti webovému serveru Apache má k dispozici modul zvaný mod_auth, pomocí kterého lze zajistit autorizaci uživatelů přistupujících k serveru. Uživatelská jména a jejich hesla se generují za pomocí nástroje htpasswd. Nástroj umožňuje krytování hesel pomocí hashovaní funkce SHA. Pro přidání nového uživatele, je potřeba vytvořit skrytý soubor htpasswd, ve kterém bude uloženo jméno uživatele a otisk jeho hesla [4]. To vše se provede příkazem: htpasswd –cs ozzy /var/www/tv/conf/.htpasswd Parametr -c vytvoří nový soubor, pokud již existuje, tak ho přepíše. Parametr -s zapne šifrování hesel pomocí SHA1. Název souboru začíná naschvál „.ht“. Tečka na začátku značí, že se jedná o skrytý soubor a dohromady má celá kombinace speciální význam pro webový server Apache. Ten totiž má standardně nastaveno, aby zakázal všechny pokusy o přístup k takto nazvaným souborům. Takto pojmenovaný soubor můžeme bez obav vložit mezi soubory, které jsou uživatelům přístupné. Při pokusu o stažení takového souboru, nám server odpoví chybovou hláškou 403 – Forbidden [4]. Autorizace uživatelů se může provádět dvěma způsoby. Metoda basic a digest. Rozdíl mezi nimi je v tom že, metoda digest kryptuje heslo, které zadá uživatel předtím, než ho klient odešle k ověření na server [4]. Metoda basic posílá heslo v plaintextu a to je možné odposlechnout pomocí nástrojů na monitoring sítí (např. Wireshark, tcpdump). V našem případě nám postačí metoda basic, protože my budeme veškerou komunikaci šifrovat, tím pádem nám nevadí, že metoda basic posílá hesla v plaintextu. Konfigurace autorizace uživatelů se provádí v kontextu Directory příslušného virtuálního hostu. V našem případě chceme použít autorizaci uživatelů, kteří budou přistupovat do archivu videí na adrese http://tv-archiv.edulinux.info. Výpis videí, které jsou k dispozici ke stažení, zajišťuje Apache pomocí direktivy Options s parametrem Indexes [4]. Příklad konfigurace automatického výpisu všech souborů v kořenové složce a nastavení autorizace uživatelů vypadá následovně.
23
Options Indexes FollowSymLinks MultiViews AllowOverride None order allow,deny allow from all AuthType Basic AuthName "TV Archiv" AuthUserFile /var/www/edulinux/.htpasswd Require valid-user Direktiva AuthType určuje, jestli má Apache použít metodu autorizace basic nebo digest. AuthName nastaví textový řetězec, který se uživateli zobrazí společné s výzvou o přihlášení. AuthUserFile je cesta k souboru htpasswd, ve kterém jsou uloženy jména uživatelů a jejich hesla v zašifrované podobě. Poslední volba říká, že se může přihlásit pouze platný uživatel, který je uveden v souboru htpasswd. Ukázka celé konfigurace je v příloze č. 12. Zbývá ověřit, jestli jsou moduly mod_auth a mod_user_authz povoleny v konfiguraci Apache a můžeme restartovat webový server pro znovu načtení konfigurace.
2.4.3 Vynucení přístupu přes protokol HTTPS Apache má modul rewrite, který umí dle zadaných pravidel některé požadavky odmítnout společně s výzvou, jak má vypadat správný dotaz [4]. Protože ne všichni uživatelé znají zabezpečení webové komunikace pomocí protokolu HTTPS, budou se snažit přistoupit na aplikační rozhraní serveru přes protokol HTTP. V tom případě může Apache požadavek odmítnout a poslat klientovi výzvu se zněním správného dotazu, což je za použití přístupu přes protokol HTTPS. Konfigurace rewrite modulu se zapisuje do kontextu virtualhost. Níže uvedený příklad konfigurace rewrite modulu přesměruje všechny požadavky, které přijdou na server Apache na port 80 přes protokol http na port 443 (protokol https). RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*) https://%{HTTP_HOST}:443%{REQUEST_URI} [R]
2.4.4 Konfigurace firewallu na serveru Iptables je vynikající opensource stavový firewall [8]. Jeho konfigurace se provádí interaktivně v příkazové řádce příkazem iptables.
24
V našem případě požadujeme, aby server akceptoval požadavky realizované přes porty: o 80 - HTTP o 443 – HTTPS o 65122 – SSH – služba SSH nastavena aby naslouchala na portu 65122. o 9000 – 9035 – rozsah portů, na kterých se streamuje o 123 – NTP – synchronizace data a času o 53 – DNS – překlad doménových jmen na IP adresy
Zapojení domácí sítě LAN
Obrázek č. 3 – Ukázka zapojení domácí sítě LAN Server má nastavenou statickou IP adresu 10.0.0.111 a je umístěn v lokální síti LAN o rozsahu 10.0.0.0/24. Protože je server v lokální síti, není třeba na něm provozovat firewall. Firewall běží na bráně (UBNT Routerstation s použitým OS Openwrt [9]). Standardním portem pro SSH je port číslo 22. V internetu existuje velké množství škodlivých programů, 25
které postupně zkouší IP adresy, jestli některá z nich naslouchá na portu 22. Pokud takovou IP adresu najde, pokusí se na ni opakovaně připojit zkoušením uživatelských jmen a hesel ze seznamu nejčastěji používaných hesel. Jedná o tzv. brute force útok. Snadno se takovému útoku vyhneme použitím nestandardního portu, na kterém služba naslouchá. Další ochrana spočívá v použití softwaru, který kontroluje pokusy o přihlášení na server a dle nastavení může po určitém počtu pokusů na chvíli nebo napořád blokovat veškeré další pokusy o připojení z dané IP adresy. V Linuxu se takový software nazývá Denyhost [8]. Výhodou tohoto softwaru je také, že pokud již zablokoval danou IP adresu, z pohledu klienta to vypadá, že k žádné blokaci nedošlo. Místo zprávy o zablokování se útočníkovi objeví výzva k zadání hesla. Uživatel (útočník) tak nepozná, že byl již zablokován.
2.4.5 Konfigurace firewallu na výchozí bráně (gateway) Výchozí brána akceptuje všechny příchozí požadavky na rozhraní eth0 s veřejnou IP adresou 94.113.1.93 na portech 65022 a 444. Na portu 65022 naslouchá požadavkům odlehčená verze SSH démona Dropbear. Port 444 slouží pro webový server Lighttpd, který běží na výchozí bráně a je přes něj realizované webové konfigurační rozhraní systému Openwrt tzv. Luci [9]. Konfigurační rozhraní brány je dostupné pouze přes protokol HTTPS. Na firewallu je nastaven překlad IP adres tzv. NAT [8]. Jedná o proces překládání IP adres, který je potřeba pokud klient ze sítě LAN posílá požadavky do sítě typu WAN (internetu) a obráceně. Klientův požadavek dorazí nejprve na výchozí bránu, která změní hlavičku paketu tak, že nahradí zdrojovou IP adresu (adresa klienta z LAN) za svou vlastní adresu (WAN adresa brány) a teprve poté přepošle klientův požadavek do internetu. Procesu nahrazování zdrojové IP adresy se říká SNAT (source NAT). Pokud chceme, aby byl z internetu dostupný server v sítí LAN je potřeba na bráně nastavit opačný proces, kdy brána nahradí cílovou IP adresu (adresa brány) za klientovu LAN adresu. Proces nahrazování cílové adresy se nazývá DNAT (destination NAT). Protože se streamovací server nachází v síti LAN, je potřeba na bráně nastavit DNAT, aby všechny požadavky od klientů z internetu dorazili na server do lokální sítě. Budeme překládat všechny požadavky, které přijdou na bránu na porty 80,443,65122 a budeme je přeposílat na adresu 10.0.0.111 na porty 80,443 a 22. Výše jsem popisoval, že je vhodné nastavit nestandardní porty známých služeb. V případě použití překladu adres (DNAT) můžeme použít standardní porty na straně serveru, na které budou 26
směrovány požadavky z výchozí brány z jiných než standardních portů. Například všechna spojení na port 65122 brána přesměruje na server na port 22 (SSH démon). Ukázka konfigurace firewallu Iptables iptables –F input #smaže pravidla, která se týkají příchozích paketů iptables –F –t nat #smaže všechna pravidla z tabulky NAT iptables –policy INPUT DROP #výchozí politika na příchozí pakety iptables –policy OUTPUT ACCEPT #výchozí politika pro odchozí pakety iptables –A INPUT –p ICMP –i eth0 –j ACCEPT #povolí příchozí požadavky na ping na rozhraní eth0 iptables –A INPUT –p tcp –dport 80 –j ACCEPT #povolí příchozí pakety na port 80 iptables –t nat –A PREROUTING -p tcp -dport 65122 -i eth0 -j DNAT --to 10.0.0.111:22 # provede překlad cílové adresy a přesměruje všechny příchozí pakety z portu 65122 na server v lokální síti na adrese 10.0.0.111 na port 22 iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE #provádí SNAT odchozích paketů. Konfigurace firewallu je mnohem komplexnější záležitost. Je potřeba myslet na různé typy útoků, které se běžně vyskytují na internetu. Útoky na servery a jejich služby se dělí do několika kategorií, dle toho na co jsou zaměřeny a jaké můžou být jejich následky [8]. Cílem této práce však není detailní popsání rozsáhlé problematiky bezpečnosti provozu serveru na internetu ani detailní konfigurace firewallu. Výše uvedená ukázka konfigurace firewallu obsahuje pouze příklady některých použitých syntaxí zápisu firewallu Iptables.
2.5 Realizace aplikačního rozhraní Aplikační rozhraní je napsáno ve skriptovacím jazyce PHP [5], který dynamicky generuje HTML kód dle interakcí uživatele a stará se o logiku celého rozhraní. Webová aplikace je tvořena několika PHP skripty. Z toho dva udávají vzhled celého webu, který je rozdělen do čtyř elementů na logo, levé menu, tělo aplikace a pravé menu. Aplikace pracuje s MySQL databází a využívá k tomu PHP funkce, jako jsou například mysql_connect, mysql_close, mysql_query [11]. Pro každou položku v menu aplikace je napsán samostatný skript. Logika aplikace se stará o správné pořadí provádění jednotlivých úkonů, dále průběžně kontroluje, zda se jedná 27
o autorizovaného uživatele. Pokud ne, zamítne mu přístup. V konfiguraci PHP je nastaven časový limit, po kterém uživateli vyprší nastavení proměnné session_id, která se následně změní na hodnotu nula a uživateli se tudíž zamítne přístup, dokud se opět nepřihlásí do aplikace [11]. Dle proměnné session_id aplikace pozná, jestli se jedná o administrátora nebo uživatele. Administrátor má session_id rovno jedné. Součástí logiky aplikace je také kontrola zadaných časových údajů při plánování nahrávání. V případě že uživatel nastaví datum ukončení nahrávání na dřívější datum a čas, než nastaví spuštění nahrávání, bude na to upozorněn. Pokud se zrovna nahrává, logika nedovolí uživateli přepnout vysílaný multiplex po dobu nahrávání. Aplikace loguje do databáze všechny neúspěšné pokusy o přihlášení společně s údaji o klientovi (IP adresa, user-agent klienta, a časové razítko události). Aplikace umí uživateli zobrazit aktuální naplánované záznamy, aby je uživatel viděl a mohl dle nich naplánovat další nahrávání tak, aby se jednotlivé plány časově nekřížily. Jednotlivé aktuální naplánované záznamy jsou barevně odlišeny, podle statusu záznamu. Pokud zrovna probíhá nahrávání dle plánovaného záznamu, řádek se podbarví červeně. Pokud je nahrávání ukončeno, řádek je zelený a pokud se záznam naplánovaný, ale zatím čeká, než se začne nahrávat, řádek má modrou barvu. K vyplnění data a času začátku a konce nahrávání je použitý javascript datepicker.js, který umí zobrazit jednoduchý kalendář pro výběr data a času. Javascript je k dispozici na webu www.monkeyphysics.com. Webová aplikace používá funkci strtotime [11], která převede datum a čas na číslo reprezentující daný časový údaj. Tyto čísla se pak mezi sebou snadněji porovnávají. Pro snadnější ovládání z příkazové řádky a pro aplikační rozhraní se vytvoří systémové skripty, které automatizují proces spouštění streamovaní, přepnutí vysílání na jiný multiplex nebo dekódování nahraných videí. Pro každý multiplex je vytvořen startovací skript, který nejprve ukončí všechny běžící instance aplikace Getstream-poempel a poté ho spustí znovu s parametry pro vysílání na určitém multiplexu [1].
28
Sekvenční diagramy hlavních procesů aplikačního rozhraní:
Obrázek č. 4 - Proces přihlášení uživatele do aplikace Při prvotním přístupu na aplikační rozhraní, se uživateli vygeneruje v menu pouze položka login, pomocí které uživatel zahájí proces přihlášení. Menu aplikace se generuje dle proměnné session_id. Pokud se session_id rovná nule (uživatel není přihlášen), objeví se v menu pouze položka login. Heslo zadané uživatelem se kryptuje pomocí SHA1 funkce [11]. Výsledný otisk hesla uživatele se porovná s otiskem hesla uživatele z databáze. Pokud jsou otisky hesel shodné, uživatel bude úspěšně přihlášen do aplikace a proměnná session_id se nastaví na hodnotu větší než nula respektive se hodnota session_id uživatele převezme z databáze. Po přihlášení je uživatel automaticky přesměrován na stránku s výpisem informací o aktuálním stavu vysílání.
29
Obrázek č. 5 - Proces zapnutí vysílaní nebo změny vysílaného multiplexu V tomto procesu je zabudována kontrola nahrávání, která vyčte z databáze aktuální naplánované nahrávání a v případě, že se zrovna nahrává, aplikace nedovolí uživateli přepnout vysílání na jiný multiplex nebo ho vypnout. Každé zapnutí, vypnutí nebo přepnutí vysílání je zaznamenáno do databáze. Obdobně vypadá proces vypnutí streamování.
30
Obrázek č. 6 - Proces naplánování a následného zpracování nahraného videa Při procesu naplánování nahrávání se nejprve minutu před spuštěním nahrávání se začne vysílat multiplex, ze kterého se bude nahrávat. V čase kdy se má nahrávat se spustí instance aplikace Wget, která zajistí nahrávání http streamu. Wget je konzolový klient pro stahování souborů z webu [8]. V době plánovaného ukončení nahrávání se ukončí instance aplikace Wget a nahrané video se uloží na server. Za tři minuty po ukončení nahrávání se spustí skript, který dekóduje nahrané video do MPEG-4 formátu, uloží video do televizního archivu a odešle email s odkazem na nahrané video uživateli, který si nahrávání naplánoval. O všechno se stará logika aplikace, která při naplánování nahrávání vygeneruje ad-hoc systémové příkazy. Ty jsou realizovány nástrojem At, který umožňuje spouštění jednorázových příkazů v plánovaný čas [8]. Dohromady se vytvoří 4 ad-hoc příkazy. První spustí vysílání na požadovaném multiplexu. Druhý spustí nahrávání videa z určitého kanálu. Třetí
ukončí
nahrávání.
Poslední
spustí
vygenerovaný
skript,
jenž
se
postará
o dekódování videa a informování uživatele o úspěšnosti celého procesu. Dekódování videa provádí nástroj Ffmpeg, který vytvoří video ve formátu MPEG-4 s příponou mp4. Výsledné video má cca 20% původní velikosti a je v rozlišení 640x480. Tento formát je zvolen záměrně, protože ho dovedou přehrát i moderní mobilní telefony, tablety a podobná zařízení. 31
3 Vlastní přínos Největší výzvou pro mě byla realizace webového rozhraní. Na začátku jsem měl pouze základní znalosti z PHP a neznal jsem PHP funkce [11] pro práci s databází nebo s příkazovým prostředím Linuxu. S tím mi pomohl online manuál PHP. Dále jsem si prohloubil svoje znalosti ze skriptování v příkazovém prostředí Bash. Zjistil jsem jak pomocí skriptu zaslat email uživateli a jak se dá zpracovat textový výstup z konzole a tyto informace následně zobrazit na webu nebo odeslat emailem. Řešení nejvíce zkomplikoval fakt, že byl použit pouze jeden televizní tuner. Z toho důvodů jsem musel vyřešit jak zkontrolovat jestli existují v systému naplánované záznamy, které doposud čekají na zpracování a následně je zobrazit na webu, aby o nich měl uživatel přehled při plánování dalších nových záznamů. V případě, že neexistovaly žádné záznamy v databázi, uživateli se zobrazila prázdná tabulka. Jenže to kazilo výsledný vzhled. Situaci jsem vyřešil pomocí přidání stejné kontroly naplánovaných nahrávek, která má za úkol zjistit, jestli takové nahrávky existují a pokud ano, nastaví proměnou v PHP, dle které se zobrazí tabulka s výpisem naplánovaných videí nebo se nezobrazí vůbec nic. Velmi zajímavý je Rewrite modul do webového serveru Apache. Jeho použití je tak rozsáhlé, že by to vydalo na samostatnou práci. Rewrite modul podporuje tzv. regulární výrazy. Jedná se o specifickou formu zápisu řetězce, který popisuje určitou množinu jiných řetězců. Regulární výrazy podporuje mnoho programovacích jazyků i aplikací samotných.
32
4 Závěr Práce se zabývá návrhem a implementací odlehčeného řešení pro domácí vysílání DVB-T signálu v rámci lokální sítě s možností plánovat nahrávání televizních pořadů. Řešení bylo implementováno na stávající server s operačním systémem Linux Debian. Back end je realizován pomocí nástrojů pro práci s DVB v Linuxu. Jedná se o nástroje, které skenují DVB vysílání a jejich výstupem je seznam frekvencí jednotlivých multiplexu a dále seznam vysílaných kanálů v každém multiplexu. Tyto údaje potřebujeme pro konfiguraci aplikace Getstream-poempel, pomocí které naladíme tuner na určitý multiplex a ten pak vysíláme do místní sítě LAN. Z důvodu automatizace byly vytvořeny startovací skripty, které spouští Getstream-poempel
s
nastavením
příslušného
multiplexu.
V jazyce
PHP
bylo
naprogramováno víceuživatelské webové rozhraní pro snadnější ovládání vysílání nebo naplánování nahrávání televizních pořadu. Webové rozhraní pracuje s MySQL databází, do které ukládá veškeré informace o naplánování nahrávání nebo uživatelské akce jako je přihlášení do aplikace, změna vysílaného multiplexu, naplánování nahrávání, neúspěšné pokusy o přístup do rozhraní atd. Dále je v databázi tabulka s uživatelskými účty. Logika webového rozhraní umí rozpoznat, jestli existují plánované záznamy, které doposud nebyly nahrány a ty pak vypisuje uživateli na obrazovku s barevným rozlišením statusu již naplánovaného záznamu. Podle barvy uživatel snadno pozná, které záznamy se právě nahrávají (červená barva), které záznamy čekají, než začnou nahrávat (modrá barva). Záznamy, které byly již zpracovány, se zobrazují zeleně. Uživatel má díky tomu přehled, co se bude ještě nahrávat a může se tak vyhnout duplicitnímu naplánování nahrávání nebo se vyvarovat nahrávání, které se bude překrývat časově s jiným nahráváním na jiném multiplexu. Z důvodu dostupnosti pouze jednoho televizního tuneru by došlo k přerušení původního nahrávání. Tuto kontrolu se nepovedlo zabudovat do logiky webové aplikace. Proto má uživatel možnost si alespoň barevně vypsat aktuální naplánované záznamy a podle nich plánuje další. Proces naplánování nahrávání je realizován pomocí jednorázových příkazů, které se v systému spustí v požadovaný čas. Aplikace také vygeneruje jednorázový skript, který se spustí chvilku po ukončení nahrávání a dekóduje nahrané video do MPEG-4 formátu, uloží ho na server a nakonec odešle uživateli, který naplánoval nahrávání email s odkazem na nahrané video a informací o velikosti videa. Webové rozhraní dynamicky 33
generuje menu, podle ID přihlášeného uživatele. Pokud se přihlásí administrátor, objeví se mu v menu několik položek navíc jako je například výpis posledních třiceti naplánovaných záznamů nebo výpis posledních třiceti zaznamenaných událostí (změna vysílání, naplánování nahrávání, přihlášení a odhlášení uživatele do aplikace atd.). Bylo by vhodné řešení implementovat na server, který by mohl být osazen alespoň třemi televizními tunery. V tom případě by logika webového rozhraní nemusela obsahovat ovládací panel na přepínání multiplexů, protože by se všechny multiplexy vysílaly naráz. Dále by aplikace nemusela kontrolovat, jestli se zrovna nahrává a co se nahrává. Případně jestli se jedno nahrávání časově nepřekrývá s jiným nahráváním. Celý návrh se tak mnohem zjednoduší. Další velmi zajímavou alternativou na realizaci řešení se jeví některé embedded platformy, které jsou mnohem úspornější než klasické PC. Celková spotřeba se pohybuje kolem 5 až 10W. Daná embedded platforma se osadí několika USB televizními tunery a vysílání DVB-T do sítě LAN by se zrealizovalo obdobně. S nahráváním a dekódováním bude problém. Tyto platformy nemají pevné disky a ukládání videa na flash disk není vhodné. V tom případě bych přenechal proces nahrávání a dekódování videa klasickému serveru, který má pevný disk i mnohem výkonnější hardwarové prostředky pro dekódování videa. Pro vyzkoušení funkcionality realizovaného řešení, byl zřízen testovací účet, jehož uživatelské jméno je „test“ a heslo je „test123???“ (http://tv.edulinux.info). K testovacímu účtu byla zřízena emailová schránka
[email protected] se stejným heslem jako výše uvedený testovací učet. Do této schránky budou chodit emaily s odkazem na nahrané video v archivu (http://tv-archiv.edulinux.info). Webové rozhraní nepodporuje více administrátorů. Uvedu zde heslo pro účet „admin“, které je „admindvb4TV???“. Testovací účet bude zrušen 1.2.2012. V případě zájmu o vlastní účet kontaktujte autora na email
[email protected].
34
Literatura [1]
AbcLinuxu.cz [online]. 2007 [cit. 2011-12-06]. Getstream + DVB-T. Dostupné z WWW:
.
[2]
Apache HTTP Server [online]. c2011 [cit. 2011-12-06]. Apache HTTP Server Version 2.2 Documentation. Dostupné z WWW: .
[3]
AULDS, Charles. Linux administrace serveru Apache . U Průhonu 22, 17000 Praha 7 : Grada Publishing, a.s., 2003. 536 s.
[4]
KABIR, Mohammed J. Apache Server 2 : Kompletní příručka administrátora. Holandská 3, 63900 Brno : Computer Press, a. s., 2004. 722 s.
[5]
KOFLER, Michael; ÖGGL, Bernd. PHP 5 a MySQL 5 : Průvodce webového programátora. Holandská 3, 63900 Brno : Computer Press, a. s., 2007. 608 s.
[6]
MySQL Documentation [online]. c2011 [cit. 2011-12-06]. MySQL Reference Manuals. Dostupné z WWW: .
[7]
MythTV *online+. © 2002-2011 [cit. 2011-12-09+. Opensource DVR. Dostupné z WWW: .
[8]
NEMETH, Evi; SNYDER, Garth; HEIN, Trent. Linux - Kompletní příručka administrátora. 2. aktualizované vydání. Holandská 3, 63900 Brno : Computer Press, a. s., 2008. 976 s.
[9]
OpenWrt Wiki [online]. 2011 [cit. 2011-12-09]. Documentation. Dostupné z WWW: .
[10]
Personal Homepage of Michael "PömpelFox" Meier *online+. c2011 *cit. 2011-12-06]. Getstream-poempel. Dostupné z WWW: .
[11]
PHP [online]. c2001-2011 [cit. 2011-12-06+. PHP Documentation. Dostupné z WWW: .
[12]
VideoLAN Wiki [online]. 2011 [cit. 2011-12-06+. Documentation. Dostupné z WWW: .
35
Seznam příloh 1.
Skript pro spuštění vysílaní prvního multiplexu do sítě LAN
2.
Skript pro spuštění vysílaní druhého multiplexu do sítě LAN
3.
Skript pro spuštění vysílaní třetího multiplexu do sítě LAN
4.
Ukázka PHP kódu, který generuje skript v příkazovém prostředí Bash pro dekódování nahraného videa a zadává systémové příkazy v plánovaný čas
5.
Výstup nástroje w-scan (přehled multiplexů vysílaných v Praze)
6.
Výstup nástroje scan (přehled kanálů, vysílaných v jednotlivých multiplexech)
7.
Konfigurace virtuálního kontextu tv.edulinux.info v Apache pro port 80
8.
Konfigurace virtuálního kontextu tv.edulinux.info v Apache pro port 443
9.
Konfigurace virtuálního kontextu tv-archiv.edulinux.info v Apache pro port 80
10. Konfigurace virtuálního kontextu tv-archiv.edulinux.info v Apache pro port 443
36
Seznam obrázků 1.
Usecase diagram uživatelských akcí
2.
Návrh databázového systému pro webové rozhraní
3.
Ukázka zapojení domácí sítě LAN
4.
Sekvenční diagram procesu spuštění vysílaní nebo změny vysílaného multiplexu
5.
Sekvenční diagram procesu naplánování nahrávání
6.
Sekvenční diagram autorizace uživatele při přístupu na webové rozhraní
37
Přílohy Skript pro spuštění vysílaní prvního multiplexu do sítě LAN #!/bin/bash killall getstream myip="10.0.0.111" /home/ozzy/getstream-poempel/getstream -a 0 \ -f /home/ozzy/dvb-t/acko730mhz.conf \ -l 4 \ -d 1 \ -b 90000000 \ -p 257:${myip}:9000 \ -p 258:${myip}:9001 \ -p 259:${myip}:9002 \ -p 260:${myip}:9003 \ -p 16641:${myip}:9004 \ -p 16642:${myip}:9005 \ -p 16643:${myip}:9006 \ -p 16644:${myip}:9007 \ -p 16645:${myip}:9008 \ -p 16646:${myip}:9009 > /var/log/getstreamA.log &
38
Skript pro spuštění vysílaní druhého multiplexu do sítě LAN #!/bin/bash killall getstream myip="10.0.0.111" /home/ozzy/getstream-poempel/getstream -a 0 \ -f /home/ozzy/dvb-t/becko634mhz.conf \ -l 4 \ -d 1 \ -b 90000000 \ -p 513:${myip}:9021 \ -p 514:${myip}:9022 \ -p 769:${myip}:9023 \ -p 770:${myip}:9024 \ -p 2049:${myip}:9025 > /var/log/getstreamB.log &
39
Skript pro spuštění vysílaní třetího multiplexu do sítě LAN #!/bin/bash killall getstream myip="10.0.0.111" /home/ozzy/getstream-poempel/getstream -a 0 \ -f /home/ozzy/dvb-t/cecko818mhz.conf \ -l 4 \ -d 1 \ -b 90000000 \ -p 1:${myip}:9031 \ -p 2:${myip}:9032 \ -p 3:${myip}:9033 \ -p 4:${myip}:9034 > /var/log/getstreamC.log &
40
Ukázka PHP kódu, který generuje skript v příkazovém prostředí Bash pro dekódování nahraného videa a zadává systémové příkazy v plánovaný čas \$EMAILMESSAGE\n". "echo \"Your scheduled record is ready for download. File size is \$info_FILENAME\" >>\$EMAILMESSAGE\n". "echo \"http://tv-archiv.edulinux.info/$filename.mp4\" >>\$EMAILMESSAGE\n". "echo \"If you don't know your password, please contact Administrator\" >>\$EMAILMESSAGE\n". "/usr/bin/mail -s \"$email_subject\" \"$user_email\" < \$EMAILMESSAGE\n". "rm \$EMAILMESSAGE\n". "exit 0"; $script_date = date("Y-m-d_H:i"); $script_path = "/home/ozzy/dvb-t/scripts/${script_date}_${username}_${filename}"; $ourFileHandle = fopen($script_path, 'w') or die("can't open file"); fwrite($ourFileHandle, $script_bash); fclose($ourFileHandle); $cmd4 = "echo \"/bin/bash /home/ozzy/dvbt/scripts/${script_date}_${username}_${filename}\" | at $end_time + 3 min"; include ("conf/sshconnect.php"); $stream1=ssh2_exec($connection,$cmd1); sleep (1); $stream2=ssh2_exec($connection,$cmd2); sleep (1); $stream3=ssh2_exec($connection,$cmd3); sleep (1); $stream4=ssh2_exec($connection,$cmd4); sleep (1); ?>
41
Výstup nástroje w-scan – seznam multiplexů, které se vysílají v ČR #-----------------------------------------------------------------------------# file automatically generated by w_scan # (http://wirbel.htpc-forum.de/w_scan/index2.html) #! <w_scan> 20100316 1 0 OFDM CZ #-----------------------------------------------------------------------------# location and provider: # date (yyyy-mm-dd) : 2011-12-06 # provided by (opt) : # # T[2] <mod> [# comment] #-----------------------------------------------------------------------------T 634000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE
# CESKE RADIOKOMUNIKACE
T 730000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE
# SIT 1 CESKA TELEVIZE
T 778000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE
# Sit 3-Czech Digital Group
T 818000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE
# Telefonica O2
42
Výstup nástroje scan – seznam všech kanálů a informací potřebných k naladění jednotlivých televizních nebo rádiových stanic NOVA_CINEMA:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:401:411:514 NOVA:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRA NSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:101:111:513 BARRANDOV_TV:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QA M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:301:311:2049 Prima_COOL:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_6 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:501:511:770 PRIMA:634000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRA NSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:201:211:769 CT_1:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRAN SMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:257:273:257 CT_2:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRAN SMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:513:529:258 CT_24:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRA NSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:769:785:259 CT_4:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRAN SMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1025:1041:260 CRo1_Radiozurnal:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:Q AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:4113:16641 CRo2_Praha:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_6 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:4369:16642 CRo3_Vltava:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_6 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:4625:16643 CRo_Radio_Wave:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QA M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:4881:16644 CRo_D_dur:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64: TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:5137:16645 CRo_Leonardo:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_ 64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:5393:16646 Prima_LOVE:778000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_1_2:QAM_6 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:513:514:772 Metropol_TV:778000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_1_2:QAM_6 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1537:1538:4097 Proglas:778000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRA NSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:4097:17153 CT_HD:818000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRA NSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:2079:2078:1 Nova_HD:818000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:T RANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:2076:2075:2 Ocko_TV:818000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TR ANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1401:1402:4 43
Konfigurace virtuálního kontextu tv.edulinux.info v Apache pro port 80 ServerName "tv.edulinux.info" ServerAdmin "[email protected]" DocumentRoot "/var/www/tv" ErrorLog /var/log/apache2/tv.edulinux-error.log LogLevel warn CustomLog /var/log/apache2/tv.edulinux-access.log combined RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*) https://%{HTTP_HOST}:443%{REQUEST_URI} [R] Options Indexes FollowSymLinks MultiViews AllowOverride None order deny,allow allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all 44
Konfigurace virtuálního kontextu tv.edulinux.info v Apache pro port 443 ServerName "tv.edulinux.info" ServerAdmin "[email protected]" DocumentRoot "/var/www/tv" ErrorLog /var/log/apache2/tv.edulinux-error.log LogLevel warn CustomLog /var/log/apache2/tv.edulinux-access.log combined SSLEngine
On
SSLCertificateFile
/var/www/tv/conf/tv.edulinux.info.crt
SSLCertificateKeyFile /var/www/tv/conf/tv.edulinux.info.key Options Indexes FollowSymLinks MultiViews AllowOverride None order deny,allow allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all 45
Konfigurace virtuálního kontextu tv-archiv.edulinux.info v Apache pro port 80 ServerName "tv-archiv.edulinux.info" ServerAdmin "[email protected]" DocumentRoot "/var/www/tv-archiv" ErrorLog /var/log/apache2/tv-archiv.edulinux-error.log LogLevel warn CustomLog /var/log/apache2/tv-archiv.edulinux-access.log combined RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*) https://%{HTTP_HOST}:443%{REQUEST_URI} [R] Options Indexes FollowSymLinks MultiViews AllowOverride None order allow,deny allow from all AuthType Basic AuthName "DVB-T TV ARCHIV" AuthUserFile /home/ozzy/dvb-t/www-dvbt/conf/.htpasswd Require valid-user
46
Konfigurace virtuálního kontextu tv-archiv.edulinux.info v Apache pro port 443 ServerName "tv-archiv.edulinux.info" ServerAdmin "[email protected]" DocumentRoot "/var/www/tv-archiv" ErrorLog /var/log/apache2/tv-archiv.edulinux-error.log LogLevel warn CustomLog /var/log/apache2/tv-archiv.edulinux-access.log combined SSLEngine
On
SSLCertificateFile
/var/www/tv-archiv/.ht_cert/tv-archiv.edulinux.info.crt
SSLCertificateKeyFile /var/www/tv-archiv/.ht_cert/tv-archiv.edulinux.info.key Options Indexes FollowSymLinks MultiViews AllowOverride None order allow,deny allow from all AuthType Basic AuthName "DVB-T TV ARCHIV" AuthUserFile /home/ozzy/dvb-t/www-dvbt/conf/.htpasswd Require valid-user
47