Compartir a través de


Marcar un atributo como confidencial en Windows Server 2003 Service Pack 1

En este artículo se describe cómo marcar un atributo como confidencial en Windows Server 2003 Service Pack 1.

Se aplica a: Windows Server 2003
Número de KB original: 922836

Resumen

En el servicio de directorio de Active Directory para Microsoft Windows Server 2000 y para Microsoft Windows Server 2003, es difícil impedir que un usuario autenticado lea un atributo. Por lo general, si el usuario solicita READ_PROPERTY permisos para un atributo o para su conjunto de propiedades, se concede acceso de lectura. La seguridad predeterminada en Active Directory se establece para que los usuarios autenticados tengan acceso de lectura a todos los atributos. En este artículo se describe cómo evitar el acceso de lectura para un atributo en Windows Server 2003 Service Pack 1 (SP1).

Más información

Windows Server 2003 SP1 presenta una manera de marcar un atributo como confidencial. Para ello, modifique el valor del atributo searchFlags en el esquema. El valor del atributo searchFlags contiene varios bits que representan varias propiedades de un atributo. Por ejemplo, si se establece el bit 1, el atributo se indexa. Bit 7 (128) designa el atributo como confidencial.

Requisitos y restricciones

Solo los controladores de dominio que ejecutan Windows Server 2003 SP1 o una versión posterior aplican la comprobación de acceso de lectura para los atributos confidenciales. La característica de atributos confidenciales está vinculada a la instalación de Windows Server 2003 SP1 o una versión posterior. Esta característica no depende de si un nivel funcional de dominio o bosque está habilitado.

No use la característica de atributos confidenciales a menos que se cumplan las condiciones siguientes:

  • Todos los controladores de dominio basados en Windows Server 2003 tienen Instalado Windows Server 2003 SP1 o una versión posterior.

  • Todos los controladores de dominio basados en Windows 2000 se han actualizado o quitado. Si un dominio contiene una combinación de controladores de dominio que ejecutan Windows 2000 Server, la versión de lanzamiento original de Windows Server 2003 y Windows Server 2003 SP1, puede producirse el siguiente escenario:

  • Si un cliente no autorizado consulta los controladores de dominio basados en Windows 2000 Server y Windows Server 2003 para obtener datos de atributos confidenciales, el cliente puede leer los datos.

  • Si un cliente no autorizado consulta el controlador de dominio basado en Windows Server 2003 SP1 para datos de atributos confidenciales, el cliente no puede leer los datos. No se puede marcar un atributo de esquema base como confidencial. Un identificador de empleado es un ejemplo de un atributo de esquema base. Este atributo no se puede marcar como confidencial porque su valor de atributo systemsFlags está establecido en 0x10 (esquema base). Para obtener más información, vea la sección "Cómo determinar si un atributo es un atributo de esquema base" y la sección "Cómo determinar el valor del atributo searchFlags cuando se usa un atributo existente".

Prueba

Como probaría cualquier cambio en Active Directory y cualquier extensión de esquema, se recomienda probar exhaustivamente los cambios de atributo en un laboratorio que refleje el bosque de producción. Las pruebas ayudan a garantizar que el procedimiento funciona sin problemas y que se detectan problemas.

Comprobaciones de control de acceso

Después de instalar Windows Server 2003 SP1 y después de que Active Directory realice una comprobación de acceso de lectura, Active Directory comprueba si hay atributos confidenciales. Si existen atributos confidenciales y si READ_PROPERTY permisos están establecidos para estos atributos, Active Directory también requerirá CONTROL_ACCESS permisos para los atributos o para sus conjuntos de propiedades.

Nota

La configuración del permiso Control total incluye el permiso CONTROL_ACCESS.

Active Directory realiza una comprobación de acceso de lectura en un objeto en los casos siguientes:

  • Al evaluar si el objeto coincide con el filtro de búsqueda.
  • Cuando se devuelven atributos de un objeto que coinciden con el filtro de búsqueda. De forma predeterminada, solo los administradores tienen permisos CONTROL_ACCESS para todos los objetos. Por lo tanto, solo los administradores pueden leer atributos confidenciales. Los administradores pueden delegar estos permisos a cualquier usuario o a cualquier grupo.

Entradas de control de acceso genéricas y específicas del objeto

Cada objeto de Active Directory tiene información de control de acceso asociada. Esta información se conoce como descriptor de seguridad. El descriptor de seguridad controla el tipo de acceso que está disponible para los usuarios y los grupos. El descriptor de seguridad se crea automáticamente cuando se crea el objeto.

El conjunto de entradas de permisos en un descriptor de seguridad se conoce como una lista de control de acceso discrecional (DACL). Cada entrada de permiso en la DACL se conoce como entrada de control de acceso (ACE).

Puede conceder permisos al objeto o conceder permisos CONTROL_ACCESS a atributos confidenciales mediante una entrada de control de acceso genérica o específica del objeto en el objeto. Puede conceder permisos marcandolos explícitamente en el objeto o mediante la herencia. La herencia significa que establece una entrada de control de acceso heredable en un contenedor que está más alto en la jerarquía de contenedores.

Las entradas de control de acceso genéricas y específicas de objetos son básicamente las mismas. Lo que los diferencia es el grado de control que ofrecen las entradas de control de acceso sobre la herencia y el acceso a objetos. Las entradas de control de acceso genérico se aplican a todo el objeto. Las entradas de control de acceso específicas del objeto ofrecen más control sobre qué objetos heredan la entrada de control de acceso. Al usar una entrada de control de acceso específica del objeto, puede especificar el atributo o el conjunto de propiedades del objeto que heredará la entrada de control de acceso.

Cuando se usa la característica de atributos confidenciales, se concede CONTROL_ACCESS permiso mediante la asignación de una entrada de control de acceso genérico a un usuario. Si se concede CONTROL_ACCESS permiso mediante la asignación de una entrada de control de acceso específica del objeto, el usuario solo tendrá CONTROL_ACCESS permiso para el atributo confidencial.

Se conceden los permisos siguientes cuando se usa una entrada de control de acceso genérica:

  • Todos los derechos extendidos
  • Permitido para autenticarse
  • Cambiar contraseña
  • Recibir como
  • Restablecimiento de contraseña
  • Enviar como

Los permisos que se conceden cuando se usa una entrada de control de acceso genérico pueden proporcionar más acceso de lo que se desea en todo el objeto. Si se trata de un problema, puede establecer una entrada de control de acceso específica del objeto en el objeto para que la entrada de control de acceso solo se aplique al atributo confidencial. Al usar entradas de control de acceso específicas del objeto, puede controlar la propiedad o la propiedad establecida en la que se aplica la entrada de control de acceso.

La interfaz de usuario de Windows Server 2003 no expone Control_Access permisos. Puede usar la herramienta Dsacls.exe para establecer Control_Access permisos mediante la asignación de una entrada de control de acceso genérica. Sin embargo, no puede usar esta herramienta para asignar una entrada de control de acceso específica del objeto. La única herramienta que puede establecer Control_Access permisos asignando una entrada de control de acceso específica de un objeto es la herramienta Ldp.exe.

Nota

Una explicación detallada del control de acceso está fuera del ámbito de este artículo. Para obtener más información sobre el control de acceso, visite los siguientes sitios web de Microsoft:
Control de acceso (autorización)
Administración de identidades y control de acceso

Cómo usar la herencia

En un dominio grande, no es práctico asignar manualmente el acceso de control a un usuario o a un grupo para cada objeto que tenga un atributo confidencial. La solución consiste en usar la herencia para establecer una entrada de control de acceso heredable que sea superior en la jerarquía de contenedores. Esta entrada de control de acceso se aplica a todos los objetos secundarios de ese contenedor.

De forma predeterminada, la herencia está habilitada para todas las unidades organizativas (OU) y para todas las cuentas de usuario, excepto para la cuenta de administrador integrada. Si crea cuentas de usuario que tienen la herencia deshabilitada o crea cuentas administrativas copiando la cuenta de administrador integrada, debe habilitar la herencia para estas cuentas. De lo contrario, el modelo de herencia no se aplica a estas cuentas.

Creación de un atributo confidencial

  1. Determine qué atributo se va a marcar como confidencial o agregue un atributo que desee convertir en confidencial.
  2. Conceda a los usuarios adecuados permisos Control_Access para que los usuarios puedan ver los datos del atributo.

Se pueden usar herramientas como la herramienta Ldp.exe y la herramienta Adsiedit.msc para crear un atributo confidencial. Los archivos .ldf se usan normalmente para extender el esquema. Estos archivos también se pueden usar para marcar un atributo como confidencial. Los archivos que cree para una implementación se deben ajustar durante la fase de prueba para que sepa exactamente lo que va a agregar al esquema al implementar en producción. Los archivos .ldf ayudan a evitar errores.

Los archivos .ldf de ejemplo siguientes se pueden usar para hacer lo siguiente:

  • Adición de un atributo al esquema
  • Marcar el atributo como confidencial
  • Adición del atributo a la clase de usuario

Nota

Antes de usar archivos .ldf, asegúrese de leer las secciones "Identificadores de objeto" y "Sintaxis de atributo" para obtener información importante sobre cómo agregar objetos y atributos al esquema.

Archivos .ldf de ejemplo

El código siguiente agrega un atributo al esquema y, a continuación, marca el atributo como confidencial.

dn: CN=ConfidentialAttribute-LDF,CN=Schema,Cn=Configuration,DC=domain,DC=com
changetype: add
objectClass: attributeSchema
lDAPDisplayName: ConfidentialAttribute
adminDescription: este atributo almacena los datos confidenciales del usuario.
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
-

El código siguiente agrega el nuevo atributo a la clase user.

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

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

Cómo permitir que los usuarios que no son administrativos vean los datos de atributo

Nota

Los procedimientos siguientes requieren que use la herramienta Ldp.exe que se incluye con el modo de aplicación de Active Directory (ADAM) de Windows Server 2003 R2. Otras versiones de la herramienta Ldp.exe no pueden establecer permisos.

Establecimiento manual de permisos de Control_Access en una cuenta de usuario

  1. Abra la herramienta Ldp.exe que se incluye con Windows Server 2003 R2 ADAM.
  2. Conéctese y enlace al directorio.
  3. Seleccione una cuenta de usuario, haga clic con el botón derecho en la cuenta, haga clic en Avanzadas, en Descriptor de seguridad y, a continuación, haga clic en Aceptar.
  4. En el cuadro DACL , haga clic en Agregar ACE.
  5. En el cuadro Administrador, escriba el nombre del grupo o el nombre de usuario al que desea conceder permisos.
  6. En el cuadro Control de acceso, compruebe los cambios realizados en el paso 5.

Cómo usar la herencia para asignar permisos de Control_Access

Para usar la herencia, cree una entrada de control de acceso que conceda permisos Control_Access a los usuarios o grupos deseados que estén más altos en la jerarquía de contenedores que los objetos que tienen atributos confidenciales. Puede establecer esta entrada de control de acceso en el nivel de dominio o en cualquier punto de la jerarquía de contenedores que funcione bien para una empresa. Los objetos secundarios que tienen atributos confidenciales deben tener habilitada la herencia.

Para asignar permisos Control_Access, siga estos pasos:

  1. Abra el archivo Ldp.exe que se incluye en Windows Server 2003 R2 ADAM.

  2. Conéctese y enlace a un directorio.

  3. Seleccione una unidad organizativa o un contenedor que sea el más alto de la jerarquía de contenedores que los objetos que tienen atributos confidenciales, haga clic con el botón derecho en la unidad organizativa o el contenedor, haga clic en Avanzado, en Descriptor de seguridad y, a continuación, haga clic en Aceptar.

  4. En el cuadro DACL , haga clic en Agregar ACE.

  5. En el cuadro Administrador, escriba el nombre del grupo o el nombre de usuario al que desea conceder permisos.

  6. En el cuadro Control de acceso, compruebe los cambios realizados en el paso 5.

  7. En el cuadro Tipo de objeto , haga clic en el atributo confidencial que agregó.

  8. Asegúrese de que la herencia está habilitada en los objetos de destino.

Cómo determinar el valor del atributo systemFlags cuando se usa un atributo existente

Si usa un objeto existente, debe comprobar cuál es el valor del atributo searchFlags actual. Si agrega un objeto, puede definir el valor al agregar el objeto. Hay muchas maneras de obtener el valor del atributo searchFlags. Use el método que funciona mejor para usted.

Para usar la herramienta Ldp.exe para obtener el valor del atributo searchFlags, siga estos pasos:

  1. Haga clic en Inicio, en Ejecutar, escriba LDP y, a continuación, haga clic en Aceptar.

  2. Haga clic en Conexióny, a continuación, haga clic en Enlazar.

  3. Enlazar como administrador del dominio raíz o enlazar como una cuenta que sea administrador de empresa.

  4. Haga clic en Very, a continuación, haga clic en Árbol.

  5. Haga clic en CN=schema,cn=configuration,dc=rootdomain y, a continuación, haga clic en Aceptar.

  6. En el panel izquierdo, expanda CN=schema,cn=configuration,dc=rootdomain.

  7. Busque el nombre de dominio del atributo que desea marcar como confidencial y, a continuación, expándalo.

  8. En la lista de atributos que se rellenan para el objeto, busque searchFlags para determinar el valor del atributo searchFlags actual para ese objeto.

Nota

Para determinar el nuevo valor del atributo searchFlags, use la fórmula siguiente:
128 + currentsearchFlagsattribute value = newsearchFlagsattribute value.

Cómo determinar si un atributo es un atributo de esquema base

Para determinar si un atributo es un atributo de esquema base, use la herramienta Ldp.exe para examinar el valor del atributo systemFlags.

Salida LDP de Employee-ID : systemFlags: 0x10 = (FLAG_SCHEMA_BASE_OBJECT)

En el ejemplo siguiente Ldp.exe salida, Ldp.exe identifica el valor del atributo systemFlags como 0x10 y como atributo de esquema base. Por lo tanto, no puede marcar este atributo como confidencial.

>> 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> cuandoCreated: <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> adminDisplayName: Employee-ID;
1> adminDescription: Employee-ID;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeID;
1> nombre: Employee-ID;
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> objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=domain,DC=com;

Salida LDP del sistema Employee-NumberFlags: 0x0 = ( )

En el ejemplo siguiente Ldp.exe salida, Ldp.exe identifica el valor del atributo systemFlags como 0. Este atributo se puede marcar como confidencial.

>> 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> cuandoCreated: <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> adminDisplayName: Employee-Number;
1> adminDescription: Employee-Number;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeNumber;
1> nombre: 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;

Identificadores de objeto

Al agregar un atributo o un objeto de clase al esquema, uno de los atributos necesarios es el identificador de objeto (también conocido como OID). Los identificadores de objeto se usan para definir de forma única clases y atributos de objeto. Asegúrese de que la empresa obtiene un identificador de objeto único para identificar su atributo. No se admiten las herramientas que generan identificadores de objeto, como la herramienta Oidgen.exe. Para obtener un identificador de objeto de Microsoft, visite el siguiente sitio web de Microsoft:
Obtención de un identificador de objeto de Microsoft

Sintaxis de atributo

El atributo AttributeSyntax también es necesario para agregar nuevos objetos al esquema. Este atributo define la representación de almacenamiento, el orden de bytes y las reglas de coincidencia para las comparaciones de tipos de propiedad. La sintaxis define si el valor del atributo debe ser una cadena, un número o una unidad de tiempo. Cada atributo de cada objeto está asociado exactamente a una sintaxis. Asegúrese de seleccionar la sintaxis de atributo correcta para el nuevo atributo. Esto es especialmente importante si sincroniza un directorio ligero del Protocolo de acceso a directorios (LDAP) con otro directorio LDAP. Después de agregar el atributo al esquema, no se puede cambiar su sintaxis de atributo.

Para obtener más información sobre el atributo AttributeSyntax, vea Attribute-Syntax attribute.

Consulte el atributo Search-Flags para obtener más información.