Primeira Configuração – LDAP
Como prometido na semana passada estou dando prosseguimento sobre o servidor LDAP e desta vez com uma configuração (básica) do mesmo.
Configuração do servidor
# apt-get install slapd ldap-utils
Por padrão o debian sempre define o admin na instalação do slapd, informe a senha e confirme.
Vamos parar o servidor LDAP
# invoke-rc.d slapd stop
Vamos informar ao daemon do ldap que iremos utilizar o arquivo slapd.conf
# vi /etc/default/slapd
1 | SLAPD_CONF="/etc/ldap/slapd.conf" |
Apague todos os arquivos de /var/lib/ldap exceto DB_CONFIG
# vi /etc/ldap/slapd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | # Allow LDAPv2 binds allow bind_v2 # This is the main slapd configuration file. See slapd.conf(5) for more # info on the configuration options. ##################################################### # Global Directives: # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd/slapd.pid # List of arguments that were passed to the server argsfile /var/run/slapd/slapd.args # Read slapd.conf(5) for possible values loglevel 0 # Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_bdb # The maximum number of entries that is returned for a search operation sizelimit 500 # The tool-threads parameter sets the actual amount of cpu's that is used # for indexing. tool-threads 1 ##################################################### # Specific Backend Directives for bdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend bdb checkpoint 512 30 ##################################################### # Specific Directives for database #1, of type bdb: # Database specific directives apply to this databasse until another # 'database' directive occurs database bdb # The base of your directory in database #1 suffix "dc=cooperati,dc=local" # Where the database file are physically stored for database #1 directory "/var/lib/ldap" # For the Debian package we use 2MB as default but be sure to update this # value if you have plenty of RAM dbconfig set_cachesize 0 20971520 0 # Sven Hartge reported that he had to set this value incredibly high # to get slapd running at all. See http://bugs.debian.org/303057 # for more information. # Number of objects that can be locked at the same time. dbconfig set_lk_max_objects 1500 # Number of locks (both requested and granted) dbconfig set_lk_max_locks 1500 # Number of lockers dbconfig set_lk_max_lockers 1500 # Indexing options for database #1 index objectClass eq # Save the time that the entry gets modified, for database #1 lastmod on # The admin dn has full write access, everyone else # can read everything. access to attrs=userPassword,shadowLastChange by anonymous auth by self write by * none access to dn.base="" by * read access to * by * read |
Descrição das principais opções:
include /diretório/schema – Carrega o schema informado (Arquivos que contem a estrutura dos atributos e objetos que LDAP consegue manipular).
modulepath /diretório – Diretório onde estão os módulos que serão lidos dinamicamente.
moduleload módulo – Qual módulo será carregado. Para carregar outro módulo basta adicionar outra linha como esta.
loglevel nível/chave – Nível de log. Pode utilizar o seguinte formato:
LogLevel 129
LogLevel 0x81
LogLevel 128 1
LogLevel 0x80 0x1
LogLevel acl trace
Obs.: -1 Produz uma grande quantidade de informações e “none”.
backend tipo – Tipo de base de dados utilizado, os principais tipos são:
bdb Berkeley DB transactional backend
config backend de configuração do Slapd
dnssrv DNS SRV backend
hdb Variante do backend bdb.
ldap Lightweight Directory Access Protocol (Proxy) backend
ldif Lightweight Data Interchange Format backend
meta Meta Directory backend
monitor Monitor backend
passwd Prove acesso somente de leitura a passwd(5)
perl Perl Programmable backend
shell Shell (programa externo) backend
sql SQL Programmable backend
database <índice>banco – Qual o banco de dados utilizado no diretório. O índice ser utilizado para distinguir vários bancos de dados do mesmo tipo, mas pode ser omitido. E banco é um dos tipos listados acima.
cachesize valor – Define o número de entradas que backend LDAP irá manter na memória. Para melhor performance, este número é igual ao número de entradas no seu diretório, mas pode ser menor. Este não é o cache do Banco de Dados, mas o cache interno próprio do OpenLDAP. O valor padrão -e 1000.
sizelimit valor – Especifica o número máximo de entradas retornadas de uma operação de pesquisa.
mode octal – Permissão dos arquivos da base de dados do diretório.
suffix “DN” – Especifica o sufixo DN de consultas que serão passadas para o backend de banco de dados. Podem haver mais linhas suffix, mas somente um é requerido.
rootdn “DN” – Especifica o controle administrativo sobre o diretório, pode ser utilizado um mechanismo SASL ao invés de um usuário administrador.
rootpw senha – Senha para rootdn, pode ser texto puro ou fornecido um HASH com a senha por meio do comando slappasswd.
directory “/diretório” – Local onde os arquivos da base de dados do diretório estão armazenados.
pidfile arquivo – Arquivo contendo o PID do daemon do ldap (slapd).
argsfile arquivo – Arquivo contendo os parâmetros repassados ao slapd.
tool-threads valor – Especifica a quantidade real de CPUs utilizadas para a indexação.
index atributo tipo – Cria índices para acelerar as buscas do atributo informado e indica qual o tipo de índice utilizado.
Tipos Descrição
pres Relacione com o tipo de atributo, ao invés do valor do atributo.
eq Relaciona com o valor exato do atributo, como (cn=Ricardo) retorna somente as combinações exatas de “Ricardo”.
sub Indexa buscas com coringas, como em (cn=admin*). E as variantes:
subinitial (cn=admin*)
subany (cn=*user1*)
subfinal (cn=*admin)
lastmod on – Grava a hora da última operação de gravação no banco de dados.
access – Lista de controle de acesso, controle de quem pode acessar o que e como será o acesso.
Criar o hash com a senha do admin do ldap
# slappasswd -h {SSHA} | tee -a /etc/ldap/slapd.conf
Como podem reparar o hash foi apresentado na saída padrão e direcionada para o final do arquivo slapd.conf
Voltando ao arquivo slapd.conf
# vi /etc/ldap/slapd.conf
Vá para o final do arquivo localize e selecione o hash da senha
Copie o hash para a memória e adicione na linha rootpw, substituindo a criptografia existente
Após a substituição comente as 3 últimas linhas do slapd.conf, ou se preferir apague-as. Agora podemos iniciar o daemon do ldap.
# invoke-rc.d slapd start
Vamos alterar o arquivo hosts para incluir estaticamente o nome do servidor ldap
# vi /etc/hosts
1 | 10.1.1.178 ldap-server |
Vamos configurar o cliente ldap
# vi /etc/ldap/ldap.conf
1 2 | BASE dc=cooperati,dc=local URI ldap://10.1.1.178 |
Vamos adicionar o domínio e admin a base
# cd /etc/ldap
# mkdir LDIF
# cd LDIF
# vi init.ldif
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Entrada do domínio dn: dc=cooperati,dc=local objectClass: organization objectClass: dcObject o: cooperati.local dc: cooperati # Entrada da conta de administração dn: cn=admin,dc=cooperati,dc=local objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: Administrador LDAP userPassword: {SSHA}tpUEoR8iJk0tA1qAM/NDDmpk34mAsewF |
Obs.: Copiei o hash da senha do admin do arquivo slapd.conf e passei para ‘userPassword:’
Vamos adicionar as entradas na base
# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f init.ldif
Vamos conferir se está tudo certo:
# ldapsearch -x -D ‘cn=admin,dc=cooperati,dc=local’ -W
1 2 3 | -x - Autenticação simples, sem SASL -D - Vinculo com a DN informada -W - Solicita a senha |
Vamos criar 2 OU para usuários e grupos
# vi OUs.ldif
1 2 3 4 5 6 7 8 9 10 | # OU para usuarios dn: ou=People,dc=cooperati,dc=local objectClass: top objectclass: organizationalUnit ou: People # OU para grupos dn: ou=Group,dc=cooperati,dc=local objectClass: top objectclass: organizationalUnit ou: Group |
Para adicionar ao LDAP execute:
# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f OUs.ldif
Vamos criar um usuário para fins de teste:
# adduser user1
Vamos instalar o migrationtools para converter usuários e grupos Unix para o ldap
# apt-get install migrationtools
Copie os arquivos password e group do migrationtools de /usr/share/migrationtools para seu diretorio atual.
# cp /usr/share/migrationtools/migrate_passwd.pl .
# cp /usr/share/migrationtools/migrate_group.pl .
# cp /usr/share/migrationtools/migrate_common.ph .
Modifique o arquivo migrate_common.ph nas linhas 71, 74, 90:
# vi migrate_common.ph
1 2 3 4 5 6 7 8 9 10 | # Default DNS domain $DEFAULT_MAIL_DOMAIN = "cooperati.local"; # Default base $DEFAULT_BASE = "dc=cooperati,dc=local"; # turn this on to support more general object clases # such as person. $EXTENDED_SCHEMA = 1; ## Comente a variavel DEFAULT_REALM que configura o EXTENDED schema nas linhas 135, 136: # $DEFAULT_REALM = $DEFAULT_MAIL_DOMAIN; # $DEFAULT_REALM =~ tr/a-z/A-Z/; |
Para usar o migrationtools para migrar as contas para o arquivo passwd.ldif:
# grep user1 /etc/passwd > user1
# ./migrate_passwd.pl user1 > user1.ldif
O arquivo user1.ldif deve conter entradas apenas para o usuário user1.
Adicione o novo usuário a base de dados:
# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f user1.ldif
Crie o arquivo de grupo usando migrate_group.pl script:
# grep user1 /etc/group > group
# ./migrate_group.pl group > group.ldif
O arquivo group.ldif deve conter apenas a entrada para o grupo user1.
Adicione o novo grupo a base de dados:
# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f group.ldif
A parte pesada de configuração, e explicação, do servidor já foi concluída. No próximo post iremos exportar o home dos usuários, e iremos configurar o cliente.
Espero que tenham gostado do post e aguardo seus comentários.
Ricardo Pinheiro, sorte minha ler este seu artigo. =) Agora mesmo, pouco antes de abrir seu blog, estava tentando instalar e configurar o OpenLDAP, para se integrar ao PDC Samba do meu servidor e fazer o Endian Firewall autenticar os usuários a partir dele.
Este texto me deu uma ótima leitura, obrigado.
Tacio,
Fico feliz que esse post tenha lhe ajudado. 🙂
Abraços
Pois é, se no próximo você puder fazer sobra a integração com o Samba e outras aplicações, ajudaria muito.
Eu estou tentando fazer a integração do LDAP com o Samba PDC para autenticação do proxy no meu Firewall Endian, porem ao contrário do que funciona com o AD, a integração com um PDC linux, só funciona se for via LDAP, por conexão AD não rola nem a pau. =/
Excelente post Ricardo,
Tenho sempre acompanhado o blog, só que comento pouco,
Vou por em prática o OpenLDAP aqui,
Qualquer coisa posso pertuba-lo?
Douglas,
Agradeço o comentário e caso tenha algum problema pode enviar.
Abraços
Queria deixar uma resalva.
Para aqueles que vão instalar esse serviço no CentOS, atentarem para um detalhe.
Apagar tudo que estiver dentro de /etc/openldap/slapd.d/* e depois executar o slaptest para que possa criar os arquivos corretos, com base na sua configuração do slapd.conf.
Em seguida, altere o dono e grupo dos arquivos da seguinte forma:
# chown ldap.ldap -Rf /etc/openldap/slapd.d/*
Agora inicie o serviço e seja feliz!!!
Pinguim Caveira!!!