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 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á asociada a la instalación de Windows Server 2003 SP1 o una versión posterior. Esta característica no depende de si un dominio o un nivel funcional de 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 versión 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 en busca de datos de atributo confidencial, el cliente puede leer los datos.

  • Si un cliente no autorizado consulta al controlador de dominio basado en Windows Server 2003 SP1 para obtener 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 el valor del 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".

Pruebas

Como probaría cualquier cambio en Active Directory y cualquier extensión de esquema, se recomienda probar exhaustivamente los cambios de atributos 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

Una vez instalado 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 se establecen permisos de READ_PROPERTY para estos atributos, Active Directory también necesitará permisos de CONTROL_ACCESS para los atributos o para sus conjuntos de propiedades.

Nota:

La configuración del permiso Control total incluye el permiso de 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 de 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 grupo.

Entradas de control de acceso genéricas y específicas de objetos

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 grupos. El descriptor de seguridad se crea automáticamente cuando se crea el objeto.

El conjunto de entradas de permisos de un descriptor de seguridad se conoce como lista de control de acceso discrecional (DACL). Cada entrada de permiso de 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 si los marca explícitamente en el objeto o mediante la herencia. La herencia significa que se establece una entrada de control de acceso heredada en un contenedor que es superior 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 sobre el acceso a objetos. Las entradas de control de acceso genéricas 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érica 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
  • Se permite autenticar
  • Cambiar contraseña
  • Recibir como
  • Restablecer 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 del deseado 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 a 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 permisos de Control_Access 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 permisos de Control_Access mediante la asignación de una entrada de control de acceso específica del objeto es la herramienta de 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:
Access Control (autorización)
Administración de identidades y Access Control

Uso de la herencia

En un dominio grande, no resulta 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 heredada 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 (UO) y para todas las cuentas de usuario, excepto para la cuenta de administrador integrada. Si crea cuentas de usuario que tienen deshabilitada la herencia o si 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 quiera hacer confidencial.
  2. Conceda a los usuarios adecuados Control_Access permisos para que los usuarios puedan ver los datos del atributo.

Herramientas como la herramienta Ldp.exe y la herramienta Adsiedit.msc se pueden usar para crear un atributo confidencial. Los archivos .ldf se usan normalmente para ampliar 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 optimizar durante la fase de prueba para que sepa exactamente lo que va a agregar al esquema cuando se implemente en producción. Los archivos .ldf ayudan a evitar errores.

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

  • Adición de un atributo al esquema
  • Marcar el atributo como confidencial
  • Agregar el 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 de usuario.

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 no 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.

Cómo establecer manualmente 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 seguridady, a continuación, haga clic en Aceptar.
  4. En el cuadro DACL , haga clic en Agregar ACE.
  5. En el cuadro Fiduciario , 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.

Uso de la herencia para asignar permisos de Control_Access

Para usar la herencia, cree una entrada de control de acceso que conceda permisos de Control_Access a los usuarios o grupos deseados que son más altos en la jerarquía de contenedor 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 de 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 Avanzadas, en Descriptor de seguridady, a continuación, haga clic en Aceptar.

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

  5. En el cuadro Fiduciario , 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 al usar 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 mejor funcione 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. Enlace como administrador del dominio raíz o enlace 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=rootdomainy, 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> whenCreated: <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 de Employee-Number systemFlags: 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: Número de empleado;
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> 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 clases y atributos de objeto de forma única. 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 a exactamente 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. Una vez agregado el atributo al esquema, no se puede cambiar su sintaxis de atributo.

Para obtener más información sobre el atributo attributeSyntax, vea Atributo de sintaxis de atributo.

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