Groupe OpenDirectory, objectClass groupOfNames et olcAccess

Ceux qui me suivent sur Twitter ou autre ont su que j’ai déployé la solution iFolder chez l’un de mes clients, c’est un outil qui permet de faire de la synchro de fichier à la manière de Dropbox, mais depuis un serveur interne à la société (donc confidentialité des données et espace disque bien moins cher).

Lorsque j’ai déployé cet outil (dont je parlerais dans un prochain article), je me suis retrouvé confronté à un problème de taille lors de la synchronisation avec le LDAP fourni par l’OpenDirectory. iFolder comme d’autres est fait pour travailler avec des objets particuliers du LDAP, des unités d’organisation, des « groupOfNames » standard au LDAP, etc. Notre OpenDirectory utilise lui des containers pour stocker l’ensemble des utilisateurs ainsi que des groupes POSIX. Malheureusement iFolder n’est pas compatible avec cela.

Voici donc une solution maison permettant de synchroniser un groupe OpenDirectory avec un groupe plus commun en matière de LDAP.

Bien que l’article reste simple, quelques manipulations peuvent être quelque peu avancées… N’oubliez pas de faire une sauvegarde de votre OpenDirectory avant tout !

La première des choses à faire est de créer une branche LDAP spécifique à ce genre de cas, vous pouvez vous servir d’Apache Directory Studio pour cela.

Pour ma part, j’ai choisi de créer une OU spécifique pour ce genre de cas (commonOU) et qui pour le moment ne contiens qu’un seul enfant, de type groupOfNames, ifolder.

Maintenant que le bon objet est présent, il faut le remplir, soit à la main, soit via un script.

Puisque j’ai déjà écrit ce script, je vous propose de le télécharger : ldapSync.sh

Cet outil présente une syntaxe de la sorte :
./ldapSync.sh -d dc=office,dc=inig-services,dc=com -a uid=ifolder_agent,cn=users -p ifolder-mdp -g cn=IFolder,ou=commonOU -G IFolder
Je vous laisse lire sa documentation pour voir les différentes options.

Concrètement il va se servir du service d’annuaire local au Mac pour retrouver la liste des membres du groupe spécifié (IFolder ici) puis il va générer les noms uniques LDAP de chaque utilisateur en considérant que tout utilisateur de l’OD à un dn de type uid=username,cn=users,dc=… (ce qui sera le cas si vous n’avez pas trop joué avec votre OD). Une fois la liste d’utilisateur récupéré, le script s’occupent de la comparer avec ce qui existe déjà dans la liste de membres du groupe LDAP (ici cn=IFolder,ou=commonOU…) et va générer un fichier ldif qui contiendra les entrées à ajouter ou à supprimer du groupe final.

Jusqu’ici nous sommes dans des manips assez simples qui ne méritent pas forcément un article. Voici la partie intéressante :-)

En toute logique ce script sera exécuté toutes les X [min|h|j], ce qui veux dire que le mot de passe de l’administrateur habilité à faire des modifications sur l’entité IFolder créée avec Apache Directory Studio sera inscrit dans un fichier de launchd par exemple, ce qui, vous en conviendrez, n’est pas le mieux en terme de sécurité…

Nous allons donc jouer avec les droits d’accès du LDAP pour faire en sorte que l’utilisateur ifolder_agent (qui est un utilisateur tout à fait normal crée avec Workgroup Manager) ai les droits d’écriture sur cn=IFolder,ou=commonOU.

Pour cela, retournez dans WorkgroupManager tout en y activant les options avancées pour pouvoir accéder à toutes les entrées, celle qui nous intéresse est dans OLCBDBConfig, nous allons éditer l’attribut olcAccess du seul objet de cette section.

En cliquant sur « New Value » avec une entrée existante de sélectionné vous allez pouvoir entrer une nouvelle valeur de ce type :
{2}to dn.exact="cn=IFolder,ou=commonOU,dc=office,dc=inig-services,dc=com" attrs=member by dn.exact="uid=ifolder_agent,cn=users,dc=office,dc=inig-services,dc=com" write by * read
Qui se traduit par :

  • L’entrée porte sur cn=IFolder,ou=commonOU,dc=office,dc=inig-services,dc=com
  • À propos de l’attribut member
  • L’utilisateur uid=ifolder_agent,cn=users,dc=office,dc=inig-services,dc=com a les droits d’écriture dessus
  • Tout le monde a les droits de lecture

Si vous avez des questions, des commentaires…

5 thoughts on “Groupe OpenDirectory, objectClass groupOfNames et olcAccess

  1. Votre article est vraiment très intéressant …
    Au niveau de iFolder Server, vous l’avez installé sur un openSuse OS en virtualisation ?
    J’ai hâte de pouvoir lire votre futur pas à pas … Pour l’essayer.

    Un iFolder/iDisk feature dans OS X Server Lion ? Ce serai vraiment bien ….
    Rêve ou réalité ?
    En tous les cas, c’est vraiment la pièce manquante.
    Cordialement.

  2. J’ai effectivement mis Open SUSE sur un serveur de virtualisation, étant donné qu’il tourne avec Mono j’ai préféré isoler ça sur un système tiers d’autant que l’installation sur autre chose que SUSE n’est pas réellement documenté…

    Je tâcherais de faire un article sur sa configuration avec l’OD mais j’en ai quelques autres avant ça.

Laisser un commentaire