Sommaire

  1. Environnement
  2. Configuration du serveur apache-dav
  3. Authentification simple depuis un poste linux
  4. Authentification simple depuis un poste windows
  5. Authentification Ldap



Présentation rapide de l'environnement:

4 machines seront utilisées pour les tests:

1) dbip63 (le serveur Apache avec le mod_dav)   => Adresse IP: 192.168.0.63

dbip63:/etc/apache2# uname -a
Linux dbip63 2.6.38.3 #2 SMP Sun Apr 17 19:03:50 CEST 2011 x86_64 GNU/Linux

Le noyau est compilé perso pour voir la tête du 2.6.38 mais je pense qu'avec un noyau debian cela fonctionne tout aussi bien.

dbip63:/etc/apache2# cat /etc/issue.net
Debian GNU/Linux 6.0

dbip63:/etc/apache2/conf.d# dpkg -l apache2
======================================================
ii  apache2              2.2.16-6+squeeze1    Apache HTTP Server metapackage


2) p733 (mon desktop ubuntu-10.04)                      => Adresse IP: 192.168.0.22

pme@p733:~$ uname -a
Linux p733 2.6.32.39 #1 SMP PREEMPT Sat Apr 23 13:05:07 CEST 2011 x86_64 GNU/Linux

pme@p733:~$ cat /etc/issue.net
Ubuntu 10.04.2 LTS

pme@p733:~$ dpkg -l davfs2
=======================================================
ii  davfs2               1.4.5-1              mount a WebDAV resource as a regular file system


3) srvweb (le serveur ldap - lenny i386)                 => Adresse IP: 192.168.0.23

srvweb:~# uname -a
Linux srvweb 2.6.32.39-vs2.3.0.36.29.6 #1 SMP Sun Apr 24 09:56:25 CEST 2011 i686 GNU/Linux

srvweb:~# cat /etc/issue.net
Debian GNU/Linux 5.0

srvweb:~# dpkg -l slapd
=======================================================
ii  slapd                   2.4.11-1+lenny2         OpenLDAP server (slapd)



4) xp2 (un $oft XP SP3)                                        => Adresse IP: 192.168.0.114
Pas besoin d'en dire plus pour celui-là....



Configuration du serveur apache-dav

J'ai activé les modules dav* et ssl.

dbip63:/etc/apache2# ll mods-enabled/
total 8
drwxr-xr-x 2 root root 4096 30 avril 18:37 .
drwxr-xr-x 7 root root 4096 30 avril 18:33 ..
lrwxrwxrwx 1 root root   28 17 avril 19:12 alias.conf -> ../mods-available/alias.conf
lrwxrwxrwx 1 root root   28 17 avril 19:12 alias.load -> ../mods-available/alias.load
lrwxrwxrwx 1 root root   33 17 avril 19:12 auth_basic.load -> ../mods-available/auth_basic.load
lrwxrwxrwx 1 root root   33 17 avril 19:12 authn_file.load -> ../mods-available/authn_file.load
lrwxrwxrwx 1 root root   36 17 avril 19:12 authz_default.load -> ../mods-available/authz_default.load
lrwxrwxrwx 1 root root   38 17 avril 19:12 authz_groupfile.load -> ../mods-available/authz_groupfile.load
lrwxrwxrwx 1 root root   33 17 avril 19:12 authz_host.load -> ../mods-available/authz_host.load
lrwxrwxrwx 1 root root   33 17 avril 19:12 authz_user.load -> ../mods-available/authz_user.load
lrwxrwxrwx 1 root root   32 17 avril 19:12 autoindex.conf -> ../mods-available/autoindex.conf
lrwxrwxrwx 1 root root   32 17 avril 19:12 autoindex.load -> ../mods-available/autoindex.load
lrwxrwxrwx 1 root root   26 17 avril 19:12 cgi.load -> ../mods-available/cgi.load
lrwxrwxrwx 1 root root   29 29 avril 18:45 dav_fs.conf -> ../mods-available/dav_fs.conf
lrwxrwxrwx 1 root root   29 29 avril 18:45 dav_fs.load -> ../mods-available/dav_fs.load
lrwxrwxrwx 1 root root   26 29 avril 18:45 dav.load -> ../mods-available/dav.load
lrwxrwxrwx 1 root root   31 29 avril 18:50 dav_lock.load -> ../mods-available/dav_lock.load
lrwxrwxrwx 1 root root   30 17 avril 19:12 deflate.conf -> ../mods-available/deflate.conf
lrwxrwxrwx 1 root root   30 17 avril 19:12 deflate.load -> ../mods-available/deflate.load
lrwxrwxrwx 1 root root   26 17 avril 19:12 dir.conf -> ../mods-available/dir.conf
lrwxrwxrwx 1 root root   26 17 avril 19:12 dir.load -> ../mods-available/dir.load
lrwxrwxrwx 1 root root   31 29 avril 18:43 encoding.conf -> ../mods-available/encoding.conf
lrwxrwxrwx 1 root root   31 29 avril 18:43 encoding.load -> ../mods-available/encoding.load
lrwxrwxrwx 1 root root   26 17 avril 19:12 env.load -> ../mods-available/env.load
lrwxrwxrwx 1 root root   27 17 avril 19:12 mime.conf -> ../mods-available/mime.conf
lrwxrwxrwx 1 root root   27 17 avril 19:12 mime.load -> ../mods-available/mime.load
lrwxrwxrwx 1 root root   34 17 avril 19:12 negotiation.conf -> ../mods-available/negotiation.conf
lrwxrwxrwx 1 root root   34 17 avril 19:12 negotiation.load -> ../mods-available/negotiation.load
lrwxrwxrwx 1 root root   27 17 avril 19:12 php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root   27 17 avril 19:12 php5.load -> ../mods-available/php5.load
lrwxrwxrwx 1 root root   33 17 avril 19:12 reqtimeout.conf -> ../mods-available/reqtimeout.conf
lrwxrwxrwx 1 root root   33 17 avril 19:12 reqtimeout.load -> ../mods-available/reqtimeout.load
lrwxrwxrwx 1 root root   31 17 avril 19:12 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root   31 17 avril 19:12 setenvif.load -> ../mods-available/setenvif.load
lrwxrwxrwx 1 root root   26 30 avril 18:30 ssl.conf -> ../mods-available/ssl.conf
lrwxrwxrwx 1 root root   26 30 avril 18:30 ssl.load -> ../mods-available/ssl.load
lrwxrwxrwx 1 root root   29 17 avril 19:12 status.conf -> ../mods-available/status.conf
lrwxrwxrwx 1 root root   29 17 avril 19:12 status.load -> ../mods-available/status.load


Le fichier .htpasswd dans /etc/apache2/conf.d contient le(s) login(s)/pass des utilisateurs
autorisés à se connecter sur le partage webdav.

dbip63:/etc/apache2# ll conf.d
total 32
drwxr-xr-x 2 root root 4096 30 avril 18:35 .
drwxr-xr-x 7 root root 4096 30 avril 18:33 ..
-rw-r--r-- 1 root root  269 22 mars  22:13 charset
-rw-r--r-- 1 root root   22 29 avril 18:51 .htpasswd
lrwxrwxrwx 1 root root   45 13 févr. 10:06 javascript-common.conf -> /etc/javascript-common/javascript-common.conf
-rw-r--r-- 1 root root 3296 22 mars  22:13 localized-error-pages
-rw-r--r-- 1 root root  143 22 mars  22:13 other-vhosts-access-log
-rw-r--r-- 1 root root 1424 22 mars  22:13 security
-rw-r--r-- 1 root root  336 30 avril 18:35 webdav.conf


dbip63:/etc/apache2# cat conf.d/webdav.conf
Alias /share /home/security
<Location /share>
   DAV On
   SSLRequireSSL
   Options None
   AuthType Basic
   AuthName WebDAV
   AuthUserFile /etc/apache2/conf.d/.htpasswd
   <LimitExcept GET OPTIONS>
       Order allow,deny
       Allow from 192.168.0.
       Require valid-user
   </LimitExcept>
</Location>


dbip63:/etc/apache2/mods-enabled# cat encoding.conf
EncodingEngine on
SetServerEncoding UTF-8
DefaultClientEncoding UTF-8 CP932 EUCJP-MS
AddClientEncoding "Microsoft .* DAV 1.1" ASCII CP932 UTF-8
AddClientEncoding "Microsoft .* DAV" UTF-8 CP932
AddClientEncoding "(Microsoft .* DAV $)" UTF-8 CP932
AddClientEncoding "(Microsoft .* DAV 1.1)" CP932 UTF-8
AddClientEncoding "Microsoft-WebDAV*" UTF-8 CP932
AddClientEncoding "RMA/*" CP932
AddClientEncoding "xdwin9x/" CP932
AddClientEncoding "cadaver/" UTF-8 EUCJP-MS
AddClientEncoding "Mozilla/" EUCJP-MS




Le répertoire /home/security alias de /share est configuré comme suit:

dbip63:/etc/apache2# ll /home | grep secu
drwxrwx---  3 www-data www-data  4096 30 avril 18:39 security

Pas de modif sur les fichiers de config par défaut et activation des sites default et default-ssl.

dbip63:/etc/apache2# ll sites-enabled/
total 8
drwxr-xr-x 2 root root 4096 30 avril 18:35 .
drwxr-xr-x 7 root root 4096 30 avril 18:33 ..
lrwxrwxrwx 1 root root   26 17 avril 19:12 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root   30 30 avril 18:35 default-ssl -> ../sites-available/default-ssl

Après avoir testé différentes méthodes de créations de certif auto-signés qui se soldaient par un
SSL handshake failed je me suis rabattu sur /usr/share/doc/apache2.2-common/README.Debian.gz.

J'ai donc créé les certifs comme ceci:

dbip63:/etc/apache2# make-ssl-cert generate-default-snakeoil --force-overwrite


Je démarre apache et vérifie:

dbip63:/etc/apache2# apache2ctl start

dbip63:/etc/apache2# netstat -tpan
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      699/sshd           
tcp        0      0 192.168.0.63:22         192.168.0.22:58728      ESTABLISHED 836/0          
tcp6       0      0 :::80                   :::*                    LISTEN      2665/apache2   
tcp6       0      0 :::22                   :::*                    LISTEN      699/sshd       
tcp6       0      0 :::443                  :::*                    LISTEN      2665/apache2


Authentification simple depuis un poste linux

Sur ma machine (ubuntu-10.04.2 x86_64 à jour), j'ai installé le paquet davfs2, ajouté la ligne qui-va-bien dans le fstab et posé le SUID bit sur mount.davfs:

pme@p733:~$ sudo apt-get install davfs2

pme@p733:~$ ll /usr/sbin/mount.davfs
-rwsr-xr-x 1 root root 130784 2009-11-30 21:37 /usr/sbin/mount.davfs


pme@p733:~$ cat /etc/fstab | grep http
https://192.168.0.63/share    /home/pme/dav    davfs    rw,user,noauto   



Je teste:

pme@p733:~$ mount /home/pme/dav
Please enter the username to authenticate with server
https://192.168.0.63/share or hit enter for none.
  Username: squeeze
Please enter the password to authenticate user squeeze with server
https://192.168.0.63/share or hit enter for none.
  Password: 
/sbin/mount.davfs: the server certificate does not match the server name
/sbin/mount.davfs: the server certificate is not trusted
  issuer:      dbip63.net.caen
  subject:     dbip63.net.caen
  identity:    dbip63.net.caen
  fingerprint: 75:87:fd:98:b0:ee:94:03:e1:7b:77:cd:ae:33:b9:47:e8:6e:ae:f8
You only should accept this certificate, if you can
verify the fingerprint! The server might be faked
or there might be a man-in-the-middle-attack.
Accept certificate for this session? [y,N] y

Evidemment, le certif étant bidon, on est tout de même prévenu mais ça passe:

pme@p733:~$ mount |grep dav
https://192.168.0.63/share on /home/pme/dav type davfs (rw,nosuid,noexec,nodev,_netdev,user=pme)

pme@p733:~$ df -hT |grep dav
             davfs     26G   13G   13G  50% /home/pme/dav


pme@p733:~/dav$ touch toto
pme@p733:~/dav$ ll
total 1
drwxr-xr-x 3 pme pme 184 2011-04-30 18:58 .
-rw-r--r-- 1 pme pme  24 2011-04-30 12:00 essai.txt
drwx------ 2 pme pme   0 2011-04-30 12:10 lost+found
-rw-r--r-- 1 pme pme   0 2011-04-30 18:39 nouveau fichier
-rw-r--r-- 1 pme pme   0 2011-04-30 18:58 toto

pme@p733:~$ umount /home/pme/dav
/sbin/umount.davfs: waiting while mount.davfs (pid 19404) synchronizes the cache .. OK


Authentification simple depuis un poste windows

Si on se connecte depuis un poste Windows (dans cet exemple XP SP3) il faudra sélectionner :
"Ouvrir une session de stockage en ligne ou se connecter à un serveur réseau" depuis le menu Outils/Connecter un lecteur réseau.

Là aussi, il y aura quelques messages d'avertissements à propos du certif qui n'est pas sûr mais ça fonctionne tout de même.

connexion webdav depuis xp
connexion webdav depuis xp




Authentification Ldap

On peut également utiliser une authentification ldap pour se connecter au partage.

Prenons un utilisateur créé sur le ldap:

# LDIF Export for uid=userweb2,ou=Users,dc=pmenier,dc=dynalias,dc=net
# Serveur: (192.168.0.23)
# Portée de la recherche: base
# Filtre de recherche: (objectClass=*)
# Entrées totales: 1
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on May 1, 2011 3:50 pm
# Version: 1.2.0.5

version: 1

# Entrée 1: uid=userweb2,ou=Users,dc=pmenier,dc=dynalias,dc=net
dn: uid=userweb2,ou=Users,dc=pmenier,dc=dynalias,dc=net
objectclass: account
objectclass: simpleSecurityObject
uid: userweb2
userpassword: {SHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Il faudra modifier le fichier webdav.conf comme ceci (Notez que cela peut différer en fonction de la config du serveur ldap: dans mon cas aucune recherche anonyme n'est autorisée).

dbip63:/etc/apache2/conf.d# cat webdav.conf
Alias /share /home/security
<Location /share>
DAV On
SSLRequireSSL
Options None
AuthType Basic
AuthBasicProvider ldap
AuthName "LDAP auth"
AuthLDAPUrl ldap://pmenier.dynalias.net/ou=Users,dc=pmenier,dc=dynalias,dc=net?uid
AuthLDAPBindDN "cn=admin,dc=pmenier,dc=dynalias,dc=net"
AuthLDAPBindPassword "xxxxxxxxxxxxxxxxxxxxx"
<LimitExcept GET OPTIONS>
Order allow,deny
Allow from 192.168.0.
Require valid-user
</LimitExcept>
</Location>


Je remonte la ressource depuis ma machine

pme@p733:~$ mount /home/pme/dav
Please enter the username to authenticate with server
https://192.168.0.63/share or hit enter for none.
Username: userweb2
Please enter the password to authenticate user userweb2 with server
https://192.168.0.63/share or hit enter for none.
Password: ......
/sbin/mount.davfs: the server certificate does not match the server name
/sbin/mount.davfs: the server certificate is not trusted
issuer: dbip63.net.caen
subject: dbip63.net.caen
identity: dbip63.net.caen
fingerprint: 75:87:fd:98:b0:ee:94:03:e1:7b:77:cd:ae:33:b9:47:e8:6e:ae:f8
You only should accept this certificate, if you can
verify the fingerprint! The server might be faked
or there might be a man-in-the-middle-attack.
Accept certificate for this session? [y,N] y

pme@p733:~$ mount | grep http
https://192.168.0.63/share on /home/pme/dav type davfs (rw,nosuid,noexec,nodev,_netdev,user=pme)
pme@p733:~$


Les logs correspondants sur le serveur ldap:

May 1 17:54:01 srvweb slapd[1184]: conn=242 op=0 BIND dn="cn=admin,dc=pmenier,dc=dynalias,dc=net" method=128
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=0 BIND dn="cn=admin,dc=pmenier,dc=dynalias,dc=net" mech=SIMPLE ssf=0
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=0 RESULT tag=97 err=0 text=
May 1 17:54:01 srvweb slapd[1184]: conn=242 fd=25 ACCEPT from IP=192.168.0.63:35698 (IP=0.0.0.0:389)
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=1 SRCH base="ou=Users,dc=pmenier,dc=dynalias,dc=net" scope=2 deref=3 filter="(&(objectClass=*)(uid=userweb2))"
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=1 SRCH attr=uid
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=2 BIND anonymous mech=implicit ssf=0
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=2 BIND dn="uid=userweb2,ou=Users,dc=pmenier,dc=dynalias,dc=net" method=128
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=2 BIND dn="uid=userweb2,ou=Users,dc=pmenier,dc=dynalias,dc=net" mech=SIMPLE ssf=0
May 1 17:54:01 srvweb slapd[1184]: conn=242 op=2 RESULT tag=97 err=0 text=



Liens:

http://www.server-world.info/en/note?os=Debian_6.0&p=httpd&f=6

http://bernaerts.dyndns.org/linux/62-debian-webdav-share

http://www.pervasive-network.org/SPIP/Installation-de-WebDAV-pour