Samba Ldap
Samba Ldap
Samba Ldap
S
Y
S
A
D
M
I
N
http://www.linuxmagazine.com.br
Integre seu servidor Samba a uma base OpenLDAP
Integrado mais fcil
Se voc acha entediante administrar mltiplas bases de
autenticao, veja como integrar o Samba ao OpenLDAP
para gerenciar todas as bases de forma centralizada.
por Diogo Nunes de Oliveira
A
descentralizao de informa-
es sempre foi um problema
para os administradores de
sistemas Linux. entediante e re-
dundante manipular dados de con-
tas de usurios e senhas de alguns
servios em bases diferentes. Por
exemplo, o banco para autenticao
do servidor web Apache geralmen-
te um arquivo denido atravs
de htpasswd , bem como o do proxy
Squid . Enquanto isso, o servidor de
arquivos e impressoras Samba tem
seu prprio arquivo, tanto para o m-
todo smbpasswd quanto utilizando
o trivial database .
As conguraes de autenticao
para esses servios podem ser feitas
de formas diferentes, mas ainda assim
haver a descentralizao de dados,
e o administrador sempre ter traba-
lho adicional por precisar sincronizar
esses bancos de dados manualmente
ou atravs de scripts.
A soluo para esse problema,
no caso de sistemas Windows,
seria um inequvoco Active Di-
rectory. O Active Directory da
Microsoft a implementao do
protocolo LDAP ( Lightweight Di-
rectory Access Protocol ).
Para Linux, a implementao mais di-
fundida do protocolo o OpenLDAP [1] .
Atualmente, a maioria das aplicaes j
podem ser integradas, pois esto sendo de-
senvolvidas com suporte a esse protocolo,
e as informaes necessrias s mesmas
faro uso de uma base j implementa-
da, na qual os atributos
necessrios j estaro
prontos, bastando indi-
car quais utilizar.
O foco deste artigo demonstrar
como implementar uma integra-
o do Samba [2] com o LDAP .
O motivo de explorarmos a con-
figurao dessa integrao seu
maior nvel de dificuldade quando
comparada a outras aplicaes, j
que o Samba possui seu prprio
arquivo de esquema , diferente-
mente de outras aplicaes, como
Apache e Squid.
Quanto instalao dos pacotes
necessrios, isso depende da distri-
buio em uso. No Mandriva , os
pacotes necessrios so openldap-ser-
vers , openldap-clients e openldap (a
verso utilizada no artigo a 2.3.6-4).
Tambm necessrio ter a Berkeley
Database 4 instalada, que exige os
pacotes libdb4.2 , libdb4.2-devel e
db42-utils . Durante a instalao, um
problema pode ocorrer ao realizar a
instalao pelo tarball . A coleta de
Figura 1 Estrutura hierrquica do domnio exemplo.com.
Exemplo 1: arquivo LDIF
...
dn: dc=exemplo,dc=com
objectClass: top
objectClass: domain
objectClass: domainRelatedObject
dc: exemplo
associatedDomain: exemplo.com
Lars Sundstrm
- w
w
w.sxc.hu
Linux Magazine #32 | Julho de 2007
informaes do sistema pelo coman-
do configure pode no encontrar a
biblioteca dinmica da Berkeley
Database, mesmo que ela j esteja
instalada. necessrio criar um link
simblico em /usr/lib, apontando
para os arquivos de biblioteca que
estavam em /usr/lib/db4:
ln -s /usr/lib/db4/libdb-4.so /
usr/lib
Se a instalao tiver sido realizada
a partir do cdigo-fonte e no tiver
sido empregada a opo --prefix no
comando configure, a instalao ser
feita em /usr/local/. Sendo assim,
os arquivos de congurao estaro
em /usr/local/openldap. Se a insta-
lao tiver sido feita a partir de um
pacote pr-compilado, como DEB
ou RPM, o diretrio com arquivos
de congurao ser /etc/ldap ou
/etc/openldap.
Antes do incio da implementao,
necessrio decidir como car sua
estrutura hierrquica. Geralmente
se associa a raiz LDAP ao domnio,
e abaixo dessa raiz vm as unidades
organizacionais, que so os ramos
ou divises da estrutura. A gura 1
exemplica uma estrutura comu-
mente implementada.
A criao dessa estrutura ser fei-
ta pelas ferramentas smbldap-tools.
Porm, necessrio decidir quais
nomes sero dados a cada nvel e
ramo, de forma que a ferramenta
possa cri-los. Seguindo o exemplo
da gura 1, nossa base ser represen-
tada por dc=exemplo,dc=com.
slapd.conf
O primeiro arquivo de congura-
o a ser editado o /etc/openldap/
slapd.conf. Esse arquivo recebe as
conguraes do servidor LDAP,
enquanto no outro arquivo, /etc/
openldap/ldap.conf, inserimos as con-
guraes a serem utilizadas pelos
clientes LDAP.
No arquivo slapd.conf, a diretiva
include indica quais arquivos de es-
quema o OpenLDAP utilizar. Alguns
j vm por padro, e outros devem
ser adicionados, como o caso do
esquema utilizado pelo Samba. No
Mandriva 2006, a linha abaixo j
est inserida no slapd.conf:
include /usr/share/openldap/
schema/samba.schema
Quando essa linha no estiver pre-
sente, ser preciso pesquisar onde se
encontra o esquema correto, e ento
indic-lo. importante saber que
esse arquivo vem no pacote openl-
dap-servers.
A diretiva suffix indica a base da
estrutura LDAP, que geralmente
associada ao domnio, como em:
suffix dc=exemplo,dc=com
rootdn representa o DN (distingui-
shed name) do administrador LDAP.
Pode ser qualquer DN, visto que o
usurio root, para o LDAP, no
especial. Um exemplo seria:
rootdn cn=manager,dc=exemplo,dc
=com
A opo rootpw abriga a senha
do administrador LDAP. O padro
secret em texto puro, mas, por
motivos bvios, no deve ser utili-
zado. Para gerar um hash de senha,
utilize o comando slappasswd -h
{FUNO}. Para utilizar SSHA, dessa
forma, o comando seria slappasswd
-h {SSHA}. Coloque o hash gerado
no arquivo slapd.conf, com uma
linha semelhante a:
rootpw {SSHA}oH1DcRjF6TNgsUeHh52
ekQVl+AHaF1IP
directory indica o diretrio onde
os arquivos da base LDAP sero gra-
vados e administrados pelo banco
de dados:
68
http://www.linuxmagazine.com.br
SYSADMIN | Samba e LDAP
directory /var/lib/ldap
A diretiva Index informa quais
atributos devem ser utilizados como
ndice para realizar consultas de
forma mais rpida. Alguns ndices
devem ser pesquisados de forma
igualitria (eq), na qual somente
interessa a entrada registrada igual
ao contedo pesquisado. Os de-
mais ndices so pesquisados por
segmento de seu texto (subinitial).
As linhas abaixo provavelmente j
estaro inseridas no arquivo de con-
figurao, porm preciso notar
o uso do atributo sambaSID. Caso
ele j no venha em seu arquivo,
deve ser adicionado.
index objectClass,uid,uidNumber,
gidNumber,memberuid,sambaSID eq
index cn,mail,surname,givenname
eq,subinitial
Ao nal, criamos as listas de con-
trole de acesso (ACLs), indicando
quais atributos podem ser acessados,
e de que forma:
access to attrs=userPassword,sam
baLMPassword,sambaNTPassword
by anonymous auth
by self write
by * none
Esse exemplo de ACL indica
que os atributos referentes senha
(userPassword para senhas Unix, sam-
baLMPassword e sambaNTPassword para
senhas Windows) podem ser aces-
sados por annimos para que pos-
sam se autenticar. Esses atributos
de cada entrada conhecida como
registro em bancos de dados rela-
cionais podem ser alterados pelo
dono da entrada na base LDAP. Os
outros usurios no podem sequer
l-los anal, so atributos que ar-
mazenam a senha. Quanto aos ou-
tros atributos, todos podem l-los, e
o administrador LDAP tem direito
de escrita nos mesmos.
access to *
by dn=cn=Manager,dc=exe
mplo,dc=com write
by * read
A congurao bsica do servidor
LDAP para integrao com o Sam-
ba j est pronta, e podemos agora
salvar o arquivo.
ldap.conf
O arquivo ldap.conf requer basica-
mente duas diretivas. Enquanto base
indica a base LDAP, host informa o
nome do servidor LDAP:
base dc=exemplo,dc=com
host localhost
A nalidade do arquivo ldap.conf
fazer com que aplicativos que necessitem
acessar o servidor LDAP saibam como
faz-lo. Sem ele, impossvel saber em
qual mquina da rede se encontra essa
base, ou qual a raiz de sua estrutura.
Exemplo 2: arquivo /etc/samba/smb.conf
01 [global]
02 netbios name = pdc
03 workgroup = dominio_exemplo
04 # Base LDAP na qual o Samba deve realizar a autenticacao.
05 passdb backend = ldapsam:ldap://127.0.0.1
06 # DN do Administrador LDAP (Manager, no caso)
07 ldap admin dn = cn=Manager,dc=exemplo,dc=com
08 # DN da base LDAP
09 ldap suffix = dc=exemplo,dc=com
10 # ou= o ramo da estrutura LDAP destinada mquinas. O Samba presume que esse ramo fica abaixo da base,
11 # ou seja, ou=Hosts,dc=exemplo,dc=com
12 ldap machine suffix = ou=Hosts
13 # Ramo de usurios, semelhante a ldap machine suffix, mas para usurios
14 ldap user suffix = ou=Pessoas
15 # Ramo de grupos, semelhante a ldap machine suffix, porm para grupos.
16 ldap group suffix = ou=Grupos
17 # A linha a seguir s necessria se a entrada hosts apontar para ldap em /etc/nsswitch.conf.
18 add machine script = /usr/sbin/adduser -n -r -g machines -c Maquinas Samba -d /dev/null -s /bin/false %u
19 # Para mapear nmero de identificao de usurios e grupos:
20 idmap uid = 16777216-33554431
21 idmap gid = 16777216-33554431
22 wins support = yes
23 # Quando o usurio alterar a senha, tanto os atributos sambaNTPassword quanto sambaLMPassword e userPassword
24 # sero alterados, gerando uma sincronizao de senhas em todos os sistemas (Windows, Samba e Unix).
25 ldap passwd sync = yes
26 # Utilizar SSL?
27 ldap ssl = off
28 # Quando o usurio for removido do Samba, deve tambm ser removido do LDAP?
29 ldap delete dn = no
69
| SYSADMIN Samba e LDAP
Linux Magazine #32 | Julho de 2007
Uma ferramenta que ser apresentada
adiante, ldapsearch, realiza consultas
base LDAP, lendo o arquivo ldap.conf
para obter essas informaes.
Samba
Podemos agora iniciar a congurao
do samba. Os pacotes necessrios so
libsmbclient, samba-common, samba-
client e samba-server. A verso dos
pacotes do Samba utilizados para
este artigo foi a 3.0.20-3. O exemplo
2 exibe o arquivo smb.conf, no qual
preciso inserir algumas novas di-
retivas referentes integrao do
samba ao LDAP. Apenas essas dire-
tivas so explicadas nos comentrios,
visto que o foco deste artigo no a
congurao do samba como PDC
(controlador de domnio primrio),
e sim sua integrao ao LDAP.
Feito isso, a prxima etapa criar
a estrutura inicial no banco Berkeley.
Para isso, deve-se criar um arquivo
no formato LDIF (LDAP Data In-
terchange Format). A sintaxe correta
desse arquivo mostrada no exemplo
1, e deve ser adaptada de acordo com
a raiz e o domnio usados.
Aps a adaptao, carregue o ar-
quivo LDIF com o comando:
# slapadd -v < /etc/openldap/
base.ldif
O prximo passo iniciar o ser-
vidor LDAP e indicar ao Samba a
senha de seu administrador. Note
que a senha realmente precisa ser
informada na linha de comando.
Em seguida, deve-se iniciar o ser-
vidor Samba e conferir o SID, um
nmero de identicao do dom-
nio, necessrio na congurao do
smbldap-tools e tambm para regis-
trar esse SID na base LDAP:
# service ldap start; smbpasswd
-w senha_secreta
# service smb start; net
getlocalSID dominio_exemplo
Exemplo 3: arquivo smbldap.conf (trecho)
01 SID=S-1-5-21-421037436-1646108894-402719166
02 # Domnio netbios
03 sambaDomain=dominio_exemplo
04 # Servidor LDAP
05 masterLDAP=127.0.0.1
06 # Porta do LDAP
07 masterPort=389
08 # Utilizar SSL?
09 ldapTLS=0
10 # Base/raiz LDAP
11 suffix=dc=exemplo,dc=com
12 # Qual unidade deve ficar logo acima dos usurios?
13 usersdn=ou=Pessoas,${suffix}
14 # Ramo para Hosts
15 computersdn=ou=Hosts,${suffix}
16 # Ramo para Grupos
17 groupsdn=ou=Grupos,${suffix}
18 # Ramo para o mapeamento dos nmeros Unix e Windows
19 idmapdn=ou=Idmap,${suffix}
20 # Onde armazenar a prxima ID
21 sambaUnixIdPooldn=sambaDomainName=dominio_exemplo,${suffix}
22 # Shell do usurio
23 userLoginShell=/bin/bash
24 # Home do usurio
25 userHome=/home/%U
26 # Permisses para criao do home do usurio
27 userHomeDirectoryMode=700
28 # Descrio do usurio
29 userGecos=Usuario do Sistema
30 # GID do usurio. 513 significa Domain Users
31 defaultUserGid=513
32 # GID do computador
33 defaultComputerGid=515
34 # Diretrio com os arquivos a serem copiados para o home do
usurio
35 skeletonDir=/etc/skel
36 # Validade (em dias) para a senha usurio
37 defaultMaxPasswordAge=60
38 # Home do usurio em mquinas Windows98
39 userSmbHome=\\pdc\%U
40 # Localizao do perfil remoto
41 userProfile=\\pdc\profiles\%U
42 # Unidade mapeada para o home do usurio (Windows XP, 2000 e 2003)
43 userHomeDrive=H:
Figura 2 O canto esquerdo da tela do
PhpLDAPadmin mostra as estruturas
armazenadas na base de dados LDAP.
70
http://www.linuxmagazine.com.br
SYSADMIN | Samba e LDAP
Smbldap-Tools
A Integrao entre o Samba e o LDAP
j est feita. Porm, para realizar o
cadastramento de novos dados, seria
necessrio criar um arquivo LDIF
com todos os atributos necessrios e
desejveis tanto atributos do sistema
quanto do Samba , o que no deixa
de ser uma tarefa rdua. Para torn-la
mais fcil, a IDEALX[3] desenvolveu
as ferramentas smbldap-tools. Elas fa-
cilitam a criao das unidades orga-
nizacionais necessrias, assim como
a insero de dados criao de usu-
rios j com os atributos referentes
ao Samba, por exemplo e tambm
permite o gerenciamento de uma for-
ma simplicada, como a alterao e
remoo de usurios e grupos.
Com uma instalao a partir de um
pacote RPM ou DEB, o diretrio /etc/
smbldap-tools/ ser criado (recomenda-se
a verso 0.8 ou acima). Dos dois arquivos
que precisamos alterar, primeiro vamos
congurar o smbldap_bind.conf.
Neste arquivo, devemos informar os
administradores e senhas dos mesmos
para os servidores LDAP, para que, ento,
a ferramenta possa realizar a conexo
ao servidor LDAP com permisso de
escrita. Como em nossa congurao
de exemplo no temos um servidor
LDAP escravo, podemos apagar as li-
nhas referentes a slave, e nosso arquivo
deve car semelhante a:
masterDN=cn=Manager,dc=exemplo,
dc=com
masterPw=password
Em seguida, edite o arquivo /etc/sm-
bldap-tools/smbldap.conf, indicando ao
smbldap-tools algumas informaes que
essa ferramenta deve conhecer, alm
das conguraes a serem estabeleci-
das relativas ao domnio, ao LDAP e ao
Samba. O exemplo 3 mostra apenas as
diretivas que devem ser alteradas para
uma congurao adequada.
Neste momento, as ferramentas
includas no pacote smbldap-tools, es-
critas em Perl, j esto conguradas e
j podem ser utilizadas. Para criar toda
a estrutura necessria, como unidades
organizacionais referentes a grupos,
usurios e mquinas, e tambm as
informaes necessrias ao Samba,
utilizaremos a ferramenta smbldap-
populate. Porm, importante, antes
de execut-la, vericar se o arquivo
/usr/sbin/smbldap-populate contm a
seguinte linha descomentada, que faz
referncia ao atributo que ir armaze-
nar o prximo UID livre para a criao
de um novo usurio ou grupo:
$config{sambaUnixIdPooldn}=samb
aDomainName=$domain,$config{suff
ix};
Aps executar o script smbldap-popu-
late, a sada mostrada deve ser seme-
lhante ao contedo do exemplo 4.
Atravs do comando ldapsearch,
utilizado para consultar a base LDAP,
possvel perceber que vrios ramos
(unidades organizacionais) foram cadas-
trados, bem como as contas dos usurios
root e nobody. O exemplo 5 procura no
LDAP a entrada que possui o atributo uid
(utilizado como login) com valor root
e mostra seus outros atributos e valores.
Essa pesquisa feita conectando-se ao
servidor como o usurio administrador
LDAP, e, por esse motivo, os atributos
de senha (userPassword, LMPassword e
NTPassword) so exibidos.
Antes de tentar ingressar no domnio
com um cliente Windows, verique se
o prprio servidor consegue faz-lo:
# net rpc join -U root
Password:
Joined domain DOMINIO_EXEMPLO
Se a sada do comando for seme-
lhante a essa, ento a mquina ingres-
sou no domnio DOMINIO_EXEM-
PLO. Para ingressar em um domnio
NetBIOS, necessrio que a mquina
possua uma conta no PDC. verda-
de que no criamos uma conta para
a mquina chamada pdc, mas inseri-
mos no arquivo smb.conf a diretiva add
machine script, indicando o comando
a ser utilizado pelo Samba para cadas-
trar automaticamente uma mquina
caso esta ainda no tenha uma conta.
O comando adduser (ou useradd) uti-
lizado para criar no sistema mais es-
Exemplo 4: Sada do script smbldap-populate
01 Populating LDAP directory for domain dominio_exemplo (S-1-5-21-421037436-
1646108894-402719166)
02 (using builtin directory structure)
03 entry dc=exemplo,dc=com already exist.
04 adding new entry: ou=Pessoas,dc=exemplo,dc=com
05 adding new entry: ou=Grupos,dc=exemplo,dc=com
06 adding new entry: ou=Hosts,dc=exemplo,dc=com
07 adding new entry: ou=Idmap,dc=exemplo,dc=com
08 adding new entry: uid=root,ou=Pessoas,dc=exemplo,dc=com
09 adding new entry: uid=nobody,ou=Pessoas,dc=exemplo,dc=com
10 adding new entry: cn=Domain Admins,ou=Grupos,dc=exemplo,dc=com
11 adding new entry: cn=Domain Users,ou=Grupos,dc=exemplo,dc=com
12 adding new entry: cn=Domain Guests,ou=Grupos,dc=exemplo,dc=com
13 adding new entry: cn=Domain Computers,ou=Grupos,dc=exemplo,dc=com
14 adding new entry: cn=Administrators,ou=Grupos,dc=exemplo,dc=com
15 adding new entry: cn=Account Operators,ou=Grupos,dc=exemplo,dc=com
16 adding new entry: cn=Print Operators,ou=Grupos,dc=exemplo,dc=com
17 adding new entry: cn=Backup Operators,ou=Grupos,dc=exemplo,dc=com
18 adding new entry: cn=Replicators,ou=Grupos,dc=exemplo,dc=com
19 adding new entry: sambaDomainName=exemplo,dc=exemplo,dc=com
20 entry sambaDomainName=dominio_exemplo,dc=exemplo,dc=com already exist.
Updating it...
21 Please provide a password for the domain root:
22 Changing password for root
23 New password :
24 Retype new password :
71
| SYSADMIN Samba e LDAP
Linux Magazine #32 | Julho de 2007
pecicamente, no arquivo /etc/passwd
o novo usurio, enquanto o LDAP j
pode ser tratado pelo prprio Samba,
sem programas externos.
Visto que a estrutura j est criada,
daqui para a frente basta utilizar as
ferramentas do smbldap-tools para
criar, remover e alterar usurios e
grupos. Antes de ir a um cliente Win-
dows para ingressar no domnio, crie
no servidor Samba um usurio:
# smbldap-useradd -a usuario1
# smbldap-passwd usuario1
Changing password for usuario1
New password :
Retype new password :
A opo -a faz com que a entrada cria-
da para usuario1 no possua somente
atributos referentes conta de sistema
Linux (como a shell do usurio e seu
diretrio home), mas tambm atributos
referentes a um cliente Samba (como
unidade mapeada para o home e lo-
calizao do perl remoto).
Feito isso, para ingressar no domnio,
basta congurar as estaes. Quando
o usurio realizar a autenticao no
domnio e pressionar [Ctrl]+[Alt]+[Del],
sua senha ser atualizada e sincronizada
com o atributo userPassword utilizado
pelos outros aplicativos.
Interface web
Todas as etapas necessrias para a sonha-
da integrao foram realizadas, e a ferra-
menta smbldap-tools j pode ser utiliza-
da. Outros scripts desse pacote tambm
podem e devem ser empregados, como
smbldap-userdel (para remover usurios)
e smbldap-groupadd (para adicionar um
novo grupo), mas a idia principal em
congurar esse conjunto de ferramentas
a utilizao da ferramenta smbldap-
populate, como mostrado, para criar as
unidades organizacionais.
Aos amantes das intuitivas interfa-
ces grcas, ca a sugesto do popular
PhpLDAPadmin. Essa interface web
para administrao da base LDAP
O autor
Diogo Nunes de Oliveira possui certicao
LPIC1, instrutor Mandriva e em seu mestrado
testa a gerncia de redes PLC com Software Livre.
Mais Informaes
[1] OpenLDAP:
http://www.openldap.org
[2] Samba: http://www.samba.org
[3] IDEALX: http://idealx.org
Exemplo 5: O comando ldapsearch
# ldapsearch -x -LLL -D cn=manager,dc=exemplo,dc=com -W uid=root
Enter LDAP Password:
dn: uid=root,ou=Pessoas,dc=exemplo,dc=com
cn: root
sn: root
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: shadowAccount
gidNumber: 0
uid: root
uidNumber: 0
homeDirectory: /home/root
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaHomePath: \\pdc\root
sambaHomeDrive: H:
sambaProfilePath: \\pdc\root\profiles
sambaPrimaryGroupSID: S-1-5-21-421037436-1646108894-402719166-512
sambaSID: S-1-5-21-421037436-1646108894-402719166-500
loginShell: /bin/false
gecos: Netbios Domain Administrator
sambaLMPassword: E52CAC67419A9A224A3B108F3FA6CB6D
sambaAcctFlags: [U]
sambaNTPassword: 8846F7EAEE8FB117AD06BDD830B7586C
sambaPwdLastSet: 1169665940
sambaPwdMustChange: 1174849940
userPassword:: e1NTSEF9QjdDeHdtbG5YZDNSNEpSUkpSWUJabU1OWlIxemJDNDU=
tem fcil instalao e congurao,
e seu uso tambm simples, como
mostra a gura 2.
Concluso
A integrao do OpenLDAP ao Samba
3 requer um certo tempo de dedicao
at se atingir a etapa em que sua admi-
nistrao que simples. Porm, uma vez
alcanado esse ponto, as facilidades trazi-
das ao administrador da rede so visveis,
pois as senhas de todos os servios cam
sincronizadas a todo momento.