domingo, 22 de agosto de 2010

Habilitando a "lixeira" no Active Directory Introdução

Neste artigo demonstraremos como utilizar o recurso de Recycle Bin (mais conhecido como lixeira) no Active Directory.

Até o Windows Server 2008 era necessário fazer o restore do System State de um DC para restaurar um objeto excluido no Active Directory. Uma exceção era a possibilidade de “reanimar” um objeto no Windows Server 2003, porem praticamente todos os seus atributos eram perdidos e precisavam ser “reconstruidos”.

Um dos novos recursos no AD do Windows Server 2008 R2 é a possibilidade de ter os objetos excluidos enviados para uma lixeira, o que possibilita restaurar um objeto (e todos os seus atributos) sem a necessidade de restaurar um System State ou de “reanimar” o objeto.

Porem para tristeza de alguns este recurso vem desativado por padrão e (ainda) não existe uma interface gráfica para realizar tal operação, o que pode tornar um pouco complicada a recuperação de objetos na “lixeira”.

Vamos entender como funcionava o processo até o Windows Server 2008 e como funciona no Windows Server 2008 R2 quando o recurso esta habilitado.

1. Ate o Windows Server 2008 (ou até o Windows Server 2008 R2 sem o recurso habilitado):

a. O objeto excluido tem todos os atributos removidos (exceto SID, ObjectGUID, LastKnownParent and SAMAccountName) e o atributo “isDeleted” é definido com o valor “True”;

b. Durante o periodo de TombStone Lifetime é possível reanimar o objeto (perdendo seus atributos) ou restaura-lo por completo através do ntdsutil;

c. Após este periodo o objeto é fisicamente removido do Active Directory pelo processo de Garbage Collect;

2. A partir do Windows Server 2008 R2 com o recurso habilitado:

a. O objeto excluido e todos os seus atributos são mantidos dentro do Active Directory;

b. Durante o periodo de TombStone Lifetime é possível restaurar o objeto e seus atributos sem a necessidade de utilizar o ntdsutil;

c. Após este periodo o objeto é fisicamente removido do Active Directory pelo processo de Garbage Collect;

Pré-Requisitos

O único requisito para habilitar o recurso de “lixeira” é o nível funcional da floresta em Windows Server 2008 R2. Vale lembrar que neste nível funcional nenhum DC poderá executar uma versão anterior ao Windows Server 2008 R2.

Lembrando que uma vez ativado o recurso ele NÃO poderá mais ser desativado, portanto sua implementação precisa ser exaustivamente planejada para evitar dores de cabeça no futuro. (Particulamente não consegui encontrar um motivo para esta dor de cabeça mas vale a pena mencionar aqui)

Habilitando o recurso

A forma mais fácil para habilitar o recurso é utiliando o cmdlet “Enable-ADOptionalFeature” disponivel a partir da ferramenta Active Directory Module for Windows PowerShell.

Mãos a obra:

· Clicar no menu Start/Administrative Tools/Active Directory Module for Windows PowerShell;

· Executar o cmdlet “Enable-ADOptionalFeature” com os parametros: Enable-ADOptionalFeature –Identity ‘CN=Recycle Bin Feature,CN=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration, DC=jsathler,DC=spaces,DC=live,DC=com’ –Scope ForestOrConfigurationSet –Target ‘jsathler.spaces.live.com’;

· Será informado que a operação é irreversivel, basta informar Y ou A para continuar e N ou L para cancelar;

Restaurando um objeto excluido

Como não temos (ainda) uma interface gráfica para manuseio dos objetos na lixeira, vamos utilizar os cmdlet’s Get-ADObject e Restore-ADObject para restaura-los.

Através do menu Start/Administrative Tools/Active Directory Module for Windows PowerShell, executar os commandos abaixo:

1. Restaurando um usuário:

o Get-ADObject -ldapFilter:"(sAMAccountName=recycleuser)" –IncludeDeletedObjects | Restore-ADObject, onde recycleuser é o samid do usuário;

2. Restaurando uma OU:

o Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Americas)" –IncludeDeletedObjects | Restore-ADObject, onde Americas é o nome da OU;

3. Restaurando um grupo:

o Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Grupo01)" –IncludeDeletedObjects | Restore-ADObject, onde Grupo01 é o nome do grupo;

4. Restaurando uma conta de computador:

o Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Computador01)" –IncludeDeletedObjects | Restore-ADObject, onde Computador01 é o nome da conta do computador;

Ate aqui vimos como restaurar objetos de forma “simples”, porem como restaurar uma OU e todos os seus objetos?

Quando uma OU é excluida, todos os objetos juntamente com a OU é exibida de forma “plana”, ou seja os objetos não são listados dentro de uma hierarquia como quando são visualizados a partir do mmc “Active Directory Users and Computers”.

Vejamos entao o procedimento para restaurar uma OU e todos os seus objetos. A estrutura a ser restaurada se encontra na imagem abaixo:

1. Restaurar a OU “Brasil”:

o Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Brasil)" –IncludeDeletedObjects | Restore-ADObject;

2. Restaurar os objetos dentro da OU Brasil:

o Get-ADObject -Filter {lastKnownParent -eq "OU=Brasil, DC=jsathler,DC=spaces,DC=live,DC=com"} -IncludeDeletedObjects -Properties lastKnownParent | Restore-ADObject;

3. Restaurar os objetos dentro da OU Usuários:

o Get-ADObject -Filter {lastKnownParent -eq "OU=Usuários, OU=Brasil, DC=jsathler,DC=spaces,DC=live,DC=com"} -IncludeDeletedObjects -Properties lastKnownParent | Restore-ADObject;

4. Restaurar os objetos dentro da OU Grupos:

o Get-ADObject -Filter {lastKnownParent -eq "OU=Grupos, OU=Brasil, DC=jsathler,DC=spaces,DC=live,DC=com"} -IncludeDeletedObjects -Properties lastKnownParent | Restore-ADObject;

5. Restaurar os objetos dentro da OU Computadores:

o Get-ADObject -Filter {lastKnownParent -eq "OU=Computadores, OU=Brasil, DC=jsathler,DC=spaces,DC=live,DC=com"} -IncludeDeletedObjects -Properties lastKnownParent | Restore-ADObject;

Pronto, toda a estrutura foi restaurada assim como as permissões pré-existentes e GPO’s associadas.

Caso queira apenas listar os objetos que existiam em uma OU que foi apagada, seguir o seguinte procedimento:

1. Listar um objeto que existia dentro da OU apagada:

o Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Brasil)" –IncludeDeletedObjects -Properties lastKnownParent

2. Copiar o valor do campo "LastKnownParent":

o OU=Brasil\0ADEL:0dffb3a5-402d-444d-84a7-492370e34bc4,CN=Deleted Objects,DC=jsathler,DC=spaces,DC=live,DC=com

3. Utilizar o comando abaixo para pesquisar os objetos “filhos” da OU removida. (Atenção para a \ após o nome da OU, pois ela precisa ser substituida por \\):

o Get-ADObject -Filter {lastKnownParent -eq " OU=Brasil\\0ADEL:0dffb3a5-402d-444d-84a7-492370e34bc4,CN=Deleted Objects,DC=jsathler,DC=spaces,DC=live,DC=com "} -IncludeDeletedObjects -Properties lastKnownParent | ft

by - Juliano Sathler (http://cid-40cbf5e035def7b3.profile.live.com/details/)

Nenhum comentário: