Início > Active Directory, Active Directory Modules for Windows Powershell, Directory Services, Group Management, Nesting Groups, Windows PowerShell > Quest Powershell for AD – Listando grupos (Membership) direta e indiretamente (Nested)

Quest Powershell for AD – Listando grupos (Membership) direta e indiretamente (Nested)

dezembro 25, 2014

Olá pessoALL,

Primeiramente para quem estiver lendo este post um feliz natal e boas festas!

No dia a dia de um IT-Pro que trabalha com Directory Services, realizar a manutenção de objetos é algo completamente comum e a concessão de acesso baseado em grupos é algo completamente trivial ou pelo menos se presume que deveria ser.

Já não é a primeira vez que eu falo sobre grupos de domínio e estratégias para uma boa utilização, no entanto, tal como no artigo sobre Nested Groups, este tipo de abordagem trás alguns desafios e principalmente um problema que pode atuar como uma bomba relógio.

Está bomba relógio está ligada a um efeito chamado Token Bloat. Em resumo, Token Bloat é quando um objeto possui mais SIDs em seu Access Token ocupando mais espaço do que este campo pode suportar.

O resultado deste sintoma são problemas de acesso a recursos de rede, impossibilidade de se realizar o logon, etc. e eu classifico isto como uma bomba relógio, pois na maioria das vezes você não percebe este problema imediatamente já que é necessário efetuar logoff da sessão atual e logon para receber um novo Access Token do KDC.

Dependendo da estratégia de grupos adotadas, listar o número e os nomes destes grupos para determinar se há um Token Bloat pode ser simples ou não. Mas em qual caso não seria uma tarefa fácil? Nos casos onde você tem grupos dentro de grupos (Nesting).

Neste tipo de situação é que o conjunto de cmdlets chamado ActiveRoles Management Shell for Active Directory da Dell (antigamente Quest) pode ajudar.

Este conjunto de cmdlets é muito poderoso é permite diversas possibilidades que não são possíveis sem o uso de um script mais avançado usando PowerShell.

Sem mais delongas, vamos ao comando que permite listar os grupos diretamente e indiretamente que um usuário faz parte.

Get-QADUser -Identity dan.atkins | Get-QADMemberOf -Indirect | Select-Object Name,GroupType,GroupScope | Ft -Wrap -AutoSize

Podemos dividir o comando anterior em duas partes:

  • Get-QADUser -Identity dan.atkins – este cmdlet é equivalente ao Get-ADUser nativo
  • Get-QADMemberOf -Indirect – este cmdlet é quem faz a magia para identificarmos os grupos diretos e indiretos através do parâmtro -Indirect.

Vamos comparar a saída de outro comando para termos uma idéia da diferença. Para listar os grupos diretos que um usuário faz parte é possível usar o seguinte conjunto de cmdlets:

(Get-ADUser -Identity dan.atkins -Properties MemberOf | Select-Object MemberOf).MemberOf

Como resultado, você verá que o usuário Dan Atkins é membro diretamente dos seguintes grupos:

ADGroupMembership_0001

Em seguida para sabermos o número de grupo exibidos é possivel executar o seguinte comando:

((Get-ADUser -Identity dan.atkins -Properties MemberOf | Select-Object MemberOf).MemberOf).Count

Como é possível ver na imagem anterior o número de grupo listados são vinte e oito grupos, no entanto, nesta lista existem grupos que fazem parte de outros grupos e é neste tipo de situação que ActiveRoles pode ajudar.

Vamos ver como é a saída do comando apresentado em primeiro lugar e também a contagem dos objetos listados por ele:

ADGroupMembership_0002

ADGroupMembership_0003

Como é possível verificar nas duas imagens anteriores o número de grupos ao quais o usuário Dan Atkins faz parte aumentou e também o número passou de vinte e oito para cinquenta e sete.

De forma geral, acabamos de aprender como listar e enumerar os grupos que um usuário está inserido, seja direta ou indiretamente, como parte do troubleshooting relacionado a problemas de acesso a recursos de rede e também problema ao efetuar logon.

Até o próximo post…

%d blogueiros gostam disto: