Contrassegnare un attributo come riservato in Windows Server 2003 Service Pack 1

Questo articolo descrive come contrassegnare un attributo come riservato in Windows Server 2003 Service Pack 1.

Si applica a: Windows Server 2003
Numero KB originale: 922836

Riepilogo

Nel servizio directory Di Active Directory per Microsoft Windows Server 2000 e per Microsoft Windows Server 2003, è difficile impedire a un utente autenticato di leggere un attributo. In genere, se l'utente richiede READ_PROPERTY autorizzazioni per un attributo o per il relativo set di proprietà, viene concesso l'accesso in lettura. La sicurezza predefinita in Active Directory è impostata in modo che gli utenti autenticati abbiano accesso in lettura a tutti gli attributi. Questo articolo illustra come impedire l'accesso in lettura per un attributo in Windows Server 2003 Service Pack 1 (SP1).

Ulteriori informazioni

Windows Server 2003 SP1 introduce un modo per contrassegnare un attributo come riservato. A tale scopo, modificare il valore dell'attributo searchFlags nello schema. Il valore dell'attributo searchFlags contiene più bit che rappresentano varie proprietà di un attributo. Ad esempio, se il bit 1 è impostato, l'attributo viene indicizzato. Bit 7 (128) definisce l'attributo come riservato.

Requisiti e vincoli

Solo i controller di dominio che eseguono Windows Server 2003 SP1 o una versione successiva applicano il controllo di accesso in lettura per gli attributi riservati. La funzionalità attributi riservati è associata all'installazione di Windows Server 2003 SP1 o una versione successiva. Questa funzionalità non dipende dall'abilitazione di un dominio o di un livello di funzionalità della foresta.

Non usare la funzionalità attributi riservati a meno che non siano vere le condizioni seguenti:

  • In tutti i controller di dominio basati su Windows Server 2003 è installato Windows Server 2003 SP1 o versione successiva.

  • Tutti i controller di dominio basati su Windows 2000 sono stati aggiornati o rimossi. Se un dominio contiene una combinazione di controller di dominio che eseguono Windows 2000 Server, la versione originale di Windows Server 2003 e Windows Server 2003 SP1, può verificarsi lo scenario seguente:

  • Se un client non autorizzato esegue query sui controller di dominio basati su Windows 2000 Server e Windows Server 2003 per i dati degli attributi riservati, il client può leggere i dati.

  • Se un client non autorizzato esegue query sul controller di dominio basato su Windows Server 2003 SP1 per i dati degli attributi riservati, il client non può leggere i dati. Non è possibile contrassegnare un attributo dello schema di base come riservato. Un ID dipendente è un esempio di attributo dello schema di base. Questo attributo non può essere contrassegnato come riservato perché il relativo valore dell'attributo systemsFlags è impostato su 0x10 (schema di base). Per altre informazioni, vedere la sezione "Come determinare se un attributo è un attributo dello schema di base" e la sezione "Come determinare il valore dell'attributo searchFlags quando si usa un attributo esistente".

Test

Poiché si testa qualsiasi modifica apportata ad Active Directory e a qualsiasi estensione dello schema, è consigliabile testare accuratamente le modifiche degli attributi in un lab che rispecchia la foresta di produzione. I test consentono di garantire che la procedura funzioni senza problemi e che vengano rilevati problemi.

Controlli di controllo di accesso

Dopo l'installazione di Windows Server 2003 SP1 e dopo che Active Directory esegue un controllo di accesso in lettura, Active Directory verifica la presenza di attributi riservati. Se esistono attributi riservati e READ_PROPERTY autorizzazioni sono impostate per questi attributi, Active Directory richiederà anche autorizzazioni CONTROL_ACCESS per gli attributi o per i relativi set di proprietà.

Nota

L'impostazione di autorizzazione Controllo completo include l'autorizzazione CONTROL_ACCESS.

Active Directory esegue un controllo di accesso in lettura su un oggetto nei casi seguenti:

  • Quando si valuta se l'oggetto corrisponde al filtro di ricerca.
  • Quando si restituiscono attributi di un oggetto che corrispondono al filtro di ricerca. Per impostazione predefinita, solo gli amministratori hanno autorizzazioni CONTROL_ACCESS per tutti gli oggetti. Pertanto, solo gli amministratori possono leggere gli attributi riservati. Gli amministratori possono delegare queste autorizzazioni a qualsiasi utente o gruppo.

Voci di controllo di accesso generiche e specifiche dell'oggetto

A ogni oggetto in Active Directory sono associate informazioni sul controllo di accesso. Queste informazioni sono note come descrittore di sicurezza. Il descrittore di sicurezza controlla il tipo di accesso disponibile per gli utenti e i gruppi. Il descrittore di sicurezza viene creato automaticamente quando viene creato l'oggetto.

Il set di voci di autorizzazione in un descrittore di sicurezza è noto come elenco di controllo di accesso discrezionale (DACL). Ogni voce di autorizzazione nell'elenco di controllo di accesso è nota come voce di controllo di accesso.

È possibile concedere autorizzazioni all'oggetto o concedere CONTROL_ACCESS autorizzazioni agli attributi riservati usando una voce di controllo di accesso generica o specifica dell'oggetto nell'oggetto. È possibile concedere le autorizzazioni contrassegnandole in modo esplicito sull'oggetto o usando l'ereditarietà. L'ereditarietà significa che si imposta una voce di controllo di accesso ereditabile in un contenitore superiore nella gerarchia del contenitore.

Le voci di controllo di accesso generiche e specifiche dell'oggetto sono fondamentalmente le stesse. Ciò che li distingue è il grado di controllo offerto dalle voci di controllo di accesso sull'ereditarietà e sull'accesso agli oggetti. Le voci di controllo di accesso generiche si applicano all'intero oggetto. Le voci di controllo di accesso specifiche dell'oggetto offrono un maggiore controllo sugli oggetti che ereditano la voce di controllo di accesso. Quando si usa una voce di controllo di accesso specifica dell'oggetto, è possibile specificare l'attributo o il set di proprietà dell'oggetto che erediterà la voce di controllo di accesso.

Quando si usa la funzionalità attributi riservati, CONTROL_ACCESS'autorizzazione viene concessa assegnando una voce di controllo di accesso generica a un utente. Se CONTROL_ACCESS'autorizzazione viene concessa assegnando una voce di controllo di accesso specifica dell'oggetto, l'utente avrà solo CONTROL_ACCESS autorizzazione per l'attributo riservato.

Quando si usa una voce di controllo di accesso generico, vengono concesse le autorizzazioni seguenti:

  • Tutti i diritti estesi
  • Consentito per l'autenticazione
  • Cambia password
  • Ricezione come
  • Reimpostare la password
  • Invia come

Le autorizzazioni concesse quando si usa una voce di controllo di accesso generico possono fornire un accesso maggiore di quello desiderato per l'intero oggetto. Se si tratta di un problema, è possibile impostare una voce di controllo di accesso specifica dell'oggetto nell'oggetto in modo che la voce di controllo di accesso si applichi solo all'attributo riservato. Quando si usano voci di controllo di accesso specifiche dell'oggetto, è possibile controllare la proprietà o il set di proprietà a cui si applica la voce di controllo di accesso.

L'interfaccia utente in Windows Server 2003 non espone le autorizzazioni di Control_Access. È possibile usare lo strumento Dsacls.exe per impostare le autorizzazioni di Control_Access assegnando una voce di controllo di accesso generica. Tuttavia, non è possibile usare questo strumento per assegnare una voce di controllo di accesso specifica dell'oggetto. L'unico strumento che può impostare autorizzazioni Control_Access assegnando una voce di controllo di accesso specifica dell'oggetto è lo strumento Ldp.exe.

Nota

Una discussione approfondita sul controllo di accesso esula dall'ambito di questo articolo. Per altre informazioni sul controllo di accesso, visitare i seguenti siti Web Microsoft:
Controllo di accesso (autorizzazione)
Gestione delle identità e Controllo di accesso

Come usare l'ereditarietà

In un dominio di grandi dimensioni non è pratico assegnare manualmente l'accesso di controllo a un utente o a un gruppo per ogni oggetto con un attributo riservato. La soluzione consiste nell'usare l'ereditarietà per impostare una voce di controllo di accesso ereditabile superiore nella gerarchia del contenitore. Questa voce di controllo di accesso si applica a tutti gli oggetti figlio di tale contenitore.

Per impostazione predefinita, l'ereditarietà è abilitata per tutte le unità organizzative e per tutti gli account utente, ad eccezione dell'account amministratore predefinito. Se si creano account utente con ereditarietà disabilitata o se si creano account amministrativi copiando l'account amministratore predefinito, è necessario abilitare l'ereditarietà per questi account. In caso contrario, il modello di ereditarietà non si applica a questi account.

Come creare un attributo riservato

  1. Determinare l'attributo da contrassegnare come riservato o aggiungere un attributo che si vuole rendere riservato.
  2. Concedere agli utenti appropriati le autorizzazioni Control_Access in modo che gli utenti possano visualizzare i dati degli attributi.

Strumenti come lo strumento Ldp.exe e lo strumento Adsiedit.msc possono essere usati per creare un attributo riservato. I file con estensione ldf vengono in genere usati per estendere lo schema. Questi file possono essere usati anche per contrassegnare un attributo come riservato. I file creati per un'implementazione devono essere ottimizzati durante la fase di test in modo da sapere esattamente cosa si aggiunge allo schema quando si esegue l'implementazione nell'ambiente di produzione. I file con estensione ldf consentono di evitare errori.

I file con estensione ldf di esempio seguenti possono essere usati per eseguire le operazioni seguenti:

  • Aggiungere un attributo allo schema
  • Contrassegnare l'attributo come riservato
  • Aggiungere l'attributo alla classe utente

Nota

Prima di usare i file con estensione ldf, assicurarsi di leggere le sezioni "Identificatori di oggetto" e "Sintassi degli attributi" per informazioni importanti su come aggiungere oggetti e attributi allo schema.

File con estensione ldf di esempio

Il codice seguente aggiunge un attributo allo schema e quindi contrassegna l'attributo come riservato.

dn: CN=ConfidentialAttribute-LDF,CN=Schema,Cn=Configuration,DC=domain,DC=com
changetype: add
objectClass: attributeSchema
lDAPDisplayName: ConfidentialAttribute
adminDescription: questo attributo archivia i dati riservati dell'utente
attributeID: 1.2.840.113556.1.xxxx.xxxx.1.x
attributeSyntax: 2.5.5.12
oMSyntax: 64
isSingleValued: TRUE
showInAdvancedViewOnly: TRUE
searchFlags: 128

Dn:
changeType: modify
add: schemaupdatenow
schemaupdatenow: 1
-

Il codice seguente aggiunge il nuovo attributo alla classe utente.

dn: CN=User,CN=Schema,CN=Configuration,DC=domain,DC=com
changetype: modify
add: mayContain
mayContain: ConfidentialAttribute
-

Dn:
changeType: modify
add: schemaupdatenow
schemaupdatenow: 1
-

Come consentire agli utenti non amministratori di visualizzare i dati degli attributi

Nota

Le procedure seguenti richiedono l'uso dello strumento Ldp.exe incluso in Windows Server 2003 R2 Active Directory Application Mode (ADAM). Altre versioni dello strumento Ldp.exe non possono impostare autorizzazioni.

Come impostare manualmente le autorizzazioni di Control_Access in un account utente

  1. Aprire lo strumento Ldp.exe incluso in Windows Server 2003 R2 ADAM.
  2. Connettersi e associare alla directory.
  3. Selezionare un account utente, fare clic con il pulsante destro del mouse sull'account, scegliere Avanzate, fare clic su Descrittore di sicurezza e quindi fare clic su OK.
  4. Nella casella DACL fare clic su Aggiungi ace.
  5. Nella casella Trustee digitare il nome del gruppo o il nome utente a cui si desidera concedere le autorizzazioni.
  6. Nella casella Controllo accesso verificare le modifiche apportate nel passaggio 5.

Come usare l'ereditarietà per assegnare le autorizzazioni di Control_Access

Per usare l'ereditarietà, creare una voce di controllo di accesso che concede Control_Access autorizzazioni agli utenti o ai gruppi desiderati che sono superiori nella gerarchia dei contenitori rispetto agli oggetti con attributi riservati. È possibile impostare questa voce di controllo di accesso a livello di dominio o in qualsiasi punto della gerarchia di contenitori che funzioni correttamente per un'organizzazione. Per gli oggetti figlio con attributi riservati deve essere abilitata l'ereditarietà.

Per assegnare Control_Access autorizzazioni, seguire questa procedura:

  1. Aprire il file Ldp.exe incluso in Windows Server 2003 R2 ADAM.

  2. Connettersi e associare a una directory.

  3. Selezionare un'unità organizzativa o un contenitore più alto nella gerarchia del contenitore rispetto agli oggetti con attributi riservati, fare clic con il pulsante destro del mouse sull'unità organizzativa o sul contenitore, scegliere Avanzate, fare clic su Descrittore di sicurezza e quindi fare clic su OK.

  4. Nella casella DACL fare clic su Aggiungi ace.

  5. Nella casella Trustee digitare il nome del gruppo o il nome utente a cui si desidera concedere le autorizzazioni.

  6. Nella casella Controllo accesso verificare le modifiche apportate nel passaggio 5.

  7. Nella casella Tipo di oggetto fare clic sull'attributo riservato aggiunto.

  8. Assicurarsi che l'ereditarietà sia abilitata negli oggetti di destinazione.

Come determinare il valore dell'attributo systemFlags quando si usa un attributo esistente

Se si usa un oggetto esistente, è necessario verificare qual è il valore dell'attributo searchFlags corrente. Se si aggiunge un oggetto , è possibile definire il valore quando si aggiunge l'oggetto . Esistono molti modi per ottenere il valore dell'attributo searchFlags. Usare il metodo più adatto all'utente.

Per usare lo strumento Ldp.exe per ottenere il valore dell'attributo searchFlags, seguire questa procedura:

  1. Fare clic su Start, fare clic su Esegui, digitare LDP e quindi fare clic su OK.

  2. Fare clic su Connessione e quindi su Associa.

  3. Associare come amministratore del dominio radice o associare come account un amministratore dell'organizzazione.

  4. Fare clic su Visualizza e quindi su Albero.

  5. Fare clic su CN=schema,cn=configuration,dc=rootdomaine quindi fare clic su OK.

  6. Nel riquadro sinistro espandere CN=schema,cn=configuration,dc=rootdomain.

  7. Individuare il nome di dominio dell'attributo da contrassegnare come riservato e quindi espanderlo.

  8. Nell'elenco degli attributi popolati per l'oggetto trovare searchFlags per determinare il valore corrente dell'attributo searchFlags per tale oggetto.

Nota

Per determinare il nuovo valore dell'attributo searchFlags, usare la formula seguente:
128 + currentsearchFlagsvalore = dell'attributo newsearchFlagsvalore dell'attributo.

Come determinare se un attributo è un attributo dello schema di base

Per determinare se un attributo è un attributo dello schema di base, usare lo strumento Ldp.exe per esaminare il valore dell'attributo systemFlags.

Output LDP di Employee-ID - systemFlags: 0x10 = (FLAG_SCHEMA_BASE_OBJECT)

Nell'esempio seguente Ldp.exe output Ldp.exe identifica il valore dell'attributo systemFlags come 0x10 e come attributo dello schema di base. Pertanto, non è possibile contrassegnare questo attributo come riservato.

>> Dn: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com
2> objectClass: top; attributeSchema;
1> cn: Employee-ID;
1> distinguishedName: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com;
1> instanceType: 0x4 = ( IT_WRITE );
1> whenCreated: <DateTime>;
1> whenChanged: <DateTime>;
1> uSNCreato: 220;
1> attributeID: 1.2.840.113556.1.4.35;
1> attributeSyntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE );
1> isSingleValued: TRUE;
1> rangeLower: 0;
1> intervalloUpper: 16;
1> uSNChanged: 220;
1> showInAdvancedViewOnly: TRUE;
1> adminDisplayName: Employee-ID;
1> adminDescription: Employee-ID;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeID;
1> nome: EMPLOYEE-ID;
1> objectGUID: 64fb3ed1-338f-466e-a879-595bd3940ab7;
1> schemaIDGUID: bf967962-0de6-11d0-a285-00aa03049e2;
1> systemOnly: FALSE;
1> systemFlags: 0x10 = ( FLAG_SCHEMA_BASE_OBJECT );
1> objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=domain,DC=com;

Output LDP di Employee-Number systemFlags: 0x0 = ( )

Nell'esempio seguente Ldp.exe output Ldp.exe identifica il valore dell'attributo systemFlags come 0. Questo attributo può essere contrassegnato come riservato.

>> Dn: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com
2> objectClass: top; attributeSchema;
1> cn: Employee-Number;
1> distinguishedName: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com;
1> instanceType: 0x4 = ( IT_WRITE );
1> whenCreated: <DateTime>;
1> whenChanged: <DateTime>;
1> uSNCreato: 221;
1> attributeID: 1.2.840.113556.1.2.610;
1> attributeSyntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE );
1> isSingleValued: TRUE;
1> rangeLower: 1;
1> intervalloUpper: 512;
1> mAPIID: 35943;
1> uSNChanged: 221;
1> showInAdvancedViewOnly: TRUE;
1> adminDisplayName: Employee-Number;
1> adminDescription: Employee-Number;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeNumber;
1> nome: Employee-Number;
1> objectGUID: 2446d04d-b8b6-46c7-abbf-4d8e7e1bb6ec;
1> schemaIDGUID: a8df73ef-c5ea-11d1-bbcb-0080c76670c0;
1> systemOnly: FALSE;
1> systemFlags: 0x0 = ( );
1> objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=warrenw,DC=com;

Identificatori di oggetto

Quando si aggiunge un attributo o un oggetto classe allo schema, uno degli attributi obbligatori è l'identificatore dell'oggetto (noto anche come OID). Gli identificatori di oggetto vengono usati per definire in modo univoco le classi e gli attributi degli oggetti. Assicurarsi che la società ottenga un identificatore di oggetto univoco per identificarne l'attributo. Gli strumenti che generano identificatori di oggetto, ad esempio lo strumento Oidgen.exe, non sono supportati. Per ottenere un identificatore di oggetto da Microsoft, visitare il seguente sito Web Microsoft:
Recupero di un identificatore di oggetto da Microsoft

Sintassi degli attributi

L'attributo attributeSyntax è necessario anche per aggiungere nuovi oggetti allo schema. Questo attributo definisce la rappresentazione di archiviazione, l'ordinamento dei byte e le regole di corrispondenza per i confronti dei tipi di proprietà. La sintassi definisce se il valore dell'attributo deve essere una stringa, un numero o un'unità di tempo. Ogni attributo di ogni oggetto è associato esattamente a una sintassi. Assicurarsi di selezionare la sintassi dell'attributo corretta per il nuovo attributo. Ciò è particolarmente importante se si sincronizza una directory LDAP (Lightweight Directory Access Protocol) con un'altra directory LDAP. Dopo l'aggiunta dell'attributo allo schema, la sintassi dell'attributo non può essere modificata.

Per altre informazioni sull'attributo attributeSyntax, vedere Attributo attribute-Syntax.

Per altre informazioni, vedere l'attributo Search-Flags .