Autenticação com OpenLdap e Samba (Personalizado para você)
Sabemos que diversos artigos na internet mostram como configurar um servidor
GNU/Linux para atuar como
PDC com
Samba e
Ldap.
Porém, a maioria deles não oferece uma forma de você entrar com
suas informações e obter os
seus arquivos de configuração. Sempre é necessário alterar alguns campos, variáveis, etc para colocar em funcionamento para
sua empresa.
Isso, às vezes, pode ser um "ponto de falha" para alguns administradores com menos experiência, pois a edição desses arquivos pode
causar erros, dando uma sensação de fracasso das ferramentas, ou mesmo, achar que o
tutorial não funciona corretamente.
Objetivando simplificar ainda mais esse processo de configuração, fiz este
tutorial personalizado para auxiliar no processo de
gerar os arquivos de configuração já prontos para
sua instalação na
sua empresa. Basta que você faça um
copiar e
colar dos arquivos personalizados.
Atenção:
Atenção:
Para que esse
tutorial personalizado funcione corretamente siga os passos abaixo:
1) Formulário de Personalização
Preencha o formulário e clique em
Vá ao passo 2.
2) Variáveis fornecidas no formulário
| Variável |
Valor Escolhido |
| IP Ldap Master |
vazio |
| Netbios Name |
vazio |
| Domínio Samba |
vazio |
| Comentário Samba |
vazio |
| Sufixo Ldap |
vazio |
| Root LDAP |
vazio |
| Password Root Ldap |
vazio |
Root DN |
cn=, |
3) Introdução ao LDAP e Samba
Veja uma breve
Introdução ao Ldap e Samba
4) Instalação dos pacotes
Veja uma simples
instalação dos pacotes.
5) Arquivos de configuração
Especialmente para você [ 38.103.63.61 ] às [ 04 Jul 2009 - 12:42 ]
5.1) Configurando o Servidor OpenLdap
O arquivo principal de configuração do servidor LDAP é o /etc/openldap/slapd.conf, mostrado abaixo.
## Modificação: Jarbas - 18-07-2005
## Baseado na documentação do IDEALX.ORG
# ===== Bibliotecas SCHEMA que o LDAP irá utilizar =====
include /usr/share/openldap/schema/core.schema
include /usr/share/openldap/schema/cosine.schema
include /usr/share/openldap/schema/inetorgperson.schema
include /usr/share/openldap/schema/nis.schema
include /usr/share/openldap/schema/samba.schema
schemacheck on
# ===== Habilita a versão 2 do protocolo LDAP =====
# É necessário para algumas versões antigas do mozilla poderem acessar o catálogo de endereços ldap
allow bind_v2
# Para permitir conexões criptografadas, criar /etc/ssl/openldap/ldap.pem
# através do /usr/share/openldap/gencert.sh
TLSRandFile /dev/random
TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCertificateFile /etc/ssl/openldap/ldap.pem
TLSCertificateKeyFile /etc/ssl/openldap/ldap.pem
#TLSCACertificatePath /etc/ssl/openldap/
#TLSCACertificateFile /etc/ssl/cacert.pem
TLSCACertificateFile /etc/ssl/openldap/ldap.pem
#TLSVerifyClient never # ([never]|allow|try|demand)
# ===== ACLs - Lista de Controle de Acesso =====
# Usuários autenticados podem trocar suas senhas
access to attrs=sambaLMPassword,sambaNTPassword,userPassword,sambaPasswordHistory,sambaPwdLastSet
by self write
by anonymous auth
by * none
# Todos outros atributos são lidos por todos
access to *
by * read
# ===== Estrutura da Base =====
database ldbm
suffix ""
rootdn "cn=,"
# Senha criptografada. Deve ser gerada através do comando abaixo:
#
# [root@jarbelix ~]# slappasswd -h {SSHA} -s
# {SSHA}7eLKstWsAMLJ9D03vHS9NOtVzjyiCv4+
#
# A geração automática dessa senha não foi possível de ser preparada automaticamente
# Substitua os XXXXXXXXXX pelo resultado do comando acima
rootpw {SSHA}XXXXXXXXXX
# O diretório da base de dados que DEVE existir antes de rodar o slapd e DEVE
# somente ser acessível às ferramentas slapd. Modo 700 é recomendado.
directory /var/lib/ldap
# ===== Ajustes para melhorar performance =====
# Lastmod off
lastmod off
# ===== Habilita a geracao de log's =====
# Quando em producao colocar 0 se nao precisar de log
loglevel 256
# ===== Estruturas de Índices =====
index objectClass,uidNumber,gidNumber eq
index cn,sn,uid,displayName pres,sub,eq
index memberUID,mail,givenname eq,subinitial
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq
#===================================
# Implementar o "BDC" do LDAP
#
# No ldap: PDC=MASTER e BDC=SLAVEs
#===================================
# Configuração para Replicar Ldap
# Se este servidor é um Slave descomente as linhas abaixo
#========================================================
#updatedn "cn=,"
#updateref "ldaps://"
# Se este servidor é um Master desomente as linhas abaixo
# e coloque os IP corretos dos slaves
#========================================================
# Diretório onde estão os LOGs das replicas
#replogfile /var/log/ldap/replog
#replica uri=ldaps://ip-do-ldap-slave-1:636
# binddn="cn=,"
# bindmethod=simple
# credentials=""
#
#replica uri=ldaps://ip-do-ldap-slave-2:636
# binddn="cn=,"
# bindmethod=simple
# credentials=""
#
# ...
#
#replica uri=ldaps://ip-do-ldap-slave-n:636
# binddn="cn=,"
# bindmethod=simple
# credentials=""
5.1.1) Protegendo o LDAP
É melhor que os dados do LDAP que circulem pela rede sejam criptografados para impedir que
sniffers tenham acesso a eles.
Se formos utilizar TLS com certificados auto-assinados apenas três campos no arquivo
/etc/openldap/slapd.conf são responsáveis pela certificação:
TLSCACertificateFile,
TLSCertificateFile e
TLSCertificateKeyFile. Note que nesse arquivo temos o os três campos apontam para o mesmo arquivo
/etc/ssl/openldap/ldap.pem que foi gerado automaticamente quando instalamos o pacote
openldap-servers.
Vamos agora gerar nosso próprio certificado através do comando abaixo:
[root@jarbelix ~]# /usr/share/openldap/gencert.sh
----------------------------------------------------------------------
Create self-signed test certificate
Christian Zoffoli
Version 0.2 - 20010501
______________________________________________________________________
Will create ldap.pem in /root
Generating Certificate
______________________________________________________________________
Generating a 1024 bit RSA private key
..........++++++
.++++++
writing new private key to 'ldap.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
1. Country Name (2 letter code) [US]:BR
2. State or Province Name (full name) []:Autoridade Certificadora Regional Goias
3. Locality Name (eg, city) []:Goiania
4. Organization Name (eg, company) [LDAP Server]:Dataprev Regional Goias
5. Organizational Unit Name (eg, section) [For testing purposes only]:Regional Goias
6. Common Name (eg, CA name) [jarbelix.prevnet]: <=== DEVE ser o nome do HOST (# uname -n)
7. Email Address (eg, name@FQDN) []:jarbas.junior@gmail.com
Certificate creation done!
Depois de gerado nosso certificado digital devemos mover o arquivo
ldap.pem para o local informado em nosso
/etc/openldap/slapd.conf, ou seja,
[root@jarbelix ~]# mv ldap.pem /etc/ssl/openldap/ldap.pem
5.1.2) Testando o serviço LDAP
Para testar nosso ldap vamos primeiramente
startar nosso servidor.
[root@jarbelix ~]# service ldap start
Iniciando slapd (ldap + ldaps): [ OK ]
Depois de startado o servidor ldap, você pode testá-lo com a seguinte consulta:
[root@jarbelix ldap]# ldapsearch -x -b '' -s base "(ObjectClass=*)"
# extended LDIF
#
# LDAPv3
# base <> with scope base
# filter: (ObjectClass=*)
# requesting: ALL
#
#
dn:
objectClass: top
objectClass: OpenLDAProotDSE
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Se você ver algo semelhante ao mostrado acima, ldap está instalado e funcionando corretamente. Se não, então volte e tenha certeza que você não cometeu algum erro.
Bom, agora temos o servidor LDAP
rodando mas não temos nada cadastrado (ainda

). Para termos certeza que o serviço ldap estará sendo iniciado a cada boot, faça:
[root@jarbelix ~]# chkconfig ldap on
5.2) Configurando o Linux para usar o LDAP
Atenção:
Tanto o servidor, quanto outras máquinas Linux que irão utilizar o LDAP devem ter seus arquivos de configuração principal, NSS e PAM conforme abaixo.
Porém no Mandriva existe um utilitário
drakauth de linha de comando que facilita (e muito) a configuração das estações Linux que irão se autenticar no servidor LDAP, pois apenas é necessário informar que se deseja autenticar via LDAP, o IP do servidor LDAP e o
Sufixo Ldap.
As configurações abaixo dizem respeito aos clientes que irão utilizar o servidor ldap para se autenticarem.
Atenção:
No servidor devemos criar o arquivo
/etc/ldap.secret contendo a
Password Root DN como texto puro, ou seja, apenas uma linha com "" - sem as aspas é claro!.
Isso facilitará o administrador do LDAP via linha de comando, pois não será necessário informar a senha toda vez que se fizer alguma alteração na base LDAP. Mas tome cuidado com esse arquivo, pois ninguém que estiver logado no servidor poderá lê-lo. Por isso faça um
# chmod 600 /etc/ldap.secret.
5.2.1) Configuração principal
Embora esse servidor já esteja configurado, é necessário configurar a parte cliente dele para que acesse o próprio servidor ldap. Isso é feito no arquivo
/etc/ldap.conf conforme abaixo.
# O acesso ao seu servidor LDAP tem que ser resolvido sem usar LDAP.
# De preferência coloque o IP ou tenha certeza que o DNS resolve o nome.
host 127.0.0.1
# O nome distinto da base de procura.
base
# A identificacao do root do Ldap, ou seja o "Root Password DN"
# A senha deve ser armazenada no arquivo /etc/ldap.secret (mode 600)
rootbinddn cn=,
# Contexto para pesquisa no LDAP (RFC2307bis)
# Nos usaremos ?sub (e nao o default ?one) porque separamos
# sambaAccounts no ou=Computer,
# e usuarios em ou=Usuarios,
nss_base_passwd ?sub
nss_base_shadow ?sub
nss_base_group ou=Grupos,?one
# Opcoes de seguranca
ssl no
pam_password crypt
5.2.2) Configuração do NSS
Necessitamos agora configurar o NSS (Name Service Swith) para usar LDAP através do arquivo
/etc/nsswitch.conf conforme abaixo:
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files nisplus nis dns
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files
netgroup: nisplus
publickey: nisplus
automount: files nisplus
aliases: files nisplus
5.2.3) Configuração do PAM
O PAM (Plugabe Autentication Module) para usar LDAP tem sua configuração através do arquivo
/etc/pam.d/system-auth conforme abaixo:
# Módulo "pam_ldap.so" para conecções pelo ldap
# Isso não afeta se os usuários existem localmente em /etc/passwd
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_succeed_if.so use_uid user ingroup wheel
auth sufficient pam_unix.so likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account sufficient pam_unix.so
# Usar o ldap antes de arquivos locais
account sufficient pam_ldap.so use_first_pass
account required pam_deny.so
password required pam_cracklib.so retry=3 minlen=2 dcredit=0 ucredit=0
password sufficient pam_unix.so nullok use_authtok md5 shadow
# Aceitar o ldap para checar usuário/senha
password sufficient pam_ldap.so
password required pam_deny.so
# Criar diretório local no momento em que o usuário se loga no Desktop
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077
session required pam_limits.so
session required pam_unix.so
5.2.4) Testando tudo até agora
O Teste pode ser feito com a ferramenta
getent da seguinte forma:
[root@jarbelix ~]# getent passwd
[root@jarbelix ~]# getent shadow
[root@jarbelix ~]# getent group
Se você ver o conteúdo igual aos arquivos locais (
/etc/passwd,
/etc/shadow,
/etc/group) é porque não há nenhuma informação extra no ldap, ou seja, o ldap não possui a base de dados migrada.
5.3) Configurando o SERVIDOR samba
A configuração do samba para funcionar integrado com o ldap é talvez a parte mais trabalhosa de ser feita, pois envolve algumas alterações profundas no
/etc/samba/smb.conf. Sem mistérios vamos ao seu conteúdo:
# Parâmetros Globais
[global]
# Dominio, Nome e Descricao
workgroup =
netbios name =
server string =
# Disponibilizar impressora no Linux para Windows
printcap name = cups
load printers = yes
printing = cups
# printcap cache time, so samba will automatically load new cups printers
printcap cache time = 60
# Nao mostrar no servidor o Wizard "Adicionar Impressora"
show add printer wizard = No
# Quais interfaces de rede utilizar
interfaces = lo, eth0
bind interfaces only = Yes
# Nivel de Mensagens
log level = 1
log file = /var/log/samba/%m.log
max log size = 0
debug level = 1
syslog = 0
# Atuar como um PDC
security = user
domain logons = yes
preferred master = yes
domain master = yes
os level = 65
# Tratamento das senhas
encrypt passwords = yes
# Equivalencia de usuarios Windows X Linux
username map = /etc/samba/smbusers
# Evitar o perfil ambulante do Windows NT/XP
logon path =
logon drive =
logon home =
# Script de logon em rede (deve ficar no compartilhamento netlogon - em formato DOS)
logon script = .BAT
# Configuracoes para o LDAP
passdb backend = ldapsam:ldaps://127.0.0.1
ldap passwd sync = yes
ldap delete dn = Yes
ldap admin dn = cn=,
ldap suffix =
ldap machine suffix = ou=Computadores
ldap user suffix = ou=Usuarios
ldap group suffix = ou=Grupos
ldap idmap suffix = sambaDomainName=
idmap backend = ldap:ldaps://127.0.0.1
idmap uid = 10000-20000
idmap gid = 10000-20000
# Permitir que usuarios do grupo "Administradores do Dominio" possam ingressar maquinas
# WinXP/Win2000 ao dominio samba
# to the domain
enable privileges = yes
# Scrips utilizados para Gerenciar Usuários da M$
# adiconar/remover Usuarios
add user script = /usr/sbin/smbldap-useradd -m "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
# adiconar/remover Grupos
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-groupdel "%g"
# Scripts para adiconar/remover Usuarios nos Grupos
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
# Script para definir o grupo primario do usuario
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
# Script par adicionar maquina Win NT/XP ingressar no Dominio
add machine script = /usr/sbin/smbldap-useradd -w "%u"
# Otimizacoes recomendadas em
smb ports = 445 139
name resolve order = wins bcast hosts
utmp = Yes
time server = Yes
template shell = /bin/false
winbind use default domain = no
map acl inherit = Yes
strict locking = Yes
# Como o cliente ira' se comunicar com o servidor
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# Servidor Wins da Rede
# Quando já tiver um servidor Wins na rede
# descomente a linha abaixo e acerte o IP do Wins
# wins server = 10.0.134.223
# Quando ainda não tiver um servidor Wins na rede
# descomente a linha abaixo
wins support = Yes
# Ativar a internacionalizacao: permitir caracteres acentuados pelo Windows
dos charset = CP850
unix charset = ISO8859-1
# Nao tentar fazer um lock nestes arquivos
veto files = /*.eml/*.nws/*.{*}/
veto oplock files = /*.doc/*.xls/*.mdb/
# Tratar os arquivos que comecam com "." como ocultos para maquinas Windows
hidedotfiles = yes
# Simular a Lixeira do Windows
recycle:repository = .lixeira
recycle:keeptree = True
recycle:touch = True
recycle:versions = True
recycle:exclude = *.tmp|*.temp|*.o|*.obj|~$*|*.$$$
recycle:excludedir = /tmp|/temp|/trash
recycle:noversions = .doc|.xls|.ppt|.dbf|.nsx|.idx|.dbt
recycle:maxsize = 0
#=============================
#===== Compartilhamentos =====
#=============================
[netlogon]
comment = Servico de Logon em Rede [ .BAT ]
path = /home/samba/netlogon
browseable = Yes
read only = Yes
[home]
comment = Diretorio Pessoal de Cada Usuario [ U:\ ]
path = /home/usr/%u
browseable = no
writeable = Yes
create mask = 0600
directory mask = 0700
# vfs objects = recycle
[dados]
comment = Sistemas e Dados de Usuarios [ F:\ ]
path = /home/samba/dados
writeable = Yes
force create mode = 0660
force directory mode = 02770
vfs objects = recycle
[temp]
comment = Dados Temporarios [ T:\ ]
path = /home/samba/temp
writeable = Yes
force create mode = 0666
force directory mode = 02777
[printers]
comment = Spool de Impressao SMB
path = /var/spool/samba
browseable = No
guest ok = Yes
writeable = No
printable = Yes
create mode = 0700
use client driver = yes
# This share is used for Windows NT-style point-and-print support.
# To be able to install drivers, you need to be either root, or listed
# in the printer admin parameter above. Note that you also need write access
# to the directory and share definition to be able to upload the drivers.
# For more information on this, please see the Printing Support Section of
# /usr/share/doc/samba-/docs/Samba-HOWTO-Collection.pdf
#
# A special case is using the CUPS Windows Postscript driver, which allows
# all features available via CUPS on the client, by publishing the ppd file
# and the cups driver by using the 'cupsaddsmb' tool. This requires the
# installation of the CUPS driver (http://www.cups.org/windows.php)
# on the server, but doesn't require you to use Windows at all :-).
[print$]
path = /var/lib/samba/printers
browseable = yes
write list = @"Operadores de Impressao" root
guest ok = yes
inherit permissions = yes
Com o samba configurado, agora é hora de levantar o serviço
smb.
Para certificarmos que não há nenhuma informação armazenada no samba devemos fazer:
[root@jarbelix ~]# rm -rf /etc/samba/secrets.tdb /var/log/samba/*
Atenção:
O samba agora necessita da senha definida no
/etc/openldap/slapd.conf. Sem essa senha o samba fica indefinidamente tentando startar e não levanta. Esse procedimento deve ser realizado
apenas uma única vez, pois a senha fica armazenada no arquivo
/etc/samba/secrets.tdb.
O procedimento para definirmos a senha que o samba irá utilizar é:
[root@jarbelix ~]# smbpasswd -w
Setting stored password for "cn=," in secrets.tdb
Agora sim podemos levantar o samba normalmente com:
root@jarbelix ~]# service smb start
Iniciando os serviços SMB: [ OK ]
Iniciando os serviços NMB: [ OK ]
Para certificarmos que o samba está rodando normalmente podemos checar através do seguinte comando:
[root@jarbelix ~]# smbclient -L 127.0.0.1 -U%
Domain=[] OS=[Unix] Server=[Samba 3.0.13]
Sharename Type Comment
--------- ---- -------
netlogon Disk Servico de Logon em Rede [ .BAT ]
dados Disk Sistemas e Dados de Usuarios [ F:\ ]
temp Disk Dados Temporarios [ T:\ ]
print$ Disk
IPC$ IPC IPC Service ()
ADMIN$ IPC IPC Service ()
HP-LaserJet Printer HP LaserJet 4P
HP-GALENO Printer HP DeskJet 680C
Domain=[] OS=[Unix] Server=[Samba 3.0.13]
Server Comment
--------- -------
Workgroup Master
--------- -------
Atenção: Antes de prosseguirmos devemos
preparar o terreno, isto é, criar os diretórios onde os mapeamentos do samba serão feitos. Como fazer isso?
[root@jarbelix ~]# mkdir -p /home/samba/dados /home/samba/netlogon /home/samba/temp
[root@jarbelix ~]# chmod 2770 /home/samba/dados/ /home/samba/temp/
[root@jarbelix ~]# chmod 750 /home/samba/netlogon/
[root@jarbelix ~]# chgrp 513 /home/samba/*
[root@jarbelix ~]# ll /home/samba/
total 12
drwxrws--- 20 root Usuarios do Dominio 4096 Set 2 21:36 dados/
drwxr-x--- 2 root Usuarios do Dominio 4096 Set 2 23:28 netlogon/
drwxrws--- 2 root Usuarios do Dominio 4096 Set 2 23:51 temp/
[root@ServerLinux ~]#
Como o samba está atuando como um PDC devemos ter um
SID utilizado pela Microsoft. Esse SID é o equivalente ao
ID do Unix, porém deve ser único para cada domínio. Como podemos ver nosso SID? Simples. Digite o comando baixo:
[root@jarbelix ~]# net getlocalsid
[2005/07/19 16:03:14, 0] lib/smbldap.c:smbldap_search_suffix(1176)
smbldap_search_suffix: Problem during the LDAP search: (No such object)
SID for domain is: S-1-5-21-2942727800-3465096550-1454047873
O
erro mostrado acima é apenas
informativo pois o ldap ainda está vazio. Isso será sanado quando criarmos as
entidades do domínio dentro do LDAP.
6) Migrando os dados
Certamente a migração dos dados armazenados noutros formatos e/ou plataformas para o LDAP é o que dá mais trabalho. Isso porque normalmente não dispomos de todos os dados numa única máquina. Algumas vezes temos mesmo é uma "salada mista" onde até mesmo a troca de uma senha de usuário é uma tarefa
árdua.
Bom, existem diversos scripts que nos auxiliam na tarefa de migração. Os mais conhecidos são:
- samba-migration - muito referenciado em listas de discussão sobre ldap
- smbldap-tools - IDEALX - mais recente e menos explorado (porém mais limpo)
- outros
Vamos concentrar nossos esforços no
IDEALX por apresentar melhores resultados para uma base LDAP
casada com SAMBA.
6.1) Configurando os scripts IDEALX
Os scripts IDEALX são voltados para o gerenciamento do samba com autenticação pelo ldap, ou seja, uma mão na roda. O pacote é o
smbldap-tools. Basicamente são dois arquivos:
/etc/smbldap-tools/smbldap.conf e
/etc/smbldap-tools/smbldap_bind.conf que devem ser alterados/configurados através da ferramenta abaixo:
[root@jarbelix ~]# /usr/share/doc/smbldap-tools-0.9.1/configure.pl
Uma série de informações devem ser fornecidas corretamente com o objetivo de se criar os arquivos acima corretamente. Para lhe poupar esse trabalho mostro abaixo os arquivos de configuração pre-configurados adequadamente:
Vamos então ao conteúdo do
/etc/smbldap-tools/smbldap.conf
# Coloque aqui seu próprio SID
# para obter este número faça: net getlocalsid
SID="S-1-5-21-3605816189-1598215328-2250501690"
##############################################################################
#
# LDAP Configuration
#
##############################################################################
# Slave LDAP : para melhorar a performance
slaveLDAP="127.0.0.1"
slavePort="389"
# Master LDAP : necessario para operacoes de escrita
masterLDAP=""
masterPort="389"
# Usar TLS para LDAP
# Se "setado" para 1, esta opção irá usar start_tls para conecções
ldapTLS="0"
# How to verify the server's certificate (none, optional or require)
# see "man Net::LDAP" in start_tls section for more details
verify="require"
# CA certificate
# see "man Net::LDAP" in start_tls section for more details
cafile="/etc/smbldap-tools/ca.pem"
# certificate to use to connect to the ldap server
# see "man Net::LDAP" in start_tls section for more details
clientcert="/etc/smbldap-tools/smbldap-tools.pem"
# key certificate to use to connect to the ldap server
# see "man Net::LDAP" in start_tls section for more details
clientkey="/etc/smbldap-tools/smbldap-tools.key"
# Sufixo LDAP
suffix=""
# Onde são armazenados os Usuarios
usersdn="ou=Usuarios,${suffix}"
# Onde estão armazenados os Computadores
computersdn="ou=Computadores,${suffix}"
# Onde estão armazenados os Grupos
groupsdn="ou=Grupos,${suffix}"
# Onde estão armazenados as entradas Idmap (usadas se o samba é um servidor membro do domínio)
idmapdn="ou=Idmap,${suffix}"
# Onde são armazenadas os próximos uidNumber e gidNumber disponíveis
sambaUnixIdPooldn="sambaDomainName=,${suffix}"
# Escopo default utilizado
scope="sub"
# Método de criptografação utilizado pelo Unix (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)
hash_encrypt="SSHA"
# if hash_encrypt is set to CRYPT, you may set a salt format.
# default is "%s", but many systems will generate MD5 hashed
# passwords if you use "$1$%.8s". This parameter is optional!
crypt_salt_format="%s"
##############################################################################
#
# Unix Accounts Configuration
#
##############################################################################
# Login defs
# Default Login Shell
userLoginShell="/bin/bash"
# Home directory
userHome="/home/usr/%U"
# Gecos
userGecos="System User"
# Default User (POSIX and Samba) GID
defaultUserGid="513"
# Default Computer (Samba) GID
defaultComputerGid="515"
# Skel dir
skeletonDir="/etc/skel"
# Tempo de vida, em dias, das senhas dos usuários Windows.
# Comente a linha abaixo se não desejar expirar esta senha
# Cuidado com o valor do atributo sambaPwdMustChange
defaultMaxPasswordAge="99"
##############################################################################
#
# SAMBA Configuration
#
##############################################################################
# The UNC path to home drives location (%U username substitution)
# Ex: \\My-PDC-netbios-name\homes\%U
# Just set it to a null string if you want to use the smb.conf 'logon home'
# directive and/or disable roaming profiles
#userSmbHome="\\PDC-SRV\homes\%U"
userSmbHome=""
# The UNC path to profiles locations (%U username substitution)
# Ex: \\My-PDC-netbios-name\profiles\%U
# Just set it to a null string if you want to use the smb.conf 'logon path'
# directive and/or disable roaming profiles
#userProfile="\\PDC-SRV\profiles\%U"
userProfile=""
# The default Home Drive Letter mapping
# (will be automatically mapped at logon time if home directory exist)
# Ex: H: for H:
userHomeDrive=""
# The default user netlogon script name (%U username substitution)
# if not used, will be automatically username.cmd
# Ex: %U.cmd
# userScript="startup.cmd" # make sure script file is edited under dos
# deixe comentado para utilizar o script de logon do /etc/samba/smb.conf
#userScript=".BAT"
# Domain appended to the users "mail"-attribute
# when smbldap-useradd -M is used
mailDomain=""
##############################################################################
#
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
#
##############################################################################
# Allows not to use smbpasswd (if with_smbpasswd == 0 in smbldap_conf.pm) but
# prefer Crypt::SmbHash library
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
# Allows not to use slappasswd (if with_slappasswd == 0 in smbldap_conf.pm)
# but prefer Crypt:: libraries
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
e depois ao conteúdo do
/etc/smbldap-tools/smbldap_bind.conf
############################
# Credential Configuration #
############################
# Nota: você pode especificar duas configuracoes diferentes se voce
# utiliza um ldap MASTER para escrita e outro ldap SLAVE para leitura
# Por default, iremos utilizar o mesmo DN
slaveDN="cn=,"
slavePw=""
masterDN="cn=,"
masterPw=""
6.2) Adicionando estrutura ao LDAP
A estrutura necessária para nosso LDAP é conseguida através do
smbldap-populate.
Por default os
usuários/grupos criados tem nomes em inglês como: Domain Admins, Print Operators. Mas como estamos no Brasil podemos alterar para o pt_BR através do script simplista que fiz.
#!/bin/bash
#
# Objetivo: trocar as informações do smbldap-populate do ingles para o portugues brasileiro
#
# Autor: Jarbas, 14-04-2005
# Licença: GPL :)
if [ $# -ne 1 ]; then
echo "Sintaxe errada"
echo "O correto eh $0 CAMINHO-COMPLETO-DO-smbldap-populate a ser traduzido"
exit 1
fi
sed -e "s/Administrators/Administradores/g" \
-e "s/Domain Guest/Convidados do Dominio/g" \
-e "s/Domain Admins/Administradores do Dominio/g" \
-e "s/Domain Users/Usuarios do Dominio/g" \
-e "s/Domain Computers/Computadores do Dominio/g" \
-e "s/Print Operators/Operadores de Impressao/g" \
-e "s/Backup Operators/Operadores de Backup/g" \
-e "s/Account Operators/Operadores de Contas/g" \
-e "s/Replicators/Duplicadores/g" $1 > $1.pt_BR
chmod +x $1.pt_BR
echo "Arquivo $1 traduzido em $1.pt_BR"
Caso deseje ter os usuários/grupos em
pt_BR Execute este script conforme abaixo:
[root@jarbelix ~]# type smbldap-populate
smbldap-populate is /usr/sbin/smbldap-populate
[root@jarbelix ~]# ./smbldap-populate-pt_BR.sh /usr/sbin/smbldap-populate
Arquivo /usr/sbin/smbldap-populate traduzido em /usr/sbin/smbldap-populate.pt_BR
Agora execute o
/usr/sbin/smbldap-populate.pt_BR para criarmos a estrutura base do ldap+samba com a estrutura em português Brasileiro.
Atenção:
- O parâmetro abaixo informado após o
-a permitirá que você utilize outro usuário ao invés do root para ser o administrador do ldap.
- Algumas pessoas me relataram que não conseguiam concluir a instalação utilizando o
Manager ou Admin como administrador.
- Creio que esse parâmetro irá resolver o problema.
[root@jarbelix ~]# /usr/sbin/smbldap-populate.pt_BR -a
Populating LDAP directory for domain (S-1-5-21-2942727800-3465096550-1454047873)
(using builtin directory structure)
adding new entry:
adding new entry: ou=Usuarios,
adding new entry: ou=Grupos,
adding new entry: ou=Computadores,
adding new entry: ou=Idmap,
adding new entry: uid=,ou=Usuarios,
adding new entry: uid=nobody,ou=Usuarios,
adding new entry: cn=Administradores do Dominio,ou=Grupos,
adding new entry: cn=Usuarios do Dominio,ou=Grupos,
adding new entry: cn=Convidados do Dominios,ou=Grupos,
adding new entry: cn=Computadores do Dominio,ou=Grupos,
adding new entry: cn=Administradores,ou=Grupos,dc=go,
adding new entry: cn=Operadores de Contas,ou=Grupos,
adding new entry: cn=Operadores de Impressao,ou=Grupos,
adding new entry: cn=Operadores de Backup,ou=Grupos,
adding new entry: cn=Duplicadores,ou=Grupos,
adding new entry: sambaDomainName=,
Please provide a password for the domain :
Changing password for
New password :
Retype new password :
Atenção:
A senha acima é a senha que será utilizada para ingressar máquinas no domínio.
Portanto
NAO é a mesma senha do
Password Root Ldap ().
Coloque uma outra para que o usuário possa ingressar máquinas no Domínio, quando o
Windows XP/2k/2k3 solicitar o
usuário/senha.
6.2.1) Gerando um DUMP da base LDAP
Um bom teste para verificar se está tudo funcionando até agora é gerar um dump da base de dados LDAP, ou seja, exportar todo o conteúdo previamente armazenado no LDAP+SAMBA através do comando abaixo:
[root@jarbelix ~]# ldapsearch -x -b "" "(ObjectClass=*)"
# extended LDIF
#
# LDAPv3
# base with scope sub
# filter: (ObjectClass=*)
# requesting: ALL
#
dn:
objectClass: dcObject
objectClass: organization
...
... (outras entrada foram omitidas)
...
# search result
search: 2
result: 0 Success
# numResponses: 18
# numEntries: 17
Através do utilitário
slapcat do pacote
openldap-servers que é muito utilizado para fazer um dump rápido da base ldap MASTER e exportar para um ldap SLAVE.
[root@lxgod001 ~]# slapcat > slapcat.ldbm.ldif
[root@lxgod001 ~]# ll slapcat.ldbm.ldif
-rw-r--r-- 1 root root 1570213 Ago 15 10:42 slapcat.ldbm.ldif
Já o utilitário
pdbedit que tem uma formato de saída mais
humana:
[root@lxgod001 ~]# pdbedit -v -u d323209
Unix username: d323209
NT username: d323209
Account Flags: [U ]
User SID: S-1-5-21-4134352437-1265944048-1494428847-4020
Primary Group SID: S-1-5-21-4134352437-1265944048-1494428847-513
Full Name: Jarbas Peixoto Júnior
Home Directory:
HomeDir Drive:
Logon Script: PSGOD001.BAT
Profile Path:
Domain: PREV-GO
Account desc: JARBAO
Workstations:
Munged dial:
Logon time: 0
Logoff time: Tue, 19 Jan 2038 01:14:07 GMT
Kickoff time: Tue, 19 Jan 2038 01:14:07 GMT
Password last set: Thu, 11 Aug 2005 16:12:38 GMT
Password can change: Tue, 09 Aug 2005 13:59:40 GMT
Password must change: Fri, 18 Nov 2005 17:12:38 GMT
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Outro teste interessante neste momento é a ferramenta
getent da seguinte forma:
[root@jarbelix ~]# getent passwd
root:x:0:0:root:/root:/bin/bash
...
... (outros usuários foram omitidos)
...
:x:0:0:Netbios Domain Administrator:/home/usr/root:/bin/false
nobody:x:999:514:nobody:/dev/null:/bin/false
Note que agora há dois usuários novos que foram cadastrados via ldap (
= e =nobody ). Note que estes usuários já existiam localmente, mas os últimos da lista foram cadastrados via
smbldap-populate.
6.2.2) Criação e manutenção de usuários/grupos
O gerenciamento gráfico para manutenção de usuários/grupos pode ser realizada com o auxílio da ferramenta
phpldapadmin (
http://phpldapadmin.sourceforge.net/) que pode ser instalada no servidor ldap, mas isso não é o alvo desse tutorial (apesar de ser bem simples sua instalação).
Mas se tivermos uma
grande quantidade de usuários/grupos a serem migrados essa ferramenta (
phpldapadmin) irá requerer que nós migremos um-a-um, ou seja, um verdadeiro pesadelo para o administrador da rede. Para essas necessidades entram os scrips disponibibilizados pelo pacote
smbldap-tools. Onde estão eles?
[root@jarbelix ~]# ls /usr/sbin/smbldap*
/usr/sbin/smbldap-groupadd* /usr/sbin/smbldap-groupshow* /usr/sbin/smbldap-populate.pt_BR* /usr/sbin/smbldap-userinfo*
/usr/sbin/smbldap-groupdel* /usr/sbin/smbldap-passwd* /usr/sbin/smbldap-useradd* /usr/sbin/smbldap-usermod*
/usr/sbin/smbldap-groupmod* /usr/sbin/smbldap-populate* /usr/sbin/smbldap-userdel* /usr/sbin/smbldap-usershow*
Informações adicionais sobre estes scripts podem ser obtidas em
http://www.idealx.com ou com o parâmetro
--help de cada um deles. Ex.:
[root@jarbelix ~]# smbldap-passwd --help
(c) Jerome Tournier - IDEALX 2004 (http://www.idealx.com)- Licensed under the GPL
Usage: /usr/sbin/smbldap-passwd [username]
-u update only unix password (userPasswd)
-?, --help show this help message
6.2.2.1) Criando grupos
Suponha que tenhamos apenas dois grupos locais:
DATAPREV e
INSS. Como cadastrar estes grupos no LDAP? Simples:
[root@jarbelix ~]# smbldap-groupadd -a DATAPREV
[root@jarbelix ~]# smbldap-groupadd -a INSS
Para conferir os grupos criados:
[root@jarbelix ~]# getent group
root:x:0:
...
... (outros grupos foram omitidos)
...
Administradores do Dominio:x:512:
Usuarios do Dominio:x:513:linux,sambix
Convidados do Dominios:x:514:
Computadores do Dominio:x:515:
Administradores:x:544:
Operadores de Contas:x:548:
Operadores de Impressao:x:550:
Operadores de Backup:x:551:
Duplicadores:x:552:
DATAPREV:x:1000:
INSS:x:1001:
6.2.2.1) Criando usuários
Atenção: Antes de prosseguirmos devemos
preparar o terreno, isto é, criar o diretório onde os usuários terão seus HOME. Normalmente as distros colocam todos os usuários no
/home. Eu acho melhor separar um diretório
/usr dentro do
/home para eles. Como fazer isso?
[root@jarbelix ~]# mkdir -p /home/usr
Os usuários são divididos em três categoria para o LDAP:
- Linux - são os usuários que poderão logar no servidor linux através da console ou ssh - não é desejável que usuários Windows (Samba) estejam nesta categoria.
- Samba - são os usuários que irão logar no Domínio administrado pelo Samba+Ldap. Praticamente todos os usuários estão nesta categoria.
- Máquinas - são as máquinas que ingressaram no domínio, seja manualmente ou automaticamente através do Windows 2000 ou XP - é claro que pedindo o usuário e senha com permissões para ingressar (neste material o é o único capaz disso).
Para criarmos o usuário
Linux linux:
[root@jarbelix ~]# smbldap-useradd -m -c "Teste Linux" linux
[root@jarbelix ~]# smbldap-passwd linux
Changing password for linux
New password :
Retype new password :
Para criarmos o usuário
Samba sambix:
[root@jarbelix ~]# smbldap-useradd -a -m -c "Teste Samba" sambix
[root@jarbelix ~]# smbldap-passwd sambix
Changing password for sambix
New password :
Retype new password :
Para criarmos o usuário
Máquina winlinux:
[root@jarbelix ~]# smbldap-useradd -w winlinux
Para conferir os usuários criados:
[root@jarbelix ~]# getent passwd
root:x:0:0:root:/root:/bin/bash
...
... (outros usuários foram omitidos)
...
:x:0:0:Netbios Domain Administrator:/home/usr/root:/bin/false
nobody:x:999:514:nobody:/dev/null:/bin/false
linux:x:1000:513:Teste Linux:/home/usr/linux:/bin/bash
sambix:x:1001:513:Teste Samba:/home/usr/sambix:/bin/bash
winlinux$:x:1002:515:Computer:/dev/null:/bin/false
Note que os grupos dos usuários
Linux e
Samba (do LDAP) pertencem por default ao grupo 513 (Usuários do Domínio). A diferença é que somente o usuário Linux podem efetuar login no servidor. Isso também significa que usuários Linux podem acessar também o Samba via Windows normalmente.
7) Mapeamentos automáticos
Os Windows 9X/NT/XP/2K3 podem mapear algumas unidades de rede automaticamente após um login num
Domínio Windows. O Samba implementa isso perfeitamente através do compartilhamento
netlogon. Para funcionar basta que tenhamos no diretório
/home/samba/netlogon o arquivo
.BAT em formato
DOS, isto é, com os caracteres de controle CR+LF utilizados pelo Windows.
Sem mistérios vamos ao seu conteúdo:
@echo off
rem Logon script Default - by Jarbas, 3501-2248 - Dataprev-GO
REM Coloque na linha abaixo o nome dado ao servidor
REM definido no smb.conf pelo parametro "netbios name"
set LOGONSERVER=\
echo ========================================================
echo Executando o script de login do Servidor %LOGONSERVER%
echo Por favor, aguarde...
echo =============================
echo ...
echo Efetuando os Mapeamentos F: U: e T:
if %OS%.==Windows_NT. goto WinNT
:Win95
:Win98
NET USE F: %LOGONSERVER%\DADOS
NET USE U: %LOGONSERVER%\HOME
NET USE T: %LOGONSERVER%\TEMP
goto Fim_Mapeamento
:WinNT
REM Se for um Windows_NT fazendo login devo desmapear o drive mapeado ao fazer logoff
NET USE F: %LOGONSERVER%\DADOS /PERSISTENT:NO
NET USE U: %LOGONSERVER%\HOME /PERSISTENT:NO
NET USE T: %LOGONSERVER%\TEMP /PERSISTENT:NO
:Fim_Mapeamento
echo Atualizando a hora local com o Relogio do Servidor
NET TIME %LOGONSERVER% /SET /YES
:Fim_Geral
REM == FIM DO CODIGO ==
Para ter certeza que esse arquivo está no formato
DOS instale o unix2dos:
[root@jarbelix ~]# urpmi unix2dos
ftp://mirror/pub/linux/Mandrakelinux/devel/cooker/i586/media/contrib/unix2dos-2.2-5mdk.i586.rpm
instalando unix2dos-2.2-5mdk.i586.rpm a partir de /var/cache/urpmi/rpms
Preparando... #############################################
1/1: unix2dos #############################################
[root@jarbelix ~]# unix2dos /home/samba/netlogon/.BAT
unix2dos: converting file .BAT to DOS format ...
Agora é só fazer login no *Domínio * com as máquinas Windows e utilizar os drives F:, T: e U: do
GNU/Linux tranquilamente.
Atenção:
Para aqueles que chegaram até aqui parabéns!
Em caso de algum erro neste tutorial sinta-se à vontade para me mandar as correções, ou mesmo fazê-las
on-line, neste TWiki Site (
http://psl-go.softwarelivre.org).
Quem sou eu? Clique em
JarbasJunior!
8) Referências
Em Português Brasileiro:
- Samba 3.x - http://www.linuxrapido.org/modules.php?name=Sections&op=printpage&artid=86
- Muito sobre Samba - http://www.zago.eti.br/samba/A-menu-samba.html
- Lixeira no Samba - http://www.zago.eti.br/samba/lixeira.txt
- Howto de Samba - http://br.tldp.org/projetos/howto/arquivos/html/Samba-HOWTO/Samba-HOWTO.pt_BR.html
- LDAP - Dicas, listas, materiais em português Brasileiro - http://www.ldap.org.br
- Samba+Ldap+Squid - http://www.ldap.org.br/modules/ldap/files/files/Samba-Ldap-Squid.pdf
- Dicas de operação e manutenção de um servidor OpenLDAP - http://www.dicas-l.unicamp.br/dicas-l/20050831.php
- Dicas SAMBA, Atributos extendidos - http://www.dicas-l.unicamp.br/dicas-l/20050901.php
-
Manual traduzido do smbldap-tools - http://www.servtec.xq.com.br/Arquivos/IDEALX/smbldap-tools.pt_br.html
-
Ótima Monografia sobre LDAP - http://www.ldap.liceu.com.br/index.html
-
Instalação e configuração de um Servidor Linux com File & Print Server Samba e Domain Controller - http://www.softwarelivre.citiap.gov.pt/Projectos/Infra-estrutura/folder.2004-07-23.3835814063/samba_dc
Em Inglês técnico:
- Ldap na Fonte Original - http://www.openldap.org/doc/admin23/index.html
- Samba na Fonte Original - http://us1.samba.org/samba/docs/man/Samba-Guide/
- Ótimo tutorial sobre Idealx - http://samba.idealx.org/smbldap-howto.en.html
- Criptografando o LDAP - http://www.openldap.org/pub/ksoper/OpenLDAP_TLS_howto.html
- Gurus do LDAP - http://ldapguru.com/
- Servidor de Domínio com Samba 3 - http://mandriva.vmlinuz.ca/bin/view/Main/SambaThreeDomainController
-
Samba-3: Windows file and directory ACLs - http://searchopensource.techtarget.com/tip/1,289483,sid39_gci1080966,00.html
Quem usa Debian pode/deve complementar com:
- Dicas de LDAP+Samba - http://www.leoserra.uaivip.com.br/leonix/documentacao/
- Linux LDAP authentication - http://enterprise.linux.com/article.pl?sid=05/09/15/1930256
- LDAPAuthentication - http://wiki.debian.org/?LDAPAuthentication
- LDAP + Samba - http://homex.subnet.at/~max/ldap/#sarge_base-install
- LDAP + Samba - http://wiki.osuosl.org/display/LNX/Openldap+and+Debian+Stable
- Authenticating Linux Clients to Windows Server 2003 - http://ubuntuforums.org/showthread.php?t=63303&highlight=ldap
- Using LDAP for single authentication - http://www.fatofthelan.com/articles/articles.php?pid=24
-
Linux LDAP authentication - http://enterprise.linux.com/article.pl?sid=05/09/15/1930256&tid=129
-
Advanced Linux LDAP authentication - http://enterprise.linux.com/enterprise/05/10/18/1732231.shtml
-
Debian Samba 3.0.14a with ldap, recyle + little SETUP for samba + Ldap - http://www.archivum.info/linux.samba/2005-07/msg00026.html
-
Configuração Simples Samba+LDAP - http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4195
Interfaces Gráficas para Gerenciamento do LDAP
-
LdapAdmin (Instalável num RWindows) - http://ldapadmin.sourceforge.net/
-
LdapManager (Instalável num RWindows) - http://www.ldapmanager.org/page.php?6
-
SIGATI - http://sigati.codigolivre.org.br/
-
phpLDAPadmin - http://phpldapadmin.sourceforge.net/
-
Softerra LDAP Browser - http://www.ldapbrowser.com/
-
JXplorer - Java LDAP Browser- http://jexplorer.org/