Po dlouhe dobe jsem se opet vratil k tematu WebDAV disku pro uzivatele. WebDAV ma totiz velkou vyhodu – jeho klient je a to v sifrovane verzi (https) dostupny ve vetsine verzi Windows. Pouzitelny od XP a vyse.
Jak presne nastavit Windows, aby se dokazaly pripojit k WebDAV popisu nekdy jindy. Neni to totiz vubec snadne. Dnes ukazu jednochuchy funkcni config nginx v Debianu 8.
Instalace a nastaveni
Nejdriv nainstalujeme nginx a to balicek extras:
1 |
apt-get install nginx nginx-extras |
pote vytvorime soubor s nastavenim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# cat /etc/nginx/sites-available/webdav server { listen 80; # always use SSL location / { if ($request_method = POST) { # use temporary to allow for POST to go through # 301 will only work for GET/HEAD/OPTIONS return 307 https://$host$request_uri; } return 301 https://$host$request_uri; } } server { listen 443; client_max_body_size 0; ssl on; ssl_session_timeout 5m; ssl_certificate /etc/letsencrypt/live/server.example.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/server.example.net/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; root /mnt/data/webdav; index index.html index.htm; location / { root /mnt/data/webdav/$remote_user; client_body_temp_path /mnt/data/webdav/temp; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; create_full_put_path on; dav_access user:rw group:rw all:rw; autoindex on; auth_basic "restricted"; auth_basic_user_file /etc/nginx/htpasswd; } } |
Server posloucha nesifrovane na portu 80 a vsechny pozadavky presmeruje na sifrovanou verzi.
WebDAV pouzivame pouze pres sifrovane https spojeni. Na zacatku je definice SSL a aktualne bezpecnych algoritmu. Pote nasleduje document root.
Nejdulezitejsi je direktiva location. Pod / zamkneme uzivatele dle jeho uzivatelskeho jmena ($remote_user) do adresare stejneho jmena. Config je dost samovysvetlujici.
Dulezite je vytvorit soubor s uzivatelskymi jmeny a hesly. Ja jsem pro par uzivatelu pouzil obycejny htpasswd znamy z Apache. Bylo by uzitecne vyresit integraci na PAM, pripadne tahat uzivatele z SQL.
Nginx pouziva stejny format souboru htpasswd, jako Apache. Nema vsak nastroj na jeho vytvoreni. Takze mame nekolik moznosti. Generovani online webovymi nastroji je nepohodlne a neni bezpecne posilat nekomu neznamemu heslo. Druhou moznosti je nainstalovat balicek s apache nastroji – ale to zni, jako urazka nginx 😉
Ja pouzivam ke generovani htpasswd zaznamu nasledujici prikaz, vystaci si s OpenSSL:
1 2 |
printf "JMENO:$(openssl passwd -crypt HESLO)\n" >> /etc/nginx/htpasswd printf "pokus:$(openssl passwd -crypt heslo123)\n" >> /etc/nginx/htpasswd |
pote staci vytvorit adresare pouzite v configu, nastavit prava a restartovat nginx:
1 2 3 4 |
mkdir -p /mnt/data/webdav mkdir -p /mnt/data/webdav/temp chown -R www-data:www-data /mnt/data/webdav/ /etc/init.d/nginx restart |
Diskove kvoty
Vse je jednoduche az na diskove kvoty. U klasickych protokolu pro pristup k linuxovemu filesystemu jde bez problemu pouzit kvoty na ext4 filesystemu. Nging+WebDAV ale tyto kvoty ignoruje (mozna s PAM uzivateli by sly, nevim).
Stackoverflow je plny reseni problemu s kvotami – prakticky nevyreseno.
Nejcasteji se doporucuje pomoci dd udelat image s ext4 a ten primountovat nekam do filesystemu a nasledne pouzit pro WebDAV uzivatele prave tento mountpoint. Cele je to sice funkcni, ale hodne neefektivni. Dochazi k obrimu plytvani mistem na disku kvuli zbytecne velkym alokovanym obrazum.