Uma situação bastante típica são as organizações de tamanho médio que possuem cerca de 1500 usuários com cada usuário com seu próprio computador e com cerca de 300 servidores para armazenar e gerenciar informações e sistemas corporativos da organização. Cada um desses usuários necessita acessar múltiplos servidores, além dos seus próprios computadores.

Agora pode-se imaginar o caos ter que gerenciar contas de usuários e permissões de todos esses sistemas. O problema pode se tornar ainda pior quando pensamos em organizações com 10 mil, 50 mil ou até mesmo 100 mil usuários. É inimaginável configurar essas permissões em cada uma das máquinas, ainda mais quando tem-se usuários entrando e saindo a todo momento.

O Active Directory (AD) fornece um serviço centralizado que liga todas essas máquinas e permite que os usuários possam se logar e acessar qualquer coisa que eles tenham permissão. Os usuários devem receber permissão de acesso para que possam acessar arquivos compartilhados, banco de dados ou mesmo caixas de e-mail.

Tecnicamente estamos falando de duas palavras chaves: autenticação e autorização. A autenticação ocorre antes da autorização. Assim, a autenticação, na terminologia dos ADs, refere-se a provar que você é quem você diz ser. Isso ocorre quando se logamos no computador, no e-mail, etc.

No contexto do Active Directory o processo de autenticação basicamente resume-se às situações abaixo:

  • Estamos se logando em um domínio e não em um computador individual;
  • O Active Directory utiliza o protocolo Kerberos para autenticação. O Kerberos é um protocolo padrão utilizado na indústria de software;
  • O tempo de sincronização dentro do Active Directory é importante porque o "time stamp" é usado durante o processo de autenticação. Por exemplo, se um computador pessoal possui cinco minutos de diferença para o domain controller, a tentativa de autenticação será rejeitada.

Após a autenticação no Active Directory, o usuário precisará das informações necessárias. A autorização é o ato de conceder aos usuários acesso adequado aos recursos como arquivos compartilhados, banco de dados, aplicações, e-mails, etc.

Para entender melhor o processo, quando um usuário se loga no Active Directory um token é criado na sua máquina local contendo os grupos que o usuário pertence, privilégios e direitos. Quando o usuário tenta acessar algum recurso o sistema verifica o token para checar se é permitido acessar o arquivo ou o recurso, e assim o acesso é concedido ou negado baseado na informação presente no token.

Além disso, se tentarmos acessar um recurso como, por exemplo, um arquivo compartilhado, caixa postal, ou impressora, em uma máquina remota, um token de acesso local também é criado na máquina.

O sistema de segurança do computador remoto usará o token para determinar se o usuário está autorizado a acessar o recurso solicitado. Dessa forma, nota-se que o acesso aos tokens nunca é transmitido entre a rede de uma máquina para outra.

Uma observação importante é que um Active Directory é parte de uma classe de produtos conhecida como Directory Services ou Serviços de Diretório. Outros produtos concorrentes do Active Directory é o Novell’s eDirectory e o Red Hat’s Directory Server.

A seguir veremos melhor os principais conceitos do Active Directory e como podemos trabalhar com as suas ferramentas GUI e em linha de comando com o Power Shell, incluindo automatizações para a criação de múltiplas contas de usuários.

Active Directory

Existem alguns conceitos e definições importantes que todos administradores de um Active Directory devem estar familiarizados. Nas próximas seções essas importantes definições serão melhores conceituadas.

Forest

A Forest é todo o Active Directory. Esta pode conter um ou mais domínios dispostos em árvores, por isso o nome de floresta. A floresta é nomeada após a criação do primeiro domínio na floresta, este domínio também é chamado como domínio root e não pode ser alterado.

Todos os domínios na floresta compartilham configurações do container que são comuns como: informações no AD Sites dos serviços, tais como, Exchange e partições do AD, além de um schema em comum.

Os domínios são ligados através de confiança transitiva que são automaticamente criadas assim que os domínios são criados.

Com transitivo entende-se que se A confia em B e B confia em C, portanto A também confia em C.

É interessante notar que a floresta é a fronteira de segurança para o Active Directory, assim não é permitido configurar permissões fora da floresta, e para os objetos fora da floresta não são concedidas permissões no interior da floresta. Porém, existem exceções para as declarações em que se cria relações de confiança com outras florestas. Vale ressaltar que a maioria das organizações necessita apenas de uma única floresta.

Domain

Um Domain é um container para os objetos que são necessários trabalhar como usuários, computadores, grupos, etc.

Existem três fronteiras definidas dentro das organizações que o domínio fornece, são elas:

  • Fronteira de administração: administradores de domínio não possuem permissão em outros domínios;
  • Fronteira de administração da segurança: permissões aplicadas dentro do domínio não podem afetar objetos fora do domínio;
  • Fronteira de aplicação de policy: a melhor prática é limitar a aplicação de uma diretiva de grupo para um único domínio. A aplicação de políticas em vários domínios irá limitar o processamento e tornar a administração muito mais difícil.

Um domínio tem um nome de Domain Name System (DNS) completo, assim como ele é o seu identificador único.

Os domínios podem ser dispostos em uma hierarquia (árvores) com relacionamentos pai-filho. Estes relacionamentos não possuem qualquer conotação de administração. Assim, um administrador em um domínio pai não recebe direitos administrativos em um domínio filho.

É comum apenas um domínio na maioria das organizações.

Organizational Unit

Uma Organizational Unit (OU) é um container dentro de um domínio que pode ser usado para armazenar usuários, computadores, grupos, e outros objetos OU. Existem duas razões principais para se criar uma OU: controlar a delegação de privilégios administrativos em que um certo grupo de administradores podem apenas controlar os usuários, grupos e computadores de uma certa OU; e para controlar a aplicação de Group Policy.

Domínios são objetos inflexíveis, e organizá-los em uma floresta é uma tarefa complicada. Em contraste, a reorganização dos OUs (e seus conteúdos) dentro de um domínio é uma questão relativamente simples. Pode-se pensar nas OUs como sendo pasta dentro de um file system.

As OUs foram utilizadas como container para outros objetos. Só para complicar as coisas, também encontramos objetos chamados containers no Active Directory, que são criados com o domínio. Há uma série deles, mas o que são mais prováveis de serem encontrados são:

  • Built-in: armazena um número de grupos por padrão;
  • Users: armazena outro grupo padrão, especialmente o Domain Admins, Enterprise Admins, e Schema Admins.Este também é o local padrão para a criação de novos usuários se uma OU específica não for referenciada.
  • Computers: está vazia quando o domínio é criado, mas é a localização padrão para a criação de contas de computador quando uma nova máquina ingressa no domínio.

A grande diferença entre um container e uma OU é que o Group Policy não pode ser aplicado a um container e OU filhas não podem ser criadas dentro de um container.

Assim sendo, as Forests contêm Domains que, por sua vez, contém OUs que contém Usuários, Grupos e Computadores.

Criando Contas de Usuário

Administradores de Active Directory passam muito tempo gerenciando contas de usuários.

Todos que fazem logging na rede necessitam de uma conta de usuário no Active Directory. Este tipo de objeto é manipulado diversas vezes pelos administradores devido a sua volatilidade, pois frequentemente os usuários precisam realizar alterações na sua conta, reset de senha é bastante frequente, usuários entram e saem das organizações o todo tempo, etc.

Vale ressaltar que contas de computador é uma forma especializada de conta de usuário. Na maioria das organizações ele fica numa OU separada para que a aplicação da Group Policy Object (GPO) seja a mais simples possível. A GPO é uma forma de configurar e gerenciar centralmente as configurações e a segurança de computadores e máquinas que estão disponíveis.

Assim como as contas de usuários, também devemos ter contas para grupos e caixas de e-mail, além de contas para serviços.

Uma boa prática para o gerenciamento de contas é configurar grupos de usuários ao invés de configurar usuários individualmente como veremos posteriormente.

Uma observação importante é que apesar das contas de usuário serem os objetos do AD mais voláteis, tem-se um baixo impacto se algo for configurado erroneamente. Por isso que as modificações nos usuários e grupos ocorrem frequentemente mas possuem um baixo impacto. Porém, modificações na floresta ou no esquema são pouco frequentes, mas podem causar um grande impacto. No entanto, realizar alterações na floresta, esquema ou sites e subredes precisam de permissões especiais de administrador.

Por padrão o Active Directory cria algumas contas durante a sua instalação, porém todas as outras contas para possuírem acesso ao Active Directory devem ser criadas pelo administrador.

O ponto de partida usual é a criação de cada nova conta de usuário a partir do zero que pode ser realizado usando ferramentas com interface gráfica (GUI) disponibilizadas pelo Active Directory ou usando o Power Shell. Uma alternativa que muitas organizações utilizam são os template que criam novas contas de usuário. Este template poderia ser uma conta de usuário padrão ou uma conta de usuário criada especialmente para usada apenas como um template. As duas formas serão abordadas.

No entanto, organizações que possuem um número significativo de criação e gerenciamento de contas de usuários podem precisar de outra alternativa que seria a criação em massa de contas de usuário. Um exemplo deste uso é nas Universidades, que entram milhares de novos alunos por semestre e as contas precisam ser criadas em poucas semanas. Assim podemos usar um sistema automatizado de criação de usuários.

Criando novas contas de usuários

Todas as organizações têm alguma taxa de rotatividade de pessoal, que depende do tamanho da organização e da estabilidade da população de usuários que fazem parte dela.

A ferramenta Active Directory Users and Computers (ou ADUC) é uma das ferramentas utilizadas para gerenciar um Active Directory. Essa ferramenta teve sua versão inicial no Windows 2000. Através dela pode-se gerenciar contas de usuários, computador, grupos e OUs. A ADUC é muito semelhante à Active Directory Administrative Center (ADAC) que foi incorporada nas versões do Windows Server 2008 R2 e permanece até as versões mais recentes do Windows Server. Porém, algumas tarefas que são realizadas na ADUC não podem ser realizadas na ADAC. A ADAC basicamente situa-se sobre os comandos Active Directory PowerShell e o usa como um plano de fundo.

Nas versões mais recentes do Windows Server os comandos do Power Shell já podem ser utilizados para gerenciar um Active Directory.

O módulo para gerenciamento do AD é carregado no Power Shell usando o comando a seguir:

Import-Module ActiveDirectory

Para isso deve-se executar o Power Shell com privilégios elevados (opção Run as Administrator) para que seja possível tirar o máximo das vantagens oferecidas pelo módulo AD.

Para cada uma das ferramentas citadas existe um mínimo de informações necessárias que devem ser fornecidas para a criação de novas contas de usuário.

Segue na Tabela 1 os atributos e em quais ferramentas estes são obrigatórios e se devem ser únicos.

Atributo ADAC ADUC Power Shell Deve ser Único
samAccountName Sim Sim Sim Sim, na floresta
Name Sim Sim Sim Sim, na OU ou Container.
Password Sim Não
Container Sim

Tabela 1. Atributos obrigatórios e únicos que devem ser fornecidos nas ferramentas do AD.

Tanto a ferramenta ADAC quanto o Power Shell podem criar contas de usuários sem uma senha, porém a conta não será habilitada. Uma senha deve ser fornecida antes da conta pode ser usada.

O atributo samAccountName deve ser único em toda floresta, porque ele é usado para cria a UPN (User Principal Name) que é semelhante a um endereço de e-mail e pode ser usado para realizar o logging ao invés de usar um login ID. O Name deve ser único na OU ou no container.

Criando nova conta de usuário com ADAC

ADAC é uma ferramenta GUI que é utilizada para gerenciar contas de usuário no Windows Server 2012 e versões mais recentes do Windows Server.

Para criar um novo usuário basta seguir os passos a seguir:

  1. Abrir o ADAC e navegar no container Users;
  2. Selecionar a opção NEW do painel Tasks;
  3. Selecionar User;
  4. Completar com as informações necessárias.

Nas informações deve-se colocar o nome de usuário no campo "Full Name" e o "samAccountName" no campo "User samAccountNname". Os campos necessários são marcados por um asterisco vermelho. Neste momento a senha pode ser inserida. Também pode-se inserir informações como data de expiração e habilitar a proteção contra deleções acidentais.

A proteção contra deleção acidental (Protect from Accidental Deletion - PAD) apenas modifica as permissões na conta do usuário. Neste caso, a permissão para deletar o objeto é negada para qualquer um do grupo. As permissões negadas possuem precedência sobre permissões permitidas, assim ninguém pode deletar o objeto.

Porém, a configuração do PAD não é infalível, pois um administrador poderia apenas desabilitar a opção e após isso remover o objeto normalmente. No entanto, esse seria um ato consciente e não uma deleção acidental.

O PAD pode ser configurado para setar contas de usuário, computador, grupos e OUs.

Todas organizações fazem uso dessa configuração, sendo altamente recomendável usá-la.

Criando nova conta de usuário com ADUC

Criar uma conta de usuário utilizando a ADUC é semelhante ao processo utilizado com ADAC.

Para criar um novo usuário basta seguir os passos a seguir:

  1. Abrir o ADUC e clicar com o botão direito do mouse no container (para este exemplo pode-se usar o container Users);
  2. Selecionar NEW e por fim USERS.

Nas informações deve-se colocar o primeiro nome e o sobrenome, fornecer o nome de usuário para logon (samAccountName) e clicar em Next. Após isso deve-se fornecer a senha, clicar em Next novamente, rever as informações inseridas até o momento e, por fim, clicar em Finish para criar a conta.

É interessante nesses casos adotar uma certa convenção para os nomes, a maioria das organizações adota uma convenção e uma das mais usadas é o sobrenome estar com a primeira letra maiúscula, criar um espaço entre o primeiro nome e o segundo (como, por exemplo, Fábio Machado) e criar o samAccountName com a primeira letra do primeiro nome mais o sobrenome (como, por exemplo, fmachado para o exemplo anterior).

Uma convenção usada em muitas organizações é fazer uma separação dependendo do tipo de usuário. Por exemplo, os terceiros teriam o nome separado com ponto (fernando.machado) e os funcionários teriam a primeira letra do primeiro nome mais o sobrenome (fmachado), isso também ajuda a manter uma certa organização desde o início.

Criando nova conta de usuário com Power Shell

O último método utilizado para criação de contas é utilizando o Power Shell que se trata da ferramenta mais poderosa para gerenciamento do Active Directory. Quando se utiliza o ADAC para criar uma conta, pode-se verificar os comandos Power Shell sendo executados na parte inferior da GUI.

O seguinte código da Listagem 1 pode ser utilizado para uma nova conta de usuário no Power Shell.

Listagem 1. Criando uma conta de usuário no Power Shell.


      $secpass = Read-Host "Password" -AsSecureString
      New-ADUser -Name "MACHADO Fernando" -SamAccountName fmachado
      -UserPrincipalName "fmachado@devmedia.com " -AccountPassword $secpass
      -Path "cn=Users,dc=Devmedia,dc=com" -Enabled:$true

A primeira linha cria uma senha como uma string segura (criptografada). O comando "Read-Host" é responsável por solicitar a senha no terminal, que é escondida através de asteriscos durante a entrada dos dados. O parâmetro "–AsSecureString" assegura que a senha é criptografada. O comando New-ADUser é usado para criar a conta.

Após digitar os comandos basta dar um ENTER no Power Shell para que a conta seja criada.

Uma pergunta que os administradores normalmente fazem para outros administradores mais experientes é qual dos três métodos utilizar. Assim como tudo relacionado à informática em geral, isso depende de duas coisas: qual ferramenta temos disponível no ambiente atual e com qual ferramenta nos sentimos mais confortáveis em utilizar.

De forma geral a minha recomendação como administrador de um Active Directory e que a maioria dos administradores recomendam é utilizar Power Shell de preferência, porém o ADAC pode ser utilizado se tivermos um Windows Server 2012, porém se tivermos a disposição o Windows Server 2008 R2 ou anterior podemos utilizar o ADUC.

O Power Shell é bastante completo, mais completo que as ferramentas GUI, além de ser mais rápido, porém ele é mais complicado de mexer exigindo um conhecimento maior em relação às outras ferramentas.

Criando Novas Contas de Usuário Utilizando Template

Anteriormente criou-se contas de usuário únicas utilizando o mínimo possível de informações. Na realidade, seria necessária a inclusão de diversas outras informações, tais como grupos, informações de endereço, gerentes, números de telefone, etc. Isso pode acarretar mais probabilidade de erro. A forma mais utilizada e comum nas organizações para reduzir a chance de ocorrer um erro é através da utilização de um template. Esta é uma conta totalmente configurada que é copiada para formar uma nova conta.

Quando se utiliza um template existem duas opções a serem consideradas: usar uma conta existente ou criar uma conta para ser usada como um template.

O recomendado e mais utilizado pelas organizações é usar uma conta existente. A criação de um template significa que devemos mantê-lo sempre atualizado. Essa tarefa não será tão onerosa se mantivermos uma organização relativamente pequena com alguns templates. Uma organização com centenas de usuários e departamentos, cada um com seu próprio template, irá gerar uma quantidade significativa de trabalho para mantê-los.

Assim, para criar uma conta única basta utilizarmos o ADUC ou o Power Shell. Infelizmente não é possível copiar uma conta usando ADAC. Se utilizarmos ADUC basta seguir os passos:

  1. Abrir a ferramenta e escolha uma conta que será utilizada como template;
  2. Clicar com o botão direito do mouse em cima da conta e escolher Copy;
  3. Fornecer o primeiro nome e o sobrenome nos campos exibidos na tela;
  4. O campo "Full name" será automaticamente preenchido;
  5. Fornecer o username para o login e clicar em Next;
  6. Entrar e confirmar a senha;
  7. Rever as informações fornecidas e clicar em Finish.

Se utilizarmos o Power Shell devemos adicionar o parâmetro "–Instance" no comando "New-ADUser", como mostra o exemplo da Listagem 2.

Listagem 2. Criando uma conta usando outra como template.


      $secpass = Read-Host "Password" -AsSecureString
      $user = Get-ADUser -Identity fmachado -Properties memberof, office
      New-ADUser -Name "CARDOUSO Jeferson" -SamAccountName jcardouso
      -UserPrincipalName "jcardouso@devmedia.com"
      -AccountPassword $secpass -Path "cn=Users,dc=Devmedia,dc=com"
      -Enabled:$true -Instance $user

Pode-se verificar que todos os comandos acima são semelhantes ao usado para criar um único usuário, exceto que estamos utilizando um usuário como template (fmachado).

Neste script utilizamos o comando “Read-Host” para criar uma senha. Uma conta de usuário existente é acessada para criar um template. Também é necessário especificar as propriedades que desejamos copiar quando criamos a variável $user colocando-os no parâmetro "–Properties" do comando "Get-ADUser". Outra opção é utilizar o "*" para obter todos os campos, lembrando que pode ser lançada uma exceção se um campo que deveria ser único for copiado.

O comando "New-ADUser" cria um novo usuário com base nas informações armazenadas nas variáveis definidas anteriormente.

É importante salientar que utilizando Power Shell não é possível copiar os grupos ou atributos multivalorados. Para isso recomenda-se a utilização do ADUC.

Essas técnicas são boas para criar contas únicas, na próxima seção veremos como criar múltiplas contas.

Criando Novas Contas de Usuário em Massa

A criação de diversos usuários pode ser realizada através das ferramentas GUI, mas esta é uma tarefa um tanto repetitiva de ser realizada. Como toda tarefa repetitiva deve ser automatizada, pode-se utilizar uma técnica muito mais apropriada.

Primeiramente deve-se organizar as informações e para isso pode-se utilizar um arquivo CSS com os valores separados por vírgula.

Segue na Tabela 2 um exemplo de um arquivo com o conteúdo necessário.

FirstName LastName SamAccountName
Fernando Machado fmachado
Jeferson Cardouso jcardouso
Luis Marconi lmardoni
Daniel Veronesi dveronesi

Tabela 2. Exemplos de arquivos

O nome do arquivo poderia ser "nomes.csv". Este arquivo possui os valores dos campos "FirstName", "LastName", e "sam-AccountName".

Se tivermos uma convenção para o "samAccountName" podemos adaptar o script para isso.

O script Power Shell da Listagem 3 pode ser utilizado para automatizar a criação em massa de contas de usuário no AD.

Listagem 3. Criando diversos usuários no Active Directory com Power Shell.


      $secpass = Read-Host "Password" -AsSecureString
      Import-Csv nomes.csv |
      foreach {
               $name = "$($_.LastName) $($_.FirstName)"
               New-ADUser -GivenName $($_.FirstName) -Surname $($_.LastName) `
               -Name $name -SamAccountName $($_.SamAccountName) `
               -UserPrincipalName "$($_.SamAccountName)@devmedia.com" `
               -AccountPassword $secpass -Path "cn=Users,dc=Devmedia,dc=com" `
               -Enabled:$true
      }

O “Read-Host” é utilizado para definir a senha. A informação do arquivo é lida usando "Import-Csv". Cada linha no arquivo é processada usando "foreach".

A variável "$name" é criada através dos campos "FirstName" e "LastName" do arquivo. O "$_" é utilizado para referenciar o objeto da linha sendo processada. Cada campo no arquivo CSV é uma propriedade do objeto sendo processado. O comando "New-ADUser" é utilizado para criar a conta de usuário. Diferente dos scripts anteriores, agora utilizam-se os valores do objeto sendo processado.

Essa abordagem cria múltiplas contas muito rapidamente e, além disso, pode-se adicionar outros passos para adicionar outras informações.

Parâmetros do Power Shell

Os comandos do Power Shell possuem diversos parâmetros. O código da Listagem 4 mostra a maioria das opções mais comuns que podem ser utilizadas.

Listagem 4. Script em Power Shell com diversas outras opções utilizadas para criação de contas.


      $secpass = Read-Host "Password" -AsSecureString
      New-ADUser -Name "MACHADO Fernando" -SamAccountName fmachado `
      -GivenName "Fernando" -Surname "Machado" `
      -DisplayName "Fernando Machado" -UserPrincipalName "fmachado@devmedia.com" `
      -AccountPassword $secpass -ChangePasswordAtLogon:$true `
      -Path "cn=Users,dc=Devmedia,dc=com" -Enabled:$true `
      -Description "Teste de usuário com diversas opções" `
      -Manager fmachado -Organization "DEVMEDIA" `
      -Company "DEVMEDIA" -Department "IT" -Division "AD Admin" `
      -Title "AD administrator" `
      -Office "DEVMEDIA" -StreetAddress "Rua Fernando Pessoa" `
      -City "São Paulo" -State "São Paulo" `
      -Country "GB" -PostalCode "92110100" -POBox "1234" `
      -OfficePhone "011 34345768" `
      -HomePhone "011 40981232" -MobilePhone "011 34096098" `
      -HomeDrive "H:" -HomeDirectory "\\server1\Home\fmachado" `
      -ProfilePath "\\server2\profiles\wsc" -ScriptPath "logon.vbs"

Espero que tenham gostado do artigo. Até a próxima!

Bibliografia

[1] Usando o Windows PowerShell
https://technet.microsoft.com/pt-br/library/dn425048.aspx.

[2] Introdução ao Active Directory
https://technet.microsoft.com/pt-br/library/cc668412.aspx.

[3] Richard Siddaway, Learn Active Directory Management. Manning, 2014.