Arborescence des pages

Vous regardez une version antérieure (v. /wiki/pages/viewpage.action?pageId=90669066) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 18) afficher la version suivante »

Contexte -besoins

  • gérer des groupes ad hoc avec possibilité de délégation de droits
  • gérer des groupes institutionnels issus des bases "métiers" : structure Harpège et structure des enseignement Apogée
  • synchroniser les bases métiers, le référentiel Grouper et les services d'annuaires
  • gestion multi-établissements

Organisation globale

Grouper - schema general.pdf

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.

Le dossier de premier niveau (racine) s'appelle "Groupes", faute d'avoir trouvé quelque chose de mieux. Dans une gestion mono-établissement, le nom de l'établissement conviendrait mieux...

En deuxième niveau, six dossiers (2 globaux + 4 établissements) :

  • Administrateurs : Groupes des administrateurs de services ou d'applications, contient un groupe par service. Pas développé pour l'instant
  • Applications : Droits d'accès aux applications. Contient un dossier par application, chaque dossier applicatif contient N groupes selon les types d'accès gérés par chaque application (par exemple, concultation et modification). Les groupes de chaque dossier seront gérés par l'administrateur de l'application.
  • Université Rennes1 : Groupes internes à l'établissement. Contient les dossiers de troisième niveau :
    • etu : étudiants. Contient un groupe "tous_etu" (tous les étudiants) + les dossiers
      • comp : composantes. contient un groupe "tous_etu" (tous les étudiants des composantes) + un dossier par composante
        • Chaque dossier composante contient un groupe "tous_etu" (tous les étudiants de la composante) + un dossier par étape.
        • Chaque dossier étape contient un groupe "tous_etu" (tous les étudiants de l'étape) + un dossier par version d'étape
        • Chaque dossier version d'étape contient un groupe "tous_etu" (tous les étudiants de la version d'étape)
        • Les membres du groupe "tous les étudiants des composantes" sont les groupes "tous les étudiants de la composante", donc un étudiant est membre indirect de ce groupe. Idem pour les niveaux inférieurs. On ne trouve donc normalement des membres individuels qu'aux niveaux version d'étapes.
      • 4S : comptes non issus des bases métiers
      • transversaux : pour groupes de travail ou transversaux
    • pers : personnels. Contient un groupe "tous_pers" (tous les personnels) + les dossiers
      • comp :Même organisation que le dossier "etu", avec des niveaux selon les structures Harpège (composante, service, etc.)
      • labos : laboratoires de recherches : même organisation
      • 4S : comptes non issus des bases métiers
      • transversaux : pour groupes de travail ou transversaux
    • exetu : anciens diplômés
    • lecteurs : possesseurs d'une carte de bibliothèque universitaire
    • retraites : anciens personnels
    • transversaux : groupes de travail
  • ENSCR, IEP, UEB : un dossier pour chaque établissement supplémentaire géré

Tableau de l'arborescence des groupes (projet) : Proposition d'arborescence de groupes Grouper.pdf

Types de groupes

On distingue deux types de groupes :

  • les groupes institutionnels, constitués automatiquement à partir des bases métier Apogés et Harpège. ces groupes sont placés dans les dossiers :
    • etu/comp
    • pers/comp
    • pers/labos
  • les groupes dits ad hoc ou manuels, gérés individuellements par un administrateur

Nommage des groupes et attributs

Correspondance_attributs_grouper_ldap.pdf

Alimentation des groupes

Groupes institutionnels

La synchronisation entre les bases métiers et la base grouper se fait par un outil développé en interne r1 : synchroGrpInstit (esup-commons-2)

Ce programme batch lit les structures Apogée/Harpège et leurs membres et crée un fichier 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 designé par l'interface web de grouper : grouper-ui, ou grouper-ui lite

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 "LDAPPC"

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

Les appartenances indirectes sont traduites en appartenances indiciduelles directes

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

Configuration ldappc :

 <?xml version="1.0" encoding="utf-8"?>

<ldappc>
  <grouper>
    <group-queries>
      <subordinate-stem-queries>
        <stem-list>
          <stem>groupes</stem>
        </stem-list>
      </subordinate-stem-queries>
    </group-queries>
    <groups structure="flat" root-dn="ou=Groups,${edu.vt.middleware.ldap.base}" ldap-object-class="groupOfNames"
            ldap-rdn-attribute="cn" grouper-attribute="name" provision-member-groups="false" >
      <group-members-dn-list list-object-class="groupOfNames" list-attribute="member" />
      <group-attribute-mapping ldap-object-class="groupOfNames">
          <group-attribute-map group-attribute="displayExtension" ldap-attribute="description" />
      </group-attribute-mapping>
    </groups>
    <memberships>
      <member-groups-list
        list-object-class="inetuser"
        list-attribute="memberOf"
        naming-attribute="name"
        temporary-directory="" />
    </memberships>
  </grouper>
  <source-subject-identifiers>
    <source-subject-identifier source="rennes1:ldap" subject-attribute="id">
      <ldap-search base="ou=people,${edu.vt.middleware.ldap.base}"
    scope="subtree_scope"
    filter="(uid={0})"
    on-not-found="warn" />
    </source-subject-identifier>
  </source-subject-identifiers>
</ldappc>

Grouper - annuaire active directory

L'annuaire est utilisé pour la gestion des droits sur des espaces partagés

La synchronisation se fait avec l'outil "LDAPPC"

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

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

Configuration ldappc :

 <?xml version="1.0" encoding="utf-8"?>
<ldappc>
  <grouper>
    <group-queries>

      <subordinate-stem-queries>
        <stem-list>
          <stem>groupes</stem>
        </stem-list>
      </subordinate-stem-queries>
    </group-queries>
    <groups
      structure="bushy"
      root-dn="ou=GROUPER,ou=rennes1,${edu.vt.middleware.ldap.base}"
      ldap-object-class="group"
      ldap-rdn-attribute="cn"
      grouper-attribute="name"
      bundle-modifications="false"
    >
      <group-members-dn-list list-object-class="group" list-attribute="member" />
      <resolver-attribute-mapping ldap-object-class="group">
        <resolver-attribute-map resolver-attribute="grouptypead" ldap-attribute="groupType" ldap-attribute-empty-value="-2147483646"/>
        <resolver-attribute-map resolver-attribute="sAMAccountName" ldap-attribute="sAMAccountName" />
      </resolver-attribute-mapping>
    </groups>
  </grouper>
  <source-subject-identifiers>
    <source-subject-identifier source="rennes1:ldap" subject-attribute="id">
      <ldap-search base="ou=rennes1,${edu.vt.middleware.ldap.base}"
    scope="subtree_scope"
    filter="(cn={0})"
    on-not-found="warn" />
    </source-subject-identifier>
  </source-subject-identifiers>
</ldappc>

Résolution des correspondances d'attributs :

 <?xml version="1.0" encoding="UTF-8"?>
<AttributeResolver
  xmlns="urn:mace:shibboleth:2.0:resolver"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:resolver="urn:mace:shibboleth:2.0:resolver"
  xmlns:ad="urn:mace:shibboleth:2.0:resolver:ad"
  xmlns:dc="urn:mace:shibboleth:2.0:resolver:dc"
  xmlns:grouper="http://grouper.internet2.edu/shibboleth/2.0"
  xsi:schemaLocation="
   urn:mace:shibboleth:2.0:resolver classpath:/schema/shibboleth-2.0-attribute-resolver.xsd
   urn:mace:shibboleth:2.0:resolver:dc classpath:/schema/shibboleth-2.0-attribute-resolver-dc.xsd
   urn:mace:shibboleth:2.0:resolver:ad classpath:/schema/shibboleth-2.0-attribute-resolver-ad.xsd
   http://grouper.internet2.edu/shibboleth/2.0 classpath:/schema/shibboleth-2.0-grouper.xsd">

  <!-- group data connector -->
  <resolver:DataConnector id="groupDataConnector" xsi:type="grouper:GroupDataConnector">
  </resolver:DataConnector>

  <resolver:AttributeDefinition xsi:type="Script" xmlns="urn:mace:shibboleth:2.0:resolver:ad" id="sAMAccountName" sourceAttributeID="name">
    <resolver:Dependency ref="groupDataConnector" />
    <Script><![CDATA[
      // Import Shibboleth attribute provider
      importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);
      value = name.getValues().get(0);
      value = value.replaceAll("\\/", "_");
      value = value.replaceAll("\\/", "_");
      value = value.replaceAll("\\[", "_");
      value = value.replaceAll("\\]", "_");
      value = value.replaceAll("\\:", "_");
      value = value.replaceAll("\\;", "_");
      value = value.replaceAll("\\|", "_");
      value = value.replaceAll("\\=", "_");
      value = value.replaceAll("\\,", "_");
      value = value.replaceAll("\\+", "_");
      value = value.replaceAll("\\*", "_");
      value = value.replaceAll("\\?", "_");
      sAMAccountName = new BasicAttribute("sAMAccountName");
      sAMAccountName.getValues().add(value);
      ]]></Script>
  </resolver:AttributeDefinition>
  <resolver:AttributeDefinition id="grouptypead" xsi:type="Script" xmlns="urn:mace:shibboleth:2.0:resolver:ad" sourceAttributeID="name" >
    <resolver:Dependency ref="groupDataConnector" />
    <Script><![CDATA[
      // Import Shibboleth attribute provider
      importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);
      value = -2147483646;
      grouptypead = new BasicAttribute("grouptypead");
      grouptypead.getValues().add(value);
      ]]></Script>
  </resolver:AttributeDefinition>
</AttributeResolver>
  • Aucune étiquette