Nedávné rozchození Samby mě naplnilo dobrým pocitem, nicméně mělo to jednu velkou chybu. Samba je vynikající pro sdílení složky uvnitř firemní nebo domácí sítě pod jedinou doménou nebo pracovní skupinou.
Ale co když chci sdílet složku ven do internetu??? A další podmínkou je podobné chování jako Samba sdíleného adresáře, tj. možnost spouštět soubory přímo ze složky a celkově možnost práce s nasdíleným prostorem jako s připojeným diskem.
A na co můžeme takovou složku používat? Například si na ni můžete nakopírovat důležité soubory a nebo přímo aplikace, které vám mají pomáhat, kdekoli budete mít k dispozici internetové připojení. A právě takovou funkci vám poskytuje protokol WebDav. Pro mě osobně bude mít Samba využití ve vnitřní síti pro sdílení souborů (zejména na Windows 7, které v Průzkumníku nepodporuje šifrování Digest, o kterém si napíšeme dále) a zároveň pro spouštění domácího informačního systému, který jsem napsal v Javě.
WebDav bude mít funkci zcela stejnou s tím rozdílem, že budu sdílet soubory a systém směrem ven.Pokud porovnáme WebDav a Sambu, tak Samba je obecně rychlejší pro přístup k datům. Nasdílené složky reagují rychle a hbitě, odezva je velmi slušná. WebDav je oproti Sambě pomalejší a jak si napíšeme dále, ve Windows musíme občas udělat malý trik, aby se zrychlil. Ohledně bezpečnosti bychom mohli nad Sambou ve vnitřní síti mávnout rukou, ale u WebDavu mhouřit oči nemůžeme, protože sdílíme data přes internetovou síť. Jak je to s bezpečností WebDavu se dozvíme dále.
Návod na nastavení WebDav krok za krokem.
Nastavení WebDav je asi MNOHEM náročnější než-li nastavení Samby. Osobně jsem nad tímto nastavením strávil minimálně 15 hodin času. Na internetu existují návody, ale některé končí před zavedením autentizace uživatele, jiné pokračují až k ověřování SSL, které však nedostatečně vysvětlují. Pokusím se být více kompletnější, ale neslibuji, že se dozvíte úplně všechno. Nicméně se těch 15 hodin času v tomto článku projeví.
Podmínkou pro instalaci WebDav je nainstalovaný a rozchozený Apache2 webový server, na kterém si budeme WebDav rozjíždět. Pro jiné webové servery musíte najít jiné návody.
1. Zakládáme složku "dav".
Nejprve musíme založit složku „dav“, která bude obsahovat tzv. webdav "lock" databázi. Myslím si, že tato jednoduchá databáze obsahuje informace o aktuálních spojeních apod.
mkdir -p /var/lib/apache2/dav
2. Nastavíme práva pro složku "dav".
Nyní nastavíme práva. Nejprve přiřadíme skupinu, pod kterou běží služba Apache2, také pro tuto složku. V mém případě je to skupina "wwwdata".
chgrp wwwdata /var/lib/apache2/dav
3. Rozšíříme práva složky "dav".
Rozšíříme práva složky "dav" příkazem chmod:
chmod 775 /var/lib/apache2/dav
4. Vytvoříme soubor s uživatelem a heslem pro WebDav.
1. možnost (basic authentication):
htpasswd2 -c /etc/apache2/dav_users.db jmeno_uzivatele
New password:
Re-type new password:
Adding password for user jmeno_uzivatele
Dalšího uživatele přidáte takto:
htpasswd2 /etc/apache2/dav_users.db jmeno_uzivatele2
2. možnost (digest authentication):
htdigest2 -c /etc/apache2/users.password webdav jmeno_uzivatele
Adding password for jmeno_uzivatele in realm webdav.
New password:
Re-type new password:
Dalšího uživatele přidáte takto:
htdigest /etc/apache2/users.password webdav jmeno_uzivatele2
Důležitá poznámka:
Jak vidíte, máme na výběr ze dvou způsobů ověřování přístupových údajů. Každý má své výhody i nevýhody.
htpasswd2 nabízí širokou kompatibilitu, funguje i na starších Windows systémech jako je Windows 7 a Windows Vista. Místo šifrace jména a hesla tyto kóduje v base64, což lze poměrně snadno odchytit a dešifrovat. TENTO ZPŮSOB NENÍ PRO SDÍLENÍ ADRESÁŘE PŘES INTERNET BEZPEČNÝ. Pro chod tohoto způsobu ověřování (basic authentication) musíme editovat ve Windows registry (návod níže).
htdigest2 nabízí menší kompatibilitu. Nefunguje ve Windows 7 a Windows Vista. Funguje od Windows 8 a výše. Nemusíme pro jeho chod ve Windows editovat registry. Přístupové údaje jsou šifrovány hashem MD5, což je v podstatě nedešifrovatelný datový otisk uživatelského jména a hesla.
Doporučuji použít htdigest2 a nekompatibilitu Windows 7 vykrýt třeba Sambou (viz návod zde).
5. Vytvoříme adresář "webdav" v adresáři, kde máme weby.
Tj. V adresáři, kde jsou weby pro Apache. Můžeme vytvořit adresář na úrovni jednotlivých webů, ale třeba i v rámci webu, to už je na vás.
mkdir -p /home/www/webdav
6. Nastavíme práva pro adresář "webdav".
Změna skupiny na "wwwdata" /tj. skupina, pod kterou U VÁS jede Apache2/:
chgrp wwwdata webdav
Rozšíření práv příkazem chmod:
chmod 775 webdav
7. Konfigurujeme soubor apache2 poprvé.
Otevřeme soubor apache2:
kwrite /etc/sysconfig/apache2
V souboru najdeme položku "APACHE_MODULES" a přidáme k ní tyto údaje:
APACHE_MODULES="dav dav_fs"
V položce již budou nějaké moduly, nové moduly tedy vložíme na konec řetězce v uvozovkách.
8. Vytvoříme nový soubor „mod_dav.conf“.
Vytvoříme nový soubor "mod_dav.conf" takto:
kwrite /etc/apache2/mod_dav.conf
A do souboru vložíme tento obsah:
1. možnost (basic authentication):
<IfModule mod_dav_fs.c>
DAVLockDB /var/lib/apache2/dav/lockdb
</IfModule>
<IfModule mod_dav.c>
LimitXMLRequestBody 131072
Alias /webdav "/home/www/webdav"
<Directory /home/www/webdav>
DAV On
Options +Indexes
IndexOptions FancyIndexing
AddDefaultCharset UTF-8
AuthType Basic
AuthName "WebDAV Server"
AuthUserFile /etc/apache2/dav_users.db
<LimitExcept GET OPTIONS>
Require valid-user
</LimitExcept>
Order allow,deny
Allow from all
</Directory>
</IfModule>
2. možnost (digest authentication):
<IfModule mod_dav_fs.c>
DAVLockDB /var/lib/apache2/dav/lockdb
</IfModule>
<IfModule mod_dav.c>
LimitXMLRequestBody 131072
Alias /webdav "/home/www/webdav"
<Directory /home/www/webdav>
DAV On
Options +Indexes
IndexOptions FancyIndexing
AddDefaultCharset UTF-8
AuthType Digest
AuthName "webdav"
AuthUserFile /etc/apache2/users.password
<LimitExcept GET OPTIONS>
Require valid-user
</LimitExcept>
Order allow,deny
Allow from all
</Directory>
</IfModule>
Důkladně si projděte výše uvedené nastavení a aktualizujte si cesty. Tady je možná celkem zbytečně uvedeno pár řádku s "auth", protože to budeme řešit jinde (tag DIRECTORY níže) a v podstatě částečně duplicitně. Další možnost je uvést všechno zde. Uvidíte dál.
9. Editujeme soubor /etc/apache2/httpd.conf.local.
kwrite /etc/apache2/httpd.conf.local
a vložíme tento řádek:
Include /etc/apache2/mod_dav.conf
10. Konfigurujeme soubor apache2 podruhé.
kwrite /etc/sysconfig/apache2
Respektive zkontrolujeme, jestli tam je záznam:
APACHE_CONF_INCLUDE_FILES="/etc/apache2/httpd.conf.local"
11. Restart Apache2.
Apache je v podstatě v základu nastavený, takže restartujeme.
Ale nejprve u možnosti č. 2 (digest authentication) vložíme tento příkaz, kterým trvale aktivujeme ověřování digest:
a2enmod auth_digest
A potom restart:
service apache2 restart
12. Otestujeme na serveru (lokálu) v prohlížeči.
Můžeme otestovat přístup na složku v prohlížeči:
http://localhost/webdav/
nebo:
http://127.0.0.1/webdav/
Uvidíme, že adresář je přístupný, můžeme do něj nakopírovat nějaký soubor. Nebojte, do konce návodu zajistíme zabezpečení tohoto přístupu.
13. Otestujeme důkladněji.
Na lokálu v Linuxu spustíme souborový manažer, třeba Dolphin a zadáme (IP adresy si vyměňte za reálné):
webdav://localhost/webdav/
webdav://192.168.1.1/webdav/
webdav://80.90.190.100/webdav/
webdav://jmenodomeny.cz/webdav/
Pokud chceme mít webdav pod doménou tak postupujeme, jak jsem uvedl výše, tj. složku webdav nedáme na úroveň webu, ale pod něj. Pokud chceme mít doménu 3. řádu např. webdav.nazevdomeny.cz, nakopírujeme na úroveň ostatních webů a nastavíme v konfiguraci Apache2. Toto však není součástí tohoto manuálu, to bych se z toho potentoval :-).
Při přístupu přes Dolphin si WebDav bude žádat vaše údaje, uživatelské jméno a heslo, které jsme zadali nahoře.
Můžeme testnout i SSL šifrování, ale nebude fungovat (v Linuxu z tohoto zápisu kolabuje Dolphin, tak pozor na to):
webdavs://80.90.190.100/webdav/
webdavs://jmenodomeny.cz/webdav/
14. Otestujeme se na jiné stanici.
Zadáme do prohlížeče např. na Windows stanici:
192.168.1.1/webdav
80.90.190.100/webdav
Zobrazí se soubory bez vyžádání hesla, což není zrovna bezpečné. V první fázi mě napadlo ošetřit tím, že do složek na serveru nakopíruji soubory index.php, index.html, index.htm, které se vyvolají automaticky a znemožní prohlídku adresáře (pokud není povolené zabezpečení Apache2 na prohlídku adresářů). Dále si však přístup do adresáře zabezpečíme jinak.
15. Ve Windows stanici si nakonfigurujeme službu Webový klient, aby se spouštěla automaticky.
Bohužel bez trvalé aktivního Webového klienta to ve Windows nebude fungovat. Takže šup do služeb na Windows a úplně dole je Webový klient (Web Client), nastavit automatické spouštění po startu a spustit.
Pokud se rozhodneme vyzkoušet připojení složky s testovacím souborem v Průzkumníkovi (testováno ve Windows 7, Windows 8), tak to činíme pravým tlačítkem myši nad ikonou Síť (vpravo dole) a dáváme Připojit síťovou jednotku... Zvolíme písmeno jednotky např. Y: a zadáme složku takto:
http://www.nazevwebu.cz/webdav
nebo
http://ip_adresa/webdav
A zaškrtneme "Znovu připojit při přihlášení" a "Připojit pomocí jiných pověření".
Napoprvé to ve Windows nefunguje (u basic authentization), protože Gates je ..., dosaďte si sami. Prostě rozhoduje za nás uživatele, co je pro nás dobré a co není.
Takže musíte jít do Regeditu (run - Regedit) a najít tento záznam:
HKLMSYSTEM-CurrentControlSet-Services-WebClient-Parameters
Zde upravit Change BasicAuthLevel z jedničky na dvojku.
Bill to s námi myslí v Regeditu takto:
0 - Základní ověřování vypnuto.
1 - Základní ověřování zapnuto pouze pro SSL šifrování (to bylo naše defaultní nastavení od toho chytráka).
2 nebo vyšší: Základní ověřování zapnuto pro SSL šifrování a pro nešifrovaná spojení. (a pro digest)
Restartovat službu Web Client, nastavení by se mělo projevit, jinak restartovat počítač, pokud se neprojeví.
Znovu připojíme WebDav složku. Tentokrát Velkému Billovi virtuální kaťata povolí a složka bude po zadání přihlašovacích údajů (stačí pouze uživatelské jméno a heslo bez domény a bez skupiny) připojena.
A funguje.
Bez Billova reptání by se složka připojila jedině tehdy, pokud bude povoleno šifrování SSL. K tomu si řekneme postup v dalších bodech, ovšem... není zaručen úspěch u nekomerčních certifikátů.
16. Šifrování SSL
Ohledně šifrování SSL se to má tak... Kdybych mohl hodně vulgárně nadávat, tak bych to udělal, ale chci článek udržet ve slušné rovině. Zatímco výše uvedených 15 bodů jsem zvládl za hodinu a půl práce, tak s certifikáty jsem se bavil prakticky celý zbytek dne. Je to humus, bordel, katastrofa.
Nejprve si řekneme základní informaci. SSL certifikát si může vygenerovat úplně každý. Nic na tom není. Máte privátní a veřejný šifrovací klíč. Veřejný šifrovací klíč si buďto stáhne nebo mu to přinesete třeba na flashce dané cílové zařízení, např. počítače s Windowsem, který se bude chtít dostat na šifrovanou webstranu nebo soubor prostřednictvím WebDav.
Zatímco princip tohoto asymetrického šifrování je poměrně prostý, realita je celkem humusácká.
Pokud si vytvořite vlastní klíč SSL, tak se tento klíč bere jako "nedůvěryhodný", "špatný", "amorální". Některé webové prohlížeče zcela odmítají takový klíč přijímat (Chrome alias Chrobák, Firefox ve špatných dnech alias Fixlák) a jiné prohlížeče jen frflají a nutí vás potvrdit, že opravdu, ale opravdu chcete šifrovat tímto klíčem.
A vidíte. Zrovna dneska mi Firefox začal vehementně odmítat SSL certifikáty mnou vyrobené, pak jsem si přečetl, že je to bug a dá se spravit výmazem certifikátu s názvem, který jsem nikdy nezadával. Jak jsem říkal, je to humus. Nazývejme to pravými jmény.
https://bugzilla.mozilla.org/show_bug.cgi?id=1037080
Ale zpět k našemu WebDavu, který bychom chtěli šifrovat SSL.
Řeknu vám to na rovinu a upřímně. Pokud si koupíte certifikát SSL, tak vám to bude fungovat jako z praku. Pokud si vyrobíte vlastní certifikát, tak vám to fungovat nejspíš (na Windowsech) nebude a pokud si necháte certifikát zdarma vygenerovat (https://startssl.com/,https://www.cacert.org), tak vám to může a nemusí fungovat, ale spíš to fungovat nebude. Vyzkoušel jsem všechny možnosti kromě placeného certifikátu, protože za takovou virtuální hovadinu, jakože abych si mohl šifrovaně kopírovat soubory, dávat prachy nebudu. Alespoň zatím, dokud mi nehrábne :-).
Můžete vyzkoušet vygenerovat certifikát na www.cacert.org. Uvádí se to v oficiálním wiki manuálu pro OpenSuse, nicméně je tam návod neúplný, protože se nezmiňují o vygenerování certifikačního requestu nebo-li žádosti. Práce s www.cacert.org je extrémně otravná a zdlouhavá. Musíte se zaregistrovat, musíte ověřit doménu, pro kterou chcete certifikát a nakonec musíte certifikát vygenerovat přes tzv. CSR - certifikační žádost. Tady je postup:
16.1. Nejprve vytvořit certifikační request pro CACert, který dělá certifikáty zdarma...
CSR = Certificate Signing Request.
Vygenerujte šifrovaný server.key (privátní klíč):
openssl genrsa -des3 -out server.key 1024
Frázi zadejte, kterou si budete pamatovat.
Výsledkem je soubor „server.key“.
16.2. Vytvořte i jeden nezabezpečený klíč, který obsahuje klíčovou frázi:
Údajně je lepší používat pro generování requestu a certifikátu (na tyto účely) klíč bez šifrování:
openssl rsa -in server.key -out server.key.unsecure
Po vygenerování souborů secure a nesecure, je potřeba, aby se vygeneroval certifikační požadavek tímto příkazem:
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
nebo
openssl req -new -newkey rsa:2048 -nodes -keyout server.key.unsecure -out server.csr
Na správné místo při definici certifikátu uveďte doménu nazevdomeny.cz, protože je to údaj, který je potřeba pro vygenerování certifikátu. Bohužel nevím, co vám poradit, pokud by se jednalo o certifikát pro non-doménovou IP adresu.
Na Cacertu ověřte danou doménu přes přijatý mail. Důkladně si čtěte maily, které vám přijdou, protože obsahují další pokyny.
17. Implementace certifikátů SSL do Apache2
Tady záleží, jestli máte aktivovaný "virtuální hosting" a nebo ne. Virtuální hosting znamená, že používáte SSL certifikát pro každý web na vašem webovém serveru. Většina návodů totiž uvádí návod na instalaci certifikátu globálně pro celý webový server. Z tohoto důvodu nebudu zabíhat do podrobností, instalace není složitá a návodů na oba způsoby najdete na netu mrtě. Obecně se jedná o nastavení souboru httpd.conf.local a nakopírování certifikátů do složky ssl v adresáři Apache2. V souboru httpd.conf.local certifikáty připárujete k jednotlivým webům a restartujete Apache. To je princip.
V konečném důsledku se mi nepodařilo zprovoznit SSL šifrování z Windows na Linux WebDav prostřednictvím Průzkumníka. Webové prohlížení s certifikátem šifrovaně funguje, ale Bill Gates certifikát odmítá, ať už je vytvořený mnou nebo cacertem a nebo startssl.comem. Vyzkoušel jsem snad úplně všechno, takže pokud nenajdete stoprocentní návod, jak Velkého Billa přechytračit, tak řešení nejspíš nenajdete. A pokud najdete, napište do diskuse.
Stručně řečeno, komerční certifikáty fungují, ale nekomerční ne, i když fungují pro prohlížení webů. Věru nevím, čím si u Velkého Billa vysloužila práce se soubory vyšší dohled než práce s weby.
Obecně by mělo fungovat přidání certifikátu mezi "kořenové certifikáty" + instalace certifikátů z cacertu, které by se měly nahrát do "autorit". Testoval jsem to, a nic. Windows hrdinně odmítá používat certifikát k šifrování komunikace v Průzkumníku, i když v Internet Exploreru statečně šifruje a neblinká nesmysly.
18. Ověření uživatelského jména a hesla v prohlížeči
Je třeba ošetřit, aby na daném adresáři vyskakovala na prohlížeči ověřovací tabulka, protože prozatím se v prohlížeči zobrazují soubory bez nutnosti zadat přístupové údaje:
vložíme do souboru /etc/apache2/httpd.conf.local
a restartujeme apache:
1. možnost (basic authentication)
<Directory /home/www/nazev_webu/webdav/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AuthType Basic
AuthName "Restricted to employee only"
AuthUserFile /etc/apache2/dav_users.db
Require valid-user
Require user visitor
</Directory>
2. možnost (digest authentication)
<Directory /home/www/nazev_webu/webdav/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AuthType Digest
AuthName "webdav"
AuthUserFile /etc/apache2/users.password
Require valid-user
Require user visitor
</Directory>
Další možností jednoduchého zabezpečení je index.php, index.html, index.htm v dané lokaci, který znemožní prohlédnutí souborů v daném adresáři přes web bez autentizace.
Webdav – tipy
Jak zrychlit Webdav ve Windows 7, kde je standardně brutálně pomalý?Ovládací panely – Možnosti Internetu – Záložka Připojení – Nastavení místní sítě – Vypnout AUTOMATICKY ZJIŠŤOVAT NASTAVENÍ. Tímto se zrychlí Webdav asi o 1000 procent.
Jak zvýšit šanci příjmu certifikátu, aby Windows nedělaly tanečky?Spusťte Internet Explorer jako správce.
Následujících pár bodů píšu z hlavy, takže metaforicky:-):
- Vložte WebDAV URL
- Klikněte "Pokračovat na web..."
- Klikněte na Chyba certifikátu v adresní řádce s URL
- Klikněte na "Prohlédnut certifikáty"
- V okně s certifikátem klikněte na "Instalovat certifikát"
- V Průvodci klikněte na "Další"
- Na druhé záložce klikněte na procházet úložiště certifikátů
- Vyberte Důvěryhodné kořenové certifikáty a potvrďte vložení certifikátu.
Nicméně, stejně mi to nepomohlo. Vlastní šifrovací certifikát (veřejný klíč) nebyl přijat.
Kompatibilita
Přístup na Webdav funguje u těchto systémů:
Basic authenticationWindows 7, Windows 8 a pravděpodobně i vyšší verze Windows. Je třeba změnit hodnotu v registru.
Linux bez problémů.
Digest authenticationWindows 8 a pravděpodobně vyšší verze Windows. Není potřeba měnit registry.
Linux bez problémů.
SSLNemám ověřeno, protože jsem nerozchodil nekomerční certifikát.
A jaký je závěr?
Závěrem tedy budete mít rozchozený WebDav buďto na basic authentication nebo na digest authentication. Buďto s SSL nebo bez SSL. Záleží na tom, zda se vám podařilo projít přes část instalace SSL. Přiznám se, že mně se to nepodařilo a SSL v tuto chvíli nemám rozchozený pro přístup k souborům v Průzkumníkovi/Dolphinovi, ale naopak mám rozchozený SSL pro přístup přes webový prohlížeč, protože tam nedělají vývojáři takové drahoty.
Z celkem vtipných zážitků bych chtěl vypíchnout to, že když jsem zkoušel zadat do Dolphina "webdavs" a náležitou cestu, vždy toto vedlo ke kolapsu nejen Dolphina, ale celého Linuxu, respektive ke smrti k uswapování. Velmi obtížně jsem ten proces likvidoval, protože z nějakého důvodu Dolphin brutálně vytížil disk neustálým zápisem.
Další vtipný zážitek je ten, že když jsem nahrál certifikáty ze startssl.com do Apache2, tak narozdíl od jiných certifikátů, dokázaly tyto sračky vyvolat kolaps Apache2. Po výmazu certifikátů ze startssl.com opět vše fungovalo. Po dalších příčinách jsem nepátral, to by se 15 hodin mohlo snadno natáhnout třeba na třicet. A to už je opravdu moc, potřebuji taky žít. :-)
Snad vám návod pomohl a pokud ano, projevte zájem na reklamu nebo služby nebo o náš web a zaregistrujte se třeba nebo
nás nějak podpořte. A my pro vás budeme pracovat dál co nejlépe.
Zdroj:
https://en.opensuse.org/SDB:Using_webdav
https://www.suse.com/communities/blog/how-webdav-over-ssl-using-ldap-authentication-apache-web-server/
https://www.novell.com/communities/coolsolutions/apache-web-server-i/
http://superuser.com/questions/254113/how-to-connect-to-an-https-webdav-folder-on-windows-7
https://social.technet.microsoft.com/Forums/windows/en-US/97c16139-1851-4623-80e4-5fe37d7a984b/windows-7-authenticated-webdav-over-https?forum=w7itpronetworking
http://blog.liangzan.net/blog/2014/09/04/how-to-configure-webdav-using-apache-on-ubuntu/
On -line certifikáty zdarma
https://startssl.com/
https://www.cacert.org