Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Come impostare WebDAV con autenticazione di MySQL su Apache2 (Debian Lenny)

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/webPer questo scopo, modificherà la configurazione predefinita Apache vhost /etc/apache2/sites-available/defaultSe 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\testQuindi 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 provaSe 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\testSe 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).

 

Piaciuto l'articolo? Condividilo sui social!

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on whatsapp
WhatsApp