OpenDJ
Modifié par Aurelie Bertrand le 2025/10/10 10:25
OpenDJ
Installation
- Commencer par récupérer la dernière version du fichier opendj-4.x.x_all.deb sur le site https://github.com/OpenIdentityPlatform/OpenDJ/releases :
wget https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/4.x.x/opendj-4.x.x_all.deb
- Lancer l’installation :
sudo dpkg -i opendj_4.x.x_all.deb
Paramétrage initial
Afin de simplifier le paramétrage d'OpenDJ, nous allons créer un fichier “setupOpenDJ.props” contenant les options disponibles pour répondre à l'utilitaire "setup" d’OpenDJ (cela permet d'éviter l’interface de paramétrage).
Le contenu de ce fichier est détaillé ci-dessous :
#
# Sample properties file to set up OpenDJ directory server
# See OpenDJ Setup command man for more options
#
# Root user Distinguished Name (DN) identifies a user who can perform all operations allowed for the server
rootUserDN =cn=Directory Manager
# Password for root user LDAP
rootUserPassword =adminOpenDJ1
# OpenDJ uses fully qualified host name in self-signed certificates and for identification when you use replication
hostname =localhost.localdomain
# Port used for connection with LDAP
ldapPort =389
# This is the service port used to configure the server and to run tasks
adminConnectorPort =4444
# Identifies the implementation of the repository that holds your data
backendType =je
# Directory Name for your LDAP
baseDN =dc=digdash,dc=com
addBaseEntry =true
# Secure LDAP Port used for SSL connection
ldapsPort =636
# Use StartTLS to negotiate a secure connection between a client and server
enableStartTLS =false
# Self-signed certificates for externally facing ports facilitate testing, but are not intended for production use
generateSelfSignedCertificate =true
# Start at the end of setup
start =true
# Sample properties file to set up OpenDJ directory server
# See OpenDJ Setup command man for more options
#
# Root user Distinguished Name (DN) identifies a user who can perform all operations allowed for the server
rootUserDN =cn=Directory Manager
# Password for root user LDAP
rootUserPassword =adminOpenDJ1
# OpenDJ uses fully qualified host name in self-signed certificates and for identification when you use replication
hostname =localhost.localdomain
# Port used for connection with LDAP
ldapPort =389
# This is the service port used to configure the server and to run tasks
adminConnectorPort =4444
# Identifies the implementation of the repository that holds your data
backendType =je
# Directory Name for your LDAP
baseDN =dc=digdash,dc=com
addBaseEntry =true
# Secure LDAP Port used for SSL connection
ldapsPort =636
# Use StartTLS to negotiate a secure connection between a client and server
enableStartTLS =false
# Self-signed certificates for externally facing ports facilitate testing, but are not intended for production use
generateSelfSignedCertificate =true
# Start at the end of setup
start =true
Après avoir enregistré le fichier, exécuter la ligne de commande suivante :
sudo /opt/opendj/setup --cli --propertiesFilePath setupOpenDJ.props --acceptLicense --no-prompt
Paramétrage supplémentaire
- Se placer dans le répertoire d’installation d’OpenDJ :
cd /opt/opendj/bin/
Les fichiers LDIF peuvent être téléchargés en cliquant sur le lien suivant .
- Créer les organisations grâce au fichier “neworganisation.ldif” ci-dessous :
sudo /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" neworganisation.ldif
dn: ou=default,dc=digdash,dc=com
objectClass: organizationalUnit
ou: default
objectClass: organizationalUnit
ou: default
- Définir le vérificateur de mot de passe "Custom Character-set Password Validator":
sudo /opt/opendj/bin/dsconfig create-password-validator --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" --validator-name "Custom Character-set Password Validator" --set character-set:1:abcdefghijklmnopqrstuvwxyz --set character-set:1:ABCDEFGHIJKLMNOPQRSTUVWXYZ --set character-set:1:0123456789 --set "character-set:1:\!\"#$%&'()*+,-./:;<=>?@[]^_\`{|}~" --set enabled:true --type character-set --no-prompt --trustAll --set allow-unclassified-characters:true
- Créer le second vérificateur de mot de passe "Custom length Password Validator":
sudo /opt/opendj/bin/dsconfig create-password-validator --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" --validator-name "Custom length Password Validator" --set min-password-length:12 --set enabled:true --type length-based --no-prompt
- Appliquer les deux vérificateurs de mot de passe :
sudo /opt/opendj/bin/dsconfig set-password-policy-prop --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" --policy-name "Default Password Policy" --set password-validator:"Custom Character-set Password Validator" --set password-validator:"Custom length Password Validator" --no-prompt
- Définir la politique de mot de passe pour les utilisateurs grâce au fichier “ppolicy.ldif” ci-dessous :
sudo /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" ppolicy.ldif
dn: cn=ppolicy,ou=default,dc=digdash,dc=com
objectClass: top
objectClass: subentry
objectClass: pwdPolicy
cn: ppolicy
pwdAttribute: userPassword
pwdAllowUserChange: TRUE
pwdCheckQuality: 1
pwdExpireWarning: 600
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 900
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMustChange: FALSE
pwdSafeModify: FALSE
subtreeSpecification: {base "ou=users", specificationFilter "!(uid=admin)" }
objectClass: top
objectClass: subentry
objectClass: pwdPolicy
cn: ppolicy
pwdAttribute: userPassword
pwdAllowUserChange: TRUE
pwdCheckQuality: 1
pwdExpireWarning: 600
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 900
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMustChange: FALSE
pwdSafeModify: FALSE
subtreeSpecification: {base "ou=users", specificationFilter "!(uid=admin)" }
- Définir une seconde politique de mot de passe pour l’admin grâce au fichier “ppolicy-admin.ldif” ci-dessous :
sudo /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" ppolicy-admin.ldif
dn: cn=ppolicy-admin,ou=default,dc=digdash,dc=com
objectClass: top
objectClass: subentry
objectClass: pwdPolicy
cn: ppolicy-admin
pwdAttribute: userPassword
pwdAllowUserChange: TRUE
pwdCheckQuality: 1
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: FALSE
pwdMaxAge: 0
pwdMinAge: 0
pwdMustChange: FALSE
pwdSafeModify: FALSE
subtreeSpecification: {base "ou=users", specificationFilter "(uid=admin)" }
objectClass: top
objectClass: subentry
objectClass: pwdPolicy
cn: ppolicy-admin
pwdAttribute: userPassword
pwdAllowUserChange: TRUE
pwdCheckQuality: 1
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: FALSE
pwdMaxAge: 0
pwdMinAge: 0
pwdMustChange: FALSE
pwdSafeModify: FALSE
subtreeSpecification: {base "ou=users", specificationFilter "(uid=admin)" }
- Modifier la politique de mot de passe pour autoriser les mots de passe pré-encodés (utiles pour les restaurations dans Digdash) :
sudo /opt/opendj/bin/dsconfig set-password-policy-prop --policy-name "Default Password Policy" --set allow-pre-encoded-passwords:true --hostname localhost --trustAll --bindDN "cn=directory manager" --bindPassword "adminOpenDJ1" --no-prompt
- Créer un utilisateur admin pour digdash via le fichier “create_user_admin.ldif” ci-dessous :
sudo /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" create_user_admin.ldif
dn: uid=admin,ou=default,dc=digdash,dc=com
objectClass: shadowAccount
objectClass: inetOrgPerson
cn: Admin Domain Default
sn: Default
uid: admin_default
objectClass: shadowAccount
objectClass: inetOrgPerson
cn: Admin Domain Default
sn: Default
uid: admin_default
- Lui affecter les droits nécessaires en utilisant les fichiers “add_admin_right.ldif” et “add_admin_right2.ldif” ci-dessous :
sudo /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" add_admin_right.ldif
dn: ou=default,dc=digdash,dc=com
changetype: modify
add: aci
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow write on userpassword and shadowlastchange for admin"; allow(write) (userdn = "ldap:///uid=admin,ou=default,dc=digdash,dc=com");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow read,write on userpassword and shadowlastchange for auth users"; allow(read) (userdn = "ldap:///all");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow read on userpassword and shadowlastchange for anonymous"; allow(selfwrite) (userdn = "ldap:///anyone");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "*")(version 3.0; acl "allow write on * for admin"; allow(all) (userdn = "ldap:///uid=admin,ou=default,dc=digdash,dc=com");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "*")(version 3.0; acl "allow read on * for anonymous"; allow(read) (userdn = "ldap:///all");)
changetype: modify
add: aci
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow write on userpassword and shadowlastchange for admin"; allow(write) (userdn = "ldap:///uid=admin,ou=default,dc=digdash,dc=com");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow read,write on userpassword and shadowlastchange for auth users"; allow(read) (userdn = "ldap:///all");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow read on userpassword and shadowlastchange for anonymous"; allow(selfwrite) (userdn = "ldap:///anyone");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "*")(version 3.0; acl "allow write on * for admin"; allow(all) (userdn = "ldap:///uid=admin,ou=default,dc=digdash,dc=com");)
aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "*")(version 3.0; acl "allow read on * for anonymous"; allow(read) (userdn = "ldap:///all");)
sudo /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" add_admin_right2.ldif
dn: uid=admin,ou=default,dc=digdash,dc=com
changetype: modify
add: ds-privilege-name
ds-privilege-name: config-read
ds-privilege-name: password-reset
ds-privilege-name: unindexed-search
changetype: modify
add: ds-privilege-name
ds-privilege-name: config-read
ds-privilege-name: password-reset
ds-privilege-name: unindexed-search
- Générer un mot de passe pour l’administrateur et le conserver en mémoire pour plus tard :
sudo /opt/opendj/bin/ldappasswordmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" --authzID "uid=admin,ou=default,dc=digdash,dc=com"
Activation du lancement automatique du service au démarrage
- Créer le fichier opendj.service :
sudo vi /etc/systemd/system/opendj.service
- Et y coller les lignes suivantes :
[Unit]
Description=OpenDJ Server Daemon
Wants=network-online.target
After=network-online.target
Conflicts=shutdown.target
[Service]
Type=simple
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/opt/opendj/bin/start-ds --quiet
ExecStop=/opt/opendj/bin/stop-ds --quiet
[Install]
WantedBy=multi-user.target
Description=OpenDJ Server Daemon
Wants=network-online.target
After=network-online.target
Conflicts=shutdown.target
[Service]
Type=simple
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/opt/opendj/bin/start-ds --quiet
ExecStop=/opt/opendj/bin/stop-ds --quiet
[Install]
WantedBy=multi-user.target
- Ensuite taper les commandes suivantes :
sudo /opt/opendj/bin/stop-ds
systemctl daemon-reload
systemctl enable --now opendj
systemctl status opendj
systemctl daemon-reload
systemctl enable --now opendj
systemctl status opendj
Fonction utile
L'opération ci-dessous ne fait pas partie de l'installation.
Il peut néanmoins être utile de la connaître pour une utilisation ultérieure.
Étendre la limite pour les recherches LDAP
Étendre la limite de recherche du LDAP à plus de 1000 utilisateurs avec le fichier “extend_search_limit.ldif” ci-dessous :
sudo /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword "adminOpenDJ1" extend_search_limit.ldif
dn: uid=admin,ou=default,dc=digdash,dc=com
changetype: modify
add: ds-rlim-size-limit
ds-rlim-size-limit: 10000
changetype: modify
add: ds-rlim-size-limit
ds-rlim-size-limit: 10000
