User Tools

Site Tools


doc:appunti:linux:sa:webdav

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:webdav [2018/11/09 12:07] – [Installazione e configurazione di WebDAV CGI] niccolodoc:appunti:linux:sa:webdav [2020/03/02 12:05] (current) – [Accesso da Windows 7 e successivi] niccolo
Line 16: Line 16:
 <Location "/Documenti"> <Location "/Documenti">
     DAV On     DAV On
 +    DirectorySlash Off
     AuthType Basic     AuthType Basic
     AuthName "WebDAV"     AuthName "WebDAV"
Line 31: Line 32:
 <Location "/Amministrazione"> <Location "/Amministrazione">
     DAV On     DAV On
 +    DirectorySlash Off
     AuthType Digest     AuthType Digest
     BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On     BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
Line 41: Line 43:
 </Location> </Location>
 </file> </file>
 +
 +Se possibile bisogna proteggere i file almeno a livello di gruppo, in questo modo:
 +
 +  - La directory condivisa **appartiene al gruppo** che ha facoltà di scrittura.
 +  - La directory ha lo **sticky bit di gruppo attivo** (mode 0x2770), così che gli oggetti creati in essa appartengono al gruppo stesso.
 +  - Gli utenti che si autenticano via WebDAV (su **/etc/apache2/htpasswd** oppure **/etc/apache2/htdigest**) sono elencati nel gruppo opportuno in **/etc/apache2/htgroup**, replicando le appartenenze di **/etc/group**.
 +  - L'utente **www-data** appartiene al gruppo, così Apache ha permesso di scrittura nella directory.
 +  - Apache ha una **umask 007** (si può mettere in ''/etc/apache2/envvars''), così che gli oggetti creati nella condivisione WebDAV non siano world-readable.
 +
 +Per verificare il funzionamento della condivisione WebDAV si può utilizzare **davfs** da riga di comando GNU/Linux. Installare il pacchetto Debian **davfs2** ed eseguire il comando:
 +
 +<code>
 +mount -t davfs -o noexec https://davserver.rigacci.org/Documenti /mnt
 +</code>
 +
 +Login e password vengono chieste interattivamente.
 ====== WebDAV CGI 0.8.3 ====== ====== WebDAV CGI 0.8.3 ======
  
Line 244: Line 262:
 mv webdavcgi-master webdavcgi mv webdavcgi-master webdavcgi
 chown -R root.root webdavcgi chown -R root.root webdavcgi
 +cd webdavcgi
 bash install.sh bash install.sh
 </code> </code>
  
-La procedura **install.sh** in realtà controlla i permessi dei file e compila i wrapper i cui sorgenti sono in **./helper/**. Gli eseguibili compilati vengono copiati in **./cgi-bin/** con gli opportuni permessi **suid root**.+La procedura **install.sh** controlla la presenza delle librerie necessarie e opzionali: **controllare attentamente l'output** e verificare se sono installati tutti i requisiti. Inoltre la procedura sistema i permessi dei file e compila i wrapper i cui sorgenti sono in **./helper/**. Gli eseguibili compilati vengono copiati in **./cgi-bin/** con gli opportuni permessi **suid root**.
  
 Il wrapper più importante è **./cgi-bin/webdavwrapper**; questo si incarica di **cambiare utente** con le credenziali dell'autenticazione HTTP, in modo tale che l'accesso ai file viene fatto **non dall'utente www-data**, ma con i permessi effettivi dell'utente remoto. Il wrapper più importante è **./cgi-bin/webdavwrapper**; questo si incarica di **cambiare utente** con le credenziali dell'autenticazione HTTP, in modo tale che l'accesso ai file viene fatto **non dall'utente www-data**, ma con i permessi effettivi dell'utente remoto.
 +
 +Al termine dell'installazione si sposta la directory nella sua posizione definitiva **/usr/local/share/webdavcgi/**:
 +
 +<code>
 +cd ..
 +mv webdavcgi /usr/local/share/
 +</code>
 +
 +La configurazione va fatta in **/etc/webdav.conf** invece di modificare il file Perl. Ecco un esempio:
 +
 +<code perl>
 +## the install base is needed to find webdav-ui.* and locale files 
 +## (don't forget the trailing slash):
 +$INSTALL_BASE = '/usr/local/share/webdavcgi/';
 +
 +## the backend module (supported: FS, AFS, GFS, SMB, DBB, RCS, GIT):
 +$BACKEND = 'FS';
 +
 +## this is an example if a user starts with home dir (http://mywebdavserver/ -> user home):
 +$VIRTUAL_BASE = '/';
 +$DOCUMENT_ROOT = '/home/'.$ENV{REMOTE_USER}.'/';
 +## if you use a complex home folder structure, try this:
 +# $DOCUMENT_ROOT=(getpwnam($ENV{REMOTE_USER}))[7].'/';
 +
 +$DBI_SRC='dbi:SQLite:dbname=/var/lib/webdavcgi/webdav.'.$ENV{REMOTE_USER}.'.db';
 +$DBI_USER='';
 +$DBI_PASS=''; 
 +$CREATE_DB = !-e '/var/lib/webdavcgi/webdav.'.$ENV{REMOTE_USER}.'.db';
 +</code>
 +
 +I database SQLite3 di supporto verranno creati in **/var/lib/webdavcgi/**. La directory deve essere creata e deve essere scrivibile da tutti gli utenti che faranno accesso al WebDAV:
 +
 +<code>
 +mkdir /var/lib/webdavcgi/
 +chmo 1777 /var/lib/webdavcgi/
 +</code>
 +
 +**ATTENZIONE** Con la configurazione mostrata sopra per ogni **REMOTE_USER** che accede, viene creato un database SQLite3 diverso. Se tuttavia si vuole accedere contemporaneamente agli stessi file con utenti diversi, bisogna che il database sia unico e scrivibile da tutti, altrimenti il meccanismo di lock non funziona.
 +
 +====== Accesso da Windows 7 e successivi ======
 +
 +Windows ha un client nativo per WebDAV, ma è risaputo che soffra di numerose limitazioni e difetti, inoltre il comportamento di tale client non è consistente nelle varie versioni di Windows. Esistono numerose ricette di compatibilità che prevedono l'inserimento di chiavi particolari nel **registry**, a seconda della **versione di Windows** in uso, ma in generale non funzionano.
 +
 +Una lettura interessante è **[[https://doc.owncloud.org/server/9.0/user_manual/files/access_webdav.html#accessing-files-using-microsoft-windows|Accessing Files Using Microsoft Windows]]** pubblicata su sito di //Owncloud// e **[[https://support.microsoft.com/en-gb/help/2673544/windows-7-cannot-automatically-reconnect-a-dav-share-when-basic-authen|Windows 7 cannot automatically reconnect a DAV share when Basic Authentication is used]]** pubblicata su //Microsoft Support//.
 +
 +L'accesso ad una risorsa WebDAV andrebbe fatta da **Computer** => **Connetti unità di rete**. Si specifica la lettera del disco (ad esempio **Z:**), si lascia in bianco il percorso **Cartella**, si attiva la spunta **Riconnetti all'avvio** e **Connetti con credenziali diverse**. Cliccando su **Connessione a un sito Web per l'archiviazione di documenti e immagini** viene chiesto il percorso di rete e appunto le credenziali.
 +
 +Il percorso di rete è qualcosa del genere: **%%https://dav.server.org:443/MYSHARE%%** (si usa https altrimenti l'autenticazione Basic farebbe transitare la password in chiaro),
 +
 +L'accesso fallisce, come si vede dai log di Apache l'errore è **401 Unauthorized**, in effetti l'autenticazione non è mai avvenuta:
 +
 +<code>
 +"OPTIONS /MYSHARE HTTP/1.1" 401 3519 "-" "Microsoft-WebDAV-MiniRedir/6.1.7601"
 +"OPTIONS /MYSHARE HTTP/1.1" 401 3519 "-" "Microsoft-WebDAV-MiniRedir/6.1.7601"
 +"OPTIONS / HTTP/1.1" 200 2970 "-" "Microsoft-WebDAV-MiniRedir/6.1.7601"
 +"PROPFIND / HTTP/1.1" 405 650 "-" "Microsoft-WebDAV-MiniRedir/6.1.7601"
 +</code>
 +
 +Le soluzioni che prevedono di modificare o aggiungere chiavi nel nodo **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\** del registry non hanno funzionato. Né l'aggiunta della chiave **UseBasicAuth** impostata a 1, né la modifica di **BasicAuthLevel** da 1 a 2 ha avuto esito.
 +
 +Da quanto scritto nella knowledge base Microsoft sembra che il problema sia l'**incompatibilità del Credential Manager** (a partire da Windows 7) con la **Basic Authentication**, in particolare con la memorizzazione delle password.
 +
 +La soluzione è **connettere l'unità di rete dal prompt dei comandi** ad ogni avvio di Windows, **digitando la password** tutte le volte.
 +
 +Un'altra difficoltà è dovuta al fatto che Windows 7 **non accetta certificati autofirmati** per HTTPS, è necessario installare sul server web un certificato HTTPS firmato da una C.A. riconosciuta.
 +
 +Ecco la riga di comando necessaria a connettere il disco di rete Z: (il comando non necessita dei permessi di amministratore, ma richiede l'inserimento della password):
 +
 +<code>
 +net use Z: https://dav.server.org:443/MYSHARE /persistent:no /user:myuser
 +</code>
 +
 +Per disconnettere il disco è sufficiente:
 +
 +<code>
 +net use Z: /delete
 +</code>
 +
 +Il messaggio di errore di Windows nel caso in cui il server abbia un certificato auto-firmato è del tutto incomprensibile:
 +
 +<code>
 +Errore di sistema 1790.
 +Accesso alla rete non riuscito.
 +</code>
 +
 +Al primo errore di autenticazione Windows entra in stato confusionale e non proverà più a connettersi. Un secondo tentativo infatti produce un messaggio di errore diverso, ancora più incomprensibile:
 +
 +<code>
 +Errore di sistema 59.
 +Errore di rete imprevisto.
 +</code>
 +
 +Per forzare Windows a tentare nuovamente la connessione è necessario riavviare il servizio WebClient, usando i permessi di Administrator:
 +
 +<code>
 +net stop WebClient
 +net start WebClient
 +</code>
doc/appunti/linux/sa/webdav.1541761653.txt.gz · Last modified: 2018/11/09 12:07 by niccolo