Vendredi 23 novembre 2018

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


Nextcloud SSO/SAML

Configuring Single-Sign-On