Bonsoir,
Changement de cap, je ne suis pas arrivé à faire fonctionner les clés avec Openldap serveur installé dans une jail. Voici la méthode qui fonctionne en
embedded sans JAIL en
ZFS. Dans le tuto final on incluera la methode pour UFS.
Les pré-requis de départ sont les suivants :
- nous disposons d'un pool ZFS (dans le tuto nommé "pool1").
- le groupe "ldap" a été ajouté dans Nas4Free via le webgui avec l'id = 389.
- le user "ldap" a été ajouté dans Nas4Free via le webgui avec l'id = 389, le groupe principal = "ldap" + le groupe "wheel", avec un shell = "nologin" et aucun mot de passe.
- le service "Services|CIFS/SMB|Réglages" est activé (Authentification="login local", Protocole Maximum="SMB2", Jeu de caractères Dos="CP 437 (Latin US), Jeu de caractères Unix="UTF-8", Mots de passe vides coché).
- le service "Accès|LDAP" est activé (à adapter en fonction de votre configuration) :
URI = "ldap://192.168.0.21"
DN de base = "dc=julp,dc=com"
Bind anonyme coché
DN pour le bind racine = "cn=manager,dc=julp,dc=com"
Mots de passe pour le bind racine = "openldap" (
à adapter différemment si vous le désirez, pour le tuto ce sera toujours celui-ci ...)
Chiffrement du mot de passe = "md5"
Suffixe utilisateur = "ou=Users"
Suffixe groupe = "ou=Groups"
Suffixe mot de passe = "ou=Users"
Suffixe de la machine = "ou=Computers"
Paramètres auxiliaires =
"ldap_version 3
timelimit 30
bind_timelimit 30
bind_policy soft"
Pour un montage unionFS il faut créer une partition UFS formatée... 2go suffiront
Code: Select all
mount /dev/zvol/pool1/openldap /mnt/openldap
Code: Select all
mount_unionfs -o w /mnt/openldap/usr/ /usr/
Code: Select all
mount_unionfs -o w /mnt/openldap/var/ /var/
Code: Select all
setenv PKG_TMPDIR /mnt/openldap/tmp/
Code: Select all
setenv PACKAGESITE "ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-stable/Latest/"
Code: Select all
cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf
Code: Select all
chown ldap:ldap /var/db/openldap-data
Dans le Webui de Nas4free, il faut créer un utilisateur ldap et un groupe ldap (UID:389 et GID:389) sinon au redémarrage de Nas4free, le serveur openldap ne fonctionnera pas.
Code: Select all
cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG
A ce stade je configure ldap.conf, slapd.conf dans "/usr/local/etc/openldap"
SANS LES CLES
ldap.conf
Code: Select all
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
BASE dc=julp,dc=com
URI ldap://192.168.0.21
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
slapd.conf
Code: Select all
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
# Define global ACLs to disable default read access.
# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
# Load dynamic backend modules:
modulepath /usr/local/libexec/openldap
moduleload back_bdb
# moduleload back_hdb
# moduleload back_ldap
# Sample security restrictions
# Require integrity protection (prevent hijacking)
# Require 112-bit (3DES or better) encryption for updates
# Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64
# Sample access control policy:
# Root DSE: allow anyone to read it
# Subschema (sub)entry DSE: allow anyone to read it
# Other DSEs:
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
# Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
# by self write
# by users read
# by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
#######################################################################
# BDB database definitions
#######################################################################
database bdb
suffix "dc=julp,dc=com"
rootdn "cn=manager,dc=julp,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
rootpw {MD5}feSlkL+wVCSXPBHPOnFPSA==
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/db/openldap-data
# Indices to maintain
index objectClass eq
index cn,sn,uid,displayName pres,sub,eq
index uidNumber,gidNumber eq
le code secret de rootpw est généré par la commande
Code: Select all
/usr/local/sbin/slappasswd -h '{MD5}'
et enfin ma base de test : base.ldif
Code: Select all
dn: dc=julp,dc=com
dc: julp
objectclass: top
objectclass: domain
objectclass: domainRelatedObject
description: Mon annuaire
associatedDomain: julp.com
dn: ou=Utilisateurs,dc=julp,dc=com
objectclass: top
objectclass: organizationalUnit
ou: Utilisateurs
description: Les utilisateurs
dn: ou=Groupes,dc=julp,dc=com
objectclass: top
objectclass: organizationalUnit
ou: Groupes
description: Les groupes
dn: cn=Patrick Poivre d'Arvor,ou=Utilisateurs,dc=julp,dc=com
cn: Patrick Poivre d'Arvor
sn: ppda
objectclass: top
objectclass: person
objectclass: posixAccount
objectclass: shadowAccount
uid: ppda
uidnumber: 2000
gidnumber: 0
loginShell: /bin/bash
homeDirectory: /mnt/pool1/Photos
userpassword: {MD5}feSlkL+wVCSXPBHPOnFPSA==
dn: cn=wheel,ou=Groupes,dc=julp,dc=com
objectclass: top
objectclass: posixGroup
cn: wheel
gidNumber: 0
description: groupe wheel
memberUid: ppda
Ajouter dans postinit dans Système|Avancé|Scripts de commande
Code: Select all
mount /dev/zvol/pool1/opendlap /mnt/opendlap
Code: Select all
mount_unionfs -o w /mnt/openldap/usr/ /usr/
Code: Select all
mount_unionfs -o w /mnt/openldap/var/ /var/
Et dans Système|Avancé|rc.conf, définir la variable suivante :
Je lance ensuite openldap en mode debug
On peut aussi, mais sans mode debug :
- lancer le serveur OpenLdap avec la commande suivante :
- Stopper le serveur OpenLdap avec la commande suivante :
- Relancer le serveur OpenLdap avec la commande suivante :
Dans une autre console putty, si lancé en mode debug
J'incrémente ma base avec la commande
Code: Select all
/usr/local/bin/ldapadd -x -f base.ldif -W -D cn=manager,dc=julp,dc=com
On peut maintenant se connecter avec l'utilisateur enregistré "ppda" dans la base et cela fonctionne.
Les clés maintenant
Code: Select all
mkdir /usr/local/etc/openldap/certs
Code: Select all
openssl req -new -key cert.key -out cert.csr
En common name j'ai mis l ip de nas4free, mais on peut mettre dans le champ CN = l'URI du webgui "Accès|LDAP" et il faut que cela corresponde au hostname du serveur). En mettant le hosts à jour et en utilisant le hostname au lieu de l adresse IP dans LDAP.conf et le client LDAP webui.
Pour vérifier que son hostname est à jour, taper la commande "hostname".
Pour forcer le hostname, taper " hostname nas4free.julp.com" par exemple.
Code: Select all
openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt
Pour les clés j'ai aussi testé cette méthode et elle fonctionne également
Code: Select all
# cd /usr/local/etc/openldap
# mkdir certs
Je me suis ensuite positionné sur ce dossier et j'ai créé les clés
Code: Select all
# openssl genrsa -out cakey.pem 2048
# chmod 600 cakey.pem
# openssl req -new -x509 -days 3650 -key cakey.pem -out cacert.pem
Code: Select all
# openssl genrsa -out ldap1key.pem 2048
# chown ldap:ldap ldap1key.pem
# chmod 600 ldap1key.pem
# openssl req -new -key ldap1key.pem -out ldap1csr.pem
# openssl x509 -req -days 3650 -in ldap1csr.pem -CA cacert.pem -CAkey cakey.pem -set_serial 01 -out ldap1cert.pem
J'essayerai prochainement la méthode décrite dans le lien que tu as posté plus haut mais je pense que cela devrait fonctionner également sans problèmes
https://www.freebsd.org/doc/handbook/network-ldap.html
Mon fichier ldap.conf dans "/usr/local/etc/openldap"
Code: Select all
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
BASE dc=julp,dc=com
URI ldap://192.168.0.21
ssl start_tls
TLS_REQCERT demand
tls_cacert /usr/local/etc/openldap/certs/cacert.crt
SIZELIMIT 12
TIMELIMIT 15
DEREF never
Mon fichier slapd.conf dans "/usr/local/etc/openldap"
Code: Select all
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
# Define global ACLs to disable default read access.
# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
# Load dynamic backend modules:
modulepath /usr/local/libexec/openldap
moduleload back_bdb
# moduleload back_hdb
# moduleload back_ldap
security ssf=128
TLSCertificateFile /usr/local/etc/openldap/certs/cert.crt
TLSCertificateKeyFile /usr/local/etc/openldap/certs/cert.key
TLSCACertificateFile /usr/local/etc/openldap/certs/cacert.crt
# Sample security restrictions
# Require integrity protection (prevent hijacking)
# Require 112-bit (3DES or better) encryption for updates
# Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64
# Sample access control policy:
# Root DSE: allow anyone to read it
# Subschema (sub)entry DSE: allow anyone to read it
# Other DSEs:
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
# Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
# by self write
# by users read
# by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
#######################################################################
# BDB database definitions
#######################################################################
database bdb
suffix "dc=julp,dc=com"
rootdn "cn=manager,dc=julp,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
rootpw {MD5}feSlkL+wVCSXPBHPOnFPSA==
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/db/openldap-data
# Indices to maintain
index objectClass eq
index cn,sn,uid,displayName pres,sub,eq
index uidNumber,gidNumber eq
La commande pour incrémenter la base sans TLS
Code: Select all
/usr/local/bin/ldapadd -x -f base.ldif -W -D cn=manager,dc=julp,dc=com
La commande pour incrémenter la base avecTLS
Code: Select all
/usr/local/bin/ldapadd -Z -f base.ldif -W -D cn=manager,dc=julp,dc=com
Consulter la base SANS TLS
Consulter la base avecTLS
Cela fonctionne parfaitement bien
Pour terminer la base dbd fonctionne très bien contrairement aux idées préconçues que j'ai eu au départ.
client ldap Nas4Free
C'est en appliquant cette méthode qu'au final je me suis dit que peut être si cela ne fonctionnait pas dans la jail c est que tout simplement openssl n'est pas installé nativement dans nas4free contrairement au jails ou ça l'est
J'avais ce message d'erreur
Du coup prochaine étape, je recommence dans une jail et j'installe openssl dans nas4free
Edit: Apres plusieurs tentatives, impossible de faire fonctionner le TLS dans une jail.