Nginx – WebDAV uzivatelske adresare

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.

2016-10-30-235623_1366x768_scrot

 

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *