2. Elementi del modello
Questa sezione contiene definizioni per realizzare il servizio di controllo degli accessi fornito dal modello di controllo degli accessi basato su viste.
2.1. Gruppi
Un gruppo è un insieme di zero o più tuple <securityModel, securityName> per conto delle quali è possibile accedere agli oggetti di gestione SNMP. Un gruppo definisce i diritti di accesso concessi a tutti i securityName che appartengono a quel gruppo. La combinazione di un securityModel e un securityName corrisponde al massimo a un gruppo. Un gruppo è identificato da un groupName.
Il modulo di controllo degli accessi presume che il securityName sia già stato autenticato secondo necessità e non fornisce ulteriore autenticazione propria.
Il modello di controllo degli accessi basato su viste utilizza il securityModel e il securityName come input per il modulo di controllo degli accessi quando viene chiamato per verificare i diritti di accesso. Determina il groupName in funzione di securityModel e securityName.
2.2. securityLevel
Diversi diritti di accesso per i membri di un gruppo possono essere definiti per diversi livelli di sicurezza, ossia noAuthNoPriv, authNoPriv e authPriv. Il securityLevel identifica il livello di sicurezza che verrà assunto durante la verifica dei diritti di accesso. Vedere il documento di architettura SNMP [RFC3411] per una definizione di securityLevel.
Il modello di controllo degli accessi basato su viste richiede che il securityLevel venga passato come input al modulo di controllo degli accessi quando viene chiamato per verificare i diritti di accesso.
2.3. Contesti
Un contesto SNMP è una raccolta di informazioni di gestione accessibili da un'entità SNMP. Un elemento di informazione di gestione può esistere in più di un contesto. Un'entità SNMP ha potenzialmente accesso a molti contesti. I dettagli sulla denominazione delle informazioni di gestione si trovano nel documento di architettura SNMP [RFC3411].
Il modello di controllo degli accessi basato su viste definisce una vacmContextTable che elenca i contesti disponibili localmente per contextName.
2.4. Viste MIB e famiglie di viste
Per motivi di sicurezza, è spesso utile poter limitare i diritti di accesso di alcuni gruppi a solo un sottoinsieme delle informazioni di gestione nel dominio di gestione. Per fornire questa capacità, l'accesso a un contesto avviene tramite una "vista MIB" che dettaglia un insieme specifico di tipi di oggetti gestiti (e opzionalmente le istanze specifiche di tipi di oggetti) all'interno di quel contesto. Ad esempio, per un dato contesto, ci sarà tipicamente sempre una vista MIB che fornisce accesso a tutte le informazioni di gestione in quel contesto, e spesso ci saranno altre viste MIB ciascuna delle quali contiene un sottoinsieme delle informazioni. Quindi, l'accesso consentito per un gruppo può essere limitato tramite l'uso di viste MIB a solo un sottoinsieme delle informazioni di gestione in quel contesto.
Una vista MIB è definita come una raccolta di sottoalberi di vista, dove ogni sottoalbero di vista è un sottoalbero nello spazio degli oggetti gestiti. Ogni sottoalbero di vista è identificato dall'OBJECT IDENTIFIER della radice del sottoalbero, insieme a una maschera di stringa di bit. La maschera di stringa di bit consente di definire il sottoalbero di vista per includere o escludere singoli rami del sottoalbero.
Una famiglia di sottoalberi di vista è definita come l'insieme di tutte le viste MIB che possono essere definite da un insieme di sottoalberi di vista correlati.
2.4.1. Sottoalbero di vista
Un sottoalbero di vista è l'insieme di tutte le istanze di oggetti MIB che hanno un prefisso OBJECT IDENTIFIER di tipo di oggetto MIB comune. L'OBJECT IDENTIFIER di tipo di oggetto MIB insieme all'identificatore di istanza per una particolare istanza di oggetto forma il nome OBJECT IDENTIFIER per quell'istanza di oggetto.
Un sottoalbero di vista è identificato dal valore OBJECT IDENTIFIER che è il prefisso OBJECT IDENTIFIER più lungo comune a tutti i tipi di oggetti MIB all'interno di quel sottoalbero. Se il tipo di oggetto non ha istanze (ad esempio, una tabella), allora il sottoalbero di vista corrispondente a quel tipo di oggetto è un singolo ramo. Se il tipo di oggetto ha istanze, allora il sottoalbero di vista corrispondente a quel tipo di oggetto è un ramo che è l'insieme di tutte le istanze di quel tipo di oggetto. Se il tipo di oggetto è una tabella, allora il sottoalbero di vista corrispondente a quella tabella è un ramo che include tutte le istanze di tutti i tipi di oggetti colonnari di quella tabella, ossia tutte le voci di tabella.
2.4.2. ViewTreeFamily
Una famiglia di sottoalberi di vista (viewTreeFamily) è l'insieme di tutti i sottoalberi di vista che sarebbero inclusi (o esclusi) quando si definisce una vista MIB.
Una viewTreeFamily è definita come una combinazione di un sottoalbero di vista (un valore di sottoalbero), insieme a una maschera di stringa di bit (un valore di maschera), e un'indicazione se il sottoalbero di vista deve essere incluso o escluso da una vista MIB. Un membro di famiglia è l'insieme delle istanze di oggetti MIB che si trovano in un particolare sottoalbero di vista. Se il valore della maschera è di lunghezza zero, allora il membro di famiglia è identico al valore del sottoalbero di vista, ossia un singolo sottoalbero di vista. Se la maschera è di lunghezza non zero, allora il valore del sottoalbero di vista viene combinato con il valore della maschera secondo il seguente algoritmo per determinare l'insieme dei membri di famiglia:
Per ogni possibile valore OBJECT IDENTIFIER, X, che potrebbe essere formato
sostituendo i bit mascherati del valore del sottoalbero di vista:
Se i bit mascherati in X sono tutti zero,
allora X è un membro di famiglia,
altrimenti X non è un membro di famiglia.
2.5. Politica di accesso
La politica di accesso VACM è definita da un insieme di voci nella vacmAccessTable. Ogni voce in questa tabella definisce i diritti di accesso per una particolare combinazione di:
- un gruppo (identificato da groupName)
- un contesto (identificato da contextName, possibilmente utilizzando caratteri jolly tramite i campi contextPrefix e contextMatch)
- un securityModel
- un securityLevel
Per ogni combinazione di questo tipo, la voce definisce quali viste MIB devono essere utilizzate per le operazioni di accesso in lettura, scrittura e notifica. Ogni vista MIB di questo tipo è identificata dal suo viewName.