Servidor Samba

Segundo a Wikipédia “Samba é um programa de computador, utilizado em sistemas operacionais do tipo Unix, que simula um servidor Windows, permitindo que seja feito gerenciamento e compartilhamento de arquivos em uma rede Microsoft.”

Conceituação sobre o Samba e seu modo de autenticação

Uma das características mais controversas do Samba é sua exigência de ter dois usuários: um no sistema operacional e outro do próprio “Samba”. Mas por que são necessários os dois usuários?

O primeiro motivo se refere ao fato do usuário Windows possuir mais atributos que um usuário Unix/Gnu/Linux tradicional.

O segundo motivo é que a base de senhas do SAMBA usa técnicas distintas de criptografia e armazenamento de senhas.

Outro grande motivo é que nem sempre queremos que exista a possibilidade de usuários SAMBA terem permissão de login em máquinas Gnu/Linux e vice-versa. (por exemplo, os usuários criados apenas para executar serviços como www, cramd).

Resumindo: O usuário SAMBA é sempre usado pelo servidor para autenticar alguém. O usuário Gnu/Linux correspondente é usado pelo servidor para fornecer credenciais de acesso a um recurso ou autorizar o usuário a acessar.

O SAMBA poderia optar por usar apenas um usuário especial no Gnu/Linux e controlar totalmente o acesso a arquivos e pastas usando recursos internos. Mas isso não é feito dessa forma. Uma das desvantagens claras dessa abordagem é que a segurança das pastas pessoais em uma rede mista não poderia ser facilmente administrada. Com apenas um dono, existiriam grandes problemas.

Além disso a abordagem de uso dos usuários registrados no Sistema Operacional em uso tem uma grande vantagem. Torna o SAMBA mais adaptável para uso em múltiplas plataformas.

Em ambientes onde não se deseja ter nenhum usuário local para validação no SAMBA, pode-se configurar o Gnu/Linux para espelhar todos os usuários locais em uma base LDAP. Isso é feito através da configuração dos módulos de autenticação PAM. Dessa forma os usuários do SAMBA e do sistema operacional passam a ser um só, ou seja, não há a necessidade de ter dois usuários, um do SAMBA e um do sistema operacional.

Apesar de ter um único usuário, nesse modelo, o SAMBA continua entendendo que são dois diferentes. A configuração do PAM será vista em um capítulo mais adiante.

Outro aspecto importante é a autenticação. O cliente envia um par usuário/senha. O servidor SAMBA usa este par para verificar se o usuário existe na base de usuários e se a senha está correta. Caso ocorra sucesso, o cliente é considerado como autenticado e suas credenciais serão usadas para as rotinas de Autorização.

Essa etapa corresponde ao “logon” em uma estação Windows ou o “logon” em um cliente SAMBA em Gnu/Linux.

Nessa etapa é possível ao cliente saber quais são os recursos que teoricamente estariam disponíveis a ele. Teoricamente por que o fato de um recurso ser visível e até mesmo reservado para uso para determinado usuário não significa que o usuário está autorizado a acessá-lo, as autorizações serão testadas no momento de acesso ao recurso. Assim, no ambiente de rede pode ser possível ver um compartilhamento e ainda assim a tentativa de acesso pode resultar em Acesso Negado.

O cliente autenticado tem seu status armazenado e quando necessita de um recurso da Rede, o servidor SAMBA verifica se esse cliente tem os direitos correspondentes ao recurso.

O controle de acesso ao recurso pode ser feito em dois locais:

No servidor SAMBA: Usando cláusulas de permissão e negação explícitas aos recursos como “valid users” e “invalid users” ou liberando acesso público e anônimo com “guest ok”;

No Sistema Operacional onde o SAMBA foi instalado: Esse é o método preferencial. O Samba respeita e usa os recursos de permissão e direitos do sistema operacional em uso. Assim no caso do Gnu/Linux, as permissões de arquivos serão respeitadas pelo SAMBA.

Dessa forma, como regras de ouro: O primeiro lugar onde deve-se procurar por problemas nas permissões de recursos é no próprio sistema de arquivos usando comandos como “ls -la” e “getfacl”. Mantenha o smb.conf limpo e trabalhe as permissões no sistema de arquivos. NÃO use “valid users” ou “invalid users”.

Com o recurso de ACL corretamente configurado, use o “Windows Explorer” para o trabalho de manutenção de permissões.

Caso não seja possível deixar de usar “invalid users” e “valid users”, nunca ofereça compartilhamentos totalmente abertos no sistema de arquivos e controlados por cláusulas SAMBA sem garantir que não há possibilidade de uso desses recursos por outro caminho (um login remoto diretamente no servidor).

A necessidade das etapas de Autenticação e de Autorização, junto com os mecanismos de troca e forma de senhas do protocolo CIFS/SMB, explicam a necessidade da adição de usuários ser feita tanto no Samba como no Gnu/Linux.

Instalando o Samba

O comando abaixo instala os pacotes SAMBA necessários:

Pacote de administração SAMBA +OpenLDAP (smbldap-tools); Pacote de autenticação Gnu/Linux na base OpenLDAP(libnss-ldap); Documentação SAMBA (samba-doc); Utilitários de configuração de listas de controle de acesso no sistema de arquivos(acl).

Não é necessário se preocupar em responder corretamente as questões que serão apresentadas nesta etapa. Os servidores serão configurados manualmente, desta forma, os princípios de configuração podem ser melhor adaptados a outras distribuições.

Para instalar o Samba execute o comando abaixo:

aptitude install samba smbclient smbldap-tools samba-doc acl

Samba como PDC

O Samba pode armazenar sua base de usuários em um servidor de serviços de diretórios OpenLDAP. A grande vantagem é que com a solução integrada SAMBA + OpenLDAP a tarefa de administração de usuários é bastante facilitada, pois o mapeamento de grupos e usuários é automático e a adição de usuários ao Gnu/Linux e à base de usuários SAMBA é feita simultaneamente, com sincronização de senhas.

Além disso, atualmente, a integração Samba + OpenLDAP é a única maneira prática para implementação de uma solução com vários servidores entre matriz e filiais que compartilham a mesma base de usuários.

Nesta solução, tanto os usuários do Gnu/Linux quanto os usuários SAMBA serão armazenados em uma base OpenLDAP.

A distribuição de exemplo é Debian Etch, contudo os princípios são os mesmos para todas as distribuições, com eventuais mudanças nos nomes de arquivos e/ou locais de armazenamento.

Instalando o schema do Samba no OpenLDAP

Será necessário ativar o “schema” do samba para que o OpenLDAP seja capaz de utilizar seus atributos e portanto armazenar usuários que sirvam para validação em uma rede Microsoft.

1. Copie o arquivo samba.schema, disponível no pacote samba-doc, com o comando abaixo:

zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz
 > /etc/ldap/schema/samba.schema

2. Edite o arquivo de configuração do OpenLDAP, “slapd.conf” e insira a linha abaixo logo depois das opções “include” já existentes:

include /etc/ldap/schema/samba.schema

3. Procure pela opção ”index” e adicione logo abaixo dela:

index memberUID,mail,givenname eq
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq

4. Procure pela opção “access to attrs=userPassword” e na mesma linha, adicione à lista de atributos o seguinte:

,sambaLMPassword,sambaNTPassword

O resultado final dessa linha deve ser:

access to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPassword

5. Pare o OpenLDAP com o comando:

/etc/init.d/slapd stop

6. Indexe a base com o comando:

slapindex -v

7. Corrija possíveis erros de permissionamento com o comando:

chown openldap: /var/lib/ldap/*

8. Inicie o OpenLDAP com o comando abaixo:

/etc/init.d/slapd start

Configurando o Samba para usar LDAP

As linhas de automação com uso do smbldap-tools são essenciais para o processo de adição de usuários por ferramentas Windows como o User Manager for Domains. Além disso, o processo de adição de máquinas ao domínio é automatizado.

Para facilitar vamos oferecer aqui um smb.conf pronto para o funcionamento. Estes parâmetros devem ser copiados no smb.conf original que estiver em produção respeitando as possíveis diferenças.

1. Crie uma cópia de segurança do arquivo de configuração original do Samba com o comando:

mv /etc/samba/smb.conf  /etc/samba/smb.conf.original

2. Crie um arquivo de configuração novo, chamado /etc/samba/smb.conf e adicione o seguinte conteúdo:

[global]
   workgroup = labopenldap
   netbios name = LABSRV
   username map = /etc/samba/smbusers
   add user script = /usr/sbin/smbldap-useradd -m -a "%u"
   delete user script = /usr/sbin/smbldap-userdel "%u"
   add group script = /usr/sbin/smbldap-groupadd -p "%g"
   delete group script = /usr/sbin/smbldap-groupdel "%g"
   add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
   delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
   set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
   add machine script = /usr/sbin/smbldap-useradd -a -w "%u"
   domain logons = Yes
   preferred master = Yes
   wins support = Yes
   passdb backend = ldapsam:ldap://ldap__.kyapanel.com.br
   ldap suffix = dc=kyapanel,dc=com,dc=br
   ldap machine suffix = ou=Usuarios
   ldap user suffix = ou=Usuarios
   ldap group suffix = ou=Grupos
   ldap admin dn = cn=admin,dc=kyapanel,dc=com,dc=br

3. Informe ao Samba a senha do usuário “admin” do OpenLDAP com o comando:

smbpasswd -w senha

4. Crie um arquivo de usuários do samba com o comando abaixo:

> /etc/samba/smbusers

5. Reinicie o Samba com o comando:

/etc/init.d/samba restart

6. Anote a identificação do domínio. Ela será necessária para configurar o “smbldap-tools”. Para ver a identificação do domínio execute o seguinte comando:

net getlocalsid

Configurando o smbldap-tools

Para que as ferramentas do “smbldap-tools” funcionem como o esperado, se faz necessário configurá-las. Veja a seguir:

1. Copie os arquivos smbldap_bind.conf e smbldap.conf

zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz
>/etc/smbldap-tools/smbldap.conf

cp  /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf
/etc/smbldap-tools/smbldap_bind.conf

2. Edite o arquivo /etc/smbldap-tools/smbldap_bind.conf e altere-o para que fique com as opções abaixo:

slaveDN="cn=admin,dc=kyapanel,dc=com,dc=br"
slavePw="senha"
masterDN="cn=admin,dc=kyapanel,dc=com,dc=br"
masterPw="senha"

3. Edite o arquivo /etc/smbldap-tools/smbldap.conf, modificando apenas as linhas citadas abaixo:

 credencial do domínio
 SID="S-1-5-21-3420362730-2273518020-356174992"

 # Nome do domínio do SAMBA
 sambaDomain=”LABOPENLDAP”

 #A raiz do servdor OpenLDAP
 suffix="dc=kyapanel,dc=com,dc=br"

 #Onde armazenar
 usersdn="ou=Usuarios,${suffix}"
 computersdn="ou=Usuarios,${suffix}"
 groupsdn="ou=Grupos,${suffix}"
 idmapdn="ou=Idmap,${suffix}"
 sambaUnixIdPooldn="sambaDomainName=labopenldap,${suffix}"

 #Configuração padrão para pastas, mapeamento e script de logon
 userSmbHome="\\%L\homes\%U"
 userProfile="\\%L\profiles\%U"
 userHomeDrive="P:"
 userScript="%U.bat"
 mailDomain="kyapanel.com.br"

 #Configurando o suporte a TLS
 cafile="/etc/ldap/tls/cacert.pem"
 clientcert="/etc/ldap/tls/srvcert.pem"
 clientkey="/etc/ldap/tls/srvkey.pem"

4. O smbldap-tools se encarrega de criar a base LDAP necessária para execução da solução. Para tanto, execute o comando:

smbldap-populate -u 2000 -g 2000

OBSERVAÇÃO: Se o SID (o identificador do domínio) não estiver devidamente configurado, os recursos adicionados não serão válidos para o domínio em uso. Os parâmetros -u e -g servem para indicar o uid e gid mínimos usados pelas ferramentas smbldap-tools.

O smbldap-adduser faz parte do conjunto de ferramentas smbldap-tools. Sem essas ferramentas, as vantagens no processo de administração de uma Solução SAMBA+OpenLDAP seriam muito menores. Por exemplo, a criação prévia de um usuário Gnu/Linux antes da adição de um usuário ou estação seria necessária, usando ferramentas distintas para cada etapa.

Testes de funcionamento

Usar o comando “smbldap-populate” é eficiente, somente se o objetivo for migrar os usuários existentes no Sistema Operacional para a base LDAP É claro que ele também ajuda na criação dos grupos. Entretanto se o objetivo for validar os usuários já existentes na base LDAP ele não será efetivo.

Isso se deve a falta dos atributos necessários nos usuários existentes para poder realizar essa validação. O que deve ser feito neste caso é adicionar os atributos exigidos pelo Samba aos usuários existentes na base LDAP.

Para adicionar a habilidade de validar no Samba aos usuários “posix” existentes teremos que realizar algumas etapas:

1. Adicionar o usuário e o seu grupo ao Sistema Operacional:

useradd -s /bin/false fulano1
groupadd fulano1

2. Adicionar os atributos necessários ao usuário e grupo “fulano1” para que ele possa se autenticar no Samba:

smbldap-usermod -a fulano1
smbldap-groupmod -a fulano1

3. Também será necessário redefinir sua senha. Como estamos usando a senha igual ao uid, então:

(echo fulano1 ; echo fulano1) | smbldap-passwd fulano1

Um pequeno truque para não ter que digitar a senha duas vezes :-)

4. Agora sim podemos testar nossa validação. Para isso basta usar o comando abaixo:

smbclient -L localhost -U fulano1%fulano1

Este comando faz uma busca pelos compartilhamentos no servidor indicado pela opção “-L”. Já a opção “-U” define usuário%senha

Se a validação acontecer com sucesso então lhe será mostrado algo parecido com isto:

Domain=[LABOPENLDAP] OS=[Unix] Server=[Samba 3.0.24]
        Sharename       Type      Comment
        ---------               ----         -------
        IPC$                  IPC         IPC Service (Samba 3.0.24)
	Domain=[LABOPENLDAP] OS=[Unix] Server=[Samba 3.0.24]
        Server               Comment
        ---------               -------
        LABSRV             Samba 3.0.24
        Workgroup            Master
        ---------                   -------
        LABOPENLDAP      LABSRV

Caso contrário a mensagem de retorno será:

session setup failed: NT_STATUS_LOGON_FAILURE

Script

Visando facilitar o processo de alteração de diversos usuários, que tal fazer um script?

1. Crie um arquivo chamado “para_smb.sh” e insira o seguinte conteúdo:

#! /bin/bash

ROOTDN="cn=admin,dc=kyapanel,dc=com,dc=br"
ROOTPW="senha"
SUFFIX="dc=kyapanel,dc=com,dc=br"

ALL_USERS=`ldapsearch -x -b "ou=Usuarios,$SUFFIX" -LLL uid | grep uid: | 
cut -d" " -f2`

for EACH in $ALL_USERS ; do
      SMB_PASS="$EACH"
      # Adiciona usuários locaiss
       useradd -s /bin/false $EACH
       groupadd $EACH
      # Adiciona os atributos necessários nas contas unix para que elas sejam, 
      # também contas do Samba
      smbldap-usermod -a $EACH
      smbldap-groupmod -a $EACH
      # Altera a senha nos atributos do samba e do unix
      (echo $SMB_PASS ; echo $SMB_PASS) | smbldap-passwd $EACH
done

2. Agora basta executar o script com o comando:

sh para_smb.sh

Licença

Copyright 2007 Anahuac de Paula Gil e Francisco Kem Iti Saito

Permite-se distribuição, publicação e cópia literal da íntegra deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright, a URL oficial do documento e esta nota de permissão.

Permite-se também distribuição, publicação e cópia literal de seções individuais deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright e a nota de permissão acima, e que a URL oficial do documento seja preservada ou substituída pela URL oficial da seção individual.

openldap_basico/servidor_samba.txt · Last modified: 2009/08/19 14:02 by anahuac
Recent changes RSS feed Creative Commons License Donate Driven by DokuWiki