Questa guida spiega come impostare WebDAV con autenticazione di MySQL (utilizzando mod_auth_mysql) Apache2 su un server Debian Lenny. WebDAV è sinonimo di Web-based Distributed Authoring and Versioning ed è un insieme di estensioni del protocollo HTTP che consentono agli utenti di modificare direttamente i file sul server Apache in modo che non devono essere scaricati/caricati tramite FTP.Naturalmente, WebDAV può essere utilizzato anche per caricare e scaricare file.
Io non rilasciano alcuna garanzia che questo funziona per voi!
1 Nota preliminare
Sto usando un server Debian Lenny con il nome host Server1 e IP indirizzo 192.168.0.100 qui.
2 installazione di Apache2, WebDAV, MySQL, mod_auth_mysql
Per installare Apache2, WebDAV, MySQL e mod_auth_mysql, gestiamo:
aptitude install apache2 mysql-server mysql-client libapache2-mod-auth-mysql
Verrà chiesto di fornire una password per l’utente root di MySQL – questa password è valida per l’utente root@localhost così come root@server1.example.com, così non dobbiamo specificare una password di root di MySQL manualmente più avanti:
Nuova password per l’utente “root” di MySQL: <-yourrootsqlpassword
Ripeti password per l’utente “root” di MySQL: <-yourrootsqlpassword
In seguito, attivare i moduli WebDAV e mod_auth_mysql:
a2enmod dav_fs
a2enmod dav
a2enmod auth_mysql
Riavviare Apache:
/etc/init.d/apache2 restart
3 creazione di un Host virtuale
Ora creo un vhost Apache predefinito nella directory /var/www/web1/web. Per questo scopo, modificherà la configurazione predefinita Apache vhost /etc/apache2/sites-available/default. Se hai già un vhost per il quale si desidera abilitare WebDAV, è necessario regolare questo tutorial alla vostra situazione.
In primo luogo, creiamo la directory /var/www/web1/web e rendere l’utente Apache (www-data) il proprietario della directory:
mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web
Quindi abbiamo backup della configurazione di default Apache vhost (/etc/apache2/sites-available/default) e creare la nostra propria uno:
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/default
NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ <Directory /var/www/web1/web/> Options Indexes MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost> |
Quindi ricaricare Apache:
/etc/init.d/apache2 reload
4 configurare l’Host virtuale per WebDAV
Si può trovare la documentazione per mod_auth_mysql nella directory /usr/share/doc/libapache2-mod-auth-mysql . Per leggerlo, devi gunzip i file DIRECTIVES.gz e USAGE.gz :
cd /usr/share/doc/libapache2-mod-auth-mysql
gunzip DIRECTIVES.gz
vi DIRECTIVES
gunzip USAGE.gz
vi USAGE
Dopo aver letto questi due file, creiamo un database MySQL chiamato webdav in cui creeremo la tabella mysql_auth che conterrà i nostri utenti e password. In aggiunta a ciò, creiamo l’ utente MySQL webdav_admin – questo utente verrà utilizzato da mod_auth_mysql per connettersi a MySQL più tardi:
mysqladmin -u root -p create webdav
mysql -u root -p
GRANT SELECT, INSERT, UPDATE, DELETE ON webdav.* TO 'webdav_admin'@'localhost' IDENTIFIED BY 'webdav_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON webdav.* TO 'webdav_admin'@'localhost.localdomain' IDENTIFIED BY 'webdav_admin_password';
FLUSH PRIVILEGES;
(Sostituire webdav_admin_password con una password di vostra scelta).
USE webdav;
create table mysql_auth (
username char(25) not null,
passwd char(32),
groups char(25),
primary key (username)
);
(Naturalmente, è anche possibile utilizzare tabelle esistenti che tiene le credenziali dell’utente, e si possono anche avere ulteriori campi nella tabella, ad esempio un campo che definisce se un utente è attivo o non, per esempio).
Ora inseriamo l’utente di prova nel nostro tavolo mysql_auth con la password di prova (MD5 crittografato); questo utente appartiene al gruppo testgroup:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', MD5('test'), 'testgroup');
Più tardi, è possibile utilizzare l’ URL http://192.168.0.100/webdav per connettersi a WebDAV. Se si esegue questa operazione su un client Windows XP e digitare il nome utente di prova, Windows questo si traduce in 192.168.0.100\test. Quindi creiamo un secondo account utente ora:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('192.168.0.100\\test', MD5('test'), 'testgroup');
(Sarà necessario utilizzare una seconda barra rovesciata di qui il nome utente per sfuggire quella prima!)
Non devi farlo se è specificare la porta nell’URL di WebDAV, ad esempio http://192.168.0.100: 80/webdav – in questo caso Windows semplicemente guardare per l’utente di prova, non 192.168.0.100\test.
Quindi lasciamo la shell di MySQL:
quit;
Ora modificare il nostro vhost in /etc/apache2/sites-available/default e aggiungere le seguenti righe:
vi /etc/apache2/sites-available/default
[...] Alias /webdav /var/www/web1/web <Location /webdav> DAV On AuthBasicAuthoritative Off AuthUserFile /dev/null AuthMySQL On AuthName "webdav" AuthType Basic Auth_MySQL_Host localhost Auth_MySQL_User webdav_admin Auth_MySQL_Password webdav_admin_password AuthMySQL_DB webdav AuthMySQL_Password_Table mysql_auth Auth_MySQL_Username_Field username Auth_MySQL_Password_Field passwd Auth_MySQL_Empty_Passwords Off Auth_MySQL_Encryption_Types PHP_MD5 Auth_MySQL_Authoritative On require valid-user </Location> [...] |
La direttiva Alias rende (insieme a < posizione >) che quando si chiama /webdav, WebDAV viene richiamato, ma è comunque possibile accedere la radice di tutto il documento del vhost. Tutti gli altri URL di quel vhost sono ancora “normale” HTTP.
Il AuthBasicAuthoritative Off e AuthUserFile/dev/null è quello di evitare che ottenete errori come questi quelli nel tuo log degli errori di Apache (/var/log/apache2/error.log):
[Wed Jun 11 17:02:45 2008] [error] Internal error: pcfg_openfile() called with NULL filename
[Wed Jun 11 17:02:45 2008] [error] [client 127.0.0.1] (9)Bad file descriptor: Could not open password file: (null)
Se si dispone di ulteriori campi nella tabella MySQL che definiscono se un utente è consentito l’accesso o non (ad esempio, un campo chiamato attivo), è possibile aggiungere la direttiva Auth_MySQL_Password_Clause , ad esempio:
[...] Auth_MySQL_Password_Clause " AND active=1" [...] |
(È importante che la stringa tra virgolette inizia con uno spazio!)
La direttiva richiede utente valido prevede che ogni utente elencato nella tabella mysql_auth può fare il login come lui/lei fornisce la password corretta. Se si desidera solo a determinati utenti di essere consentito l’accesso, utilizzare qualcosa di simile
[...] require user jane joe [...] |
invece. E se si desidera solo membri di determinati gruppi di essere consentito l’accesso, si utilizzerà qualcosa come questo:
[...] require group testgroup [...] |
Il vhost finale dovrebbe assomigliare a questo:
NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ <Directory /var/www/web1/web/> Options Indexes MultiViews AllowOverride None Order allow,deny allow from all </Directory> Alias /webdav /var/www/web1/web <Location /webdav> DAV On AuthBasicAuthoritative Off AuthUserFile /dev/null AuthMySQL On AuthName "webdav" AuthType Basic Auth_MySQL_Host localhost Auth_MySQL_User webdav_admin Auth_MySQL_Password webdav_admin_password AuthMySQL_DB webdav AuthMySQL_Password_Table mysql_auth Auth_MySQL_Username_Field username Auth_MySQL_Password_Field passwd Auth_MySQL_Empty_Passwords Off Auth_MySQL_Encryption_Types PHP_MD5 Auth_MySQL_Authoritative On require valid-user </Location> </VirtualHost> |
Ricaricare in seguito Apache:
/etc/init.d/apache2 reload
5 test WebDAV
Ora installeremo il cadavere, un client WebDAV da riga di comando:
aptitude install cadaver
Per testare se funziona WebDAV, digitare:
cadaver http://localhost/webdav/
Verrà richiesto un nome utente. Tipo in prova e poi la password per l’utente di prova. Se tutto va bene, si dovrebbe essere concesso l’accesso che significa che WebDAV sta funzionando bene. Digitare quit per lasciare la shell di WebDAV:
server1:~# cadaver http://localhost/webdav/
Authentication required for webdav on server `localhost':
Username: test
Password:
dav:/webdav/> quit
Connection to `localhost' closed.
server1:~#
Ora prova ancora con il nome utente 192.168.0.100\test (questo è il formato che Windows XP ha bisogno se non si utilizza : 80 nell’URL WebDAV):
cadaver http://localhost/webdav/
server1:~# cadaver http://localhost/webdav/
Authentication required for webdav on server `localhost':
Username: 192.168.0.100\test
Password:
dav:/webdav/> quit
Connection to `localhost' closed.
server1:~#
6 configurare un Client di Windows XP per connettersi alla condivisione WebDAV
Se non si utilizza : 80 nell’URL WebDAV (http://192.168.0.100: 80/webdav), è necessario accedere con il nome utente 192.168.0.100\test; Se si utilizza : 80, allora puoi semplicemente accedere con il nome utente di prova.
7 configurare un Client di Linux (GNOME) per connettersi alla condivisione WebDAV
8 risoluzione dei problemi
È una buona idea di guardare il log degli errori di Apache (/var/log/apache2/error.log) mentre si sta tentando di connettersi a WebDAV, ad esempio con questo comando:
tail -f /var/log/apache2/error.log
Se ottenete un errore come questo:
[Wed Jun 11 15:39:04 2008] [error] [client 192.168.0.46] (13)Permission denied: Could not open property database. [500, #1]
Questo significa che /var/lock/apache2 non è di proprietà dell’utente Apache (www-dati su Debian). È possibile risolvere questo problema eseguendo:
chown www-data /var/lock/apache2
Se Windows mantiene chiedendo e chiedendo il nome utente e la password, è necessario specificare la porta nell’URL di WebDAV, ad esempio http://192.168.0.100: 80/webdav (Vedi capitolo 4).
9 link
- WebDAV: http://www.webdav.org
- Apache: http://httpd.apache.org
- Debian: http://www.debian.org
- mod_auth_mysql: http://modauthmysql.sourceforge.net