LDAP¶
Canaille peut utiliser OpenLDAP comme base de données principale. Elle est utilisée quand le paramètre de configuration CANAILLE_LDAP est défini. Par exemple :
[CANAILLE_LDAP]
URI = "ldap://ldap"
ROOT_DN = "dc=example,dc=org"
BIND_DN = "cn=admin,dc=example,dc=org"
BIND_PW = "very-secret-password"
USER_BASE = "ou=users,dc=example,dc=org"
USER_CLASS = "inetOrgPerson"
GROUP_BASE = "ou=groups,dc=example,dc=org"
Si vous voulez utiliser l’authentification TOTP/HOTP, vous devrez ajouter la classe oathHOTPToken à l’utilisateur :
USER_CLASS = ["inetOrgPerson", "oathHOTPToken"]
Vous pouvez trouver plus de détails sur la configuration LDAP dans la dedicated section.
Note
Actuellement, seuls les schémas inetOrgPerson, oathHOTPToken et groupOfNames ont été testés. Si vous voulez utiliser différents schémas ou serveurs LDAP, des adaptations peuvent être nécessaires. Toute amélioration est bienvenue.
Intégration de surcouches (« overlays ») OpenLDAP¶
Canaille peut s’intégrer avec plusieurs « overlays » OpenLDAP :
memberof / refint¶
les greffons memberof et refint sont nécessaires pour que l’appartenance d’un utilisateur à un groupe fonctionne correctement dans Canaille.
Voici un exemple de configuration compatible avec canaille :
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: memberof
dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: refint
dn: olcOverlay=refint,olcDatabase={1}mdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof
olcRefintAttribute: member
olcRefintAttribute: manager
olcRefintAttribute: owner
Vous pouvez adapter et charger ces fichiers de configuration avec :
# Adapt those commands according to your setup
$ sudo ldapadd -Q -H ldapi:/// -Y EXTERNAL -f memberof-config.ldif
$ sudo ldapadd -Q -H ldapi:/// -Y EXTERNAL -f refint-config.ldif
ppolicy¶
Si l’overlay ppolicy est configuré et que l’attribut pwdEndTime est disponible (depuis OpenLDAP 2.6), alors la gestion du bloquage de compte sera activée dans Canaille. Pour permettre aux utilisateurs de gérer l’expiration de leur compte, ils ont besoin du droit d”écriture sur l’attribut lock_date.
Voici un exemple de configuration compatible avec canaille :
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: ppolicy
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=passwordDefault,dc=example,dc=org
olcPPolicyUseLockout: TRUE
dn: cn=passwordDefault,dc=example,dc=org
objectClass: person
objectClass: top
objectClass: pwdPolicy
sn: passwordDefault
cn: passwordDefault
pwdAttribute: userPassword
pwdMustChange: TRUE
pwdLockout: TRUE
pwdAllowUserChange: TRUE
pwdGraceAuthNLimit: 1
pwdMaxFailure: 999
Vous pouvez adapter et charger ces fichiers de configuration avec :
# Adapt those commands according to your setup
$ sudo ldapadd -Q -H ldapi:/// -Y EXTERNAL -f ppolicy-config.ldif
$ sudo ldapadd -Q -H ldapi:/// -Y EXTERNAL -f ppolicy.ldif
otp¶
If the otp overlay is configured, you will be able to add one-time passcode authentication in canaille.
Voici un exemple de configuration compatible avec canaille :
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: otp
dn: olcOverlay=otp,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
olcOverlay: otp
Vous pouvez adapter et charger ce fichier de configuration avec :
# Adapt this command according to your setup
$ sudo ldapadd -Q -H ldapi:/// -Y EXTERNAL -f otp-config.ldif
Vous aurez aussi besoin d’ajouter la classe oathHOTPToken à l’utilisateur :
[CANAILLE_LDAP]
...
USER_CLASS = ["inetOrgPerson", "oathHOTPToken"]
Manual schema installation¶
Schema installation can be automatically done using the install command.
If for some reason you prefer to install schemas manually, here is how to do.
First of all, you need to locate the oauth2-openldap.ldif on your system, or copy it from the Canaille repository.
Using ldapadd¶
$ sudo ldapadd -Q -H ldapi:/// -Y EXTERNAL -f /path/to/oauth2-openldap.ldif
Using slapadd¶
Soyez attentif à arrêter votre serveur LDAP avant d’exécuter slapadd
$ sudo service slapd stop
$ sudo -u openldap slapadd -n0 -l /path/to/oauth2-openldap.ldif
$ sudo service slapd start
Schema update¶
OpenLDAP provides no way of migrating schemas. Canaille provides its own LDAP OIDC schemas, luckily they are quite stable, but fixes may happen. Updating LDAP schemas may be a tricky operation, the safest way to achieve this is to follow those steps:
Backup and purge¶
First, let us backup the OIDC objects and then remove them from the database. Please perform your own backups too, in case something unexpected happens.
$ canaille dump client authorizationcode consent token > dump.json
$ canaille delete client --noconfirm
$ canaille delete authorizationcode --noconfirm
$ canaille delete consent --noconfirm
$ canaille delete token --noconfirm
Delete the old schema¶
You can use the slapmodify command to delete the old schema.
It is supposed to be executed while your LDAP server is turned off.
$ sudo slapmodify -n0 <<EOL
dn: cn=oauth,cn=schema,cn=config
changetype: delete
EOL
Add the new schema¶
To add the new schema, run the install command or follow instructions on the Manual schema installation section.
Restore the data¶
Now that the schemas are updated, you can restore the saved data:
$ canaille restore < dump.json