Enviado por Do utilizador2206

trabalhando com acls

Propaganda
Curso
Implementando e Administrando servidor de Diretório
OpenLDAP
Página
1
Trabalhando com ACLs
Objetivos da Aula:




Entendendo o funcionamento das ACLs
Visualizando ACLs existentes
Criando e Testando ACLs
Removendo ACLs
Página
2
Entendendo o funcionamento das ACLs
ACLs são diretivas de controle de acesso que definem o nível de acesso de cada usuário a um
tipo de informação disponível na base de dados. No OpenLDAP elas representam um
ferramenta muito poderosa e versátil. Utilizando ACLs é possível controlar o acesso à base de
dados, granularmente, baseando-se nas informações de autenticação, endereço IP, nome de
domínio, dentre outras.
As ACLs são poderosas para controlar com mãos de ferro o que os usuários podem ou não fazer
dentro de uma infraestrutura OpenLDAP. Apesar de esta ser uma das funções mais importantes,
o aspecto mais interessante do uso de ACL em servidores LDAP é outro: a possibilidade de
delegar tarefas.
Imagine o seguinte caso: como permitir que um usuário altere a sua e apenas a sua senha? Na
maioria das vezes uma instrução como essa exige malabarismos enormes do administrador de
sistemas, principalmente quando o grau de integração entre os serviços aumenta. Mas o
OpenLDAP torna essa tarefa bem simples.
dn: olcDatabase={2}hdb,cn=config
olcAccess: {0}to dn.base="" by * read
olcAccess: {1}to attrs=userpassword,shadowlastchange by anonymous auth by self write by *
none
olcAccess: {2}to * by self write by * read
As regras de acesso têm a seguinte sintaxe:
access to < o que > by < quem > < acesso > < controle >
o que – Atributo ou entrada para o qual o controle será imposto.
quem – Entidade ou DN completo do objeto em que o acesso será aplicado (veja tabela de
entidades a seguir).
acesso – Define o nível de acesso à entidade, grupo ou usuário.
controle – Define a forma do processamento das ACLs. Por padrão, quando uma entrada
de ACL é satisfeita, o processamento das ACLs é interrompido. Isto se dá porque o valor de
controle padrão é “stop”. Outros valores possíveis são “continue”, que faz com que o
processamento continue, e “break”.
Página
3
O que
O quê
Descrição
*
Tudo
dn
Entradas especificadas de uma base
attrs
Lista de atributos.
O mesmo que dn, mas podendo especificar
dn.escopo
escopos filtros avançados
Filtra objetos de acordo com a expressão
regular ou não.
dn<.exact,regex>
O escopo pode ser base, one, subtree ou children. Onde base corresponde apenas a
entrada do DN, one corresponde às entradas um nível abaixo do DN usado no
filtro, subtree corresponde a todas as entradas a partir do DN e children corresponde as
entradas da sub-árvore abaixo do DN raiz mas não inclui o DN raiz.
Representação da atuação do escopo na árvore LDAP a partir da raiz
dc=gnulinux,dc=com:
base
dc=gnulinux,dc=com
one
o=matriz
ou=usuarios
o=filial
ou=grupos
children
cn=suzana
cn=rh
Página
4
subtree
quem
quem
Descrição
*
Todos incluindo acesso anônimo
anonymous
Acesso de usuários anônimos
users
Usuários autenticados
self
Usuários associados ao alvo
dn<.exact,expand>
Filtra objetos aproveitando o resultado de
expressões regulares ou não.
dn.<escopo>
Entradas especificas de uma base podendo
usar os escopos base, one, subtree e children.
group<exact,expand>
Filtra objetos especificando um grupo.
No item dn.<escopo> pode-se especificar um escopo como explicado anteriormente. Já no item
dn<.exact,expand,regex> pode-se especificar uma expressão regular usando dn.regex, ou usar o
resultado de uma expressão regular passada anteriormente com dn.expand ou especificar o
caminho exato do objeto com dn.exact.
Acesso
Acesso
Privilégio
Descrição
none
=0
Sem acesso
auth
=X
Necessário autenticação
compare
=CX
Necessário para fazer comparações
search
=SCX
Necessário para utilizar filtros de
pesquisa
read
=RSCX
Necessário para ler resultados de
pesquisas
write
=WRSCX
Necessário para modificar / renomear
manage
=MWRSCX
Necessário para gerenciar
Página
5
Execute os comandos na VM Server OpenLDAP1
Visualizando ACLs existentes
Podemos visualizar as ACLs buscando pelo atributo olcAccess da árvore que desejamos consultar.
Assim, para vermos as ACLs da árvore dc=gnulinux,dc=com que adicionamos anteriormente
devemos fazer o seguinte:
# ldapsearch -x -D cn=admin,cn=config -W -b olcDatabase ={2}hdb,cn=config olcAccess -LLL
dn: olcDatabase={2}hdb,cn=config
olcAccess: {0}to dn.base="" by * read
olcAccess: {1}to attrs=userpassword,shadowlastchange by anonymous auth by self write by *
none
olcAccess: {2}to * by self write by * read
O endereço da base que será consultada deve ser sempre o mostrado na base cn=config, no
exemplo é olcdatabase={2}hdb,cn=config.
Página
6
Execute os comandos na VM Server OpenLDAP1
Criando e Testando ACLs
Ao contrário de schemas, podemos remover ACLs sem a necessidade de reiniciar o servidor. Pois
elas são apenas atributos de um objeto da árvore e não um objeto à parte. Assim tudo que
devemos fazer é criar um arquivo com extensão .ldif com dn da base e o atributo olcaccess e a
definição da ACL.
Para testar o poder de restrição/controle das ACLs iremos adicionar um usuário chamado linus
e um grupo administradores e tentar adicionar mais objetos com esse usuário.
# vim /root/aula4/admins.ldif
dn: cn=administradores,ou=grupos,o=matriz,dc=gnulinux,dc=com
cn: administradores
objectclass: top
objectclass:
: cn=linus,ou=usuarios,o=matriz,dc=gnulinux,dc=com
Description: Administradores da base gnulinux.com
dn: cn=linus,ou=usuarios,o=matriz,dc=gnulinux,dc=com
objectclass: top
objectclass: person
cn: linus
sn: torvalds
userpassword: ldap
# ldapadd -x -h 10.10.50.7
/root/aula4/admins.ldif
-p
389
-D
cn=admin,dc=gnulinux,dc=com
-W
-f
Agora vamos tentar adicionar um usuário usando o usuário linus.
# ldapadd -x -h 10.10.50.7 -p 389 -D cn=linus,ou=usuarios,o=matriz,dc=gnulinux,dc=com -W -f
/root/aula4/add-user.ldif
Veja que o usuário linus não tem permissão para adicionar objetos na base, isso se dá pela
restrição das acls que só permitem que um usuário sem privilégios só modifique informações de
sua própria conta.
adding new entry "cn=maicon,ou=usuarios,o=matriz,dc=gnulinux,dc=com"
ldap_add: Insufficient access (50)
additional info: no write access to parent
Página
7
Execute os comandos na VM Server OpenLDAP1
Agora vamos adicionar uma acl que dá permissão aos membros do grupo administradores de
administrar a base.
# vim /root/aula4/acl-admin.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcaccess
olcAccess: {0}to attrs=userpassword,shadowlastchange by anonymous auth by self write by *
none
olcAccess: {1}to * by self write by
group.exact="cn=administradores,ou=grupos,o=matriz,dc=gnulinux,dc=com" write by * none
# ldapmodify -x -h 10.10.50.7 -p 389 -D cn=admin,cn=config -W -f /root/aula4/acl-admin.ldif
Agora tente adicionar a conta de usuário na e veja o resultado.
# ldapadd -x -h 10.10.50.7 -p 389 -D cn=linus,ou=usuarios,o=matriz,dc=gnulinux,dc=com -W -f
/root/aula4/add-user.ldif
Veja que agora é possível administrar a base usando contas da propria base, sem necessidade
de usar o administrador de base definida na diretiva olcRootDN.
adding new entry "cn=maicon,ou=usuarios,o=matriz,dc=gnulinux,dc=com
Mais um exemplo
Agora vamos simular o acesso a um atributo em especifico que um grupo de usuários podem
acessar. Primeiro vamos criar a estrutura.
# vim /root/aula4/estrutura.ldif
dn: ou=usuarios,o=filial,dc=gnulinux,dc=com
ou: usuarios
objectclass: top
objectclass: organizationalunit
dn: ou=grupos,o=filial,dc=gnulinux,dc=com
ou: grupos
objectclass: top
objectclass: organizationalunit
Página
8
dn: cn=vendas,ou=grupos,o=filial,dc=gnulinux,dc=com
cn: vendas
objectclass: top
objectclass: posixgroup
gidnumber: 5004
dn: cn=juridico,ou=grupos,o=filial,dc=gnulinux,dc=com
cn: juridico
objectclass: top
objectclass: groupofnames
member: cn=narciso,ou=usuarios,o=filial,dc=gnulinux,dc=com
member: cn=daniele,ou=usuarios,o=filial,dc=gnulinux,dc=com
dn: cn='setor pessoal',ou=grupos,o=filial,dc=gnulinux,dc=com
cn: setor pessoal
objectclass: top
objectclass: posixgroup
gidnumber: 5006
dn: cn=souza,ou=usuarios,o=filial,dc=gnulinux,dc=com
objectclass: top
objectclass: person
objectclass: posixaccount
cn: souza
sn: martins
uid: souza
uidnumber: 5013
gidnumber: 5004
homedirectory: /home/souza
loginshell: /bin/bash
telephonenumber: '3325-6759'
dn: cn=narciso,ou=usuarios,o=filial,dc=gnulinux,dc=com
objectclass: top
objectclass: person
objectclass: posixaccount
cn: narciso
sn: tony
uid: narciso
uidnumber: 5012
gidnumber: 5006
homedirectory: /home/narciso
loginshell: /bin/bash
telephonenumber: '3325-6758'
Página
9
dn: cn=daniele,ou=usuarios,o=filial,dc=gnulinux,dc=com
objectclass: top
objectclass: person
objectclass: posixaccount
cn: daniele
sn: mascarenhas
uid: daniele
uidnumber: 5012
gidnumber: 5006
homedirectory: /home/daniele
loginshell: /bin/bash
telephonenumber: '3325-6757'
# ldapadd -x -h 10.10.50.7 -p 389 -D cn=linus,ou=usuarios,o=matriz,dc=gnulinux,dc=com -f
/root/aula4/estrutura.ldif -W
Perceba que cada conta de usuário tem um atributo chamado de telephonenumber que
armazena o número de telefone. Agora vamos adicionar uma ACL que permiti que cada usuário
pode ver somente seu número de telefone, mas o grupo de usuários juridico podem ver todos os
números.
# vim /root/aula4/acl-control.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcaccess
olcAccess: {0}to attrs=userpassword,shadowlastchange by self write by anonymous auth by *
none
olcAccess: {1}to dn.children="o=filial,dc=gnulinux,dc=com" attrs="telephonenumber" by self
write by group.exact="cn=juridico,ou=grupos,o=filial,dc=gnulinux,dc=com" read
olcAccess: {2}to * by self write by
group.exact="cn=administradores,ou=grupos,o=matriz,dc=gnulinux,dc=com" write by users read
# ldapmodify -x -h 10.10.50.7 -p 389 -D cn=admin,cn=config -W -f /root/aula4/acl-control.ldif
Execute os comandos na VM Server OpenLDAP1
Agora teste o acesso fazendo uma consulta ao atributos telephonenumber com o usuário souza.
# ldapsearch -x -h 10.10.50.7 -p 389 -D cn=souza,ou=usuarios,o=filial,dc=gnulinux,dc=com -b
ou=usuarios,o=filial,dc=gnulinux,dc=com -W -LLL telephoneNumber
Veja no resultado que somente o atributo telephonenumber do usuário souza foi mostrado o
Página
10
dos outros usuários não.
Agora uma consulta com usuário que pertence ao grupo juridico.
# ldapsearch -x -h 10.10.50.7 -p 389 -D cn=daniele,ou=usuarios,o=filial,dc=gnulinux,dc=com -b
ou=usuarios,o=filial,dc=gnulinux,dc=com -W -LLL telephoneNumber
O resultado mostra que o atributo telephonenumber de todos os usuários neste DN foi mostrado
conforme a configuração definida na ACL.
Removendo ACLs
A remoção de acls é algo simples de fazer, somente sendo necessário um usuário permissão de
remover o atributo olcaccess(lembre-se que acls dentro do padrão cn=config é considerado um
atributo) da base e um arquivo com extensão .ldif com o conteúdo a ser removido. Lembre-se
que sempre temos especificar o DN do objeto no vamos adicionar, alterar ou remover.
# vim /root/aula4/acl-delete.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
delete: olcaccess
olcAccess: {1}to dn.children="o=filial,dc=gnulinux,dc=com" attrs="telephonenumber" by self
write by group.exact="cn=juridico,ou=grupos,o=filial,dc=gnulinux,dc=com" read
# ldapmodify -x -h 10.10.50.7 -p 389 -D cn=admin,cn=config -W -f /root/aula4/acl-delete.ldif
Página
11
Download