O OpenLDAP suporta dois métodos de autenticação ( simple
e SASL
), enquanto SASL
é o método padrão para ldap-utils como ldapsearch
.
Quando você está autenticando usando o DN, você faz a chamada "ligação simples".
ligação simples
O método simple
tem três modos de operação:
- anônimo
- não autenticado
- usuário / senha autenticados
Por exemplo:
# ldapwhoami -x
anonymous
ou:
# ldapwhoami -x -D uid=rda,ou=people,dc=phys,dc=ethz,dc=ch -w secret1234
dn:uid=rda,ou=people,dc=phys,dc=ethz,dc=ch
SASL
Clientes e servidores OpenLDAP são capazes de autenticar através da estrutura SASL (Simple Authentication and Security Layer), que é detalhada em RFC4422 . O SASL suporta vários mecanismos de autenticação. Os mecanismos mais comuns com o OpenLDAP são EXTERNAL
e GSSAPI
.
O mecanismo EXTERNAL faz uso de uma autenticação realizada por um protocolo de nível inferior: geralmente TLS ou Unix IPC. Por exemplo, usando o Unix IPC como usuário root:
# ldapwhoami -Y EXTERNAL -H ldapi://
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
O usuário autenticado é mapeado para um DN na árvore cn=peercred,cn=external,cn=auth
.
O mecanismo GSSAPI geralmente significa Kerveros 5. Se você tiver uma infra-estrutura Kerberos 5 implantada, poderá usar os Princípios Kerberos para autenticação.
Primeiro autentique-se contra o KDC e obtenha um TGT:
# kinit rda
Password for [email protected]: secret1234
Em seguida, você pode usar o GSSAPI para autenticação no OpenLDAP:
# ldapwhoami
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 56
SASL data security layer installed.
dn:uid=rda,cn=gssapi,cn=auth
O principal [email protected]
é mapeado para um DN na árvore cn=gssapi,cn=auth
.
Agora você pode mapear esse DN autenticado para um DN real no banco de dados usando uma expressão regular com a configuração olcAuthzRegexp
em cn=config
:
dn: cn=config
objectClass: olcGlobal
cn: config
olcAuthzRegexp: {0}uid=([^,/]*),cn=phys.ethz.ch,cn=gssapi,cn=auth uid=$1,ou=people,dc=phys,dc=ethz,dc=ch
...
Esta linha olcAuthzRegexp
mapeia qualquer entidade principal do usuário no território PHYS.ETHZ.CH
para uma entrada posixAccount
correspondente em ou=people,dc=phys,dc=ethz,dc=ch
que tenha o mesmo nome de usuário no atributo uid
.
Por exemplo, com a seguinte entrada posix
# ldapsearch uid=rda
dn: uid=rda,ou=people,dc=phys,dc=ethz,dc=ch
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: krbPrincipalAux
objectClass: krbTicketPolicyAux
uid: rda
krbPrincipalName: [email protected]
...
ldapwhoami
será exibido:
# ldapwhoami
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 56
SASL data security layer installed.
dn:uid=rda,ou=people,dc=phys,dc=ethz,dc=ch
O mapeamento usando olcAuthzRegexp
deve corresponder a uma entrada exclusiva no DIT. Isso deve ser assegurado pelo administrador ou pelo software de gerenciamento.