LDAP Linux · 5 min read · Dec 13, 2025

Autenticação LDAP no Linux

Este howto mostrará como armazenar seus usuários no LDAP e autenticar alguns dos serviços contra ele. Não mostrarei como instalar pacotes específicos, pois isso depende da distribuição/sistema. Focarei na configuração “pura” de todos os componentes necessários para ter autenticação/armazenamento de usuários LDAP. O howto assume, de alguma forma, que você está migrando de uma autenticação regular passwd/shadow, mas também é adequado para pessoas que estão fazendo isso do zero.

Requisitos

  • OpenLDAP
  • pam_ldap
  • nss_ldap
  • PADL migrationtools

Introdução

A coisa que queremos alcançar é ter nossos usuários armazenados no LDAP, autenticados contra o LDAP (direto ou pam) e ter alguma ferramenta para gerenciar isso de uma maneira compreensível para humanos.

Dessa forma, podemos usar todo o software que tem suporte LDAP ou voltar ao módulo PAM LDAP, que atuará como um gateway PAM->LDAP.

Mais informações sobre a ideia do LDAP podem ser encontradas na Wikipedia: LDAP wikipedia

Configurando o OpenLDAP

OpenLDAP consiste no daemon slapd e slurpd. Este howto cobre um servidor LDAP sem replicação, então focaremos apenas no slapd. Também assumo que você instalou e inicializou sua instalação do OpenLDAP (depende do sistema/distribuição). Se sim, vamos para a parte de configuração.

No meu sistema (Gentoo), a configuração do OpenLDAP é armazenada em /etc/openldap, estamos interessados no arquivo /etc/openldap/slapd.conf. Mas primeiro, precisamos gerar uma senha para o administrador LDAP, para colocá-la no arquivo de configuração:

slappasswd -h {md5}

A configuração fica assim:

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
allow bind_v2  

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args  

modulepath      /usr/lib/openldap/openldap  

access to attrs=userPassword
        by dn="uid=root,ou=People,dc=domain,dc=com" write
        by dn="cn=Manager,dc=domain,dc=com" write
        by anonymous auth
        by self write
        by * none

access to dn.base="" by * read  

access to *
         by dn="cn=Manager,dc=domain,dc=com" write
         by * read


database        bdb
suffix          "dc=domain,dc=com"  

rootdn          "cn=Manager,dc=domain,dc=com"
rootpw          {MD5}Tk1sMytv5ipjr+Vhcf03JQ==
  

directory       /var/lib/openldap-data
index   objectClass     eq  

Lembre-se de alterar o sufixo e os caminhos conforme suas necessidades.

Essas são opções básicas com algumas ACLs básicas necessárias para mudar senhas por usuário. Se você quiser mais funcionalidade, por favor, leia o manual sobre OpenLDAP. Agora que temos uma configuração adequada para o slapd, podemos iniciar o daemon:

service slapd start

Por favor, lembre-se de ter algo assim no arquivo de configuração responsável pelos argumentos passados para o slapd (o caminho deve apontar para o slapd.sock):

OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

Agora podemos testar se o openldap está rodando e funcionando corretamente. Não temos nenhum dado ainda no diretório, mas podemos tentar nos conectar como cn=Manager,dc=domain,dc=com. Quando você for solicitado a senha, deve usar a que gerou (claro, a versão em texto simples dela):

ldapsearch -D "cn=Manager,dc=domain,dc=com" -W

Migrar/Adicionar dados ao diretório

Agora que temos um servidor LDAP em funcionamento, precisamos preenchê-lo com dados, seja criando ou migrando entradas. Vou mostrar como migrar entradas existentes do regular /etc/passwd, /etc/shadow, /etc/groups.

O primeiro passo é configurar os migrationtools conforme suas necessidades. O arquivo de configuração no Gentoo está localizado em /usr/share/migrationtools/migrate_common.ph.

Geralmente, você precisa mudar apenas estes:

$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;

Agora você está pronto para migrar os dados (na verdade, funciona até sem o comando de exportação):

export ETC_SHADOW=/etc/shadow  
./migrate_base.pl > /tmp/base.ldif  
./migrate_group.pl /etc/group /tmp/group.ldif  
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif  
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif

Agora temos os dados no formato compreendido pelo servidor LDAP. Por favor, abra um dos arquivos com um editor de texto para se acostumar com a sintaxe. Depois disso, podemos adicionar os dados dos ldifs.

ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldif

Você pode tentar buscar alguns dados:

ldapsearch uid=foouser

Configuração do cliente

Por cliente, quero dizer a máquina que se conecta ao servidor LDAP para obter usuários e autorizar. Pode ser também a máquina na qual o servidor LDAP está rodando. Em ambos os casos, precisamos editar três arquivos: /etc/ldap.conf, /etc/nsswitch.conf e /etc/pam.d/system-auth.

Vamos começar com ldap.conf, o cliente do ldap:

BASE    dc=domain, dc=com
scope sub
suffix          "dc=domain,dc=com"

## quando você quiser mudar a senha do usuário como root 
rootbinddn cn=Manager,dc=domain,dc=com

## são necessários quando seu ldap falha
timelimit 5
bind_timelimit 5

uri ldap://ldap.domain.com/
pam_password exop

ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
  

nss_base_passwd ou=Computers,dc=cognifide,dc=pl
nss_base_passwd ou=People,dc=cognifide,dc=pl
nss_base_shadow ou=People,dc=cognifide,dc=pl
nss_base_group  ou=Group,dc=cognifide,dc=pl
nss_base_hosts  ou=Hosts,dc=cognifide,dc=pl

Agora é hora do nsswitch.conf e pam.

Adicione isso ao nsswitch.conf:

passwd: files ldap
shadow: files ldap
group:  files ldap

E mude o system-auth (ou o que você tiver como login, sshd etc) para:

auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok
auth       sufficient   pam_ldap.so use_first_pass
auth       required     pam_deny.so

account    sufficient   pam_unix.so
account    sufficient   pam_ldap.so
account    required     pam_ldap.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   sufficient   pam_ldap.so use_first_pass
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    optional     pam_ldap.so

Hora de testar. A melhor ferramenta para isso é o bom e velho getent. Escolha um usuário do seu sistema e execute:

getent passwd | grep foouser

Você deve obter o resultado duas vezes, se sim, o nss_ldap está funcionando bem. A parte pam pode ser testada excluindo um usuário do /etc/passwd e tentando fazer login via ssh.

Apache mod_auth_ldap

Para ter autorização LDAP no apache, você deve carregar o módulo mod_auth_ldap

LoadModule mm_auth_ldap_module modules/mod_auth_ldap.so

Agora é suficiente fazer um .htaccess assim:

AuthName "Restrito"
AuthType Basic
AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid
AuthLDAPBindDN "cn=Manager,dc=domain,dc=com"
AuthLDAPBindPassword "sua_senha_secreta_para_o_admin_ldap"
require valid-user

Note que este método também pode ser usado para autorização do WebDAV subversion.

Ferramentas de administração para LDAP

Existem algumas ferramentas que recomendo usar para administrar o servidor OpenLDAP

  • phpldapadmin - ferramenta baseada na web
  • ldapvi - navegação com vim
  • PADL migrationtools - ferramentas de migração
  • IDEALX sambaldap tools - ferramentas samba LDAP

Outras aplicações cientes de ldap

  • Postfix
  • Courier IMAP
  • jabberd
  • eGroupware

Resumo

Se alguém tiver algo a adicionar, por favor, faça isso. Eu sei que a configuração pode não ser perfeita.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.