Outils personnels

WebDAV sur Apache avec LDAP

De wikiGite

Révision datée du 15 décembre 2008 à 17:44 par Frank (discussion | contributions) (Configuration des modules d’authentification PAM)
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 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 : https://<URL>/phpldapadmin

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

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

Et 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

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=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=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

  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