You are here: Wiki-SL>PSLGO Web>EventosDeBolso>MiniDicas>InstalarOpenLdap (14 Feb 2012, MarioSilva?)EditAttach

Autenticação com OpenLdap e Samba

Introdução

%ATENCAOon% Disponibilizei um tutorial personalizado em LdapSambaPessoal. Neste você informa seus dados e tem suas configurações personalizadas. %ATENCAOoff% Um dos principais requisitos exigidos de um sistema é segurança. Um sistema seguro é aquele que permite que as informações possuam integridade, e que os acessos às informações sejam feitos por pessoas autorizadas, permitindo protegê-las contra acessos indesejáveis.

É importante frisar que não existe um sistema que possa ser completamente seguro. Tudo que se pode fazer é aumentar a dificuldade de invasões no sistema. Neste contexto está o conceito de autenticar. Autenticação é o processo de reconhecimento dos dados que são recebidos, comparando-os com os dados que foram enviados, e verificando se o transmissor que fez a requisição é, na verdade, o transmissor real.

Autenticação utiliza o modelo cliente-servidor. Um cliente faz uma requisição para o servidor, que verifica se o cliente tem permissão para acessar o servidor. Este também verifica quais são estas permissões, ou seja, quais as informações que o cliente poderá acessar. Após isso, retorna a requisição para o cliente.

O que é OpenLdap

LDAP (Lighweight Directory Access Protocol) padroniza o Protocolo de Acesso a Diretório Leve. Baseado no X.500 ele contém a maioria das funções primárias, mas complementa as mais esotéricas funções que o X.500 tem. Agora o que é X.500 e porque ele é um LDAP?

X.500 é um modelo de Serviço de Diretório no conceito OSI. Ele contém definições de nomes e protocolos para pesquisa e atualização de diretório. Entretanto, X.500 se mostrou muito pesado em muitas situações. Aí apareceu o LDAP. Como o X.500 ele provê um modelo de dados/nomes para o diretório e um também um protocolo. Entretanto, LDAP foi projetado para rodar diretamente sobre a pilha TCP/IP. Então LDAP é uma versão mais leve do X.500.

Atualmente vem se tornando um padrão, diversos programas já têm suporte a LDAP. Livros de endereços, autenticação, armazenamento de certificados digitais (S/MIME) e de chaves públicas (PGP) são alguns dos exemplos onde o LDAP já é amplamente utilizado.

Talvez muitos não saibam mas o DNS (Domain Name Service) é um tipo de serviço de diretório, embora bastante especializado.

O que é um diretório

Um diretório é como um banco de dados, mas tende a conter mais informações descritivas, baseadas em atributo e é organizado em forma de árvore, não de tabela. A informação de um diretório é geralmente mais lida do que é escrita. Como consequência, diretórios não são usados para implementar transações complexas, ou esquemas de consultas regulares em banco de dados, transações estas que são usadas para fazer um grande volume de atualizações complexas. Atualizações em diretórios são tipicamente simples ou nem são feitas.

Diretórios são preparados para dar uma resposta rápida a um grande volume de consultas ou operações de busca. Eles também podem ter a habilidade de replicar informações existentes extensamente; isto é usado para acrescentar disponibilidade e confiabilidade, enquanto reduzem o tempo de resposta.

Como é estruturada a informação

Toda informação dentro do diretório é estruturada hierarquicamente. Ainda mais, se você desejar entrar com dados num diretório, o diretório também deve conseguir armazenar estes dados numa forma de árvore.

Ex.: Sabendo que o Jarbas é uma das pessoas do estado de go que trabalha na previdência, podemos apresentar as seguintes figuras para permitir uma melhor visualização deste conhecimento.

%TERMINALon% dc: previdencia | dc: go (O - Organização) | +---+---+

 
 
ou: Usuarios Maquinas (OU - Unidade Organizacional) | +----+-----+
   
uid: .. Jarbas .. (OU-específico - Dados ou Folhas) %TERMINALoff%

%TERMINALon% dc=go,dc=previdencia | '--- ou=Usuarios

 
| '--- uid=Jarbas | '--- ou=Grupos | '--- ou=Maquinas %TERMINALoff%

Instalando SERVIDOR OpenLdap

Antes de mais nada devemos ter um sevidor com GNU/Linux instalado. Pode ser um Fedora, Conectiva, Debian ou Mandrake (hoje Mandriva). Este material baseia-se num Mandriva GNU/Linux utilzado. Porquê? Porque é mais simples de instalar e tem todos os pacotes necessários para uma instalação simples. Porque tem um grande quantidade de repositórios espelhos para manter o sistema atualizado. Porque tem uma grande documentação disponível no site desta. Porque o conhecimento da Conectiva no mercado brasileiro com toda a certeza será utilizado para melhorar o suporte para o pt_BR.

As primeiras coisas que necessitamos fazer e ter certeza que o OpenLdap está instalado corretamente. Isso pode ser realizado através da instalação de alguns pacotes. Obviamente, o primeiro passo é instalar o OpenLdap. Os pacotes que nós precisamos ter instalados são:

Pacotes Necessários

OpenLdap

%TERMINALon%

[root@lxgod001 ~]# urpmi openldap openldap-server openldap-clients openldap-migration nss_ldap pam_ldap libldap2

%TERMINALoff%

Os pacotes openldap-servers e openldap-migration são necessários apenas no computador que irá ser o servidor de autenticação. Eles não são necessários nas máquinas clientes, isto é, nas estações que irão se autenticar no servidor.

Samba

Pacotes samba necessários para permitir a integração com o ldap.

%TERMINALon%

[root@lxgod001 ~]# urpmi samba-common samba-server samba-client smbldap-tools

%TERMINALoff%

Os pacotes que temos realmente instalado no servidor são:

%TERMINALon% [root@lxgod001 ~]# rpm -qa | grep ldap libldap2.2_7-2.2.23-5mdk nss_ldap-220-5mdk openldap-servers-2.2.23-5mdk openldap-migration-2.2.23-5mdk perl-ldap-0.31-2mdk openldap-clients-2.2.23-5mdk php-ldap-4.3.10-6mdk pam_ldap-170-5mdk smbldap-tools-0.8.8-1 openldap-2.2.23-5mdk

[root@lxgod001 ~]# rpm -qa | grep samba samba-common-3.0.13-2mdk samba-server-3.0.13-2mdk samba-client-3.0.13-2mdk %TERMINALoff%

O perl-ldap e php-ldap são necessários apenas para a instalação do phpldapadmin. Isso é apenas para facilitar a administração do ldap via interface web. O openldap-migration não será necessário, mas é interessante para podermos dar uma olhada no código dos scripts e aprender um pouco smile .

%ATENCAOon% O sucesso da configuração necessita que tenhamos os serviços ldap e smb parados. Algumas distribuições possuem o recurso de startar o serviço logo após sua instalação. Para garantir que os serviços estejam parados devemos fazer: %ATENCAOoff%

%TERMINALon% [root@lxgod001 ~]# service ldap stop [root@lxgod001 ~]# service smb stop %TERMINALoff%

Configurando o Servidor OpenLdap

O primeiro passo para configurar o servidor é editar o arquivo /etc/openlda/slapd.conf. Há apenas alguns campos que serão necessários configurar. No exemplo abaixo assumiremos que o nome de domínio (domain name) a ser utilizado na REDE é "dc=go,dc=previdencia".

Abaixo mostramos o conteúdo do /etc/openldap/slapd.conf utilizado por nós.


%TERMINALon% ## Modificação: Jarbas - 12-04-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 do mozilla poder acessar o catálogo de endereços ldap allow bind_v2

# To allow TLS-enabled connections, create /etc/ssl/openldap/ldap.pem # and uncomment the following lines. /dev/random HIGH:MEDIUM:+SSLv2 TLSCertificateFile? /etc/ssl/openldap/ldap.pem TLSCertificateKeyFile? /etc/ssl/openldap/ldap.pem /etc/ssl/openldap/ /etc/ssl/cacert.pem TLSCACertificateFile? /etc/ssl/openldap/ldap.pem never # ([never]|allow|try|demand)

# = Estrutura da Base =

database bdb suffix "dc=go,dc=previdencia" rootdn "cn=Manager,dc=go,dc=previdencia" # Quanto mais eu aprendo, Mais tenho que aprender. ( gerado com slappasswd -h {SSHA} -s SENHA_TEXTO ) rootpw {SSHA}YujfX93n9jCyLyqTB08N+0QfXdLTyi/+

# The database directory MUST exist prior to running slapd AND # should only be accessable by the slapd/tools. Mode 700 recommended. directory /var/lib/ldap

# = Ajustes para melhorar performance = # Tuning settings, please see the man page for slapd-bdb for more information # as well as the DB_CONFIG file in the database directory # commented entries are at their defaults # In-memory cache size in entries cachesize 10000 # Checkpoint the bdb database after 256kb of writes or 5 minutes have passed # since the last checkpoint checkpoint 1024 5

# = 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

# = ACLs - Lista de Controle de Acesso = # Users can authenticate and change their password access to attr=userPassword,sambaLMPassword,sambaNTPassword by self write by anonymous auth by * none # All other attributes are readable to everybody access to * by * read

%TERMINALoff%


Testando o serviço "ldap"

Em primeiro lugar starte o serviço ldap com o comando abaixo: %TERMINALon% [root@lxgod001 ~]# service ldap start Iniciando slapd (ldap + ldaps): [ OK ] %TERMINALoff%

Depois de startado o servidor ldap, você pode testá-lo com a seguinte consulta:

%TERMINALon%[root@lxgod001 ~]# 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 %TERMINALoff%

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 smile ). Para termos certeza que o serviço ldap estará sendo iniciado a cada boot, faça: %TERMINALon% [root@lxgod001 ~]# chkconfig ldap on %TERMINALoff%

Configurando os Clientes LDAP

O que foi feito anteriormente é apenas a configuraçao do servidor OpenLdap. Agora mostraremos como configurar os clientes, isto é, máquinas que irão se autenticar no servidor.

Configurando o ldap.conf

O arquivo /etc/ldap.conf é a configuração principal do Cliente.


%TERMINALon% # Your LDAP server. Must be resolvable without using LDAP. host 127.0.0.1

# The distinguished name of the search base. base dc=go,dc=previdencia

# The sintinguished name to bind to the server with if the # efective user ID is root. Password must be stored in # /etc/ldap.secret (mode 600) rootbinddn cn=Manager,dc=go,dc=previdencia

# RFC2307bis naming contexts # we use ?sub (an not the default ?one) because we separated # sambaAccounts on ou=Computer,dc=IDEALX,dc=ORG # and ou=Users,dc=IDEALX,dc=ORG nss_base_passwd dc=go,dc=previdencia?sub nss_base_shadow dc=go,dc=previdencia?sub nss_base_group ou=Grupos,dc=go,dc=previdencia?one

# Security options ssl no pam_password crypt

# - The End %TERMINALoff%


Configurando o NSS para usar o LDAP

Necessitamos agora configurar o NSS (Name Service Swith) para usar LDAP através do arquivo /etc/nsswitch.conf


%TERMINALon% # # /etc/nsswitch.conf # # An example Name Service Switch config file. This file should be # sorted with the most-used services at the beginning. # # The entry '[NOTFOUND=return]' means that the search for an # entry should stop if the search in the previous entry turned # up nothing. Note that if the search failed due to some other reason # (like no NIS server responding) then the search continues with the # next entry. # # Legal entries are: # # nisplus or nis+ Use NIS+ (NIS version 3) # nis or yp Use NIS (NIS version 2), also called YP # dns Use DNS (Domain Name Service) # files Use the local files # db Use the local database (.db) files # compat Use NIS on compat mode # hesiod Use Hesiod for user lookups # [NOTFOUND=return] Stop searching if not found so far #

# To use db, put the "db" in front of "files" for entries you want to be # looked up first in the databases # # Example: #passwd: db files nisplus nis #shadow: db files nisplus nis #group: db files nisplus nis

passwd: files ldap shadow: files ldap group: files ldap

#hosts: db files nisplus nis dns hosts: files nisplus nis dns

# Example - obey only what nisplus tells us... #services: nisplus [NOTFOUND=return] files #networks: nisplus [NOTFOUND=return] files #protocols: nisplus [NOTFOUND=return] files #rpc: nisplus [NOTFOUND=return] files #ethers: nisplus [NOTFOUND=return] files #netmasks: nisplus [NOTFOUND=return] files

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

%TERMINALoff%


Teste com a ferramenta getent da seguinte forma:

%TERMINALon%

[root@lxgod001 ~]# getent passwd

[root@lxgod001 ~]# getent shadow

[root@lxgod001 ~]# getent group

%TERMINALoff%

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.

Configurando o PAM para usar LDAP

Necessitamos agora configurar o PAM (Plugabe Autentication Module) para usar LDAP através do arquivo /etc/pam.d/system-auth


%TERMINALon%

#%PAM-1.0

# Módulo "pam_ldap.so" para conecções pelo ldap # Isso não afeta se os usuários existem localmente em /etc/passwd auth required pam_env.so auth sufficient pam_unix.so likeauth nullok auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so

account required pam_unix.so account sufficient pam_ldap.so account required pam_deny.so

password required pam_cracklib.so retry=3 type= minlen=2 dcredit=0 ucredit=0 password sufficient pam_unix.so nullok use_authtok md5 shadow password sufficient pam_ldap.so use_authtok password required pam_deny.so

# Criar diretório local no momento em que o usuário se loga no Desktop session required pam_mkhomedir.so skel=/etc/skel umask=0022 session required pam_limits.so session required pam_unix.so session optional pam_ldap.so %TERMINALoff%


Até este ponto, qualquer programa que utilize o system-auth irá também utilizar o LDAP. Isso inclui serviços como SSH, possivelmente FTP, e outros em que a autenticação seja feita baseada em PAM.

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.

Vamos ao conteúdo do /etc/samba/smb.conf


%TERMINALon% # Parâmetros Globais [global]

# Dominio, Nome e Descricao workgroup = PREV-GO netbios name = PSGOD001 server string = PREVIDENCIA SOCIAL-GO-DATAPREV - GNU/Linux SMB

# Nao 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 = 3 log file = /var/log/samba/%m.log max log size = 100000 debug level = 0 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 = \\%L\profiles\%U logon path = logon drive = logon home =

# Script de logon em rede (deve ficar no compartilhamento netlogon - em formato DOS) logon script = STARTUP.BAT

# Configuracoes para o LDAP passdb backend = ldapsam:ldap://127.0.0.1 ldap passwd sync = yes ldap delete dn = Yes ldap admin dn = cn=Manager,dc=go,dc=previdencia ldap suffix = dc=go,dc=previdencia ldap machine suffix = ou=Computadores ldap user suffix = ou=Usuarios ldap group suffix = ou=Grupos ldap idmap suffix = ou=Idmap idmap backend = ldap:ldap://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 = /opt/IDEALX/sbin/smbldap-useradd -m "%u" delete user script = /opt/IDEALX/sbin/smbldap-userdel "%u" # adiconar/remover Grupos add group script = /opt/IDEALX/sbin/smbldap-groupadd -p "%g" delete group script = /opt/IDEALX/sbin/smbldap-groupdel "%g" # Scripts para adiconar/remover Usuarios nos Grupos add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g" # Script para definir o grupo primario do usuario set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g "%g" "%u" # Script par adicionar maquina Win NT/XP ingressar no Dominio add machine script = /opt/IDEALX/sbin/smbldap-useradd -w "%u"

# Otimizacoes recomendadas em # http://us4.samba.org/samba/docs/man/Samba-Guide/secure.html#promisnet smb ports = 139 445 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 wins server = 10.0.134.223

# 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 [ startup.bat ] path = /home/samba/netlogon # guest ok = yes browseable = No 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

[doc] comment = Documentacoes de Linux /usr/share/doc [ L:\ ] path = /usr/share/doc public = Yes writeable = No guest ok = Yes

# Un-comment the following to provide a specific roving profile share # the default is to use the user's home directory ;[Profiles] ; comment = Compartilhamento Profile ; path = /home/usr/%U/profiles ; browseable = No ; guest ok = yes ; profile acls = Yes

[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 %TERMINALoff%


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: %TERMINALon% [root@lxgod001 ~]# rm -rf /etc/samba/secrets.tdb /var/log/samba/* %TERMINALoff%

%ATENCAOon% 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. %ATENCAOoff%

O procedimento para definirmos a senha que o samba irá utilizar é: %TERMINALon% [root@lxgod001 ~]# smbpasswd -w SENHA-TEXTO Setting stored password for "cn=Manager,dc=go,dc=previdencia" in secrets.tdb %TERMINALoff%

Agora sim podemos levantar o samba normalmente com: %TERMINALon% [root@lxgod001 ~]# service smb start Iniciando os servigos SMB: [ OK ] Iniciando os servigos NMB: [ OK ] %TERMINALoff%

Para certificarmos que o samba está rodando normalmente podemos checar através do seguint comando: %TERMINALon% [root@lxgod001 ~]# smbclient -L 127.0.0.1 -U% Domain=[PREV-GO] OS=[Unix] Server=[Samba 3.0.13]

Sharename Type Comment --------- ---- ------- dados Disk Sistemas e Dados de Usuarios [ F:\ ] temp Disk Dados Temporarios [ T:\ ] doc Disk Documentacoes de Linux /usr/share/doc [ L:\ ] print$ Disk IPC$ IPC IPC Service (PREVIDENCIA SOCIAL-GO-DATAPREV - GNU/Linux SMB) ADMIN$ IPC IPC Service (PREVIDENCIA SOCIAL-GO-DATAPREV - GNU/Linux SMB) HP-LaserJet Printer HP LaserJet? 4P HP-GALENO Printer HP DeskJet? 680C Domain=[PREV-GO] OS=[Unix] Server=[Samba 3.0.13]

Server Comment --------- ------- PSGOD001 PREVIDENCIA SOCIAL-GO-DATAPREV - GNU/Linux SMB

Workgroup Master --------- ------- PREV-GO PSGOD001 %TERMINALoff%

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: %TERMINALon% [root@lxgod001 ~]# net getlocalsid [2005/04/14 10:03:10, 0] lib/smbldap.c:smbldap_search_suffix(1176) smbldap_search_suffix: Problem during the LDAP search: (No such object) SID for domain PSGOD001 is: S-1-5-21-3605816189-1598215328-2250501690 %TERMINALoff%

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.

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.

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 podem ser alterados/configurados através da ferramenta abaixo:

%TERMINALon% [root@lxgod001 ~]# /opt/IDEALX/sbin/configure.pl %TERMINALoff%

Uma série de informações devem ser fornecidas corretamente com o objetivo de se criar os arquivos de configuração abaixo.

Primeiramente vamos ao conteúdo do /etc/opt/IDEALX/smbldap-tools/smbldap.conf


%TERMINALon% # $Source: /home/twiki/data/PSLGO/SmbLdapConf.txt,v $ # $Id: SmbLdapConf.txt,v 1.1 2005/04/14 22:40:02 JarbasJunior Exp www-data $ # # smbldap-tools.conf : Q & D configuration file for smbldap-tools

# This code was developped by IDEALX (http://IDEALX.org/) and # contributors (their names can be found in the CONTRIBUTORS file). # # Copyright (C) 2001-2002 IDEALX # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA.

# Purpose : # . be the configuration file for all smbldap-tools scripts

############################################################################## # # General Configuration # ##############################################################################

# Put your own SID # to obtain this number do: net getlocalsid SID="S-1-5-21-3605816189-1598215328-2250501690"

############################################################################## # # LDAP Configuration # ##############################################################################

# Notes: to use to dual ldap servers backend for Samba, you must patch # Samba with the dual-head patch from IDEALX. If not using this patch # just use the same server for slaveLDAP and masterLDAP. # Those two servers declarations can also be used when you have # . one master LDAP server where all writing operations must be done # . one slave LDAP server where all reading operations must be done # (typically a replication directory)

# Ex: slaveLDAP=127.0.0.1 slaveLDAP="127.0.0.1" slavePort="389"

# Master LDAP : needed for write operations # Ex: masterLDAP=127.0.0.1 masterLDAP="127.0.0.1" masterPort="389"

# Use TLS for LDAP # If set to 1, this option will use start_tls for connection # (you should also used the port 389) 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"

# LDAP Suffix # Ex: suffix=dc=IDEALX,dc=ORG suffix="dc=go,dc=previdencia"

# Where are stored Users # Ex: usersdn="ou=Users,dc=IDEALX,dc=ORG" usersdn="ou=Usuarios,${suffix}"

# Where are stored Computers # Ex: computersdn="ou=Computers,dc=IDEALX,dc=ORG" computersdn="ou=Computadores,${suffix}"

# Where are stored Groups # Ex groupsdn="ou=Groups,dc=IDEALX,dc=ORG" groupsdn="ou=Grupos,${suffix}"

# Where are stored Idmap entries (used if samba is a domain member server) # Ex groupsdn="ou=Idmap,dc=IDEALX,dc=ORG" idmapdn="ou=Idmap,${suffix}"

# Where to store next uidNumber and gidNumber available sambaUnixIdPooldn="sambaDomainName=PREV-GO,${suffix}"

# Default scope Used scope="sub"

# Unix password encryption (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 # Ex: userLoginShell="/bin/bash" userLoginShell="/bin/bash"

# Home directory # Ex: userHome="/home/%U" 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"

# Default password validation time (time in days) Comment the next line if # you don't want password to be enable for defaultMaxPasswordAge days (be # careful to the sambaPwdMustChange attribute's value) 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="U:"

# 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 userScript="%STARTUP.BAT"

# Domain appended to the users "mail"-attribute # when smbldap-useradd -M is used mailDomain="previdencia.gov.br"

############################################################################## # # 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" %TERMINALoff%


e depois ao /etc/opt/IDEALX/smbldap-tools/smbldap_bind.conf


%TERMINALon% ############################ # Credential Configuration # ############################ # Notes: you can specify two differents configuration if you use a # master ldap for writing access and a slave ldap server for reading access # By default, we will use the same DN (so it will work for standard Samba # release) slaveDN="cn=Manager,dc=go,dc=previdencia" slavePw="SENHA-TEXTO" masterDN="cn=Manager,dc=go,dc=previdencia" masterPw="SENHA-TEXTO" %TERMINALoff%


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.

%TERMINALon% #!/bin/bash # # Objetivo: trocar as informações do smbldap-populate do ingles para o portugues brasileiro # # Autor: Jarbas, 14-04-2005 # Licença: GPL smile

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/Replicators/Duplicadores/g" $1 > $1.pt_BR

chmod +x $1.pt_BR

echo "Arquivo $1 traduzido em $1.pt_BR" %TERMINALoff%

Caso deseje ter os usuários/grupos em pt_BR Execute este script: %TERMINALon% [root@lxgod001 ldap]# ./smbldap-populate-pt_BR.sh /opt/IDEALX/sbin/smbldap-populate Arquivo /opt/IDEALX/sbin/smbldap-populate traduzido em /opt/IDEALX/sbin/smbldap-populate.pt_BR %TERMINALoff%

Agora execute o smbldap-populate para criarmos a estrutura base do ldap+samba.

%TERMINALon% [root@lxgod001 ~]# /opt/IDEALX/sbin/smbldap-populate.pt_BR Populating LDAP directory for domain PREV-GO (S-1-5-21-3605816189-1598215328-2250501690) (using builtin directory structure)

adding new entry: dc=go,dc=previdencia adding new entry: ou=Usuarios,dc=go,dc=previdencia adding new entry: ou=Grupos,dc=go,dc=previdencia adding new entry: ou=Computadores,dc=go,dc=previdencia adding new entry: uid=root,ou=Usuarios,dc=go,dc=previdencia adding new entry: uid=nobody,ou=Usuarios,dc=go,dc=previdencia adding new entry: cn=Administradores do Dominio,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Usuarios do Dominio,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Convidados do Dominios,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Computadores do Dominio,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Administradores,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Account Operators,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Operadores de Impressao,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Operadores de Backup,ou=Grupos,dc=go,dc=previdencia adding new entry: cn=Duplicadores,ou=Grupos,dc=go,dc=previdencia adding new entry: sambaDomainName=PREV-GO,dc=go,dc=previdencia

Please provide a password for the domain root: Changing password for root New password : Retype new password : %TERMINALoff%

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:

%TERMINALon% [root@lxgod001 ~]# ldapsearch -x -b "dc=go,dc=previdencia" "(ObjectClass?=*)" %TERMINALoff%

Outro teste interessante neste momento é a ferramenta getent da seguinte forma:

%TERMINALon% [root@lxgod001 ~]# getent passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/sh daemon:x:2:2:daemon:/sbin:/bin/sh adm:x:3:4:adm:/var/adm:/bin/sh lp:x:4:7:lp:/var/spool/lpd:/bin/sh sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/bin/sh news:x:9:13:news:/var/spool/news:/bin/sh uucp:x:10:14:uucp:/var/spool/uucp:/bin/sh operator:x:11:0:operator:/var:/bin/sh games:x:12:100:games:/usr/games:/bin/sh nobody:x:65534:65534:Nobody:/:/bin/sh rpm:x:13:101:system user for rpm:/var/lib/rpm:/bin/false postfix:x:14:102:system user for postfix:/var/spool/postfix:/bin/false vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin messagebus:x:70:70:system user for dbus:/:/sbin/nologin xfs:x:71:71:system user for xorg-x11:/etc/X11/fs:/bin/false haldaemon:x:72:72:system user for hal:/:/sbin/nologin rpc:x:73:73:system user for portmap:/:/bin/false apache:x:74:74:system user for apache2:/var/www:/bin/sh rpcuser:x:75:75:system user for nfs-utils:/var/lib/nfs:/bin/false sshd:x:76:76:system user for openssh:/var/empty:/bin/true ftp:x:77:77:system user for proftpd:/var/ftp:/bin/false ldap:x:78:78:system user for openldap:/var/lib/ldap:/bin/false d323209:x:1000:100:Jarbas Peixoto Júnior:/home/usr/d323209:/bin/bash d239305:x:1001:100:Carlos Natal da Silva:/home/usr/d239305:/bin/bash Administrator:x:998:512:Netbios Domain Administrator:/home/usr/Administrator:/bin/false nobody:x:999:514:nobody:/dev/null:/bin/false %TERMINALoff%

Note que agora há dois usuários novos que foram cadastrados via ldap Administrador e nobody. Note que o nobody já existia localmente, e o último da lista é o que foi cadastrado via smbldap-populate.

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 documento.

Mas se tivermos uma grande quantidade de usuários/grupos a serem migrados essa ferramenta 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?

%TERMINALon% [root@lxgod001 ~]# ls /usr/sbin/smbldap* /usr/sbin/smbldap-groupadd* /usr/sbin/smbldap-passwd* /usr/sbin/smbldap-useradd* /usr/sbin/smbldap-usershow* /usr/sbin/smbldap-groupdel* /usr/sbin/smbldap-populate* /usr/sbin/smbldap-userdel* /usr/sbin/smbldap-groupmod* /usr/sbin/smbldap-populate.orig* /usr/sbin/smbldap-userinfo* /usr/sbin/smbldap-groupshow* /usr/sbin/smbldap_tools.pm* /usr/sbin/smbldap-usermod* %TERMINALoff%

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.: %TERMINALon% [root@lxgod001 ~]# smbldap-passwd --help (c) IDEALX 2004 (http://www.idealx.com)- Licenced under GPL Usage: /usr/sbin/smbldap-passwd [username] -u update only unix password (userPasswd) -?, --help show this help message %TERMINALoff%

Criando grupos

Suponha que tenhamos apenas dois grupos locais: Dataprev e INSS. Como cadastrar estes grupos no LDAP? Simples: %TERMINALon% [root@lxgod001 ~]# smbldap-groupadd -a DATAPREV [root@lxgod001 ~]# smbldap-groupadd -a INSS %TERMINALoff%

Criando usuários

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 root é o único capaz disso).

Para criarmos o usuário Linux linux a sintaxe resumida do smbldap-useradd é a seguinte: %TERMINALon% [root@lxgod001 ~]# smbldap-useradd -m -c "Teste Linux" linux [root@lxgod001 ~]# smbldap-passwd linux Changing password for linux New password : Retype new password : %TERMINALoff%

Para criarmos o usuário Samba sambix a sintaxe resumida do smbldap-useradd é a seguinte: %TERMINALon% [root@lxgod001 ~]# smbldap-useradd -a -m -c "Teste Samba" sambix [root@lxgod001 ~]# smbldap-passwd sambix Changing password for linux New password : Retype new password : %TERMINALoff%

Para criarmos o usuário Máquina winlinux a sintaxe resumida do smbldap-useradd é a seguinte: %TERMINALon% [root@lxgod001 ~]# smbldap-useradd -w winlinux %TERMINALoff%

Para conferir os usuários criados: %TERMINALon% [root@lxgod001 ~]# getent passwd ... root:x:0:0:Netbios Domain Administrator:/home/usr/root:/bin/false nobody:x:999:514:nobody:/dev/null:/bin/false d323209:x:1000:513:Jarbas Peixoto Junior:/home/usr/d323209:/bin/bash wtgos005$:x:1001:515:Computer:/dev/null:/bin/false d239305:x:1002:513:Carlos Natal da Silva:/home/usr/d239305:/bin/bash linux:x:1013:513:Teste Linux:/home/usr/linux:/bin/bash sambix:x:1014:513:Teste Samba:/home/usr/sambix:/bin/bash winlinux$:x:1015:515:Computer:/dev/null:/bin/false %TERMINALoff%

Para conferir os grupos criados: %TERMINALon% [root@lxgod001 ~]# getent group ... Administradores do Dominio:x:512:root Usuarios do Dominio:x:513:d323209,d239305,linux,sambix Convidados do Dominios:x:514: Computadores do Dominio:x:515: Administradores:x:544: Account Operators:x:548: Operadores de Impressao:x:550: Operadores de Backup:x:551: Duplicadores:x:552: DATAPREV:x:1000: INSS:x:1001: %TERMINALoff%

Note que os grupos dos usuários Linux e Samba 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.

Referências

-- JarbasJunior - 14 Apr 2005

Topic revision: r5 - 14 Feb 2012 - 02:26:30 - MarioSilva?
Get Firefox!

eXTReMe Tracker



Create personal sidebar

Mycose.org

 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Wiki-SL? Send feedback