Los grupos de Active Directory facilitan mucho la administración del acceso y la asignación de permisos en un dominio. Puede agregar un grupo de AD a otros. Estos se llaman grupos anidados de Active Directory. Los grupos anidados son una forma conveniente de administrar el acceso en AD en función de los roles comerciales.
Sin embargo, al diagnosticar problemas de permisos, los administradores pueden descubrir que los grupos anidados son el origen del problema. En la mayoría de los casos, los problemas con los grupos anidados surgen cuando se diagnostican las reglas de denegación de acceso y las políticas de grupo.
No podrá ver la pertenencia de los usuarios en grupos de AD anidados mediante la consola de usuarios y equipos de Active Directory (dsa.msc). En este artículo, le mostraremos cómo averiguar de qué grupos anidados es miembro un usuario.
La siguiente captura de pantalla muestra que el usuario es miembro de dos grupos AD además del estándar Usuarios de dominio: CA_IT_dept y CA_Server_Admins. No ve si el usuario es miembro de algún grupo anidado.
Puede usar la herramienta dsget en el controlador de dominio para mostrar la lista completa de grupos de los que el usuario es miembro, teniendo en cuenta los grupos anidados (los parámetros -expand y -memberof):
dsget user "CN=Jon Brion,OU=Users,OU=California,OU=USA,DC=test,DC=com" -expand -memberof
En este ejemplo, el usuario es miembro de 6 grupos de AD.
Si usa cmdlets del módulo AD PowerShell para obtener datos sobre los miembros del grupo (https://theitbros.com/check-active-directory-group-membership/) o usuarios, los siguientes cmdlets tampoco muestran información sobre los grupos anidados.
Get-ADUser jbrion -properties memberof | select memberof -expandproperty memberof
Con el cmdlet Get-ADGroupMember con el parámetro –Recursive, puede enumerar todos los miembros de un grupo, incluidos los anidados. Pero los resultados de dicho comando contendrán solo objetos que no tengan objetos secundarios. No habrá información sobre grupos anidados entre los resultados de salida.
Para obtener información sobre grupos de usuarios anidados en PowerShell, debe usar la opción de filtro LDAP extensible especial LDAP_MATCHING_RULE_IN_CHAIN (1.2.840.113556.1.4.1941). Este filtro se utiliza para encontrar grupos anidados, busca una coincidencia a lo largo de toda la cadena desde la raíz (disponible a partir de Windows Server 2003 SP2).
Vamos a mostrar todos los grupos de dominio en los que el usuario es miembro sin filtro LDAP:
Get-ADGroup –LDAPFilter “(member= CN=Jon Brion,OU=Users,OU=California,OU=USA,DC=test,DC=com)”|ft –a
Y luego usa la regla LDAP_MATCHING_RULE_IN_CHAIN.
Get-ADGroup –LDAPFilter “(member:1.2.840.113556.1.4.1941:= CN=Jon Brion,OU=Users,OU=California,OU=USA,DC=test,DC=com)”|ft –a
Como puede ver, el segundo comando mostró todos los grupos de usuarios en el dominio, incluidos los anidados.
De manera similar, puede determinar si el usuario es miembro de algún grupo de seguridad. El primer comando mostrará solo los miembros directos del grupo:
Get-ADUser –LDAPFilter “(memberOf=CN=CA_Users,OU=Groups,OU=California,OU=USA,DC=test,DC=com)”|ft -a
Nadie ha sido añadido directamente al grupo. Ahora intentemos mostrar los miembros de este grupo a través de un grupo anidado:
Get-ADUser –LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=CN=CA_Users,OU=Groups,OU=California,OU=USA,DC=test,DC=com)"|ft –a
Microsoft proporciona las siguientes pautas para usar grupos anidados que pueden simplificar la administración de AD:
- No se recomienda utilizar más de un nivel de anidamiento de grupos;
- Un grupo de seguridad puede ser miembro de un solo grupo principal;
- No utilice grupos anidados si la denegación de derechos se implementa mediante estos grupos;
- El grupo de seguridad global anidado no debe tener privilegios de nivel superior.