Instalação e configuração do OpenLDAP com esquema SAMBA no Debian Wheezy

openldap

Através de muita pesquisa, descobri que o existe muita documentação para instalação do OpenLDAP, mas a grande maioria está desatualizada pois as coisas mudaram drasticamente após a versão 2.4.23. Desde essa versão, a configuração doOpenLDAP mudou para /etc/ldap/slapd.d/ por padrão. Os pacotes do Debian fornecem uma migração automática para o novo estilo de configuração. Com o novo estilo é possível mudar valores on the fly sem a necessidade de reiniciar o slapd.

Instalação

Instale o pacote:

# apt-get install slapd ldap-utils

Informe e confirme a senha do administrador do slapd.

Configuração

Algumas questões para configuração não estavam disponíveis por causa da prioridade do dpkg. Para que estas opções estejam disponíveis, podemos executar:

# dpkg-reconfigure -plow slapd
Omitir a configuração do servidor OpenLDAP? 
Nome do domínio DNS: dominio.local
Nome da organização: Instituição X
Senha do administrador: 
Confirmar a senha: 
“Backend” de base de dados a ser usado: HDB
Você deseja que a base de dados seja removida quando o pacote sladp for expurgado ? 
Mover a base de dados antiga? 
Permitir o protocolo LDAPv2?

Aumentar a performance

Para uma melhor performance, criaremos mais índices que o omitido.

Crie um arquivo LDIF: olcDbIndex.ldif

Adicione o seguinte conteúdo:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: cn pres,sub,eq
-
add: olcDbIndex
olcDbIndex: sn pres,sub,eq
-
add: olcDbIndex
olcDbIndex: uid pres,sub,eq
-
add: olcDbIndex
olcDbIndex: displayName pres,sub,eq
-
add: olcDbIndex
olcDbIndex: default sub
-
add: olcDbIndex
olcDbIndex: uidNumber eq
-
add: olcDbIndex
olcDbIndex: gidNumber eq
-
add: olcDbIndex
olcDbIndex: mail,givenName eq,subinitial
-
add: olcDbIndex
olcDbIndex: dc eq

Use o ldapmodify para adicionar essas configurações ao ldap:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f ./olcDbIndex.ldif

Não se esqueça! Após essa execução, o slapd executará uma tarefa interna para
criar os índices. Não pare o o slapd durante essa indexação.

Para suporte SAMBA LDAP

Para suporte SAMBA LDAP, o slapd precisa do esquema samba. Com esse suporte, permitiremos autenticação MsCHAPv2. Para isso, vamos instalar o pacote de documentação do Samba:

# apt-get install samba-doc

Copiar o exemplo samba.schema para o diretório de configuração do ldap:

# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > \  /etc/ldap/schema/samba.schema

Criar o arquivo pivô da conversão:

# vim /tmp/schema_convert.conf7

Incluir o conteúdo abaixo :

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/pmi.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/samba.schema

Criar um diretório para configuração:

# mkdir /tmp/slapd.d/

Converter os schemas :

# slaptest -f /tmp/schema_convert.conf -F /tmp/slapd.d/

Resultado esperado :

config file testing succeeded

Editar o arquivo que contém o schema do samba

# vim /tmp/slapd.d/cn\=config/cn\=schema/cn\=\{13\}samba.ldif

Modificar a terceira linha com o conteúdo abaixo:

dn: cn=samba,cn=schema,cn=config

No final deste arquivo remover as linhas abaixo:

structuralObjectClass: olcSchemaConfig
entryUUID: 3a14cf38-c77b-102f-97af-e37d8ac36f95
creatorsName: cn=config
createTimestamp: 20110208025944Z
entryCSN: 20110208025944.971133Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20110208025944Z

Adicionar o schema do Samba na base do OpenLDAP:

# ldapadd -Y EXTERNAL -H ldapi:/// \ -f /tmp/slapd.d/cn\=config/cn\=schema/cn\=\{13\}samba.ldif

Resultado esperado:

adding new entry "cn=samba,cn=schema,cn=config"

Confira o novo esquema do samba:

# ldapsearch -LLLQY EXTERNAL -H ldapi:/// \  -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn

Índices Samba

Agora que o slapd conhece os atributos samba, podemos criar alguns índices baseado nele. Como já foi dito, criar novos índices é uma maneira de melhorar a performance quando os clientes executam filtros de busca no DIT. Então, devemos criar o arquivo:

# vim /tmp/olc_samba_index.ldif

Adicionar o conteúdo:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub

Adicione as novas configurações:

# ldapmodify -Q -Y EXTERNAL -H ldapi:/// \ -f /tmp/olc_samba_index.ldif

Se tudo der certo, pode-se ver os novos índices usando o ldapsearch:

# ldapsearch -Q -LLL -Y EXTERNAL -H \ ldapi:/// -b cn=config olcDatabase={1}hdb olcDbIndex

Adicionar objetos Samba LDAP com o SMBldap-tools

Smbldap-tools é um projeto independente constituído por um conjunto de scripts projetados para gerenciar contas de usuários e grupos armazenados em um diretório LDAP. Será utilizado para povoar a nossa base LDAP. Enfrentei alguns   problemas com a versão do pacote do repostório stable do Debian Wheezy. Portanto, vamos instalá-lo da versão testing  Jessie:

# wget -c http://ftp.br.debian.org/debian/pool/main/s/smbldap-tools/smbldap-tools_0.9.9-1_all.deb
# dpkg -i smbldap-tools_0.9.9-1_all.deb
# apt-get -f install

Os arquivos de configuração não são criados automaticamente. Então, devemos copiar os arquivos de configuração  presentes no diretório de exemplos da documentação.

# zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf
# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/

No arquivo de configuração smbldap_bind.conf deverão ser armazenadas as credencias para acesso à base LDAP:

# vim /etc/smbldap-tools/smbldap_bind.conf
slaveDN="cn=admin,dc=dominio,dc=local"
slavePw="123456"
masterDN="cn=admin,dc=dominio,dc=local"
masterPw="123456"

Vamos instalar também o pacote samba-common para termos o utilitário net. Com ele, precisaremos dos SID do domínio  para preencher nas configurações do smbldap.conf:

# apt-get install samba-common-bin
# net getlocalsid
SID for domain LDAP is: S-1-5-21-3462182387-3383398289-171396890711

Agora vamos configurar o smbldap.conf:

# vim /etc/smbldap-tools/smbldap.conf
SID="S-1-5-21-3462182387-3383398289-1713968907"
sambaDomain="DOMINIO"
slaveLDAP="localhost"
slavePort="389"
masterLDAP="localhost"
masterPort="389"
ldapTLS="0"
ldapSSL="0"
verify="require"
suffix="dc=dominio,dc=local"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"12
password_hash="SSHA"
password_crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
shadowAccount="1"
defaultMaxPasswordAge="365"
UserSmbHome=""
userProfile=""
userHomeDrive="H:"
userScript="logon.bat"
mailDomain=""
with_smbpasswd="0"13
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

Após configurar o smbldap-tools, chegou o momento de popular a base LDAP:

# smbldap-populate
Populating LDAP directory for domain DOMINIO (S-1-5-21-3462182387-
3383398289-1713968907)
(using builtin directory structure)
entry dc=dominio,dc=local already exist.
adding new entry: ou=Users,dc=dominio,dc=local
adding new entry: ou=Groups,dc=dominio,dc=local
adding new entry: ou=Computers,dc=dominio,dc=local
adding new entry: ou=Idmap,dc=dominio,dc=local
adding new entry: sambaDomainName=DOMINIO,dc=dominio,dc=local
adding new entry: uid=root,ou=Users,dc=dominio,dc=local
adding new entry: uid=nobody,ou=Users,dc=dominio,dc=local
adding new entry: cn=Domain Admins,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Domain Users,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Domain Guests,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Domain Computers,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Administrators,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Account Operators,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Print Operators,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Backup Operators,ou=Groups,dc=dominio,dc=local
adding new entry: cn=Replicators,ou=Groups,dc=dominio,dc=local
Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:14
Retype new password:

Note que foi solicitado a senha de do administrador do domínio samba. Não é o mesmo administrador do LDAP que configuramos durante a instalação do slapd. Inclusive pode-se mudar o nome do administrador samba para outro valor. Por exemplo:

# smbldap-populate -a granudo

Agora temos a estrutura inicial do Samba no OpenLDAP.

Exemplos de utilização do SMBLdap-Tools

Segue abaixo alguns exemplos de utilização dos scripts do smbldap-tools:

Criar um usuário:

# smbldap-useradd -a -c "Geowany Galdino" -N "Geowany" -S "Galdino" \  -m -P ggaldino -M geowany.acre@gmail.com

Bloquear uma conta:

# smbldap-usermod -L -I ggaldino

Checar status das contas (desbloqueado/bloqueado):

# smbldap-userlist -l

Desbloquear uma conta:

# smbldap-usermod -U -J ggaldino

Para mais informações, consultar a manpage dos utilitários do smbldap-tools.

Referências:

Setting up an LDAP server with OpenLDAP

Ubuntu Server Guide – Samba and LDAP

Procedimento de configuração da autenticação através OpenLdap no FreeRadius

Gerenciando o LDAP com smbldap-tools

Geowany Galdino escreveu 45 artigos

Assistente em Tecnologia da Informação na Universidade Federal do Acre. Licenciado em História na mesma instituição.

Deixe um comentário

Seu endereço de email não será publicado. Os campos com * são obrigatórios

Você pode usar estes tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>