sexta-feira, 3 de abril de 2009

Integrando o Samba com o LDAP


Faz um tempo que estou com este post guardado, e agora resolvi colocar aqui pra esclarecer melhor as dúvidas sobre a integração do Samba com o LDAP. Não porque seja difícil e trabalhoso, mas sim por falta de organização da minha parte =D.


Um dos principais problemas que os administradores de rede (Linux) enfretam, é ter que gerenciar todas as informações (login e password) relativas a usuários de uma
maneira descentralizada, por exemplo: um novo usuário chega na sua empresa e então começa a peregrinação dos admininstradores, tendo que percorrer todos os serviços(mail, proxy, domínio,...) que serão alocados para este usuário e criar contas separadamente para cada serviço.
Derivando do X.500, o LDAP (Lightweight Directory Access Protocol) surge como uma alternativa para o problema citado no exemplo acima. Existem diversas aplicações para o LDAP, dentre as mais conhecidas estão o OpenLDAP e o Active Directory.

Criei um cenário, que está exemplificado na figura abaixo:




Neste cenário utilizei um servidor Debian lenny, com o OpenLDAP instalado, além do phpLDAPadmin, que é uma interface WEB de gerenciamento para a base LDAP. No lado cliente utilizei um Windows 2000 professional, que irá acessar os compartilhamentos concedidos pelo Samba.

Os pacotes instalados (via apt-get) no servidor foram:

    • slapd
    • lpad-util
    • libdb4.3
    • libdb4.3-dev
    • libdb4.3-util
    • phpldapadmin
    • samba
    • smbldap-tools
    • smbclient
    • smbfs


Após a instalação, edite o arquivo /etc/ldap/slapd.confda sequinte maneira:

#Arquivos Schema

include /etc/ldap/schema/core.schema

include /etc/ldap/schema/cosine.schema

include /etc/ldap/schema/nis.schema

include /etc/ldap/schema/inetorgperson.schema

include /etc/ldap/schema/samba.schema #obtido junto ao tarball do samba

#Parâmetros de log

loglevel 0

pidfile /var/run/slapd/slapd.pid

argsfile /var/run/slapd/slapd.args

# Where the dynamically loaded modules are stored

modulepath /usr/lib/ldap

moduleload back_bdb

#Parâmetros do Banco de Dados

database bdb

sizelimit 500

tool-threads 1

backend bdb

checkpoint 512 30

#Raiz da Arvore

suffix "dc=empresa,dc=com"

#Administrador do domínio

rootdn "cn=administrador,dc=empresa,dc=com"

rootpw "senha123"

Após a configuração do slapd.conf vamos criar os arquivos ldifs, que é um modelo de arquivo para a inserção de dados na árvore de diretório. Neste exemplo iremos criar 3 arquivos:

  • Domínio
  • Equipes
  • Usuários

- dominio.ldif:

dn: dc=empresa,dc=com

objectClass: top

objectClass: dcObject

objectClass: organization

dc: empresa

o: empresa

- equipe.ldif:

dn: ou=atendimento,dc=empresa,dc=com

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: atendimento

dn: ou=redes,dc=empresa,dc=com

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: redes

dn: ou=seguranca,dc=empresa,dc=empresa

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: seguranca

dn: ou=bd,dc=empresa,dc=com

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: bd

- usuarios.ldif:

dn: uid=joao,ou=atendimento,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: joao

sn: Carneiro

mail: joao@empresa.com

telephonenumber: 3157-4403

uid: joao

userPassword: senha123

dn: uid=andre,ou=redes,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: andre

sn: Silva

mail: andre@empresa.com

telephonenumber: 3467-9251

uid: andre

userPassword: senha123

dn: uid=maria,ou=seguranca,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: maria

sn: Villas

mail: maria@empresa.com

telephonenumber: 3512-0245

uid: maria

userPassword: senha123

dn: uid=marcos,ou=bd,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: marcos

sn: Nobrega

mail: marcos@empresa.com

telephonenumber: 3234-7640

uid: marcos

userPassword: senha123

Após criar os arquivos, o próximo passo é adicionar a base LDAP. Adicione os arquivos com os seguintes comandos:

# ldapadd -f dominio.ldif -x -D cn=administrador,dc=suporte,dc=gti -W

# ldapadd -f equipes.ldif -x -D cn=administrador,dc=suporte,dc=gti -W

#ldapadd -f usuarios.ldif -x -D cn=administrador,dc=suporte,dc=gti -W

obs: Parâmentros

  • -f : indica qual arquivo será incluído no diretório
  • -x : informa que irá utilizar autenticação simples
  • -D : informa o dn
  • -W : invoca um prompt pedindo a digitação da senha

Para visualizar a árvore criada, utilize o phpldapadmin. Para isso digite: http://ipdoservidorldap/phpldapadmin .

O Próximo passo é configurar o samba, para integrar-se ao LDAP. Edite o arquivo smb.conf, e deixe como abaixo:

[global]

workgroup = ldap

security = user

encrypt passwords = yes

#Configuração para a integração com o LDAP

ldap admin dn="cn=administrador,dc=empresa,dc=com"

passdb backend = ldapsam:ldap://127.0.0.1/

ldap suffix = "dc=suporte,dc=gti"

ldap ssl = off

[compart]

comment = Compartilhamento na máquina ldap/samba

writeable = yes

path = /arquivos

public = yes

browseable = yes

Feito isso, devemos configurar o cliente Windows seguindo os passos abaixo:

  • Colocar a máquina Windows 2000 no mesmo grupo de trabalho do samba (variável workgroup)
  • Criar os usuários no servidor debian(comando adduser).

Obs: este passo só será necessário porque o samba necessita de contas criadas no servidor.

  • Remova o arquivo do samba “secrets.tdb”
  • Digite o comando:

# smbpasswd -w (senha do admin-ldap)

  • Coloque os usuário criados no samba (passo anterior) com o comando

# smbpasswd -a usuario (a partir deste momento os usuários serão inseridos no LDAP)

  • Reinicie o samba:

# /etc/init.d/samba restart

  • Na máquina windows faça:

iniciar(botao direito) → explorar → meus locais de rede → computadores próximos a mim → escolha o servidor samba.

  • Informe um usuário/senha criado anteriormente no servidor samba.

Obs: Configure as permissões para os usuários acessarem os compartilhamentos criados.

4 comentários:

Marcelo disse...

Muito bom artigo cara. Será que voce pode me ajudar com um problema que estou tendo:


Aqui na rede da empresa tenho um servidor PDC Samba + LDAP rodando no Mandriva 2006. Acontece que estou configurando um servidor de impressão em outra máquina, (Debian 4) para fazer controle das impressões através do software Curupira usado pela Caixa Economica Federal., mas preciso integrar o Samba do servidor de impressão com a autenticação do meu PDC para saber extamente os usuários que estão enviando trabalhos.

Leandro disse...

Opa marcelo.... primeiramente você tem que encontrar(ou construir) o arquivo "schema" pro curupira...(com certeza alguém já fez) e depois configurar o curupira pra utilizar a base como autenticação... não conheço o curupira, mas creio que existe algum arquivo de configuração onde você aponte a base LDAP

patrikstudent disse...

E aí Leandro, beleza?
Seguinte cara, segui seu artigo até a parte em que termino de configurar o samba e crio as contas dos usuários no servidor e tal. Bom, após criar estas contas, como trabalho as permissões de diretórios através do LDAP, por exemplo, tenho vários departamentos, e estes departamentos não acessam uns aos outros, porém, há usuários que poderão acessar estas pastas.Não sei se estou entendendo bem, mas estou com esta dúvida...se puder me ajudar...

Unknown disse...

Leandro- vc teria como fazer outro tutorial para a nova versão do ldap a 2.4.24, porque essa nova versão não tem o arquivo sldap.conf