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 startPor 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" -WMigrar/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.ldifAgora 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.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldifVocê pode tentar buscar alguns dados:
ldapsearch uid=foouserConfiguraçã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 foouserVocê 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.soAgora é 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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.