PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Guillaume Vaillant : utilisation d’un serveur LDAP comme source d’authentification pour des utilisateurs virtuels

jeudi 4 octobre 2012 à 18:59

En remplaçant mon serveur perso, j’avais décidé de limiter les comptes système sur la machine, et donc de passer autant que possible par des utilisateurs virtuels.

J’ai donc pour cela configuré un serveur LDAP, et je m’en sers comme support pour l’authentification des différents services dont je peux avoir besoin: mail, FTP, ou même en partie de l’authentification HTTP.

La suite de cet article est donc un récapitulatif des conf nécessaires pour ça.

Note: je n’y détaillerai pas l’installation et la configuration du serveur LDAP, ou des services qui s’interfacent avec: je ne m’occuperai que de la partie service+LDAP.

Structure du serveur LDAP:

Voici la structure de la base LDAP que j’utilise dans la suite de ce document:

FTP (pure-ftpd):

Dans mon cas, j’ai commencé par installer le package pure-ftpd-ldap.

Personnellement, je n’utilise que l’authentification LDAP, donc, le dossier /etc/pure-ftpd/auth ne contient qu’un seul élément, un lien 30ldap qui pointe vers ../conf/LDAPConfigFile.

Ce fichier ne contient qu’une ligne qui est le chemin absolu vers la conf LDAP utilisée par le serveur FTP (/etc/pure-ftpd/db/ldap.conf).

Ce fichier ressemble à ça:

LDAPServer 127.0.0.1
LDAPPort   389
LDAPBaseDN ou=users,ou=virtual,dc=example,dc=com
LDAPAuthMethod BIND

On peut aussi préciser ceci (là, ce sont les valeurs par défaut qui me conviennent):

LDAPFilter (&(objectClass=posixAccount)(uid=\\L)) # \\L est le login
LDAPHomeDir homeDirectory # attribut où le home de l'utilisateur est défini.

Une fois que l’on a tout configuré comme on le veut, on redémarre pure-ftpd et c’est parti, on peu se connecter avec les logins/password définis dans le LDAP.

Note: Le chemin défini dans l’attribut homeDirectory de l’utilisateur virtuel doit appartenir à l’id définit dans l’attribut uidNumber. Même si cet uid ne correspond à rien sur le système.

WWW (apache2 + auth):

Pour utiliser la base LDAP comme source d’authentification (dans les .htaccess par exemple), il faut disposer du module authnz_ldap, l’activer (a2enmod authnz_ldap) et reloader apache.

Ensuite, là où on en a besoin, il suffit d’adapter ce bout de conf:

AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative off
AuthName "`_o< ... >o_´"
AuthLDAPURL "ldap://127.0.0.1:389/ou=users,ou=virtual,dc=example,dc=com?uid?sub?(objectClass=*)" NONE
Require valid-user

On peut bien sur préférer restreindre l’accès à la ressource à une sélection d’utilisateurs, en remplaçant le «Require valid-user» par:

Require ldap-user toto tata titi...

Mail

postfix (smtp)

Pour commencer, j’ai installé le package postfix-ldap pour avoir un postfix avec support LDAP.

Pour la partie LDAP, il faut commencer par créer ces fichiers qui permettront plus tard à postfix de faire sa tambouille avec les alias et les comptes utilisateurs:

server_host = 127.0.0.1
version = 3
search_base = ou=domains,ou=virtual,dc=example,dc=com
query_filter = (&(objectClass=domain)(dc=%s))
result_attribute = dc
server_host = 127.0.0.1
version = 3
search_base = ou=users,ou=virtual,dc=example,dc=com
query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
result_attribute = homePostalAddress
server_host = 127.0.0.1
version = 3
search_base = ou=aliases,ou=virtual,dc=example,dc=com
query_filter = (&(objectClass=inetOrgPerson)(cn=%s))
result_attribute = homePostalAddress

Maintenant, on peut dire à postfix comment utiliser tout ça, en ajoutant ça dans son /etc/postfix/main.cf:

virtual_mailbox_domains = ldap:/etc/postfix/ldap-domains.cf
virtual_mailbox_base = /home/virtual
virtual_mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf
virtual_minimum_uid = 50000
virtual_gid_maps = static:50000
virtual_uid_maps = static:50000
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf

Notes complémentaires:

dovecot (imap et pop)

Ici, il y a deux fichiers à modifier.

D’abord le /etc/dovecot/dovecot.conf, en particulier le bloc auth default {} (je ne mets que les parties intéressantes):

auth default {
  ...
  passdb ldap {
    args = /etc/dovecot/dovecot-ldap.conf
  }
  userdb prefetch {
  }
  userdb ldap {
    args = /etc/dovecot/dovecot-ldap.conf
  }
  ...
}

Il faut aussi modifier le fichier /etc/dovecot/dovecot-ldap.conf dont il est question dans le fichier précédent:

hosts = 127.0.0.1
uris = ldap://127.0.0.1
tls = no
debug_level = 0
auth_bind = yes
auth_bind_userdn = cn=%u,ou=users,ou=virtual,dc=example,dc=com
ldap_version = 3
base = ou=virtual,dc=example,dc=com
scope = subtree
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid
user_filter = (&(objectClass=posixAccount)(|(uid=%u)(mail=%u)))
pass_attrs = uid=user,userPassword=password,homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid
pass_filter = (&(objectClass=posixAccount)(uid=%u))
default_pass_scheme = CRYPT

Maintenant, on peut redémarrer dovecot

Gravatar de Guillaume Vaillant
Original post of Guillaume Vaillant.Votez pour ce billet sur Planet Libre.

Articles similaires