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