Como exportar uma lista completa de usuários no Samba Active Directory?

0

Eu tenho um Active Directory em execução em Samba 4.6.3 , em um servidor com Debian Jessie . Em um PC com Windows 7 (cliente AD), instalei o RSAT e a partir daí gerenciei o servidor usando uma conta de administrador, mas agora preciso exportar a lista completa de usuários em um formato legível, de preferência .csv

Usando o RSAT (do cliente no Windows) até agora, só consegui exportar todos os objetos em OU (unidade organizacional), ONE OU AT A TIME, seja o contêiner de usuário OU a ou um contêiner de PC, ou seja, eu poderia fazer o que eu quiser (exportar a lista completa de usuários) repetindo o processo para cada contêiner de usuário OU , mas tenho muitos contêineres de usuário OU .

Pergunta: Existe alguma maneira de exportar a lista completa de usuários, com nome e sobrenome, com seu correspondente OU de forma rápida e sem ter que fazer este trabalho iterativo?

PD: A resposta não precisa ser limitada ao cliente no Windows com o RSAT, também pode estar no servidor Samba

    
por k.Cyborg 19.12.2017 / 16:18

1 resposta

1

Solução de bash .. partes ...

Comece por extrair o conteúdo do anúncio:

ldapsearch -s -h <ADHOST> -P <ADPORT> -D <USERDN WITH RIGHTS TO READ AD> -W -E pr-1000/noprompt -b <BASEDN FOR SEARCH> > ad_extract_tmp.ldif

O "-W" força um prompt interativo para a senha do usuário. Você não quer isso no histórico de comando. Se você está combinando isso em um script, então você pode usar o "-w" e proteger o acesso à senha.

Agora que o conteúdo foi extraído em um arquivo de texto, podemos usar o processamento de texto para converter em CSV ou qualquer outro formato desejado.

Arquivos ldif são agrupados, então o primeiro passo seria desdobrá-lo

awk ' BEGIN (RS="\n\n"; FS="\n "} {for (i=1,i<=NF;i++) printf $i; printf "\n\n"}' ad_extract_tmp.ldif > ad_extract_tmp.ldif.unwrapped

Aqui, redefinimos o registro para consistir em um bloco de texto com dois finais de linha e um campo para consistir em um bloco de texto com apenas uma linha terminando e um espaço. Em seguida, processamos cada linha como um campo, juntando as que são ldif wrapped ("\ n") em um único campo. Agora que temos um ldif desembrulhado, o passo final é converter de ldif para csv.

awk ' Begin {
             record = "false";
             print "\x22uid\x22,\x22dn\x22";
  }
  { if ( record = "true") {

       if ( $0 ~ /~sAMAccountName./) {
         uid = $0;
         sub (/^.*: /,"",uid);
        }

       if ( $0 ~ /^\s*$/) {
           print "\x22" uid "\x22,\x22" dn "\x22";
           dn = "";  record = "false";
         }
      }
  }
  {
    if ($0 ~ /^dn:./) {
       record = "true";
       dn = $0;
     }
  }' ad_extract_tmp.ldif.unwrapped > ad_extract.csv

Este é um script de conversão awk significativamente simplificado que converte o ldif desembrulhado em csv.

É possível extrair o dn para os usuários ou e ir depois dos campos adicionais que são necessários. Apenas estenda o script final do awk.

    
por 19.12.2017 / 20:09