Cette page détaille la mise en oeuvre de Grouper V2 à Rennes1 : classification adoptée pour les groupes, les mécanismes d'alimentation à partir des bases métier, et les versements dans les annuaires.

Contexte -besoins

Organisation globale

 

Arborescence des groupes

 

 

Les choix de noms ont été conditionnés par les rendus des différents services (grouper-ui, annuaires) et la gestion par dossiers.

 

La racine

Le dossier de premier niveau (racine) s'appelle "Etablissements" , car nous sommes dans un contexte multi-établissements.

Le niveau établissement

Chaque établissement contient cinq dossiers:

Deux dossiers contiennent les groupes institutionnels (Etudiants , Personnels) et les trois autres les groupes non-institutionnels (Applications et services, Ressources, Autres groupes).

L'identifiant des dossiers : etu, pers, app, res, div

NB : il n'y a pas de dossier Administrateurs à ce niveau : les groupes des administrateurs délégués sont définis dans les dossiers eux-mêmes

 

Les groupes institutionnels de l'établissement

 

    

Les principes suivants sont adoptés pour construire les arborescences des groupes des personnels et des étudiants:

  • chaque niveau (une structure, une composante, un laboratoire, une étape, etc...) contient
    au dernier niveau (la feuille) , le groupe  "Tout_<code_SI>" a pour membres direct les personnes
    • un ou plusieurs sous-dossiers ayant pour ID <code_SI> et de nom <libelle_SI>
    • le groupe d'ID "tous" et de nom "Tout_<code_SI>" ayant pour membres directs les sous-groupes de niveau inférieur

avec :

  • <code_SI> : code Harpege ou Apogee du niveau courant
  • <libelle_SI> : libellé Harpege ou Apogee du niveau courant
Les groupes des Personnels

Ils sont issus d'Harpege et reflètent les différents niveaux des structures:

  • Services : les groupes des personnels des services centraux et communs
  • Ufr,instituts, écoles : les groupes des personnels des composantes d'enseignement
  • Laboratoires : les groupes des personnels des laboratoires

L'identifiant des dossiers : ser, ufr, lab

Les groupes des Etudiants

Ils sont issus d'Apogee et sont classés par inscription administrative selon le plan de classemement suivant

année > “Inscription Administrative” > composante > type de diplôme > version de diplôme > version d'étape

Les groupes non institutionnels

Ces groupes peuvent être gérés par un administrateur délégué.

 

Ils sont classés selon leur type :

profils applicatifs  ("Applications et services")

  1. ressources informatiques ("Ressources")

 

les autres groupes ("Autres groupes")

 

 

 

Les règles de nommage des groupes et dossiers non-institutionnels

 

Les dossiers

 

Les groupes

 

Correspondance des champs dans Grouper et des attributs ldap

Correspondance_attributs_grouper_ldap.pdf

Alimentation des groupes

Groupes institutionnels

Les alimentations à partir des bases métiers et la base grouper se font par deux outils développés en interne à Rennes1 :

Ces batchs lisent les structures Apogée/Harpège et leurs membres et créent des fichiers de lot de commandes à la norme "grouper shell" qui contient les ordres de création/modification des groupes et de leurs membres.

Le fichier lot de commande est ensuite exécuté par le shell grouper.

Groupes manuels

Chaque groupe est géré par son administrateur désigné.

 

Délégation à un administrateur désigné

Les règles adoptées

L'"administrateur délégué" pourra :

Le  "gestionnaire délégué" pourra :

Le "gestionnaire délégué"  ne pourra pas :

Le « lecteur » pourra seulement :

Le membre d'un groupe délégué pourra :

 

Le modèle de délégation proposé

La DSI a souhaité garder le controle sur les délégation. 

Le demandeur soumet sa requête écrite par ticket. A la réception la DSI lance un script gsh de génération du dossier qui aura les propriétés suivantes :

 

L'administrateur délégué peut alors créer son arborescence :

Exemple

Délégation pour la prise en main des partages de l'IUT sur le NAS de l'université

Le groupes des administrateurs Grouper a le droit d'administration  sur tous les dossiers et groupes existants et futurs.

Le groupe "Administrateurs NAS DSI" a le droit d'administration sur tous les dossiers et groupes existants et futurs du dossier "NAS DSI" .

Le groupe "Administrateurs IUT de Rennes" a le droit d'administration sur tous les dossiers et groupes existants et futurs du dossier "IUT de Rennes"

Le groupe "Gestionnaires NAS DSI" a le droit de mise à jour sur tous les groupes existants et futurs du dossier "NAS DSI" .

Le groupe "Gestionnaires IUT de Rennes" a le droit de mise à jour sur tous les groupes existants et futurs du dossier "IUT de Rennes" .

Le groupe "Lecterus NAS DSI" a le droit de voir les membres des groupes existants et futurs du dossier "NAS DSI" .

Le groupe "Lecteurs IUT de Rennes" a le droit devoir les membres des groupes existants et futurs du dossier "IUT de Rennes" .

 

Code

Le code du script gsh est basé sur les règles d'héritage de Grouper V2 :

 

// DELEGATION : REGLES D'HERITAGE DES PRIVILEGES

grouperSession = GrouperSession.startRootSession();

//

// PARAMETRESi A RENSEIGNER:

// le dossier a deleguer

chemin = "ur1:app:stockage:nas"

id = "920"

nom = "IUT de Rennes"

dossier = chemin + ":" +id

description = ""

// le demandeur : une personne ou un groupe

demandeur="ur1:pers:ser:957:57in:57sys:tous"

// les administrateurs Grouper qui auront le droit d'administrer le groupe des administrateurs delegues

administrateursGrouper="ur1:ress:adm"

 

// DOSSIER A DELEGUER

dossierADeleguer = addStem(chemin, id, nom);

dossierADeleguer = StemFinder.findByName(grouperSession, dossier);

RuleApi.reassignStemPrivilegesIfFromGroup(SubjectFinder.findRootSubject(),dossierADeleguer, Stem.Scope.SUB);

RuleApi.reassignGroupPrivilegesIfFromGroup(SubjectFinder.findRootSubject(), dossierADeleguer, Stem.Scope.SUB);

// setStemAttr(dossierADeleguer.getName(),"description",description);

// GROUPES A CREER

// le groupe des administrateurs locaux

administrateurs = addGroup(dossierADeleguer.getName(),"adm","Administrateurs "+ nom);

administrateurs = GroupFinder.findByName(grouperSession, dossierADeleguer.getName()+":adm");

// le groupe des gestionnaires locaux

gestionnaires = addGroup(dossierADeleguer.getName(),"ges","Gestionnaires "+ nom);

gestionnaires = GroupFinder.findByName(grouperSession, dossierADeleguer.getName()+":ges");

//

// le groupes des lecteurs des membres des groupes delegues

lecteurs = addGroup(dossierADeleguer.getName(),"lec","Lecteurs "+ nom);

lecteurs = GroupFinder.findByName(grouperSession, dossierADeleguer.getName()+":lec");

//

// GROUPES INSTITUTIONNELS

// les groupes institutionnels des personnels

dossierDesPersonnels = StemFinder.findByName(grouperSession, "ur1:pers");

// les groupes institutionnels des etudiants

dossierDesEtudiants = StemFinder.findByName(grouperSession, "ur1:etu");

//

// GROUPES NON-INSTITUTIONNELS

// les groupes applicatifs

dossierApplicatifs = StemFinder.findByName(grouperSession, "ur1:app");

// les groupes des ressources

dossierDesRessources = StemFinder.findByName(grouperSession, "ur1:ress");

// les autres groupes

dossierAutresGroupes = StemFinder.findByName(grouperSession, "ur1:div");

//

// Droits admin sur le groupe des administrateurs locaux , pour les administrateurs de Grouper

grantPriv(administrateurs.getName(), administrateursGrouper, AccessPrivilege.ADMIN);

// DELEGATION AUX ADMINISTRATEURS LOCAUX

// droit de créion de sous-dossiers et de groupes dans le dossier delegue

grantPriv(dossierADeleguer.getName(), administrateurs.getName(), NamingPrivilege.STEM);

grantPriv(dossierADeleguer.getName(), administrateurs.getName(), NamingPrivilege.CREATE);

addMember(administrateurs.getName(),demandeur);

RuleApi.inheritFolderPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("stem, create"));

// droit d'administraion des groupes du dossier delegue

grantPriv(gestionnaires.getName(), administrateurs.getName(), AccessPrivilege.ADMIN);

grantPriv(lecteurs.getName(), administrateurs.getName(), AccessPrivilege.ADMIN);

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("admin"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("update"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

// visibilitées sur les groupes institutionnels et non-institutionnels

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesPersonnels , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesPersonnels , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesEtudiants , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesEtudiants , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierApplicatifs , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierApplicatifs , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesRessources , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesRessources , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierAutresGroupes , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierAutresGroupes , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

//

// DELEGATION AUX GESTIONNAIRES LOCAUX

// droits de mise àour/consultation des membres des groupes du dossier delegue

grantPriv(lecteurs.getName(), gestionnaires.getName(), AccessPrivilege.UPDATE);

grantPriv(lecteurs.getName(), gestionnaires.getName(), AccessPrivilege.READ);

grantPriv(lecteurs.getName(), gestionnaires.getName(), AccessPrivilege.VIEW);

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, gestionnaires.toSubject(), Privilege.getInstances("update"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, gestionnaires.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, gestionnaires.toSubject(), Privilege.getInstances("view"));

// droit de créion de groupes dans le dossier:  RuleApi.inheritFolderPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, gestionnaires.toSubject(), Privilege.getInstances("create"));

// visibilitées sur les groupes institutionnels et non-institutionnels

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesPersonnels , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesPersonnels , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesEtudiants , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesEtudiants , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierApplicatifs , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierDesRessources , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierAutresGroupes , Stem.Scope.SUB, administrateurs.toSubject(), Privilege.getInstances("view"));

//

// DELEGATION AUX LECTEURS LOCAUX

// droit de consultation du contenu des groupes du dossier delegue

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, lecteurs.toSubject(), Privilege.getInstances("read"));

RuleApi.inheritGroupPrivileges(SubjectFinder.findRootSubject(), dossierADeleguer , Stem.Scope.SUB, lecteurs.toSubject(), Privilege.getInstances("view"));

Synchronisation Grouper - Services d'annuaires

Grouper - annuaire ldap "global"

L'annuaire appelé "ldap global" est l'annuaire LDAP de référence, utilisé pour l'authentification et les recherche de personnes

La synchronisation se fait avec l'outil "PSP"

Les groupes sont placés dans une branche "ou=groupes", à plat (pas d'arborescence)

Les appartenances indirectes sont traduites en appartenances individuelles directes

La synchronisation met aussi à jour l'attribut "memberOf" de chaque personne

La configuration de PSP est conforme à psp-example-openldap:

Grouper - annuaire active directory

L'annuaire est utilisé pour la gestion des droits sur des espaces de stockage partagés, pour la configuration des postes de travail , pour la définition des autorisations aux imprimantes

La synchronisation se fait avec l'outil "PSP"

Les groupes sont placés dans une unité organisationnelle "ougroupes", en conservant l'arborescence de la base grouper

L'attribut sAMAccountName reçoit la valeur de l'id_path grouper avec conversion des ":" en "_" (obsolète)

Configuration PSP:

Résolution des correspondances d'attributs