Estamos implantando em nosso ambiente computacional, uma ferramenta bastante interessante, chama-se GLPI,
Entre as diversas funcionalidades, há a importação de grupos do AD da microsoft, autenticação e etc...
Para minha surpresa, na versão 9.4.6, os grupos são importados, bem como os usuários, porém os integrantes dos grupos no GLPI, não são preenchidos, gerando um trabalho manual.
Pesquisei bastante na internet, mas não achei nada pronto, então tive que construir meu próprio script shell para realizar tal tarefa, segue o script, que espero que ajude alguém:
[root@localhost ~]# cat /scripts/atualiza_grupos.sh
#!/bin/bash
#script feito por Edcley Firmino em 04/08/2020
#faz a sincronização dos integrantes dos grupos do AD nos grupos correspondentes no GLPI
mysql -u root -psenhamysqldoroot -e "select name, id from glpi.glpi_groups;" | while read name group_id; do
if [ $name != "name" ]
then
#echo "$name ...$group_id"
ldapsearch -x -D "usuarioparaglpi@seudominio" -H ldap://ip-do-seu-dominio -b "DC=teste,DC=com,DC=br" -w "senha-secreta" '(&(objectClass=user)(sAMAccountName=*)(memberOf=CN='$name',OU=sua-ou,DC=teste,DC=com,DC=br))' | grep sAMAccountName: | sed 's/sAMAccountName://' | while read integrante; do
mysql -u root -psenhamysqldoroot -e "select id from glpi.glpi_users where name = '$integrante';" | while read user_id; do
if [ $user_id != "id" ]
then
mysql -u root -psenhamysqldoroot -e "select count(*) total from glpi.glpi_groups_users where users_id = '$user_id' and groups_id = '$group_id';" | while read total; do
if [ $total != "total" ]
then
if [ $total -eq 0 ]
then
mysql -u root -psenhamysqldoroot -e "insert into glpi.glpi_groups_users (users_id, groups_id, is_dynamic, is_manager, is_userdelegate) values ('$user_id','$group_id',0,0,0);"
fi
fi
done
fi
done
done
while read nome id_user; do
if [ $nome != "name" ]
then
let contador=0
while read integrante_2; do
if [ $nome = $integrante_2 ]
then
contador=$[$contador + 1]
fi
done < <( ldapsearch -x -D "usuarioparaglpi@seudominio" -H ldap://ipdoseudominio -b "DC=teste,DC=com,DC=br" -w "senha-secreta" '(&(objectClass=user)(sAMAccountName=*)(memberOf=CN='$name',OU=sua-OU,DC=teste,DC=com,DC=br))' | grep sAMAccountName: | sed 's/sAMAccountName://' )
if [ $contador -eq 0 ]
then
# excluir usuario do grupo, pois se o contador e igual a 0, logo ele nao faz mais parte do grupo do AD
mysql -u root -psenharootmysql -e " delete from glpi.glpi_groups_users where groups_id = '$group_id' and users_id = '$id_user';"
fi
fi
done < <( mysql -u root -psenharootmysql -e "select name, u.id from glpi.glpi_groups_users gu inner join glpi.glpi_users u on (gu.users_id = u.id) where gu.groups_id = '$group_id';" )
fi
done
[root@localhost ~]#
if [ $nome != "name" ]
then
let contador=0
while read integrante_2; do
if [ $nome = $integrante_2 ]
then
contador=$[$contador + 1]
fi
done < <( ldapsearch -x -D "usuarioparaglpi@seudominio" -H ldap://ipdoseudominio -b "DC=teste,DC=com,DC=br" -w "senha-secreta" '(&(objectClass=user)(sAMAccountName=*)(memberOf=CN='$name',OU=sua-OU,DC=teste,DC=com,DC=br))' | grep sAMAccountName: | sed 's/sAMAccountName://' )
if [ $contador -eq 0 ]
then
# excluir usuario do grupo, pois se o contador e igual a 0, logo ele nao faz mais parte do grupo do AD
mysql -u root -psenharootmysql -e " delete from glpi.glpi_groups_users where groups_id = '$group_id' and users_id = '$id_user';"
fi
fi
done < <( mysql -u root -psenharootmysql -e "select name, u.id from glpi.glpi_groups_users gu inner join glpi.glpi_users u on (gu.users_id = u.id) where gu.groups_id = '$group_id';" )
fi
done
[root@localhost ~]#
Comentários
Postar um comentário