WebDAV sur Apache avec LDAP
De wikiGite
Sommaire
PROCEDURE A REVOIR, TESTEE SEULEMENT AVEC HTPASSWD, EN HTTP
Procédure adaptée Fso 29 septembre 2008 Fso 08 décembre 2008
Installation
Apache, OpenSSL
voir procédure Apache2 SSL sur Debian Etch
WebDAV
Le module est déjà installé avec apache2.
Charger le module WebDAV
a2enmod dav a2enmod dav_fs a2enmod dav_lock a2enmod rewrite
dav_fs charge par défaut le module dav.
Déclarer WebDAV
On crée d'abord un répertoire pour les partages :
mkdir /home/pub
Dans /etc/apache2/sites-enabled/000-default, remplacer "NameVirtualHost *" par :
NameVirtualHost *:80 NameVirtualHost *:443 DAVMinTimeout 600 DAVDepthInfinity On
Attention, à partir du moment où on a activé SSL, tous les VirtualHosts doivent être assignés soit au port 80 soit au port 443.
Créer le fichier /etc/apache2/sites-availables/webdav :
# To force redirect to SSL VH, uncomment : #<VirtualHost *:80> # ServerName mondomaine # RewriteEngine on # RewriteCond %{HTTPS} !=on [NC] # RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] #</VirtualHost> <VirtualHost *:443> ServerName mondomaine ServerAdmin webmaster@mondomaine SSLEngine On # If we have a real certificat, give the Authority : #SSLCACertificateFile /etc/ssl/certs/cacert_class3.crt SSLCertificateFile /etc/apache2/ssl/apache.pem SSLCertificateKeyFile /etc/apache2/ssl/apache.pem DocumentRoot /var/www <Directory /> Options -Indexes FollowSymLinks AllowOverride none </Directory> DAVLockDB /var/lib/apache2/DAVLockDB Alias /pub /home/pub/ <Location /pub> DAV On AuthType Basic AuthName "WebDAV" AuthBasicProvider ldap AuthLDAPURL "ldap://127.0.0.1/ou=people,[your base here]” AuthLDAPRemoteUserIsDN off ForceType text/plain Require valid-user Require ldap-filter &(uid=*) </Location> ErrorLog syslog LogLevel warn CustomLog /var/log/apache2/access_dav.log combined </VirtualHost>
Et activer le site
a2ensite webdav /etc/init.d/apache2 reload
---------------------- ANCIENNE VERSION Puis dans /etc/apache2/conf/dav.conf
<Directory /var/www/dav/> Options Indexes MultiViews AllowOverride None Order allow,deny allow from all DAV On # Si on a des messages "HTTP redirect" à la connexion linux, ajouter : DavDepthInfinity On SetEnv redirect-carefully 1 AuthType Basic AuthName "webdav" AuthUserFile /var/www/dav/passwd.dav Require valid-user </Directory>
On créé le fichier de mots de passe avec un user test
#htpasswd -c /var/www/dav/passwd.dav test
OpenLDAP
apt-get install slapd ldap-utils libpam-ldap libnss-ldap nscd
(NSCD est un cache qui accélère notablement les requêtes DNS, NSS, ...)
Configuration de LDAP :
donner un mot de passe administrateur URL : ldaps://127.0.0.1 domaine : dc=localdomain,dc=net version : 3 créer un administrateur NSS (cn=admin,dc=localdomain,dc=net) Créer un fichier de mot de passe local pour l'administrateur Pas d'authentification libpam pour accéder à LDAP Donner un admin pour les mots de passe (cn=admin,dc=localdomain,dc=net)
Activer le module ldap apache
a2enmod ldap a2enmod authnz_ldap
Installation de PhpLdapAdmin, utilitaire qui permet d’explorer et de modifier une base LDAP :
apt-get install phpldapadmin
TEST de phpldapadmin : à ce stade, APACHE ne démarre pas EN SSL
Modification du fichier /etc/ldap/slapd.conf
Si nécessaire, création d’un mot de passe chiffré :
slappasswd # utiliser 'slappasswd -h {md5}' pour un encodage MD5 New password: Re-enter new password: {SSHA}rquBbBgDEfCg9aQ1dluhBAiS1UQ0NK04
Ajout du mot de passe cripté dans slapd.conf :
database bdb suffix "dc=mondomaine,dc=com" directory "/var/lib/ldap" rootdn "cn=admin,dc=mondomaine,dc=com" rootpw {SSHA}rquBbBgDEfCg9aQ1dluhBAiS1UQ0NK04
A TESTER : On en profite pour spécifier quelques index qui accéléreront les recherches par la suite :
index objectClass,uidNumber,gidNumber eq index cn,sn,uid,displayName pres,sub,eq index memberUid,mail,givenname eq,subinitial
CES CHAMPS EXISTENT-ILS ?
A TESTER : Ajout de quelques ACL pour protéger les données sensibles :
access to attrs=userPassword by self write by anonymous auth by * none access to attrs=sambaLMPassword by self write by anonymous auth by * none access to attrs=sambaNTPassword by self write by anonymous auth by * none access to * by * read
CES CHAMPS EXISTENT-ILS ?
Modification du fichier /etc/default/slapd
Par défaut, le serveur prend en charge les interfaces Ipv6, ce qui générera un warning dans le syslog. Pour éviter cela, il faut spécifier l’option –4 dans le fichier /etc/default/slapd : SLAPD_OPTIONS="-4"
Configuration des clients LDAP via le fichier /etc/ldap/ldap.conf
base dc=mondomaine,dc=com host 127.0.0.1 ldap_version 3 rootbinddn [your rootbinddn, usually cn=admin,[base]] pam_password crypt nss_initgroups_ignoreusers backup,bin,daemon,dhcp,games,gnats,irc,klog,libuuid,list,lp,mail,man,news,ntp,nx,proxy,root,sshd,statd,sync,sys,syslog,uucp,www-data
Redémarrage du service LDAP :
/etc/init.d/slapd restart
Commencer à peupler la base LDAP
Créer un fichier init.ldif qui contient les éléments de base.
dn: ou=people,dc=mondomaine,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=mondomaine,dc=com objectClass: organizationalUnit ou: groups dn: ou=computers,dc=mondomaine,dc=com objectClass: organizationalUnit ou: computers
Puis initialiser la base avec ces commandes :
/etc/init.d/slapd stop
copie de sauvegarde
mv /var/lib/ldap /var/lib/ldap.old mkdir /var/lib/ldap
création de la structure
slapadd -l init.ldif /etc/init.d/slapd start
Ouvrir un navigateur à l’adresse "http://adresseduserveur/phpldapadmin" et s’authentifier avec
cn=admin,dc=mondomaine,dc=com
En principe tous les éléments (people, groups, etc...) doivent apparaître.
Installation des connecteurs NSS-PAM :
apt-get install libnss-db nss-updatedb apt-get install libpam-smbpass libpam-ldap libnss-ldap
Configuration des modules d’authentification PAM
La configuration de PAM est répartie dans 4 fichiers : common-account, common-auth, common-password et common-session (répertoire /etc/pam.d)
Pour utiliser des mots de passe plus "costaud" il faut installer le paquet libpam-cracklib. Sa configuration se fera dans common-password.
apt-get install libpam-cracklib
Modifier le fichier common-account :
account sufficient pam_ldap.so account required pam_unix.so
Modifier le fichier common-auth :
auth sufficient pam_ldap.so use_first_pass auth required pam_unix.so likeauth_secure nullok_secure
Modifier le fichier common-password :
password sufficient pam_ldap.so use_authtok password required pam_smbpass.so password required pam_unix.so nullok obscure min=4 max=8 md5
Modifier le fichier common-password :
password required pam_cracklib.so retry=3 minlen=6 difok=3 password sufficient pam_ldap.so use_authtok nullok md5 password required pam_unix.so use_authtok use_first_pass
Modifier le fichier common-session pour avoir : session optional pam_ldap.so session required pam_unix.so
- session required pam_mkhomedir.so skel=/etc/skel/
session optional pam_foreground.so
Il faut modifier les fichiers /etc/pam.d/login et /etc/pam.d/su en ajoutant si besoin les directives "@include common-xyz".
Modification du fichier /etc/pam_ldap.conf :
host 127.0.0.1 base dc=mondomaine,dc=com #binddn cn=admin,dc=mondomaine,dc=com rootbinddn cn=admin,dc=mondomaine,dc=com pam_password crypt
Modification du fichier /etc/nsswitch.conf
passwd: files ldap group: files ldap shadow: files ldap
Modification du fichier /etc/libnss-ldap.conf
host 127.0.0.1 base dc=mondomaine,dc=com binddn cn=admin,dc=mondomaine,dc=com rootbinddn cn=admin,dc=mondomaine,dc=com bindpw <mot de passe en clair>... nss_base_passwd ou=people,dc=mondomaine,dc=com?one nss_base_group ou=groups,dc=mondomaine,dc=com?one nss_base_shadow ou=people,dc=mondomaine,dc=com?one ssl no pam_password md5 # bug (?) il faut modifier la valeur bind_policy sinon pb de démarrage bind_policy soft
nss-ldap et pam-ldap utilisent le fichier /etc/ldap.secret ou /etc/pam_ldap.secret pour stocker le mot de passe à utiliser pour accéder au serveur LDAP. Il faut donc l’éditer afin qu’il contienne le mot de passe admin LDAP. Vérifier que ce fichier a bien des droits restreints (600) et qu’il appartient à root.
C'est maintenant accessible via navigateur et connexion WebDAV (linux, XP...)
- dossier Web dans Windows
- webdavs:// avec Konqueror