Scripts em BASH para administração do LDAP
clodonil March 26th, 2010
Um dos pontos mais complexos em administrar a base LDAP é encontrar ferramentas que auxiliam no gerenciamento da base. Algumas ferramentas, tais como phpldapadmin e outras com o nome de ldapbrowser realmente contribuem nesse processo.
Entretanto em algumas tarefas administrativas essas ferramentas são ineficazes e o administrador se depara com situações que ele mesmo tem que desenvolver soluções pontuais.
É com essa visão que apresento um conjunto de scripts que podem auxiliar os administradores na construção de scripts para soluções dos problemas do cotidiano.
Os scripts foram criados utilizando a linguagem de script BASH, que vem por padrão na maioria dos Linux. Para os scripts funcionarem é importante que as ferramentas do LDAP estejam instaladas na maquina. Normalmente essas ferramentas estão no pacote ldap-utils. Além dos pacotes das ferramentas instaladas é necessário que o LDAP esteja instalado e configurado.
Para os scripts funcionarem é preciso criar a base LDAP e as unidades organizacionais. Vou colocar esses 2 ldif para deixar bem claro.
Com o LDAP instalado é preciso que seja incluída o domínio na base LDAP. Segue um exemplo do domínio root; essa é a primeira entrada para a base LDAP.
dn: dc=dominio
objectClass: top
objectClass: dcObject
objectClass: organization
dc: dominio
o: descricao do dominio
dn: ou=pessoas,dc=dominioobjectClass: organizationalUnitou: pessoasdn: ou=groups,dc=dominioobjectClass: organizationalUnitou: groups
Neste caso estamos criando duas entradas. A primeira é para os usuários e a segunda para os grupos que os usuários pertencem.
Depois de esclarecida essas informações, vamos para os scripts.
Os scripts que estarei apresentando são:
- add_user.sh – Utilizado para incluir usuário na base LDAP;
- delete_user.sh – Utilizado para excluir usuário na base LDAP;
- add_group.sh – Script utilizado para incluir grupo na base LDAP;
- delete_group.sh – Script para deletar grupos;
- add_user_group.sh – Script utilizado para incluir um usuário no grupo;
- alter_senha.sh – Script utilizado para alterar/definir as senhas dos usuários;
Juntamente com os scripts é necessário criar um arquivo com o nome config e dentro dele colocar as configurações da base para ser utilizadas por todos os scripts.
Segue o conteúdo do arquivo config. Altere com os dados da sua base LDAP.
suffix="dc=dominio"
people="ou=people",$suffix
group="ou=groups",$suffix
rootdn="cn=manager"
rootpw="senha"
O primeiro script (add_user.sh) é para incluir o usuário base LDAP.
#!/bin/bash
source config
uidnumber=`ldapsearch -h localhost -x -b $suffix -D $rootdn,$suffix -w $rootpw uidNumber | grep uidNumber | sort | cut -d : -f 2 | tail -n 1| sed s/\ //g | sed s/uidNumber//g`
if [ -z $uidnumber ]; then
uidnumber="1000"
finextuid=`expr $uidnumber + 1`
echo "Digite o nome:"
read cnecho "Digite o sobrenome:"
read snecho "Digite o email:"
read emailuid=$1
(
echo "dn:uid=$uid,$people"
echo "objectClass: top"
echo "objectClass: person"
echo "objectClass: posixAccount"
echo "objectClass: inetOrgPerson"
echo "cn:$cn"
echo "sn: $sn"
echo "mail: $email"
echo "telephonenumber:11-11-1-11"
echo "uid: $uid"
echo "userPassword: x"
echo "homeDirectory: /home/$uid"
echo "loginShell: /dev/null"
echo "uidNumber: $nextuid"
echo "gidNumber: $nextuid"
)| ldapadd -x -D $rootdn,$suffix -w $rootpw
Sintaxe para executar o script.
#!/bin/bashsource configcn=$1echo $LDAPDN(echo "uid=$cn,$people")| ldapdelete -x -D $rootdn,$suffix -w $rootpw
#!/bin/bashsource configgidnumber=`ldapsearch -h localhost -x -b $group -D $rootdn,$suffix -w $rootpw gidNumber | grep gidNumber: | sort | cut -d : -f 2 | tail -n 1| sed s/\ //g`nextgid=`expr $gidnumber + 1`uid=$1(echo "dn:cn=$uid,$group"echo "objectClass: posixGroup"echo "cn: $uid"echo "gidNumber: $nextgid")| ldapadd -x -D $rootdn,$suffix -w $rootpw
#!/bin/bashsource configcn=$1echo $LDAPDN(echo "cn=$cn,$group")| ldapdelete -x -D $rootdn,$suffix -w $rootpw
#!/bin/bashsource configcn=$1uid=$2LDAPDN=`ldapsearch -h localhost -x -b $group -D $rootdn,$suffix -w $rootpw "(cn=$cn)"|grep dn`(echo "$LDAPDN"echo "changetype: modify"echo "add: memberUid"echo "memberUid: $uid")| ldapmodify -x -D $rootdn,$suffix -w $rootpw
#!/bin/bashsource configcn=$1echo "Digite a senha:"read -s passsenha=`slappasswd -c crypt -s $pass`LDAPDN=`ldapsearch -h localhost -x -b $people -D $rootdn,$suffix -w $rootpw "(cn=$cn)"|grep dn`(echo "$LDAPDN"echo "changetype: modify"echo "replace: userPassword"echo "userPassword: $senha")| ldapmodify -x -D $rootdn,$suffix -w $rootpw
.png)


