Instalação e configuração do OpenLDAP com esquema SAMBA no Debian Wheezy
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