Afficher/cacher Sommaire
ldap
How To Install and Configure OpenLDAP and phpLDAPadmin on Ubuntu 16.04
How To Configure OpenLDAP and Perform Administrative LDAP Tasks
RainLoop Webmail Active Directory LDAP Integration
LDAP pas à pas en 20 min
Nextcloud User Authentication with LDAP
Installer ldap
sudo apt -y install slapd ldap-utils # mp admin 67AAxy8sZ3v4Ku
Reconfigurer ldap
sudo dpkg-reconfigure slapd
Voulez-vous omettre la configuration d’OpenLDAP ? Non
Nom de domaine : cinay.pw
Nom d’entité (« organization ») : yann
Mot de passe de l’administrateur : xxxxxxxxxxxxx
Module de base de données à utiliser : MDB
Faut-il supprimer la base de données lors de la purge du paquet ? Non
Faut-il déplacer l’ancienne base de données ? Oui
Vérification
sudo netstat -antup | grep -i 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 23833/slapd
tcp6 0 0 :::389 :::* LISTEN 23833/slapd
PhpLdapAdmin
Installation
php-ldap
apt install php7.0-ldap #PHP7
Téléchargement
wget -O phpLDAPadmin.tar.gz http://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.tgz/download
Décompression
tar xvzf phpLDAPadmin.tar.gz -C .
Déplacer dans le dossier web
mv phpldapadmin-1.2.3 /var/www/phpldapadmin
Files owned by root, www-data can just read
chown -R root: /var/www/phpldapadmin
find /var/www/phpldapadmin -type f | xargs sudo chmod 644
find /var/www/phpldapadmin -type d | xargs sudo chmod 755
config.php contains sensitive data, restrict its access
cp /var/www/phpldapadmin/config/config.php.example /var/www/phpldapadmin/config/config.php
chown root:www-data /var/www/phpldapadmin/config/config.php
chmod 640 /var/www/phpldapadmin/config/config.php
Modifier parefeu pour les accès clients , ajout des ports ldap et ldaps en entrée
sudo nano /etc/iptables/rules.v4
...
-A INPUT -p tcp -m tcp --dport 389 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 636 -j ACCEPT
...
Test connexion ldap avec ldapwhoami
ldapwhoami -H ldap:// -x
retourne anonymous
Configuration PhpLdapAdmin
sudo nano /var/www/phpldapadmin/config/config.php
Rechercher Ctrl W $servers->setValue(‘server’,’name’
$servers->setValue('server','name','Cinay LDAP Server');
Rechercher Ctrl W $servers->setValue(‘server’,’base’,array(‘’))
$servers->setValue('server','base',array('dc=cinay,dc=pw'));
Hide the warnings for invalid objectClasses/attributes in templates.
$config->custom->appearance['hide_template_warning'] = true;
Configuration Vhost NGINX
sudo nano /etc/nginx/conf.d/cinay.pw.d/phpldapadmin.conf
location /phpldap {
alias /var/www/phpldapadmin ;
index index.php;
try_files $uri $uri/ index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock; # PHP7.0
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
Vérifier et relancer le service
sudo nginx -t
sudo systemctl restart nginx
Connexion https://cinay.pw/phpldap/ cn=admin,dc=cinay,dc=pw mot-de-passe
phpldapadmin Fatal error: Cannot redeclare password_hash()
changer les fichiers sous /var/www/phpldapadmin/lib/
functions.php
PageRender.php
ds_ldap.php
Configuration LDAP StartTLS
Bien que nous ayons crypté notre interface Web, les clients LDAP externes se connectent toujours au serveur et transmettent des informations en texte brut.
Utilisons nos certificats SSL Let’s Encrypt pour ajouter un cryptage à notre serveur LDAP.
Configuration de Slapd pour offrir des connexions sécurisées
Nous devons ajouter l’utilisateur openldap au groupe ssl-cert afin que slapd puisse lire la clé privée:
sudo usermod -aG ssl-cert openldap
Redémarrez le slapd afin qu’il reprenne le nouveau groupe:
sudo systemctl restart slapd
Enfin, nous devons configurer slapd pour utiliser ces certificats et ces clés.
Pour ce faire, nous mettons toutes nos modifications de configuration dans un fichier LDIF (format d’échange de données LDAP)
puis chargeons les modifications dans notre serveur LDAP avec la commande ldapmodify.
sudo -s
mkdir /etc/ssl/slapd/
# copy the files
cp /root/.acme.sh/cinay.pw/cinay.pw.cer /etc/ssl/slapd/slapd-cinay-cert.pem
cp /root/.acme.sh/cinay.pw/fullchain.cer /etc/ssl/slapd/slapd-cinay-fullchain.pem
cp /root/.acme.sh/cinay.pw/cinay.pw.key /etc/ssl/slapd/slapd-cinay-key.pem
# adjust permissions of the private key
chown :ssl-cert /etc/ssl/slapd/slapd-cinay-key.pem
chmod 640 /etc/ssl/slapd/slapd-cinay-key.pem
# restart slapd to load new certificates
systemctl restart slapd
Le fichier ldif
nano ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/slapd/slapd-cinay-fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/slapd/slapd-cinay-cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/slapd/slapd-cinay-key.pem
Appliquer les modifications
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
create: 2019-12-25
modifying entry "cn=config"
Nous n’avons pas besoin de relancer slapd pour charger les nouveaux certificats, cela s’est produit automatiquement lorsque nous avons mis à jour la configuration avec ldapmodify.
Exécutez la commande ldapwhoami une fois de plus, pour vérifier. Cette fois, nous devons utiliser le nom d’hôte approprié et ajouter l’option -ZZ pour forcer une connexion sécurisée:
Nous avons besoin du nom d’hôte complet lors de l’utilisation d’une connexion sécurisée car le client vérifiera que le nom d’hôte correspond au nom d’hôte du certificat.
Cela empêche les attaques man-in-the-middle où un attaquant pourrait intercepter votre connexion et se faire passer pour votre serveur.
Si la commande ldapwhoami renvoie anonymous, sans erreurs. Nous avons crypté avec succès notre connexion LDAP.
ldapwhoami -H ldap://cinay.pw -x -ZZ
Modifier parefeu pour ne laisser que ldaps en entrée
sudo nano /etc/iptables/rules.v4
Supprimer la ligne contenant -dport 389
Relancer le serveur pour la prise en charge des règles iptables
Annuaire LDAP
Init
Ajout init.ldif
Création du fichier init.ldif
nano init.ldif
dn: ou=people, dc=cinay, dc=pw
objectclass: top
objectClass: organizationalUnit
ou: people
description: Branche gens
dn: ou=utilisateurs, ou=people, dc=cinay, dc=pw
objectclass: top
objectClass: organizationalUnit
ou: utilisateurs
description: Branche utilisateurs
dn: ou=systemes, ou=people, dc=cinay, dc=pw
objectclass: top
objectClass: organizationalUnit
ou: systemes
description: Branche systemes
dn: ou=services, dc=cinay, dc=pw
objectclass: top
objectClass: organizationalUnit
ou: services
description: Branche services
dn: ou=groupes, ou=services, dc=cinay, dc=pw
objectclass: top
objectclass: organizationalUnit
ou: groupes
description: Branche groupes
dn: ou=sudo, ou=services, dc=cinay, dc=pw
objectclass: top
objectClass: organizationalUnit
ou: sudo
description: Branche sudo
Injection du fichier init.ldif dans la configuration
sudo ldapadd -cxWD cn=admin,dc=cinay,dc=pw -f init.ldif
Ajouter un groupe dans l’annuaire
Insérer un groupe de classe posixGroup dans groupes.services.cinay.pw
Editer un fichier gr.ldif
dn: cn=gspm, ou=groupes, ou=services, dc=cinay, dc=pw
objectClass: top
objectClass: posixGroup
cn: gspm
gidNumber: 1111
description: groupe de test gspm
Mots de passe codés
Génération de mots de passe utilisateurs aléatoires et encodage
Exemple
$ head -c 6 /dev/urandom | base64
CcOuap1v
Encodage
sudo slappasswd -v -h "{SSHA}" -s CcOuap1v
{SSHA}wkQGSlCXDWIU78DGdgalYv6wcmEo+jrD
C’est le mot de passe encodé qui est dans la variable userPassword
Création du fichier des utilisateurs users.ldif
nano users.ldif
dn: uid=yannick, ou=utilisateurs, ou=people, dc=cinay, dc=pw
objectClass: top
objectClass: posixAccount
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: yannick
cn: Yannick M
sn: Yannick
givenName: Yannick
uidNumber: 1100
gidNumber: 1111
homeDirectory: /home/yannick
loginShell: /bin/bash
userPassword: {SSHA}sFvMjE9I6iczy8c6fowGMJONYWPi2jr3
mail: yannick@cinay.pw
l: France
ou: gspm
dn: uid=claudine, ou=utilisateurs, ou=people, dc=cinay, dc=pw
objectClass: top
objectClass: posixAccount
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: claudine
cn: Claudine M
sn: Claudine
givenName: Yannick
uidNumber: 1101
gidNumber: 1112
homeDirectory: /home/claudine
loginShell: /bin/bash
userPassword: {SSHA}ExFo1mtgADG1U1g6K8UpMt9PvnxnlE5z
mail: claudine@cinay.pw
l: France
ou: gspm
Il faut une ligne vide avant chaque balise dn du fichier
On utilise la commande ldapadd en mode d’authentification simple pour insérer les comptes dans l’annuaire.
sudo ldapadd -cxWD cn=admin,dc=cinay,dc=pw -f users.ldif
Lister les entrées
ldapsearch -LLL -x -H ldap:/// -b "dc=cinay,dc=pw" -D cn=admin,dc=cinay,dc=pw -W
Effacer une entrée
ldapdelete 'uid=yannick,ou=utilisateurs,dc=cinay,dc=pw'
Nextcloud ldap
Se connecter en administrateuret +Applications
Activer LDAP user and group backend
Retourner en Administration et Intégration LDAP/AD