WebDAV sur Apache avec LDAP : Différence entre versions
De wikiGite
(→Configuration des modules d’authentification PAM) |
|||
(11 révisions intermédiaires par un autre utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
<center>'''Mise en œuvre d'un serveur WebDAV sous Apache avec LDAP et SSL'''</center> | <center>'''Mise en œuvre d'un serveur WebDAV sous Apache avec LDAP et SSL'''</center> | ||
− | <big>'''Procédure adaptée'''</big> | + | <big>'''Procédure adaptée'''</big><br/> |
− | [[Utilisateur:Fsoyer|Fso]] 29 septembre 2008 | + | [[Utilisateur:Fsoyer|Fso]] 29 septembre 2008<br/> |
− | [[Utilisateur:Fsoyer|Fso]] 08 décembre 2008 | + | [[Utilisateur:Fsoyer|Fso]] 08 décembre 2008<br/> |
= Installation = | = Installation = | ||
Ligne 31 : | Ligne 31 : | ||
Créer le fichier /etc/apache2/sites-availables/webdav : | Créer le fichier /etc/apache2/sites-availables/webdav : | ||
+ | # L'alias est general aux VirtualHost (80 et 443) sinon la redirection ne fonctionne pas | ||
+ | Alias /pub /home/pub/ | ||
# To force redirect to SSL VH, uncomment : | # To force redirect to SSL VH, uncomment : | ||
#<VirtualHost *:80> | #<VirtualHost *:80> | ||
Ligne 53 : | Ligne 55 : | ||
</Directory> | </Directory> | ||
DAVLockDB /var/lib/apache2/DAVLockDB | DAVLockDB /var/lib/apache2/DAVLockDB | ||
− | |||
<Location /pub> | <Location /pub> | ||
DAV On | DAV On | ||
Ligne 72 : | Ligne 73 : | ||
a2ensite webdav | a2ensite webdav | ||
/etc/init.d/apache2 reload | /etc/init.d/apache2 reload | ||
+ | Penser à créer le fichier '''DAVLockDB''' et donner à Apache les droit d'écriture : | ||
+ | mkdir -p /var/lib/apache2 | ||
+ | touch /var/lib/apache2/DAVLockDB | ||
+ | chown -R www-data.www-data /var/lib/apache2 | ||
-------------------------------------- | -------------------------------------- | ||
− | ''' | + | '''POUR RAPPEL''' - sauter cette section si on utilise LDAP |
− | + | ||
+ | Sans LDAP, en utilisant uniquement htpasswd | ||
+ | Dans /etc/apache2/conf/dav.conf | ||
<Directory /var/www/dav/> | <Directory /var/www/dav/> | ||
Options Indexes MultiViews | Options Indexes MultiViews | ||
Ligne 95 : | Ligne 102 : | ||
#htpasswd -c /var/www/dav/passwd.dav test | #htpasswd -c /var/www/dav/passwd.dav test | ||
-------------------- | -------------------- | ||
+ | |||
== OpenLDAP == | == OpenLDAP == | ||
aptitude install slapd ldap-utils libpam-ldap libnss-ldap nscd | aptitude install slapd ldap-utils libpam-ldap libnss-ldap nscd | ||
Ligne 270 : | Ligne 278 : | ||
session required pam_unix.so | session required pam_unix.so | ||
#session required pam_mkhomedir.so skel=/etc/skel/ | #session required pam_mkhomedir.so skel=/etc/skel/ | ||
− | |||
Il faut modifier les fichiers /etc/pam.d/login et /etc/pam.d/su en ajoutant si besoin les directives "@include common-xyz". | Il faut modifier les fichiers /etc/pam.d/login et /etc/pam.d/su en ajoutant si besoin les directives "@include common-xyz". | ||
Ligne 282 : | Ligne 289 : | ||
Modification du fichier /etc/nsswitch.conf | Modification du fichier /etc/nsswitch.conf | ||
− | passwd: | + | passwd: compat ldap |
− | group: | + | group: compat ldap |
− | shadow: | + | shadow: compat ldap |
Modification du fichier /etc/libnss-ldap.conf | Modification du fichier /etc/libnss-ldap.conf | ||
host 127.0.0.1 | host 127.0.0.1 | ||
base dc=localdomain,dc=net | base dc=localdomain,dc=net | ||
− | binddn cn=admin,dc=localdomain,dc=net | + | #binddn cn=admin,dc=localdomain,dc=net |
rootbinddn cn=admin,dc=localdomain,dc=net | rootbinddn cn=admin,dc=localdomain,dc=net | ||
− | |||
nss_base_passwd ou=people,dc=localdomain,dc=net?one | nss_base_passwd ou=people,dc=localdomain,dc=net?one | ||
Ligne 304 : | Ligne 310 : | ||
libnss-ldap et pam-ldap utilisent les fichiers /etc/libnss_ldap.secret et /etc/pam_ldap.secret pour stocker le mot de passe à utiliser pour accéder au serveur LDAP. Il faut donc les éditer afin qu’ils contiennent le mot de passe admin LDAP. Vérifier que ces fichiers ont bien des droits restreints (600) et qu’ils appartiennent à root. | libnss-ldap et pam-ldap utilisent les fichiers /etc/libnss_ldap.secret et /etc/pam_ldap.secret pour stocker le mot de passe à utiliser pour accéder au serveur LDAP. Il faut donc les éditer afin qu’ils contiennent le mot de passe admin LDAP. Vérifier que ces fichiers ont bien des droits restreints (600) et qu’ils appartiennent à root. | ||
+ | |||
+ | '''ATTENTION !''' : '''nscd''' est un cache, donc il faut le redémarrer après ces modifications sinon rien n'est pris en compte avant longtemps !!! | ||
+ | |||
+ | '''PIRE''' : pour les tests, il faut l'arrêter sinon les modifications des utilisateurs (exemple : changement de groupe) ne sont carrément pas prises en compte en direct ! | ||
+ | |||
C'est maintenant accessible via navigateur et connexion WebDAV (linux, XP...) | C'est maintenant accessible via navigateur et connexion WebDAV (linux, XP...) | ||
* dossier Web dans Windows | * dossier Web dans Windows | ||
* webdavs:// avec Konqueror | * webdavs:// avec Konqueror |
Version actuelle datée du 30 décembre 2008 à 18:26
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 :
# L'alias est general aux VirtualHost (80 et 443) sinon la redirection ne fonctionne pas Alias /pub /home/pub/ # 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 <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
Penser à créer le fichier DAVLockDB et donner à Apache les droit d'écriture :
mkdir -p /var/lib/apache2 touch /var/lib/apache2/DAVLockDB chown -R www-data.www-data /var/lib/apache2
POUR RAPPEL - sauter cette section si on utilise LDAP
Sans LDAP, en utilisant uniquement htpasswd 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
aptitude install slapd ldap-utils libpam-ldap libnss-ldap nscd
Note : NSCD est un cache qui accélère notablement les requêtes DNS, NSS, ...
Note2 : Attention à bien metre les mêmes valeurs à la configuration de libnss-ldap et libpam-ldap. Les mots de passe sont conservés dans /etc/libnss-ldap.secret, attetion aux droits 660 !
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 :
aptitude install phpldapadmin
TEST de phpldapadmin : https://<URL>/phpldapadmin
Installation de LAM (Ldap Account Manager)(Vérifier la dernière version sur http://lam.sourceforge.net)
Note : Les paquets Debian sont trop vieux (version 1.1.1-2) et ne supportent que PHP4 Note2 : il est également possible que php5 (meta-paquet) ne soit pas installé penser à l'ajouter sinon LAM ne s'installe pas. Note3 : le mot de passe par défaut est "lam"
wget http://surfnet.dl.sourceforge.net/sourceforge/lam/ldap-account-manager_2.4.0-1_all.deb dpkg -i ldap-account-manager_2.4.0-1_all.deb
Penser à augmenter memory_limit à 64M dans /etc/php5/apache2/php.ini
Sur l'écran d'accueil (http://serveur/lam), aller dans configuration de LAM (mot de passe lam), "Editer les profils", choisir la langue par défaut (Français) et réinitialiser le mot de passe. Sauvegarder, puis revenir dans le même écran désormais en français.
Cliquer sur "Editer type de compte" et modifier les suffixes ldap pour utilisateur, groupe, machine. Effacer domaines Samba si ça n'est pas utilisé.
on se connecte avec le FULL DN (cn=admin,dc=localdomain,dc=net) et le mot de passe donné lors de l'installation de slapd
Modification du fichier /etc/ldap/slapd.conf
Création d’un mot de passe chiffré :
slappasswd # SSHA par défaut. Utiliser 'slappasswd -h {md5}' pour un encodage MD5 New password: Re-enter new password: {SSHA}rquBbBgDEfCg9aQ1dluhBAiS1UQ0NK04
Copier ce mot de passe pour ajout dans slapd.conf.
Modifier /etc/ldap/slapd.conf :
database bdb suffix "dc=mondomaine,dc=com" directory "/var/lib/ldap" rootdn "cn=admin,dc=mondomaine,dc=com" rootpw {SSHA}rquBbBgDEfCg9aQ1dluhBAiS1UQ0NK04
Pour INFO Ce qui suit permet de paramétrer OpenLDAP en accès SSL, MAIS phpldapadmin ne sait se connecter dans ce mode... On laisse donc en "normal", les lignes suivantes sont là pour info.
Créer un certificat autosigné
openssl req -newkey rsa:1024 -x509 -nodes -out server.pem -keyout server.pem -days 3650
Paramétrer aussi le SSL par ajout de :
####################################################################### # SSL: # Uncomment the following lines to enable SSL and use the default # snakeoil certificates. #TLSCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem #TLSCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSCipherSuite HIGH:MEDIUM:-SSLv2 TLSCACertificateFile /etc/ldap/ssl/server.pem TLSCertificateFile /etc/ldap/ssl/server.pem TLSCertificateKeyFile /etc/ldap/ssl/server.pem
Et indiquer à LDAP de démarrer en SSL seulement dans /etc/default/slapd:
SLAPD_SERVICES="ldaps://127.0.0.1/"
Vérifier la connexion SSL :
openssl s_client -connect 127.0.0.1:636 -showcerts
doit donner "Verify return code: 18 (self signed certificate)"
Et dans ldap.conf, remplacer l'option "HOST" par les 2 lignes :
URI ldaps://127.0.0.1 TLS_REQCERT allow
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
VERIFIER : que les ACL pour protéger les données sensibles sont présentes :
access to attrs=userPassword by dn="cn=admin,dc=localdomain,dc=net" write by self write by anonymous auth by * none access to * by dn="cn=admin,dc=localdomain,dc=net" write by * read
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=localdomain,dc=net HOST 127.0.0.1 ldap_version 3 rootbinddn cn=admin,dc=localdomain,dc=net 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
Tester le client
ldapsearch -x
ou, s'il y a une erreur ou que ldap.conf n'est pas encore configuré :
ldapsearch -H ldaps://localhost -b dc=localdomain,dc=net -x
On peut ajouter -d<1 à 8> pour avoir des infos supplementaires
Commencer à peupler la base LDAP
Créer un fichier init.ldif qui contient les éléments de base.
dn: ou=people,dc=localdomain,dc=net objectClass: organizationalUnit ou: people dn: ou=groups,dc=localdomain,dc=net objectClass: organizationalUnit ou: groups dn: ou=computers,dc=localdomain,dc=net objectClass: organizationalUnit ou: computers
Puis ajouter les éléments à la base avec ces commandes :
/etc/init.d/slapd stop
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=localdomain,dc=net
En principe tous les éléments (people, groups, etc...) doivent apparaître (lien "search" à gauche, et search sur "entire subtree").
Installation des connecteurs NSS-PAM :
apt-get install libnss-db nss-updatedb apt-get install 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, mettre en commentaire :
password required pam_unix.so nullok obscure min=4 max=8 md5
Et décommenter + modifier :
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/
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=localdomain,dc=net #binddn cn=admin,dc=localdomain,dc=net rootbinddn cn=admin,dc=localdomain,dc=net pam_password crypt
Modification du fichier /etc/nsswitch.conf
passwd: compat ldap group: compat ldap shadow: compat ldap
Modification du fichier /etc/libnss-ldap.conf
host 127.0.0.1 base dc=localdomain,dc=net #binddn cn=admin,dc=localdomain,dc=net rootbinddn cn=admin,dc=localdomain,dc=net nss_base_passwd ou=people,dc=localdomain,dc=net?one nss_base_group ou=groups,dc=localdomain,dc=net?one nss_base_shadow ou=people,dc=localdomain,dc=net?one ssl no pam_password md5 # bug (?) il faut modifier la valeur bind_policy sinon pb de démarrage bind_policy soft
libnss-ldap et pam-ldap utilisent les fichiers /etc/libnss_ldap.secret et /etc/pam_ldap.secret pour stocker le mot de passe à utiliser pour accéder au serveur LDAP. Il faut donc les éditer afin qu’ils contiennent le mot de passe admin LDAP. Vérifier que ces fichiers ont bien des droits restreints (600) et qu’ils appartiennent à root.
ATTENTION ! : nscd est un cache, donc il faut le redémarrer après ces modifications sinon rien n'est pris en compte avant longtemps !!!
PIRE : pour les tests, il faut l'arrêter sinon les modifications des utilisateurs (exemple : changement de groupe) ne sont carrément pas prises en compte en direct !
C'est maintenant accessible via navigateur et connexion WebDAV (linux, XP...)
- dossier Web dans Windows
- webdavs:// avec Konqueror