Como configurar listas de controle de acesso ACLs no OpenLDAP

6

Estou usando o Debian Squeeze OpenLDAP. Onde posso definir ACLs? Não é possível executar o acesso a diretivas com ldapmodify ? Não há nenhum arquivo slapd.conf no Debian, eles usam uma pasta slapd.d

    
por Gilles 18.04.2011 / 11:58

5 respostas

9

De Debian Wiki :

Since version 2.4.23-3 the configuration of OpenLDAP has been changed to /etc/ldap/slapd.d by default.

Então, o OpenLDAP permite se configurar dinamicamente através da árvore 'cn = config' .

Você pode listar o DN em cn = config e ver algo assim:

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config dn
...
# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
...

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}_skip_
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq

O atributo oclAccess é o que você precisa.

Vamos adicionar novas regras de ACL ao banco de dados dc = nodomain .

Crie um arquivo ldif

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read

Vu a la:

sudo ldapmodify  -Y EXTERNAL -H ldapi:/// -f /tmp/test.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'
...
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read
    
por 07.10.2014 / 14:25
3

O procedimento é muito semelhante ao procedimento de alteração da senha que descrevi em outra pergunta .

Existem também duas maneiras.

1) Editando o arquivo de configuração. Você precisa encontrar o arquivo de configuração do seu back-end. Cada ACL é definida como valor do atributo olcAccess . A sintaxe da ACL é idêntica à do arquivo slapd.conf "normal", mas no início de cada ACL você deve inserir um número que defina "posição" da ACL na fila da ACL para verificar.

Exemplo de entrada da ACL parece com isso:

olcAccess: {0}to * by anonymous write

2) Segunda maneira: usando config database. Se config database estiver ativado, você poderá fazer a biing usando o cliente LDAP e editar olcAccess valores para cada backend.

    
por 19.07.2011 / 07:18
2

Todo o conteúdo de slapd.d é concatenado em conjunto no tempo de execução para gerar uma espécie de arquivo pseudo slapd.conf (essa descrição não é totalmente exata, mas estou tentando passar o conceito). Esta é uma prática comum no Debian, e pessoalmente, em muitos casos, eu prefiro isso.

Crie um novo arquivo dentro de slapd.d denominado acl (ou similar, você desejará incluir um prefixo numerado se outros arquivos o tiverem) e coloque suas entradas ACL lá e reinicie slapd .

Isso deve ser feito. * Mas esteja avisado que a estrutura da ACL do slapd pode ser difícil para os não iniciados. É fácil fazer a coisa errada e / ou não intencional.

* Desde que não haja nenhuma limitação de sequência (não sei bem o slapd, então você está por conta própria).

    
por 18.07.2011 / 07:12
1

Não estou dizendo que isso é uma solução, mas pode ajudar você no caminho: -)

Eu fiz uma pergunta parecida de serverfault.

link

Eu nunca recebi uma resposta, no final eu tive que criar um slapd.conf e convertê-lo para o diretório slapd usando os seguintes comandos (note que isso foi no RHEL)

Remova o conteúdo do diretório /etc/openldap/slapd.d/:

rm -rf /etc/openldap/slapd.d/* 

Edite seu arquivo customizado slapd.conf.

Execute slaptest para verificar a validade do arquivo de configuração e criar um novo diretório slapd.d com suas configurações

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d 

Configure permissões no novo diretório para que o ldap não gagueja.

chown -R ldap:ldap /etc/openldap/slapd.d 

chmod -R 000 /etc/openldap/slapd.d 

chmod -R u+rwX /etc/openldap/slapd.d 

inicie seu servidor LDAP.

Eu criei um pequeno script para executar esses comandos toda vez que eu fiz uma alteração no slapd.conf

Cumprimentos Andy

    
por 18.04.2011 / 17:20
0

Crie o usuário como você quiser:

# vim ro_user_desc.ldif

dn: cn=ro_admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {SSHA}o3pSzVM3HXqUY6R2VHGJkJEWlwLOUH1N

userPassword hash você pode obter de slappasswd -s your_plaintext_pass . Crie este usuário:

# ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f ro_user_desc.ldif

Atribua o papel necessário para isso:

# vim ro_access.ldif

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="dc=example,dc=com" by dn.exact="cn=ro_admin,dc=example,dc=com" read

Ativamos o acesso de lista (somente leitura) à árvore completa da árvore dc=example,dc=com do usuário criado acima. Endereço correto de dn: olcDatabase={1}mdb,cn=config melhor para encontrar usando @sLiver de resposta . Mas tenha em mente que este exemplo para base MDB OpenLdap em casos de HDB etc pode variar.

Por fim, aplique-o:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f ro_access.ldif
    
por 12.03.2018 / 17:05

Tags