2. Éléments du modèle
Cette section contient des définitions pour réaliser le service de contrôle d'accès fourni par le modèle de contrôle d'accès basé sur les vues.
2.1. Groupes
Un groupe est un ensemble de zéro ou plusieurs tuples <securityModel, securityName> au nom desquels les objets de gestion SNMP peuvent être accédés. Un groupe définit les droits d'accès accordés à tous les securityNames qui appartiennent à ce groupe. La combinaison d'un securityModel et d'un securityName correspond au plus à un groupe. Un groupe est identifié par un groupName.
Le module de contrôle d'accès suppose que le securityName a déjà été authentifié selon les besoins et ne fournit aucune authentification supplémentaire propre.
Le modèle de contrôle d'accès basé sur les vues utilise le securityModel et le securityName comme entrées du module de contrôle d'accès lorsqu'il est appelé pour vérifier les droits d'accès. Il détermine le groupName en fonction du securityModel et du securityName.
2.2. securityLevel
Différents droits d'accès pour les membres d'un groupe peuvent être définis pour différents niveaux de sécurité, c'est-à-dire noAuthNoPriv, authNoPriv et authPriv. Le securityLevel identifie le niveau de sécurité qui sera supposé lors de la vérification des droits d'accès. Voir le document d'architecture SNMP [RFC3411] pour une définition de securityLevel.
Le modèle de contrôle d'accès basé sur les vues exige que le securityLevel soit passé en entrée au module de contrôle d'accès lorsqu'il est appelé pour vérifier les droits d'accès.
2.3. Contextes
Un contexte SNMP est une collection d'informations de gestion accessibles par une entité SNMP. Un élément d'information de gestion peut exister dans plus d'un contexte. Une entité SNMP a potentiellement accès à de nombreux contextes. Les détails sur la dénomination des informations de gestion se trouvent dans le document d'architecture SNMP [RFC3411].
Le modèle de contrôle d'accès basé sur les vues définit une vacmContextTable qui liste les contextes disponibles localement par contextName.
2.4. Vues MIB et familles de vues
Pour des raisons de sécurité, il est souvent utile de pouvoir restreindre les droits d'accès de certains groupes à seulement un sous-ensemble des informations de gestion dans le domaine de gestion. Pour fournir cette capacité, l'accès à un contexte se fait via une "vue MIB" qui détaille un ensemble spécifique de types d'objets gérés (et éventuellement les instances spécifiques de types d'objets) dans ce contexte. Par exemple, pour un contexte donné, il y aura généralement toujours une vue MIB qui fournit l'accès à toutes les informations de gestion dans ce contexte, et souvent il y aura d'autres vues MIB dont chacune contient un sous-ensemble des informations. Ainsi, l'accès autorisé pour un groupe peut être restreint via l'utilisation de vues MIB à seulement un sous-ensemble des informations de gestion dans ce contexte.
Une vue MIB est définie comme une collection de sous-arbres de vue, où chaque sous-arbre de vue est un sous-arbre dans l'espace d'objets gérés. Chaque sous-arbre de vue est identifié par l'OBJECT IDENTIFIER de la racine du sous-arbre, ainsi qu'un masque de chaîne de bits. Le masque de chaîne de bits permet de définir le sous-arbre de vue pour inclure ou exclure des branches individuelles du sous-arbre.
Une famille de sous-arbres de vue est définie comme l'ensemble de toutes les vues MIB qui peuvent être définies par un ensemble de sous-arbres de vue liés.
2.4.1. Sous-arbre de vue
Un sous-arbre de vue est l'ensemble de toutes les instances d'objets MIB qui ont un préfixe OBJECT IDENTIFIER de type d'objet MIB commun. L'OBJECT IDENTIFIER de type d'objet MIB avec l'identifiant d'instance pour une instance d'objet particulière forme le nom OBJECT IDENTIFIER pour cette instance d'objet.
Un sous-arbre de vue est identifié par la valeur OBJECT IDENTIFIER qui est le préfixe OBJECT IDENTIFIER le plus long commun à tous les types d'objets MIB dans ce sous-arbre. Si le type d'objet n'a pas d'instances (par exemple, une table), alors le sous-arbre de vue correspondant à ce type d'objet est une seule branche. Si le type d'objet a des instances, alors le sous-arbre de vue correspondant à ce type d'objet est une branche qui est l'ensemble de toutes les instances de ce type d'objet. Si le type d'objet est une table, alors le sous-arbre de vue correspondant à cette table est une branche qui inclut toutes les instances de tous les types d'objets en colonnes de cette table, c'est-à-dire toutes les entrées de table.
2.4.2. ViewTreeFamily
Une famille de sous-arbres de vue (viewTreeFamily) est l'ensemble de tous les sous-arbres de vue qui seraient inclus (ou exclus) lors de la définition d'une vue MIB.
Une viewTreeFamily est définie comme une combinaison d'un sous-arbre de vue (une valeur de sous-arbre), ainsi qu'un masque de chaîne de bits (une valeur de masque), et une indication si le sous-arbre de vue doit être inclus ou exclu d'une vue MIB. Un membre de famille est l'ensemble des instances d'objets MIB qui se trouvent dans un sous-arbre de vue particulier. Si la valeur du masque est de longueur nulle, alors le membre de famille est identique à la valeur du sous-arbre de vue, c'est-à-dire un seul sous-arbre de vue. Si le masque est de longueur non nulle, alors la valeur du sous-arbre de vue est combinée avec la valeur du masque selon l'algorithme suivant pour déterminer l'ensemble des membres de famille :
Pour chaque valeur OBJECT IDENTIFIER possible, X, qui pourrait être formée
en remplaçant les bits masqués de la valeur du sous-arbre de vue :
Si les bits masqués dans X sont tous zéro,
alors X est un membre de famille,
sinon X n'est pas un membre de famille.
2.5. Politique d'accès
La politique d'accès VACM est définie par un ensemble d'entrées dans la vacmAccessTable. Chaque entrée de cette table définit les droits d'accès pour une combinaison particulière de :
- un groupe (identifié par groupName)
- un contexte (identifié par contextName, éventuellement en utilisant des jokers via les champs contextPrefix et contextMatch)
- un securityModel
- un securityLevel
Pour chaque combinaison de ce type, l'entrée définit quelles vues MIB doivent être utilisées pour les opérations d'accès en lecture, écriture et notification. Chaque vue MIB de ce type est identifiée par son viewName.