Marcar um atributo como confidencial no Service Pack 1 do Windows Server 2003

Este artigo descreve como marcar um atributo como confidencial no Windows Server 2003 Service Pack 1.

Aplica-se a: Windows Server 2003
Número de KB original: 922836

Resumo

No serviço de diretório do Active Directory para o Microsoft Windows Server 2000 e para o Microsoft Windows Server 2003, é difícil impedir que um usuário autenticado leia um atributo. Geralmente, se o usuário solicitar READ_PROPERTY permissões para um atributo ou para seu conjunto de propriedades, o acesso de leitura será concedido. A segurança padrão no Active Directory é definida para que os usuários autenticados tenham acesso de leitura a todos os atributos. Este artigo discute como impedir o acesso de leitura para um atributo no Windows Server 2003 Service Pack 1 (SP1).

Mais informações

O Windows Server 2003 SP1 apresenta uma maneira de marcar um atributo como confidencial. Para fazer isso, você modifica o valor do atributo searchFlags no esquema. O valor do atributo searchFlags contém vários bits que representam várias propriedades de um atributo. Por exemplo, se o bit 1 for definido, o atributo será indexado. O Bit 7 (128) designa o atributo como confidencial.

Requisitos e restrições

Somente os controladores de domínio que estão executando o Windows Server 2003 SP1 ou uma versão posterior impõem o acesso de leitura marcar para atributos confidenciais. O recurso de atributos confidenciais está vinculado à instalação do Windows Server 2003 SP1 ou uma versão posterior. Esse recurso não depende se um domínio ou um nível funcional da floresta está habilitado.

Não use o recurso de atributos confidenciais, a menos que as seguintes condições sejam verdadeiras:

  • Todos os controladores de domínio baseados no Windows Server 2003 têm o Windows Server 2003 SP1 ou uma versão posterior instalada.

  • Todos os controladores de domínio baseados em Windows 2000 foram atualizados ou removidos. Se um domínio contiver uma mistura de controladores de domínio que estão executando o Windows 2000 Server, a versão de versão original do Windows Server 2003 e o Windows Server 2003 SP1, o seguinte cenário poderá ocorrer:

  • Se um cliente não autorizado consultar os controladores de domínio baseados no Windows 2000 Server e no Windows Server 2003 para obter dados confidenciais de atributo, o cliente poderá ler os dados.

  • Se um cliente não autorizado consultar o controlador de domínio baseado no Windows Server 2003 SP1 para obter dados confidenciais de atributo, o cliente não poderá ler os dados. Você não pode marcar um atributo de esquema base como confidencial. Uma ID do funcionário é um exemplo de atributo de esquema base. Esse atributo não pode ser marcado como confidencial porque seu valor de atributo systemsFlags está definido como 0x10 (esquema base). Para obter mais informações, consulte a seção "Como determinar se um atributo é um atributo de esquema base" e a seção "Como determinar o valor do atributo searchFlags quando você usa um atributo existente".

Testar

Como você testaria qualquer alteração no Active Directory e em qualquer extensão de esquema, recomendamos testar completamente as alterações de atributo em um laboratório que espelha sua floresta de produção. O teste ajuda a garantir que o procedimento funcione sem problemas e que os problemas sejam detectados.

Verificações de controle de acesso

Depois que o Windows Server 2003 SP1 é instalado e depois que o Active Directory executa um marcar de acesso de leitura, o Active Directory verifica atributos confidenciais. Se houver atributos confidenciais e se READ_PROPERTY permissões forem definidas para esses atributos, o Active Directory também exigirá permissões CONTROL_ACCESS para os atributos ou para seus conjuntos de propriedades.

Observação

A configuração de permissão controle completo inclui a permissão CONTROL_ACCESS.

O Active Directory executa um marcar de acesso de leitura em um objeto nos seguintes casos:

  • Quando você avalia se o objeto corresponde ao filtro de pesquisa.
  • Quando você retorna atributos de um objeto que correspondem ao filtro de pesquisa. Por padrão, somente os administradores têm permissões de CONTROL_ACCESS para todos os objetos. Portanto, somente os administradores podem ler atributos confidenciais. Os administradores podem delegar essas permissões a qualquer usuário ou a qualquer grupo.

Entradas de controle de acesso genéricas e específicas do objeto

Cada objeto no Active Directory tem informações de controle de acesso associadas a ele. Essas informações são conhecidas como descritores de segurança. O descritor de segurança controla o tipo de acesso disponível para usuários e grupos. O descritor de segurança é criado automaticamente quando o objeto é criado.

O conjunto de entradas de permissão em um descritor de segurança é conhecido como DACL (lista de controle de acesso discricionário). Cada entrada de permissão no DACL é conhecida como ACE (entrada de controle de acesso).

Você pode conceder permissões ao objeto ou conceder permissões CONTROL_ACCESS a atributos confidenciais usando uma entrada de controle de acesso genérica ou específica do objeto no objeto. Você pode conceder permissões carimbando-as explicitamente no objeto ou usando herança. Herança significa que você define uma entrada de controle de acesso herdável em um contêiner mais alto na hierarquia de contêineres.

Entradas de controle de acesso genéricas e específicas do objeto são basicamente as mesmas. O que os diferencia é o grau de controle que as entradas de controle de acesso oferecem sobre herança e sobre o acesso ao objeto. Entradas de controle de acesso genérico se aplicam a todo o objeto. Entradas de controle de acesso específicas do objeto oferecem mais controle sobre quais objetos herdam a entrada de controle de acesso. Ao usar uma entrada de controle de acesso específica do objeto, você pode especificar o atributo ou o conjunto de propriedades do objeto que herdará a entrada de controle de acesso.

Quando você usa o recurso de atributos confidenciais, CONTROL_ACCESS permissão é concedida atribuindo uma entrada de controle de acesso genérico a um usuário. Se CONTROL_ACCESS permissão for concedida atribuindo uma entrada de controle de acesso específica ao objeto, o usuário terá apenas CONTROL_ACCESS permissão para o atributo confidencial.

As seguintes permissões são concedidas quando você usa uma entrada de controle de acesso genérico:

  • Todos os direitos estendidos
  • Permissão para autenticar
  • Alterar Senha
  • Receber como
  • Redefinir senha
  • Enviar como

As permissões concedidas quando você usa uma entrada de controle de acesso genérico podem fornecer mais acesso do que o desejado em todo o objeto. Se isso for uma preocupação, você poderá definir uma entrada de controle de acesso específica do objeto no objeto para que a entrada de controle de acesso se aplique apenas ao atributo confidencial. Quando você usa entradas de controle de acesso específicas do objeto, você pode controlar a propriedade ou a propriedade definida para a qual a entrada de controle de acesso se aplica.

A interface do usuário no Windows Server 2003 não expõe Control_Access permissões. Você pode usar a ferramenta Dsacls.exe para definir Control_Access permissões atribuindo uma entrada de controle de acesso genérico. No entanto, você não pode usar essa ferramenta para atribuir uma entrada de controle de acesso específica do objeto. A única ferramenta que pode definir Control_Access permissões atribuindo uma entrada de controle de acesso específica do objeto é a ferramenta Ldp.exe.

Observação

Uma discussão aprofundada sobre o controle de acesso está além do escopo deste artigo. Para obter mais informações sobre o controle de acesso, visite os seguintes sites da Microsoft:
Controle de Acesso (Autorização)
Gerenciamento de Identidade e Controle de Acesso

Como usar herança

Em um domínio grande, não é prático atribuir manualmente acesso de controle a um usuário ou a um grupo para cada objeto que tenha um atributo confidencial. A solução é usar a herança para definir uma entrada de controle de acesso herdável que seja maior na hierarquia de contêineres. Essa entrada de controle de acesso se aplica a todos os objetos filho desse contêiner.

Por padrão, a herança está habilitada para todas as unidades organizacionais (OU) e para todas as contas de usuário, exceto para a conta de administrador interna. Se você criar contas de usuário com herança desabilitada ou se criar contas administrativas copiando a conta de administrador interna, você deverá habilitar a herança para essas contas. Caso contrário, o modelo de herança não se aplica a essas contas.

Como criar um atributo confidencial

  1. Determine qual atributo marcar como confidencial ou adicione um atributo que você deseja tornar confidencial.
  2. Conceda aos usuários apropriados Control_Access permissões para que os usuários possam exibir os dados de atributo.

Ferramentas como a ferramenta Ldp.exe e a ferramenta Adsiedit.msc podem ser usadas para criar um atributo confidencial. Os arquivos .ldf normalmente são usados para estender o esquema. Esses arquivos também podem ser usados para marcar um atributo como confidencial. Os arquivos que você cria para uma implementação devem ser ajustados durante a fase de teste para que você saiba exatamente o que está adicionando ao esquema ao implantar na produção. Os arquivos .ldf ajudam a evitar erros.

O seguinte exemplo de arquivos .ldf pode ser usado para fazer o seguinte:

  • Adicionar um atributo ao esquema
  • Marcar o atributo como confidencial
  • Adicionar o atributo à classe de usuário

Observação

Antes de usar arquivos .ldf, leia as seções "Identificadores de objeto" e " Sintaxe de atributo" para obter informações importantes sobre como adicionar objetos e atributos ao esquema.

Exemplo de arquivos .ldf

O código a seguir adiciona um atributo ao esquema e, em seguida, marca o atributo como confidencial.

dn: CN=ConfidentialAttribute-LDF,CN=Schema,Cn=Configuration,DC=domain,DC=com
changetype: add
objectClass: attributeSchema
lDAPDisplayName: ConfidentialAttribute
adminDescription: esse atributo armazena os dados confidenciais do usuário
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: modificar
add: schemaupdatenow
schemaupdatenow: 1
-

O código a seguir adiciona o novo atributo à classe de usuário.

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

Dn:
changeType: modificar
add: schemaupdatenow
schemaupdatenow: 1
-

Como permitir que usuários não administrativos vejam os dados de atributo

Observação

Os procedimentos a seguir exigem que você use a ferramenta Ldp.exe incluída no Modo de Aplicativo do Windows Server 2003 R2 Active Directory (ADAM). Outras versões da ferramenta Ldp.exe não podem definir permissões.

Como definir manualmente Control_Access permissões em uma conta de usuário

  1. Abra a ferramenta Ldp.exe incluída no Windows Server 2003 R2 ADAM.
  2. Conecte-se e vincule-se ao diretório.
  3. Selecione uma conta de usuário, clique com o botão direito do mouse na conta, clique em Avançado, clique em Descritor de Segurança e clique em OK.
  4. Na caixa DACL , clique em Adicionar ACE.
  5. Na caixa Administrador , digite o nome de grupo ou o nome de usuário para o qual você deseja conceder permissões.
  6. Na caixa Acesso de Controle , verifique as alterações feitas na etapa 5.

Como usar a herança para atribuir permissões de Control_Access

Para usar a herança, crie uma entrada de controle de acesso que conceda permissões Control_Access para os usuários ou grupos desejados que são mais altos na hierarquia de contêineres do que os objetos que têm atributos confidenciais. Você pode definir essa entrada de controle de acesso no nível de domínio ou em qualquer ponto da hierarquia de contêineres que funcione bem para uma empresa. Os objetos filho que têm atributos confidenciais devem ter a herança habilitada.

Para atribuir permissões de Control_Access, siga estas etapas:

  1. Abra o arquivo Ldp.exe incluído no Windows Server 2003 R2 ADAM.

  2. Conecte-se e vincule-se a um diretório.

  3. Selecione uma OU ou um contêiner que seja maior na hierarquia de contêiner do que os objetos que têm atributos confidenciais, clique com o botão direito do mouse na OU ou no contêiner, clique em Avançado, clique em Descritor de Segurança e clique em OK.

  4. Na caixa DACL , clique em Adicionar ACE.

  5. Na caixa Administrador , digite o nome de grupo ou o nome de usuário para o qual você deseja conceder permissões.

  6. Na caixa Acesso de Controle , verifique as alterações feitas na etapa 5.

  7. Na caixa Tipo de Objeto , clique no atributo confidencial que você adicionou.

  8. Verifique se a herança está habilitada nos objetos de destino.

Como determinar o valor do atributo systemFlags quando você usa um atributo existente

Se você usar um objeto existente, deverá verificar qual é o valor do atributo searchFlags atual. Se você adicionar um objeto, poderá definir o valor ao adicionar o objeto. Há muitas maneiras de obter o valor do atributo searchFlags. Use o método que funciona melhor para você.

Para usar a ferramenta Ldp.exe para obter o valor do atributo searchFlags, siga estas etapas:

  1. Clique em Iniciar, clique em Executar, digite LDP e clique em OK.

  2. Clique em Conexão e clique em Associar.

  3. Associar como administrador do domínio raiz ou associar como uma conta que é um administrador da empresa.

  4. Clique em Exibir e clique em Árvore.

  5. Clique em CN=schema,cn=configuration,dc=rootdomain e clique em OK.

  6. No painel esquerdo, expanda CN=schema,cn=configuration,dc=rootdomain.

  7. Localize o nome de domínio do atributo que você deseja marcar como confidencial e expanda-o.

  8. Na lista de atributos que são preenchidos para o objeto, localize searchFlags para determinar o valor de atributo searchFlags atual para esse objeto.

Observação

Para determinar o novo valor do atributo searchFlags, use a seguinte fórmula:
128 + currentsearchFlagsattribute valor = newsearchFlagsattribute valor.

Como determinar se um atributo é um atributo de esquema base

Para determinar se um atributo é um atributo de esquema base, use a ferramenta Ldp.exe para examinar o valor do atributo systemFlags.

Saída LDP do Employee-ID – systemFlags: 0x10 = (FLAG_SCHEMA_BASE_OBJECT)

No exemplo a seguir Ldp.exe saída, Ldp.exe identifica o valor do atributo systemFlags como 0x10 e como um atributo de esquema base. Portanto, você não pode marcar esse atributo como confidencial.

>> Dn: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com
2> objectClass: top; attributeSchema;
1> cn: ID do funcionário;
1> distinguishedName: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com;
1> instanceType: 0x4 = ( IT_WRITE );
1> quandoCriado: <DateTime>;
1> whenChanged: <DateTime>;
1> uSNCreated: 220;
1> attributeID: 1.2.840.113556.1.4.35;
1> atributoSyntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE );
1> isSingleValued: TRUE;
1> rangeLower: 0;
1> rangeUpper: 16;
1> uSNChanged: 220;
1> showInAdvancedViewOnly: TRUE;
1> administradorDisplayName: ID do funcionário;
1> administradorDescription: ID do funcionário;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeID;
1> nome: ID do funcionário;
1> objectGUID: 64fb3ed1-338f-466e-a879-595bd3940ab7;
1> schemaIDGUID: bf967962-0de6-11d0-a285-00aa003049e2;
1> systemOnly: FALSE;
1> systemFlags: 0x10 = ( FLAG_SCHEMA_BASE_OBJECT );
1> objetoCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=domain,DC=com;

Saída LDP de Employee-Number systemFlags: 0x0 = ( )

No exemplo a seguir Ldp.exe saída, Ldp.exe identifica o valor do atributo systemFlags como 0. Esse atributo pode ser marcado como confidencial.

>> Dn: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com
2> objectClass: top; attributeSchema;
1> cn: Número do funcionário;
1> distinguishedName: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com;
1> instanceType: 0x4 = ( IT_WRITE );
1> quandoCriado: <DateTime>;
1> whenChanged: <DateTime>;
1> uSNCreated: 221;
1> attributeID: 1.2.840.113556.1.2.610;
1> atributoSyntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE );
1> isSingleValued: TRUE;
1> rangeLower: 1;
1> rangeUpper: 512;
1> mAPIID: 35943;
1> uSNChanged: 221;
1> showInAdvancedViewOnly: TRUE;
1> administradorDisplayName: Employee-Number;
1> administradorDescription: Número de funcionários;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeNumber;
1> nome: Número do funcionário;
1> objectGUID: 2446d04d-b8b6-46c7-abbf-4d8e7e1bb6ec;
1> schemaIDGUID: a8df73ef-c5ea-11d1-bbcb-0080c76670c0;
1> systemOnly: FALSE;
1> systemFlags: 0x0 = ( );
1> objetoCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=warrenw,DC=com;

Identificadores de objeto

Quando você adiciona um atributo ou um objeto de classe ao esquema, um dos atributos necessários é o identificador de objeto (também conhecido como OID). Os identificadores de objeto são usados para definir exclusivamente classes e atributos de objeto. Verifique se sua empresa obtém um identificador de objeto exclusivo para identificar seu atributo. Não há suporte para ferramentas que geram identificadores de objeto, como a ferramenta Oidgen.exe. Para obter um identificador de objeto da Microsoft, visite o seguinte site da Microsoft:
Obtendo um identificador de objeto da Microsoft

Sintaxe de atributo

O atributo AtributoSyntax também é necessário para adicionar novos objetos ao esquema. Esse atributo define a representação de armazenamento, a ordenação de bytes e as regras correspondentes para comparações de tipos de propriedade. A sintaxe define se o valor do atributo deve ser uma cadeia de caracteres, um número ou uma unidade de tempo. Cada atributo de cada objeto está associado a exatamente uma sintaxe. Verifique se você seleciona a sintaxe de atributo correta para o novo atributo. Isso é especialmente importante se você sincronizar um diretório LDAP (Protocolo de Acesso ao Diretório Leve) com outro diretório LDAP. Depois que o atributo é adicionado ao esquema, sua sintaxe de atributo não pode ser alterada.

Para obter mais informações sobre o atributo AttributeSyntax, consulte Atributo-Sintaxe atributo.

Consulte o atributo Search-Flags para obter mais informações.