Simplificando a criação de usuários na base LDAP

Eu até que gosto de interfaces web, como a phpLDAPadmin, mas eu pertenço àqueles tempos passados da informática pré-histórica, onde eu me comunicava com computadores via VT100. Além disto, às vezes, eu tenho ataques de claustrofobia quando fico preso dentro de um browser. Por estas razões, eu resolvi experimentar o script ldapadduser, do pacote Debian ldapscripts, destinado à criação de usuários na base LDAP.

Descobri logo de cara que phpLDAPadmin e ldapscripts não são bom amigos, pois eles adotam esquemas de base LDAP e gabaritos de objetos ("templates" en inglês) incompatíveis entre si. O primeiro passo para a reconciliação dos dois foi a reestruturação da nossa base LDAP. Os objetos do tipo "user account" e "POSIX group" estão agora dentro dos subníveis ou=Groups e ou=People, respectivamente. O atributo ou do LDAP significa "Organizational Unit". Na interface phpLDAPadmin, vocês verão atualmente algo do gênero:

─> dc=cefala,dc=org (3)
 └────> cn=admin
 └[+]─> ou=Groups (32)
 └[+]─> ou=People (27)

Esta mudança não foi suficiente, pois o gabarito de usuário usado pelo comando ldapadduser é incompatível com aquele usado pelo phpLDAPadmin. Após arrancar os poucos cabelos que restam na minha cabeça ao tentar forçar um gabarito específico no ldapadduser, eu acabei desistindo e escrevi o meu próprio script, cefala-add-user, que está agora no Git:

$ git clone cefala-admin@git.cefala.org:/var/git/cefala-admin/cefala-ldap

Eis um exemplo de criação de usuário utilizando o script:

$ sudo cefala-add-user foo
cefala-add-user:I: Creating user foo.
Last name: Bar
First name: Foo
Email address: foo.bar@example.org
Login shell (default /bin/bash):

    Last name: Bar
    First name: Foo
    Email address: foo.bar@example.org
    Login shell: /bin/bash
Is the above information correct [y/n]: y
New password:
Re-enter new password:
Successfully added group foo to LDAP
adding new entry "cn=Foo Bar,ou=People,dc=cefala,dc=org"

cefala-add-user:I: Created user foo (UID: 1027, GID: 532)

Dois commentários importantes:

  1. Vocês devem ter notado que o script cria um grupo específico para o usuário, cujo nome é idêntico ao nome de login. Esta é a norma na distribuição Debian. Anteriormente, os usuários do CEFALA ficavam todos no mesmo grupo cefala-users. Como os grupos POSIX servem apenas para o compartilhamento de arquivos, não fazia sentido colocar todo mundo dentro do mesmo grupo. Para que tudo fique coerente, eu criei grupos para os usuários existentes e modifiquei os GIDs dos arquivos na partição /home.
  2. Vocês também devem ter notado que o script cria o diretório de login na partição /home. Esta é uma razão a mais para a utilização do script cefala-users ao invés da criação de usuários via phpLDAPadmin. No caso acima, o diretório ficou assim:
    $ ls -ld /home/foo
    drwx------ 40 foo foo 4096 Sep  9 13:12 /home/foo
    

social