Outils personnels

WebDAV sur Apache avec LDAP

De wikiGite

Mise en œuvre d'un serveur WebDAV sous Apache avec LDAP et SSL

PROCEDURE A REVOIR, TESTEE SEULEMENT AVEC HTPASSWD, EN HTTP

Procédure adaptée Fso 29 septembre 2008 à 11:48 (CEST)

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/mondomaine.crt
  SSLCertificateKeyFile /etc/apache2/ssl/mondomaine.key
  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 :

dpkg-reconfigure slapd

UTILE ?

Installation de PhpLdapAdmin, utilitaire qui permet d’explorer et de modifier une base LDAP :

apt-get install phpldapadmin

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

  1. 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