ApacheDS
Directory service for central authentication and authorization. The key feature of this service is the implementation of the LDAP protocol, which can be consumed by most services.
Project website: https://directory.apache.org/apacheds/
Hierarchy structure
Service accounts
Path: ou=bind,ou=ecg
Provide bind users for client services (e.g. Nextcloud, gitea)
User accounts and mailbox shadow entries
Path: ou=users,ou=ecg
Provides two types of entries:
- users: representing the ECG members
- mailbox shadow entries: acting as a shadow account for email boxes of certain ECG groups. Their purpose is to have an account for additional email boxes that as accessible via the LDAP protocol and thus allows us finer grained processes around account overview and password control.
The two types can be distinguished by the following rules:
-
users have a
givenNameattributeExample search query:
ldapsearche "(givenName=*)" -
mailbox shadow accounts have no
givenNameattribute. Also the values ofdn,snanddisplayNameMUST contain the same value (but only for the sake of discriminability).Example search query:
ldapsearche "(!(givenName=*))"
Groups
Path: ou=users,ou=ecg
Contains all types of groups:
- functional (e.g.
FED_DE_LC_Berlin) - technical (e.g.
admin_gitea)
Attributes
Users
objectClass: currentlyinetOrgPersonis used as the default typeuid: generated following a defined convention (TBD: where is that documented?)givenName: The given name of the member. Non restrictions here regarding special characterscnanddisplayName: The human readable display name of that member-
description: The private email address of that member.Purpose: second factor secret for password recovery
-
mail: The ECG email address employeeNumber: The member id of the old (pre migration) user backoffice. Currently not used anywhere. Not sure whether this might be used in the future.userPassword: for authentication in client services
Groups
cn: They follow a defined naming convention (TBD: where is that documented?)
Design decisions
- root node
ou=ecg: The initial value predefined by Hostsharing wasou=ecogood,ou=org. That was semantically fine, but practically too long for no reason. They were asked to changed that intoo=ecg. The provider failed to implement that and ended up with the current value. Later investigation showed that this didn't happen due to technical limits. Probably the provider failed by renaming the existing partition instead of creating a sane configuration from scratch.
Alternative hierarchy structure
This is an alternative approach which is developed to overcome all historical shortcomings and provide a clear and sane structure.
The only reason that prevents from a migration is the lack of a user management software, that is sustainable from the ECG's point of view. Currently we are using the LDAPadmin. As this tool is far from optimal, it's still working mostly reliable and has support from the provider Hostsharing.
o=ecgou=usersou=members: members of the ECG in terms of humansou=functional: backing accounts for the group email boxes (presse, etc.)ou=technical: e.g.nc.folderadminou=service: bind users for client services like gitea or Nextcloud
ou=groupsfunctional: all functional and potentially self managed groups that represent group entities from the ECG like FED_DE_LC_Berlinadmins: administrator group per service like nextcloud, wiki
The currently existing mailbox shadow entries shall be mapped in a one-by-one relation to the groups. This would vastly simplify the maintenance of these two entities.
Rededicated attributes
Some attributes have been rededicated in their purpose differently as originally defined. They are grouped by their owning service
Gitea
manager: containsuid=git,ou=bind,ou=ecgwhen the user shall have admin permissions in Gitea
Account service backend
Currently this service tries to cope without an additional separate storage tier. All required values that need to be written are stored in appropriate LDAP entries. Some fields have to be rededicated for that reason.
businessCategory: Backup of theuserPasswordused for the impersonation featurecarLicense: Private token for a password reset.stateOrProvinceName: Password reset link creation timestamp