Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
linux:auth_ldap [2007/05/21 11:01]
semial
linux:auth_ldap [2010/01/12 13:29] (current)
Line 1: Line 1:
 +====== Authentification LDAP sur Debian Linux ======
 +(à part les aptitude install toussa, le howto fonctionne sûrement sur d'​autres distributions,​ voir sur les BSD utilisant pam, comme FreeBSD ou NetBSD)
  
 +===== Introduction =====
 +La documentation sur comment qu'on installe LDAP sous Debian existe, mais elle est relativement épaisse et éparpillée dans le wiki Debian, il n'y pas de documentation sur comment monter de l'​authentification LDAP pas à pas, de plus la documentation française est quasiment inexistante. C'est pourquoi j'ai décidé d'​écrire ce document.
 +
 +==== Saikoi ldappe?? ? ====
 +Je pense que je n'​apprends rien à personne, mais LDAP (lightweight directory access protocol), est un protocole reposant principalement sur TCP/IP qui permet l'​interrogation et la modification de services d'​annuaire. LDAP fonctionne sur un modèle de structure arborescente dont chacun des noeuds est constitué d'​attributs associés à leurs valeurs.
 +
 +Pour la base de l'​annuaire LDAP (la racine de l'​arbre),​ on utilise souvent le nommage DNS, c'est le modèle par défaut de slapd sous debian. Exemple d'un arbre basé sur le nommage DNS:
 +
 +  dc=org ​ # on utilise le tld comme premier noeud
 +        \
 +     ​dc=gcu-squad # le nom de domaine (sans le tld bien sûr)
 +      /           \
 +     ​ou=people ​   ou=groups # équivalents de /etc/passwd et /etc/group
 +    /        \          \
 +  uid=semial ​ uid=root ​ cn=wheel # entrées ​
 +      |           ​| ​        \
 +  différentes infos sur    numéro gid etc
 +  chaque utilisateur
 +  (shell, homedir, mot
 +  de passe, etc)
 +   
 +==== A quoi ça sert ? ====
 +Prenons l'​exemple d'une école, avec une salle informatique sous linux qui contient une quarantaine de pc, pas complètement homogène (disons qu'il reste une dizaine de stations sun de l'​année dernière, il y a 4 ppc, etc.). ​
 +
 +Lorsqu'​un prof/​élève allume une machine, elle boote, et monte le /home de la machine posé sur un serveur, en nfs comme ça chacun peut retrouver ses documents même en changeant d'​ordinateur.
 +
 +Or, si chacun a son propre $HOME, il faut que chacun des 200 élèves + 10 profs ait une entrée dans /​etc/​passwd,​ et ça, c'est pas terrible, surtout si il faut répliquer le fichier sur chaque machine lors d'un ajout/​suppression d'​utilisateur.
 +
 +Vous allez me répondre "mais oui mais on monte le /etc/passwd blah en nfs lol"​. ​
 +C'est déjà plutôt sale, et 210 utilisateurs dans /​etc/​passwd,​ ça risque de prendre longtemps à parser quand /bin/login, sshd, pam, toussa viendront à le lire.
 +
 +Peut-être aussi que vous avez 2 boxes et 3 users mais que votre poil ne brille pas, et vous voulez y remédier.
 +
 +===== Partie 1 - installation des trucs =====
 +Dans ce morceau de parchemin, nous utiliserons la distribution dubien, debian.
 +
 +On installe slapd:
 +  sudo aptitude install slapd ldap-utils
 +
 +Debconf va créer le compte administrateur LDAP et le DN (Distinguished Name) racine selon vos réponses à ses questions. Admettons que nous utiliserons gcu-squad.org comme domaine, le DN racine sera dc=gcu-squad,​dc=org et donc l'​admin sera cn=admin,​dc=gcu-squad,​dc=org.
 +
 +Si vous avez déjà des comptes dans /​etc/​passwd,​ lisez ce qui suit, sinon ajoutez-en un et procédez à une "​migration"​.
 +
 +===== Migrations des trucs depuis /​etc/​{passwd,​group,​shadow} =====
 +Installons les scrips de migration:
 +  aptitude install migrationtools
 +
 +Éditez /​etc/​migrationtools/​migrate_common.ph
 +Modifiez
 +  $DEFAULT_MAIL_DOMAIN = "​gcu-squad.org";​
 +  $DEFAULT_BASE = "​dc=gcu-squad,​dc=org";​
 +  $EXTENDED_SCHEMA = 1;
 +  # ne pas migrer les comptes systèmes
 +  $IGNORE_UID_BELOW = 1000;
 +  $IGNORE_GID_BELOW = 1000;
 +  $IGNORE_UID_ABOVE = 9999;
 +  $IGNORE_GID_ABOVE = 9999;
 +  # on commente la stuff kerberos
 +  #if ($EXTENDED_SCHEMA) {
 +  # $DEFAULT_REALM = $DEFAULT_MAIL_DOMAIN;​
 +  # $DEFAULT_REALM =~ tr/​a-z/​A-Z/;​
 +  #}
 +
 +On commence la migration:
 +  cd /​usr/​share/​migrationtools
 +  ./​migrate_passwd.pl /etc/passwd | grep -v '​objectClass:​ account'​ > /​tmp/​passwd.ldif
 +  ./​migrate_group.pl /etc/group /​tmp/​group.ldif
 +
 +Fichier /​tmp/​base.ldif pour créer les 2 branches dans l'​annuaire (People et Group) :
 +  dn: ou=People,​dc=my,​dc=home
 +  ou: People
 +  objectClass:​ top
 +  objectClass:​ organizationalUnit
 +  ​
 +  dn: ou=Group,​dc=gcu-squad,​dc=org
 +  ou: Group
 +  objectClass:​ top
 +  objectClass:​ organizationalUnit
 +
 +Maintenant on colle tout ça dans le serveur LDAP :
 +  ldapadd -D '​cn=admin,​ dc=my, dc=home'​ -c -x -W -f /​tmp/​base.ldif
 +  ldapadd -D '​cn=admin,​ dc=my, dc=home'​ -c -x -W -f /​tmp/​group.ldif
 +  ldapadd -D '​cn=admin,​ dc=my, dc=home'​ -c -x -W -f /​tmp/​passwd.ldif
 +
 +Et voilà, votre annuaire est peuplé.
 +
 +
 +===== Configuration du truc ldap =====
 +
 +Vérifiez que les paramètres suffix et rootdn ont été correctement renseignés par debconf :
 +  <​snip>​
 +  suffix ​         "​dc=gcu-squad,​dc=org"​
 +  rootdn ​         "​cn=admin,​dc=gcu-squad,​dc=org"​
 +  </​snip>​
 +On vérifie aussi que les ACL sont correctes :
 +  <​snip>​
 +  access to attrs=userPassword,​shadowLastChange
 +        by dn="​cn=admin,​dc=gcu-squad,​dc=org"​ write
 +        by anonymous auth
 +        by self write
 +  ​
 +  access to dn.base=""​ by * read
 +  ​
 +  access to *
 +        by dn="​cn=admin,​dc=gcu-squad,​dc=org"​ write
 +        by * read
 +  </​snip>​
 +
 +Et voilà, /​etc/​init.d/​slapd restart.
 +
 +===== Mise en place des trucs dans les trucs de pam et nss =====
 +C'est super classe d'​avoir un annuaire LDAP avec un tas de gens dedans, mais c'est encore mieux si on l'​utilise. Nous allons donc configurer pam et nss pour utiliser LDAP à la place de de /etc/passwd (en fait, on va quand même garder /etc/passwd pour le root et les comptes système).
 +
 +==== Installation d'​autres trucs pour connecter les machins ====
 +Nécéssaire à la connexion de pam et nss à ldap:
 +  sudo aptitude install libnss-ldap libpam-ldap
 +=== NSS ===
 +Configuration de nss: vim /​etc/​libnss-ldap.conf
 +  host ip.du.serveur.ldap ​
 +  base dc=gcu-squad,​dc=org
 +  ldap_version 3
 +  rootbinddn cn=admin,​dc=gcu-squad,​dc=org ​
 +
 +ensuite vim /​etc/​nsswitch.conf
 +  passwd: ​        ​compat ldap
 +  group: ​         compat ldap
 +  shadow: ​        ​compat ldap
 +  ​
 +  hosts: ​         files dns
 +  networks: ​      files
 +  ​
 +  protocols: ​     db files
 +  services: ​      db files
 +  ethers: ​        db files
 +  rpc:            db files
 +  ​
 +  netgroup: ​      nis
 +
 +Il faut mettre le mot de passe du compte admin ldap dans /​etc/​libnss-ldap.secret
 +  # echo -n '​monpasskilestbien'​ > /​etc/​libnss-ldap.secret
 +**N'​UTILISEZ QUE ECHO -N ET NON UN ÉDITEUR DE TEXTE**
 +
 +En théorie, nss est configuré, supprimez de /etc/passwd un utilisateur qui a été importé dans la base LDAP, et faites
 +  getent passwd
 +Si une ligne contient l'​utilisateur,​ c'est bon, sinon, c'est que l'​utilisateur a été mal importé dans l'​annuaire ou qu'il y a un problème.
 +
 +Il est possible que vous ayez à relancer les services qui ont mis en cache ce nsswitch.conf,​ du genre sshd.
 +
 +=== pam ===
 +Cette partie est valide pour debian en tout cas, pour les autres distributions je ne sais pas.
 +
 +Votre fichier /​etc/​pam.d/​common-account doit ressembler à ça :
 +  account required ​       pam_unix.so
 +  account sufficient ​     pam_ldap.so
 +Et /​etc/​pam.d/​common-auth :
 +  auth    required ​       pam_unix.so nullok_secure
 +  auth    sufficient ​     pam_ldap.so use_first_pass
 +/​etc/​pam.d/​common-password :
 +  password ​  ​sufficient pam_ldap.so
 +  password ​  ​required ​  ​pam_unix.so nullok obscure min=4 max=8 md5
 +
 +Et voilà, reste à tester tout ça.
 +
 +
 +
 +===== Testage des trucs =====
 +Les users ayant été dupliqués et non déplacés depuis /​etc/​passwd,​ il est important de supprimer de /etc/passwd l'​utilisateur que vous voulez tester. N'​utilisez pas vim /etc/passwd mais vipw, merci.
 +
 +Une fois l'​utilisateur supprimé, on essaie de se logger avec celui-ci :
 +  john@gcu-squad.org:​~$ su - mike
 +  Password:
 +  mike@gcu-squad.org:​~$
 +
 +Pour encore plus de fun voyez [[unix:​postfix_ldap]].
 +
 +TODO: ssl, auth ldap avec dovecot
 +===== Tools pour ajouter des trucs dans le truc ldap =====
 +==== directory-administrator ====
 +Truc en clicka-convi pour ajouter des utilisateurs facilement. ​
 +http://​diradmin.open-it.org/​
 +==== LDAPadduser ====
 +Tout petit bout de codaz en python avec le module ldap, ajoute un utilisateur système standard dans la base LDAP. Le code est très simple, à vous d'​adapter selon vos besoins.
 +
 +http://​shound.org/​~semial/​codaz/​ldapadduser.tgz
linux/auth_ldap.txt · Last modified: 2010/01/12 13:29 (external edit)