Configuração LDAP + SAMBA (PDC

)
Autor: Camila Coelho - Data: 27 de janeiro, 2005

Sumário
1 Objetivos 2 Configuração do Sistema Operacional 3 Instalação dos serviços 3.1 OpenLDAP 2.2.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 SAMBA 3.0.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Configurando OpenLDAP 4.1 Configuração do “slapd” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 LDAP como um NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Gerando a base LDAP 5.1 Conceitos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Incluindo registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Configurando o Samba 6.1 Samba como PDC . . . . . . . . . 6.2 Samba com LDAP . . . . . . . . . 6.2.1 Pacote smbldap-tools . . . 6.2.2 Gerenciamento de usuários 2 2 2 3 3 4 4 6 6 6 7 7 7 8 8 9 10 10

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

7 Ferramentas de gerenciamento de usuários LDAP 8 Referências

Configuração OpenLDAP com Samba3

1

Objetivos
• Configurar um servidor de dados e PDC (Personal Domain Controller ) Centralizar a base de usuários Windows e Linux em um único no servidor. Privilegiar soluções open-source, sem custo adicional de conexões e/ou licenças. • Ferramentas utilizadas: Samba 3.0.10 + OpenLDAP 2.2.13

2

Configuração do Sistema Operacional

Por razões de estabilidade, segurança e custo, o sistema operacional Linux 2.6.10 foi instalado no servidor em questão. Para manter a configuração mínima, sem recursos adicionais e desnecessários, a distribuição Linux escolhida foi o Slackware 10.1, que oferece, além da simplicidade de configuração e manutenção, a flexibilidade de manter-se apenas o mínimo necessário no sistema. Entretanto, os passos a seguir poderão ser efetuados em qualquer distribuição linux recente, que apresente suporte às versões dos programas que serão necessários para atender aos requisitos determinados acima. Os seguintes aplicativos foram instalados no sistema: • ferramentas GNU e core (série A) • ambiente de desenvolvimento e bibliotecas compartilhadas C/C++ (série D e L) • ambiente de rede tcp/ip e openSSL (série N) • aplicativos adicionais: db4 (Berkeley DB4) A configuração do ambiente consistiu em: • Compilação da versão do Linux atual (2.6.10) adequada ao hardware detectado no servidor • Configuração de uma rotina simples de controle de acesso via firewall e monitoramento de logs (TODO) • Criação de usuários/grupos: – ldap/ldap: Serviço LDAP

3

Instalação dos serviços

As versões pré-compiladas dos programas, em geral, não atendem a todos os requisitos da aplicação. Por exemplo, o serviço LDAP necessita do suporte ao algoritmo “crypt”, ao backend “bdb” e à autenticação TLS/SSL. O Samba, por sua vez, necessita de suporte ao backend LDAP. Além disso, utilizar pacotes de terceiros pode prejudicar a integridade e performance do sistema. Sendo assim, prosseguiremos com a instalação dos aplicativos através dos fontes obtidos nos sites oficiais destas aplicações: • OpenLDAP: www.openldap.org • Samba 3: www.samba.org Além destes programas, utilizaremos alguns aplicativos adicionais que serão mencionados no decorrer do texto.

Copyright (c) 2005 by linuxbr.org

2

Configuração OpenLDAP com Samba3

3.1

OpenLDAP 2.2.13

Após descompactar a versão atual do OpenLDAP, prossiga com a instalação da seguinte forma:

# CPPFLAGS="-I/usr/include/db4" ./configure --enable-crypt # make depend && make # checkinstall
Neste caso, o OpenLDAP 2.2.23 foi instalado no diretório /usr/local, com suas configurações em /usr/local/etc. As bases serão instaladas em /usr/local/var. Altere as permissões desses diretórios para o usuário e grupo LDAP criado inicialmente. O diretório /usr/etc/openldap será referenciado como $LDAPCONF de agora em diante. Vamos rodar nosso serviço de diretório através do seguinte script de inicialização:
# ! / b i n / sh # S c r i p t para i n i c i a r o LDAP CONFIG= " / u s r / l o c a l / e t c / openldap / s l a p d . c o n f " PID= " / u s r / l o c a l / v a r / run " DB= " / u s r / l o c a l / v a r / openldap−data " ARGS= "−4 −u l d a p −g l d a p " case " $1 " i n s t a r t ) / u s r / l o c a l / l i b e x e c / s l a p d $ARGS −h " l d a p : / / / l d a p s : / / / " & / u s r / s b i n / nscd & ; ; stop ) k i l l ‘ cat $PID / s l a p d . pid ‘ ;;

s t a t s ) echo ‘ l s − l $DB / | grep t o t a l ‘ echo " p i d o f slapd ’ ’ ; ; * ) echo " Usage : $0 < s t a r t | s t o p | s t a t s > " ; ; esac

Listing 1: rc.ldap Nesse exemplo, utilizo o nscd para caching de nomes, o que requer a existência do diretório /var/run/nscd no filesystem.

3.2

SAMBA 3.0.10

Da mesma forma, prosseguimos com a instalação do Samba (3.0.10). O diretório /var/log/samba deve ser criado para armazenar os logs. O seguinte suporte foi adicionado na compilação:

--with-ldap --with-ldapsam --with-smbmount --enable-cups --with-syslog --with-logfilebase=/var/log/samba --with-quotas --with-acl-support
Copyright (c) 2005 by linuxbr.org 3

Configuração OpenLDAP com Samba3

Para tanto, foi utilizado o “slackbuild” original do samba. Desta forma, o samba foi instalado em /usr (– prefix=/usr) e seus arquivos de configuração encontram-se em /etc/samba. O script criado para iniciar/finalizar o samba é bastante simples:
# ! / b i n / sh # S c r i p t para i n i c i a r o Samba case $1 i n s t a r t ) / u s r / s b i n / smbd −D / u s r / s b i n / nmbd −D ; ; s t o p ) k i l l a l l smbd nmbd ; ; * ) echo " Usage : $0 < s t a r t | stop > " ; ; esac

Listing 2: rc.samba

4 Configurando OpenLDAP
Primeiramente, definimos a seguinte estrutura inicial para nosso diretório LDAP:

Nossa árvore neste caso inicia com um domínio (“dc”), mas poderia ser uma organização, etc. Utilizaremos dominio.com neste exemplo. Altere de acordo com a sua configuração.

4.1

Configuração do “slapd”

Copie o samba.schema (encontrado em /usr/doc/samba-VERSION) para $LDAPCONF/schema/. Iniciamos a configuração do $LDAPCONF/slapd.conf:

# slapd.conf # A ordem dos esquemas é relevante include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/nis.schema include /usr/local/etc/openldap/schema/samba.schema # ACLs access to attrs=sambaLMPassword,sambaNTPassword,userPassword by * read by self write access to * by * read # Certificados para conexão segura SSL
Copyright (c) 2005 by linuxbr.org 4

Configuração OpenLDAP com Samba3

TLSCACertificateFile TLSCertificateFile TLSCertificateKeyFile

/usr/local/etc/openldap/ca/cacert.pem /usr/local/etc/openldap/ca/servercrt.pem /usr/local/etc/openldap/ca/serverkey.pem

# Banco de dados LDAP database bdb suffix "dc=dominio,dc=com" # Definimos a conta administradora como "Manager" rootdn "cn=Manager,dc=dominio,dc=com" # A senha deve ser gerada com o slappaswd rootpw {SSHA}... # Caminho para a base de dados LDAP directory /usr/local/var/openldap-data # índices para otimizar acesso index objectClass eq index uid eq index gidNumber eq index uidNumber eq
Precisamos gerar os certificados, conforme indicados nas cláusulas “TLS” (Transport Layer Security ), para permitir a conexão segura ao LDAP. Para gerar os certificados, utilizamos o script CA.sh que acompanha o openSSL (/etc/ssl/misc), conforme os passos abaixo:

# mkdir $LDAPCONF/ca/ # CA.sh -newca (Programa interativo. 'Common Name' deve ser igual ao hostname) (A seguir geramos o certificado do servidor) # openssl req -new -nodes -keyout newreq.pem -out newreq.pem # CA.sh -sign (Fonte: OpenLDAP FAQ)
Mova o cacert que foi gerado para nosso diretório de certificados no LDAP, e delete o diretório demoCA/. Renomeamos os certificados gerados para seguir o padrão sugerido (newcert.pem -> servercrt.pem, newreq -> serverkey.pem), e removemos a permissão de leitura:

# chmod 600 /usr/etc/openldap/ca/serverkey.pem
Voltando à configuração do LDAP, vamos indicar nosso certificado e base padrão em $LDAPCONF/ldap.conf:

HOST 127.0.0.1 BASE dc=dominio,dc=com TLS_CACERT /usr/local/etc/openldap/ca/cacert.pem
Isso encerra a configuração do daemon. Inicie-o. Verifique as respostas do servidor no log /var/log/debug. Caso ocorra algum problema, adicione o parâmetro “-d” seguido de um nível de debug aos argumentos passados ao slapd no script de inicialização. Para prosseguirmos, o servidor LDAP deve estar no ar e aguardando conexões nas portas 389 (padrão) e 686 (SSL). Copyright (c) 2005 by linuxbr.org 5

Configuração OpenLDAP com Samba3

4.2

LDAP como um NIS

O programa de login de sistemas unix-like utilizam arquivos de “name service” (libnss_files e nsswitch.conf) para acessar a base de usuários (/etc/passwd) e proceder com a autenticação. Para configurar o LDAP como a base padrão de usuários/grupos, utilizaremos a libnss_ldap. Pacotes utilizados (obtidos em www.padl.com): NSS_ldap e MigrationTools. Após a instalação dos pacotes, modificamos o /etc/ldap.conf (não confundir com a configuração do openldap, em $LDAPCONF/ldap.conf) para indicar nossa base LDAP:

host 127.0.0.1 base dc=dominio,dc=com rootbinddn cn=Manager,dc=dominio,dc=com
Em seguinda, alteramos nosso nsswitch.conf:

passwd files compat ldap group files compat ldap shadow files compat ldap
Dessa forma, sempre que um usuário logar no sistema, ele será buscado tanto em “files” quanto em “ldap”. A partir de agora, todo o gerenciamento de usuários Unix de nossa rede será gerenciado pelo LDAP, ficando a cargo do “files” apenas os usuários padrão do sistema (ie, root).
PS: Inicie o LDAP antes dos processos que consultam a base de usuários, do contrário levará um tempo até o timeout da consulta. No Slackware, a chamada foi incluída no rc.M (multi-user runlevel). Na versão 10.1, há uma alteração de permissões do “utmp” no rc.S (modo single-user), o que causava lentidão no boot, sendo assim, essa alteração foi transferida após a inicialização do LDAP.

5
5.1

Gerando a base LDAP
Conceitos básicos

As operações de adição, remoção e busca de registros na base LDAP serão apresentadas nesta seção. Para adicionar “nós” ao LDAP, utiliza-se o padrão de arquivos LDIF. Uma forma de se entender este formato é através de um exemplo:

# base.ldif dn: dc=dominio, dc=com dc: dominio objectClass: top objectClass: domain
O atributo “dn” (Distinguished Name) possui um significado especial, semelhante a um OID, sendo o responsável por distinguir cada elemento da árvore. Os atributos “objectClass” definem a situação do registro na hierarquia. O LDAP apresenta alguns atributos comuns, como “cn” (canonical name), “dc” (domain), “ou” (organization unit), etc, para representar seus elementos. No exemplo acima, definimos o “nó” inicial com um “dc” (domínio) no topo da hierarquia. Para inserir o registro, podemos invocar o “slapd” diretamente para efetuar a inclusão:

# slapadd -l base.ldif
Porém, este comando não faz verificações de autorização, etc (ver manpage). Vamos utilizar para isso o comando ldapadd: Copyright (c) 2005 by linuxbr.org 6

Configuração OpenLDAP com Samba3

# ldapadd -D cn=Manager,dc=dominio,dc=com -W -x -f
Os parâmetros -D e -W definem os critérios de autenticação para a inclusão do registro, o -x que utilizaremos conexão simples (sem Kerberos ou algo semelhante), e o -f indica o arquivo .LDIF. Após autenticado, o comando efetuará a inclusão do elemento em questão. Para remover o registro, utilizamos o ldapdelete, que também não é interativo. Após efetuar a conexão, não haverá nenhuma saída, exceto se ocorrer um erro (por exemplo, Invalid credentials). No prompt indicamos o “dn” que desejamos excluir, e para sair, CTRL+D. Para mais informações, consulte a manpage. Para buscar um registro, podemos listar toda a árvore (com slapcat ou ldapsearch -x), ou utilizar filtros.

# ldapsearch -x -LLL "dc=dominio"
Não autenticamos para fazer a busca pois nossa ACL permite a busca por qualquer usuário. Altere isso de forma apropriada aos seus requisitos. Ao incluir usuários com senhas, as senhas podem ser geradas pelo “slappasswd”, sendo que o algoritmo utilizado pelo Unix em geral é o CRYPT. As senhas do Windows, por sua vez, utilizam um esquema de dois “hashes” gerados por DES e MD4, e são em resumo, incompatíveis. As bases do “bdb” são armazenadas no diretório openldap-data. Basta apagar este diretório para reiniciar a base do zero, sendo importante incluí-lo em procedimentos de backup. Isso resume o funcionamento básico do LDAP.

5.2

Incluindo registros

O pacote “migration tools” é um conjunto de scripts para a exportação dos usuários/grupos originais do sistema (/etc/passwd, etc) no formato LDIF para a inclusão na base LDAP. Podemos indicar alguns dados no arquivo migrate_common.ph para iniciar a geração dos LDIFs com alguns elementos pré-definidos, como o $DEFAULT_BASE (dc=dominio,dc=com). Depois disso executamos os seguintes scripts:

./migrate_base.pl > base.ldif ./migrate_passwd.pl /etc/passwd passwd.ldif ./migrate_group.pl /etc/group group.ldif
Conforme definido inicialmente, nossa “árvore” LDAP apresentará 2 nós: People (usuários) e Group (grupos). Edite o base.ldif de forma que apresente somente estes grupos. Da mesma forma, verifique o passwd.ldif e o group.ldif para migrar apenas o que considerar necessário nessa primeira fase (ie, o grupo “users” e algum usuário de teste). Após gerados os arquivos LDIF, inclua-os com o “ldapadd” em nossa base. PS: “ou” representa nossos grupos, e “uid” nossas pessoas no diretório LDAP.

6
6.1

Configurando o Samba
Samba como PDC

O Samba 3.x opera como um PDC (Primary Domain Controller ) para redes Windows. Para isso, basta alterar a configuração do samba conforme exemplo que segue (/etc/samba/smb.conf):

netbios name = serverlx workgroup = linuxpdc server string = Samba PDC Server security = user

# NOME NETBIOS # NOME DOMINIO

Copyright (c) 2005 by linuxbr.org

7

Configuração OpenLDAP com Samba3

domain master = yes # aqui ativamos o PDC domain logons = yes time server = yes logon drive = S: hosts allow = 192.168.0. 127. log file = /var/log/samba/\%m.log # separar o log unix charset = iso8859-1 display charset = cp850 veto files = /*.mp3/*.wmv/*.wma/*.avi/*.mpg/
Descomente também as linhas referentes ao netlogon, referindo-se ao local onde os scripts de logon serão armazenados. O controle de acesso é feito através do cadastro do nome das máquinas e da admissão do usuário pelo “root”. O Domain Admin por padrão é o usuário root, cadastrado com smbpasswd root, porém, utilizaremos outros comandos compatíveis com o LDAP para gerenciar nossa base de usuários. Teste a configuração com o comando testparm. Ele deverá retornar: Server role: ROLE_DOMAIN_PDC.

6.2

Samba com LDAP

Por padrão, o Samba utiliza uma base flat-file para armazenar os dados das contas, além de necessitar que a mesma conta exista no Unix. Para centralizar a base de usuários Unix e Windows, utilizaremos nossa configuração LDAP. Altere o “smb.conf”, incluindo:

passdb backend = ldapsam:ldaps://127.0.0.1/ ldap admin dn = cn=Manager,dc=dominio,dc=com ldap suffix = dc=dominio,dc=com ldap group suffix = ou=Group ldap user suffix = ou=People ldap machine suffix = ou=Machine
Para fins de legibilidade, as máquinas serão adicionadas em uma organization unit separada. Depois de adicionadas as entradas referentes ao LDAP, reinicie o serviço:

killall -HUP nmbd
Nosso Samba está pronto para comunicar-se com o OpenLDAP. Finalmente, configure a senha do Manager no Samba:

smbpasswd -w NOVASENHA
Associe também uma senha Samba ao nosso usuário “root”, que será o Domain Admin do PDC, através do comando:

# smbpasswd -a root
Observe que o único arquivo encontrado no diretório de bases do samba (/etc/samba/private) é o secrets.tdb, que deverá apresentar permissões restritivas. Isso demonstra que a base de usuários do samba realmente será obtida do LDAP. 6.2.1 Pacote smbldap-tools

Para gerenciar os usuários no Samba, utilizaremos os scripts smbldap-tools (www.idealx.org).

Copyright (c) 2005 by linuxbr.org

8

Configuração OpenLDAP com Samba3

A instalação dos scripts deve ser feita da seguinte forma. Copie os scripts (smbldap-*) para o /usr/local/sbin. Crie um diretório /etc/smbldap-tools/ para armazenar os arquivos de configuração (smbldap.conf e smbldap_bind.conf). Altere a permissão (600) para este último. Copie também o “.pm” para o diretório de módulos Perl, e edite os caminhos para os arquivos de configuração que constam nas variáveis globais deste arquivo. O smbldap.conf deve ser configurado de acordo com nossas definições anteriores:

SID (obtido com ``net getlocalsid'') suffix="dc=dominio,dc=com" usersdn="ou=People,\${suffix}" computersdn="ou=Machine,\${suffix}" groupsdn="ou=Group,\${suffix}" hash-encrypt="CRYPT" userSmbHome="" userProfile=""
O comando net, que acompanha o Samba 3, é uma versão do comando “net” encontrado no Windows. O “getlocalsid” deverá criar uma entrada no LDAP referente ao sambaDomainName, lembrando que SIDs no Windows são equivalentes aos UIDs (salvo o fato de serem muito mais complexos de se gerar e gerenciar). Observe também que o arquivo smbldap.conf menciona um “cn” chamado NextFreeUnixId, responsável pela geração de IDs sequenciais. Ele deverá ser gerado pelo smbldap-populate, que executaremos a seguir. Configure também o smbldap_bind.conf com os “dn”s corretos, e como a senha utilizada pelo smbldap-tools deverá ser definida nesse arquivo, configure persmissões restritivas. Como os scripts smbldap-tools dependem de diversos módulos Perl, configure o acesso ao CPAN:

# FTP_PASSIVE=1 perl -MCPAN -e shell
O script cpan2tgz, encontrado em software.jaos.org pode auxiliar na manutenção dos módulos Perl. No caso, foi detectada a ausência dos seguintes módulos no sistema, e o cpan2tgz responsabilizou-se por gerar os pacotes de cada um deles:

# cpan2tgz Net::LDAP # cpan2tgz Crypt::SmbHash # cpan2tgz Digest::SHA1
Os pacotes serão gerados em /usr/src. Utilize os comandos “show” do smbldap-tools para certificar-se de que os scripts estão corretamente instalados, caso contrário, podem ocorrer erros inesperados. A seguir, vamos popular a base com o comando smbldap-populate:

# smbldap-populate
Como esse script gera a base do zero, e já possuimos os nós “dc” e “ou”, serão apresentadas mensagens informando deste fato. Basicamente, ele adicionará os usuários e grupos globais do Windows no LDAP. Antes de efetuarmos os testes, reinicie o servidor LDAP. Com o comando slapcat | grep -i idmap, verifique se o grupo Idmap foi incluído. Verificamos a existência de uma conta “Administrator” com o comando getent group | grep Administrator. O UID deve ser 0. Verifique também os grupos de domínio (getent group | grep Domain). Verifique os IDs destes grupos. Usuários com GID 512 serão administradores em suas máquinas. Se tudo ocorrer ok, e os módulos perl estiverem instalados ok, podemos iniciar a criação de usuários do Samba. 6.2.2 Gerenciamento de usuários

Inicialmente, adicione uma máquina que será autorizada no domínio: Copyright (c) 2005 by linuxbr.org 9

Configuração OpenLDAP com Samba3

# smbldap-useradd -w MACHINENAME
A seguir, adicione um usuário:

# smbldap-useradd -m -a USERPDC # smbldap-passwd USERPDC
Com isto, já temos um usuário válido no domínio. Também é possível adicionar grupos ao Samba para, posteriormente, associá-los a grupos do Windows através do comando:

# smbldap-groupadd -a MYGROUP
Com o comando net groupmap list, verifique a associação de um SID ao nosso grupo. Dessa forma, ele será visível às máquinas Windows. Nas máquinas Windows, altere o domínio para LINUXPDC (definido em nosso smb.conf), e digite a senha de “root” associada ao Domain Admin, para permitir o ingresso da máquina previamente cadastrada no LDAP. Naturalmente, será preciso reiniciar o Windows, o que possibilitará o logon no domínio em questão com o usuário “USERPDC”, criado acima. Isso encerra a configuração básica de nosso serviço. Nesse momento, nossas máquinas Windows, préviamente cadastradas no samba, já deverão autenticar normalmente em nosso domínio “PDC”. A partir daí podemos definir as políticas de acesso desses usuários, seus perfis, etc, o que está fora do escopo deste documento.

7

Ferramentas de gerenciamento de usuários LDAP

Nesse artigo, apresentamos a criação de usuários Unix através de templates LDIF, gerados pelo script MigrateTools. Para a criação de usuários Samba, a ferramenta smbldap-useradd demonstrou-se bastante eficiente. Com esse conjunto de ferramentas em modo texto, podemos criar/alterar/deletar e buscar usuários na base LDAP. Para facilitar a administração de nosso servidor LDAP, existem algumas ferramentas de gerenciamento amigáveis (e gratuitas) em modo gráfico, destacando-se: • phpldapadmin: ferramenta Web, obtida em sourceforge.net. • LDAP Browser / Editor: ferramenta Java com suporte a conexão segura, obtida em http://snipurl.com/ ldapbrowser. Para a utilização da primeira, é preciso que o PHP suporte conexões LDAP. O phpldapadmin apresenta uma interface amigável e completa, além de suporte total ao gerenciamento de usuários no Samba 3. O LDAP Browser, por sua vez, não precisa de nenhuma configuração adicional. O LDAP Browser demostrouse simples e funcional, e apesar de não possuir as facilidades do primeiro, suporta conexões seguras e a importação/exportação de arquivos LDIF.

8

Referências
• Documentação do site www.ldap.org.brLDAP-Brasil • Using an LDAP Directory for Samba Authentication (fonte: IBM developerworks) • Smbldap-tools User Manual (fonte: idealx.org) • SlackwareZine (.com.br)
Powered by L EX 2ε AT

Copyright (c) 2005 by linuxbr.org

10