Agora é o momento de criar a raiz do servidor
LDAP além da senha de usuário. Para isso, crie o arquivo "/etc/ldap/ldaproot.ldif", lembrando de alterar o parâmetro "userPassword" para o valor obtido pelo "slappasswd". À raiz do servidor LDAP é necessário acrescentar os itens "Groups", "Users" e "Machines" (em consonância com o padrão do "ldapscripts" discutido adiante).
# LDAP Root
dn: dc=example,dc=com
objectClass: dcObject
objectclass: organization
o: example.com
dc: example
description: My LDAP Root
#
# LDAP Administrator
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
description: LDAP administrator
#
# Groups
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups
#
# Users
dn: ou=Users,dc=example,dc=com
objectClass: organizationalUnit
ou: Users
#
# Machines
dn: ou=Machines,dc=example,dc=com
objectClass: organizationalUnit
ou: Machines
A importação do arquivo "/etc/ldap/ldaproot.ldif", pode ser realizada por meio do comando "ldapadd" e verificada pelo "ldapsearch".
# nano /etc/ldap/ldaproot.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/ldaproot.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "dc=example,dc=com"
adding new entry "cn=admin,dc=example,dc=com"
adding new entry "ou=Groups,dc=example,dc=com"
adding new entry "ou=Users,dc=example,dc=com"
adding new entry "ou=Machines,dc=example,dc=com"
...
# ldapsearch -W -x -b dc=example,dc=com -D cn=admin,dc=example,dc=com
Propõe-se aqui mudanças nas ACLs "(Access Control List)", nas quais critérios são eliminados pelo arquivo "/etc/ldap/config.ldif" (e adicionadas pelo "/etc/ldap/acl.ldif"). O arquivo 'config' foi alterado em relação ao proposto neste
artigo, porque os parâmetros "olcAuthzRegexp" e "olcAccess" não existiam. Dessa forma as linhas com "delete:" foram excluídas.
dn: cn=config
changetype: modify
#
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
#
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=admin,cn=config
#
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
#
dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcAccess
A importação do arquivo "/etc/ldap/config.ldif", pode ser realizada por meio do comando "ldapadd" e verificada pelo "ldapsearch".
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/config.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
modifying entry "olcDatabase={-1}frontend,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
...
# ldapsearch -W -x -b dc=example,dc=com -D cn=admin,dc=example,dc=com
Para alterar as permissões de acesso basta incluir as políticas desejadas nas ACL's (como o "grant" dos banco de dados relacionais). Os 3 grupos de permissões do arquivo "/etc/ldap/acl.ldif" significam a grosso modo:
- os atributos userPassword e shadowLastChange quando acessados por "admin.example.com" podem ser alterados, enquanto os usuários anônimos podem utilizá-los somente para autenticação, já os próprios usuários podem alterá-los, e todos os demais não podem nem sequer visualizá-los.
- as bases podem ser lidas por qualquer um.
- todas as outras informações podem ser alteradas somente por "admin.example.com" mas qualquer um pode acessá-las.
# Change Permissions
dn: olcDatabase={1}hdb,cn=config
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read
Note que após as alterações nas permissões, deve-se utilizar o 1o formato não mais o 2o:
- ldapmodify -W -x -D cn=admin,cn=config -f file
- ldapadd -Y EXTERNAL -H ldapi:/// -f file
A importação do arquivo "/etc/ldap/acl.ldif", pode ser realizada por meio do comando "ldapmodify" e verificada pelo "ldapsearch".
# ldapmodify -W -x -D cn=admin,cn=config -f /etc/ldap/acl.ldif
# ldapsearch -W -x -b dc=example,dc=com -D cn=admin,dc=example,dc=com