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:
apt-get install nginx nginx-extras
pote vytvorime soubor s nastavenim:
# 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:
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:
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.
