Ir para o conteúdo
ou

Software livre Brasil

0 comunidades

Nenhum(a)

 Voltar a Blog
Tela cheia

Servidor de Arquivo e Autenticação – Integração Perfeita entre Gosa (LDAP) e SAMBA

15 de Junho de 2009, 0:00 , por Software Livre Brasil - 22 comentários | Ninguém está seguindo este artigo ainda.
Visualizado 7524 vezes

Servidor de Arquivo completo

Para instalar o servidor do Samba é necessário que os seguintes pré-requisitos estejam instalados.

Pré-requisitos:

Para aqueles que estão começando agora, definiria o SAMBA como sendo um servidor de autenticação de desktop Windows na rede. Claro que essa é uma definição bem superficial levando em consideração os recursos que o SAMBA tem, por outro lado, a grande maioria usa o SAMBA realmente para fazer isso, autenticar e armazenar arquivos de usuários do Windows.

Com o SAMBA é possível compartilhar recursos entre maquinas UNIX/Linux e Windows. Neste artigo vamos ficar mais focado na parte de autenticação, fazendo o Samba funcionar como um verdadeiro PDC.

1. LDAP

Vamos começar a configuração do SAMBA pelo LDAP. Já escrevi um post que mostra como instalar e configurar o LDAP e o GOsa. Leia este artigo e configure o GOsa e LDAP antes de continuar a configuração.

Com o LDAP e GOsa instalado, vamos precisar que o sistema Linux reconheça os usuários cadastrados na base LDAP. É procedimento é necessário para atribuir permissões para os usuários da base LDAP.Caso você queira utilizar cota, só é possível habilitando o usuário LDAP juntamente com os usuários do sistemas.

Para que isso aconteça é preciso instalar um pacote chamado libnss-ldap e configurar o arquivo /etc/nsswitch.conf. O comando a seguir faz a instalação.

[root@cabeca]#apt-get install libnss-ldap

 Durante a instalação, o sistema vai solicitar algumas informações sobre a base LDAP, tais como endereço, usuário de administração. Todas essas informações são gravadas dentro do arquivo /etc/ldap.conf. Segue um modelo do arquivo, altere conforme as suas configurações.

  • /etc/ldap.conf

base dc=trigo
uri ldap://localhost
ldap_version 3
binddn cn=manager,dc=trigo
bindpw x
rootbinddn cn=manager,dc=trigo
pam_password md5

 O próximo passo é fazer o sistema Linux ir buscar os usuários também na base LDAP. Para isso é necessário que seja alterado o arquivo /etc/nsswitch.conf. Segue a forma como o arquivo deve ficar.

  • /etc/nsswitch.conf

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

 No arquivo nsswitch está definido que os usuários serão pesquisados primeiramente no arquivo local (/etc/passwd, /etc/group,/etc/shadow) e caso não encontre este usuário, o mesmo será pesquisado na base LDAP. Para testar se tudo está funcionando de acordo, execute o comando getent e olhe se os usuários da base LDAP estão sendo listados também.

[root@cabeca]#  getent passwd

 Se o comando listar os usuários da base LDAP, o sistema está pronto para receber o SAMBA.

2. Criação de Usuários pelo GOsa

Antes da criação do usuário no sistema GOsa, vamos preparar o ambiente para a criação do diretório home do usuário no sistema de arquivo. Esse procedimento para criar o usuário é feito através de um script que é executado pelo GOsa na hora da criação do usuário. É importante frisar que é possível colocar outras tarefas nesse arquivo, tais como definição de quotas.

Como o script é executado pelo GOsa, é necessário dar permissão de administrador para o usuário do apache para executar esse script. Se não fizer isso não será possível a criação dos diretórios. Altere o arquivo /etc/sudoers, como definido a seguir.

  • /etc/sudoers
    www-data	ALL=(ALL) NOPASSWD:ALL

Com a configuração do sudo pronta, vamos configurar o GOsa para executar o script "create_user.sh" toda vez que um usuário for criado e "delete_user.sh" toda vez que um usuário for apagado do GOsa.

  • /etc/gosa/gosa.conf

Altere o arquivo gosa.conf, acrescentando a linha abaixo no plugin do posixAccound. Este plugins já existe no arquivo, é preciso apenas completar a linha com as variáveis postcreate e postremove.

<plugin acl="default" class="posixAccount" icon="posix.png" path="plugins/personal/posix" postcreate="/usr/bin/sudo /etc/gosa/create_user.sh %uid" 
postremove="/usr/bin/sudo /etc/gosa/delete_user.sh %uid">
</plugin>

 A seguir estão os dois scripts que serão executados pelo GOsa. Lembre-se de criá-los no diretório /etc/gosa/.

  • create_user.sh

#!/bin/bash
HOME=$(getent passwd $1| sed -n -e /^$1:x:[[:digit:]]*:[[:digit:]]*:.*:\(.*\):.*/{s//\1/;p;q;})
if [[ -d $HOME ]]; then
        exit 1
fi
GROUP=$(getent passwd $1| sed -n -e /^$1:x:[[:digit:]]*:\([[:digit:]]*\):.*/{s//\1/;p;q;})
mkdir $HOME
chown $1:$GROUP $HOME

 

  • delete_user.sh

     

#!/bin/bash
HOME=$(getent passwd $1| sed -n -e /^$1:x:[[:digit:]]*:[[:digit:]]*:.*:\(.*\):.*/{s//\1/;p;q;})
if [[ -d $HOME ]]; then
     rm -rf $HOME
fi

 3. Recursos do GOsa

Com o Gosa instalado e os scripts para criar os diretórios funcionando, vamos criar os usuários no GOsa. O Processo é bem simples. Na tela iniciar como mostra a figura 1, acesse o ícone "Create User".

Figura – Browser de usuários

Em seguida uma tela com o cadastro do usuário é aberto. A primeira tela de cadastro é sobre informações gerais do usuário. Preencha com cuidado os campos "last name","first name", "login", como mostra a figura 2. Também é possível enviar uma foto.

Figura 2 – Informações gerais sobre o usuário

Com as informações gerais criadas, click na aba "UNIX" para criar a conta Unix deste usuário. Preencha as informações tomando cuidado para a opção "Home Directory" que será o diretório do usuário. Para este exemplo estamos criando dentro do diretório /home/arquivos, como mostra a figura 3. Verifique se o diretório "arquivos" existe dentro do diretório home. Nesta aba também é possível definir os grupos de trabalho. Lembrando que os usuários que estiverem dentro do grupo "Domain Admins" podem colocar as máquinas no domínio.

Figura 3 – Criação da conta UNIX

Após a criação da conta "UNIX", click na aba "SAMBA" para criar a conta do SAMBA. Mude a unidade de rede para L:. Olhe as propriedades de travar conta de usuário, data para trocar senhas, como mostra a figura 4.

Figura 4 – Criação da conta SAMBA

Ao termino da configuração click na opção "SAVE" e o sistema vai solicitar a senha do usuário.

  • Template

A criação dos template é um facilitador para a criação das contas dos usuários. As permissões, grupos e propriedades são automaticamente passados para os usuários. Par criar um novo template, click no ícone "Create New Template" no browser de usuário, como mostra a figura 5.

Figura 5 – Criação do template

A próxima tela é para definir o nome do template e algumas propriedades gerais, como mostra a figura 6.

Figura 6 – Definição do nome do template

Para criar a conta UNIX, click na aba "UNIX" e defina as propriedades do usuário. Perceba que no campo "Home Directory" ficou com o valor "/home/arquivos/%uid", como mostra a figura 7. No lugar do %uid vai entrar no login do usuário quando um novo usuário for criado utilizando este template.

Figura 7 – Criação da conta UNIX pelo template

Na aba "SAMBA" crie a conta geral do SAMBA, como mostra a figura 8.

Figura 8 – Criação da conta SAMBA do Template

Ao criar um novo usuário, o GOsa vai perguntar em qual template será criado e todas as propriedades serão passada ao usuário evitando erros, como mostra a figura 9.

Figura 9 – Criação de usuário pelo Template

O GOsa trabalha com ACLs, portanto você pode definir quais usuários podem criar outros usuários, quais podem alterar a senha e assim por diante.

Com o GOsa e os usuário criados, vamos passar para a configuração do SAMBA.

4. Configuração do Samba

O arquivo de configuração do SAMBA tem uma particularidade bem interessante. Todas as configurações ficam dentro de um contêiner que inicia com uma palavra entre "[ ]". Todos as seções que abre com "[ ]" são compartilhamentos criados, exceto o primeiro que é o global que define toda a configuração para o servidor. Antes de começar a configuração vamos fazer a instalação do SAMBA.

[root@cabeca]# apt-get install samba

A seguir temos um arquivo de configuração do samba, este arquivo está bem completo e pode ser utilizado para um servidor em produção, após alguns ajustes de acordo com a sua necessidade.

  • /etc/samba/smb.conf

A seguir temos o arquivo smb.conf que é o arquivo de configuração do SAMBA, por questão didática, colocamos os comentários do comando logo a frente do comando, e todos os parâmetros que estão em negrito devem ser alterados de acordo com a sua configuração. Este arquivo de configuração está configurado para um cenário que tem vários usuários acessando o servidor e tem um compartilhamento chamado "GERAL" para gravar arquivos em comuns. Os profiles dos usuários ficarão no servidor e quando o usuário realizar o login no Windows será executado um script que vai ajustar à hora do computador de acordo com o servidor e fazer o mapeamento do geral.

O arquivo smb.conf a seguir está todo colorido bem carnavalesco, coloquei desta forma para agrupar os parâmetros afim.

[global]

#Abre a seção da configuração Principal.

netbios name = BACULO

#Esta função define o nome da máquina na rede Windows.

workgroup = BACULO.NET

#Define o grupo que a mais vai estar no windows ou o domíno.

server string = Servidor de Arquivos e Autenticao

#Descrição sobre o servidor Samba

name resolve order = lmhosts wins bcast

#Essa opção define a ordem que será utilizado para resolver nome/IP

map to guest = Bad User

#Define que a conta guest vai ser usada na rede (lembre-se de

#liberar o "guest ok =yes" nos compartilhamentos que guest terá

#acesso

guest account = nobody

#Define qual usuário do unix será usando como guest

null passwords = No

#Permite ou não um usuário acessar a conta com a senha em branco.

security = user

#Define que a segurança vai ser por usuário autenticado.

encrypt passwords = Yes

#Samba vai aceitar cryptografia. WinNT 4.0 SP3 e superiores

update encrypted = Yes

 

interfaces = eth0 192.168.10.0/24

#Especifica a interface de rede que o samba vai trabalhar, se forem

#todas as interfaces, comente essa opção. É possível também

#especificar a rede.

passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*

#Habilita alteração de senha pelo windows.

passwd program = /usr/sbin/smbldap-passwd %u

#Programa para alterar a senha

log level = 1

#Habilita o nível de debug

syslog = 1

#Mapeia o log para ser registrado pelo syslog

log file = /var/log/samba/%m.log

#Define que os logs serão feitos por nome da maquina (%m).

printcap name = /etc/printcap

#Define o arquivo de configuração da impressora. Se estiver usando

#cups mude essa opção.

max log size = 100000

#Tamanho máximo do arquivo de log (Kilobytes)

time server = yes

#O samba passa a ser um servidor de Time para as máquinas Windows

os level = 200

#Este parâmetro define o nmbd master da rede. Maior número

local master = Yes

#Define que o servidor poderá se tornar o servidor master da rede

domain master = Yes

#Este parametro trocar o workgroup em um domínio

preferred master = Yes

#Define que o servidor de preferencia na eleição de domínio na rede

domain logons = Yes

#Este parâmetro permite que maquina win9x tenha netlogon no domínio

logon script = logon.vbs

#Define o script que vai ser executado na hora do login.

logon path = \\BACULO\profiles\%U

#Define o local de armazenamento do perfil

logon drive = L:

#Define a letra da únidade do HOME

wins support = Yes

#O Samba passa a ser o servidor Wins da Rede

admin users = "@Domains Admins",root

#Define os usuários/grupos que serão os administradores do domínio

ldap passwd sync = Yes

#Permite que sincronizar a senha do Samba com NT e LM hash, quando

#a senha for alterada pelo windows.

ldap delete dn = No

#Não permitir que o samba apague o usuário. Somente o Gosa faz

#isso.

passdb backend = ldapsam:ldap://localhost

#Configurações do servidor LDAP

ldap admin dn = cn=Manager,dc=trigo

#Define o administrador da base LDAP

ldap suffix = dc=trigo

#Define o suffix da base LDAP

ldap ssl = no

#Define se o LDAP está com SSL ou não

ldap user suffix = ou=people

#Define o suffix que ficarão os usuários

ldap group suffix = ou=groups

#Define o suffix que ficarão os grupos

ldap machine suffix = ou=computers

#Define o suffix que ficarão as contas dos computadores

ldap idmap suffix = ou=Idmap

#Define o suffix que ficarão os idmaps para o winbind

ldap replication sleep = 5000

#Valor em milisegundos

add machine script = /usr/sbin/smbldap-useradd -a -w %m

#Script para criar maquina no LDAP

recycle:exclude = *.tmp *.temp *.o *.obj ~$*

#Define os arquivos que não serão gravados na lixeira

recycle:keeptree = Yes

#Cria diretório dos arquivos deletados, fica mais organizado

recycle:touch = Yes

#Se a data do arquivo eliminado pode ser trocado pela data da

#exclusão. Muito útil para limpar a lixeira

recycle:versions = Yes

#Permite fazer backup de versão de arquivos repetidos

recycle:noversions = *.doc|*.xls|*.ppt|*.dwg|*.dxf|*.txt

#Não faz backup dessas extensões de arquivo

recycle:repository = /home/lixeira/%U

#Local que vai ser armazenado os arquivos deletados

recycle:maxsize = 1000000

#Define em bytes o tamanho máximo de um arquivo que vai encaminhado

#para a lixeira. O valor zero é sem limite.

vfs objects = recycle audit

#Habilita o modulo de lixeira e o sistema de auditoria

default case = lower

#Usa internamente caixa baixa

case sensitive = no

#Desabilita o case sensitive

unix charset = iso8859-1

#Define o charset do UNIX que vai ser mostrada no compartilhamento

display charset = iso8859-1

#Define o charset que irá utizar para imprimir as mensagens, o

#padrão é utizar o valor do "LOCALE", ou você pode definir.

fstype = NFS

 

idmap uid = 10000-15000

#Mapeamento de uid para o idmap winbind

idmap gid = 10000-15000

#Mapeamento de gid para o idmap winbind

nt acl support = Yes

#Habilita o suporte de acl do net. Lembre-se de ativar partição

protocol = NT1

 

announce as = NT Server

#Define o tipo de servidor que vai anunciar o nmbd

announce version = 4.5

#Define a versão do servidor

template shell = /bin/false

#Desabilita o shell, no preenchimento das informações pelo winbnind

set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

#Script que define o grupo principal de cada usuário.

winbind use default domain = no

#Define que não vai usar idmap para os usuários

read raw = Yes

#Habilita pacotes de 65.535 bytes, alguns clientes não conseguem

#suportar essa negociação.

write raw = Yes

#Habilita o raw write quando os dados são transferidos do cliente

Level2 oplocks = yes

#Aumenta o acesso aos arquivos que não são escritos, tais como exe

max xmit = 65535

#Determina o tamanho máximo de um pacote que será negociado pelo

#samba. O valor 65535 é o maior.

dead time = 15

#Valor decimal que representa o número de minuto inativo para

#considerar que a conexão esta morta de desconectar.

getwd cache = Yes

#Essa é uma refinamento na performace. Ativa um algoritmo de

#caching o que reduzir o tempo necessário para getwd().

socket options = IPTOS_LOWDELAY TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE=100

#Opção para inicialização do socket

[homes]

#Cria o compartilhamento Home

comment = Diretório Home

#Comentário sobre o compartilhamento

valid users = %S

#usuário que pode acessar o compartilhamento. Apenas o dono (%S)

browseable = no

#Indica que a diretória não aparece ao fazer o network browse

writeable = yes

#Mostra o compartilhamento

printable = no

#Habilita a opção de impressão(impressora) no compartilhamento

read only = no

#Define que o compartilhamento não é somente leitura

available = yes

#Define que o compartilhamento esta disponível.

inherit permissions = yes

#Herda permissão de arquivos e diretório do diretório home

follow symlinks = no

#Desabilita o acesso a links

wide links = no

#Define se os arquivos com links fora do diretório serão acessados

force directory mode = 0771

#Força a permissão dos diretórios

force create mode = 0771

#Força a permissão dos arquivos

force group = administrators

#Força que o grupo seja administradores

create mode = 0771

#Define a permissão que será aplicada ao criar um arquivo

directory mode = 0771

#Define a permissão que será aplicada ao criar um diretório

map archive = yes

#Habilita os mapeados de bits do dos para UNIX quando um arquivo é

#modificado.

map system = no

#Define se o estilo do DOS vai ser mapeado para execução UNIX

map hidden = no

#Define se o estilo do DOS para arquivos ocultos vai ser mapeado

#para UNIX

[Geral]

#Compartilhamento Geral

comment = Area Publica para todos

#Comentário sobre o compartilhamento

path = /home/arquivos/geral

#Caminho do diretório que será utilizado como geral

browseable = Yes

#Indica que a diretória aparece ao fazer o network browse

public = Yes

#Torna o compartilhamento público

[netlogon]

#Compartilhamento que ficarão os script para execução

comment = NetLogon Script

#Comentário sobre o compartilhamento

path=/etc/samba/netlogon

#Diretório que ficarão os scripts

public = no

#Não é um compartilhamento público

browseable = no

#Indica que a diretória não aparece ao fazer o network browse

read only = yes

#Define o compartilhamento como somente leitura

printable = no

#Não habilita a opção de impressão(impressora) no compartilhamento

Level2 oplocks = yes

#Aumenta o acesso aos arquivos que não são escritos, tais como exe

write list = "@Domains Admins"

#Define o grupo que pode escrever no compartilhamento

[profiles]

#Compartilhamento para armazenar os profiles dos usuários

comment = Network User Profiles

#Comentário sobre o compartilhamento

path = /home/profiles

#Diretório que ficarão os profiles

read only = no

#Define que o compartilhamento não é somente leitura

create mask = 0700

#Define a permissão para arquivos criados

directory mask = 0700

#Define a permissão para diretórios criados

Browserable = no

#Indica que a diretória não aparece ao fazer o network browse

 Pegue o arquivo smb.conf limpo.

Após fazer a configuração do arquivo smb.conf, vamos ajustar os compartilhamentos do netlogon e do profile.

  • Netlogon

O compartilhamento netlogon é criado para executar um script na hora do login da máquina na rede. O parâmetro "logon script" do smb.conf define como vai ser o script de logon e o nome. Em nosso caso estamos utilizando apenas um script para todos os usuários, e este script tem o nome de "logon.vbs". Tem caso que é necessário executar um script por usuário ou por grupo.

Crie o arquivo logon.vbs dentro do "/etc/samba/netlogon", se não existir a diretório netlogon, deve ser criado. Lembre-se de criar este arquivo no Windows porque ele é executado no Windows. Se fizer no Linux pode dar algum tipo de erro.

  • /etc/samba/netlogon/logon.vbs

' VBScript.
'WScript.Echo(Mapeando...)
Dim net
Set objShell = CreateObject(Wscript.Shell)
Set net = CreateObject(WScript.Network)
net.MapNetworkDrive g:, \\BACULO\geral, False
objShell.Run net time \\BACULO /set /y, 0, TRUE

 Para o Windows alterar a hora, é preciso alterar o GPO do XP para permitir os usuários altere as datas.

  • Profiles

No compartilhamento profiles ficam todos os perfis dos usuários. Crie o diretório "/home/profiles" caso não exista.

Após essas configurações, é testar os parâmetros do SAMBA e em seguida passar a senha do administrador do LDAP (no nosso exemplo é o cn=mananger,dc=trigo) para o samba.

[root@cabeca]# testparm

 

Se não aparecer nenhum erro, continue.

[root@cabeca]# smbpasswd -w senha_do_manager<br />
  • Lixeira

Para o funcionamento da função lixeira, é preciso criar o diretório /home/lixeira e mudar a permissão para permitir que os arquivos apagados sejam encaminhados para o diretório definido.

[root@cabeca]# mkdir /home/lixeira 
[root@cabeca]# chmod 777 /home/lixeira

 Os usuários não terão acesso diretamente aos arquivos apagados.

  • Auditoria

Para ativar o sistema de auditoria nas pastas, é necessário acrescentar a seguinte entrada no /etc/syslog.conf.

.*;user.!warn;authpriv.none;cron.none;mail.none;news.none   /var/log/samba/audit.log

 

Crie o arquivo /var/log/samba/audit.log. Neste arquivo que ficarão os logs da auditoria nas pastas.

[root@cabeca]# touch /var/log/samba/audit.log

 Agora podemos iniciar o samba.

[root@cabeca]# /etc/init.d/samba restart

 5. Adicionando Windows no domínio Samba

Com todas as configurações prontas, vamos colocar uma maquina no domínio e fazer os testes. Com o arquivo smb.conf acima foi possível fazer alteração de senha pelo Windows , recuperar arquivos apagados através da lixeira, armazenar o perfil dos usuários no servidor.

A figura 10 mostra o Windows XP entrando no domínio. A conta da máquina é criada automaticamente na base LDAP.

Figura 10 – Windows entrando no domínio

Com a máquina no domínio, os usuários cadastrados na LDAP podem fazer login e o mapeamento da unidade home e do compartilhamento Geral devem ser feitos. A sincronização da hora com o servidor também deve ser feito no login.

  • Mapeamento

    Figura 11 – Mapeamento

Agora temos um servidor de autenticação completo.


Fonte: http://www.nisled.org/?p=763

22 comentários

Enviar um comentário
  • 8b67fca5b3195cfe2067cc53ad760094?only path=false&size=50&d=404J (Encrypted Flash Drive Guy)(usuário não autenticado)
    8 de Fevereiro de 2011, 9:07

    http://www.lok-it.net/encrypted-flash-drive/

    For installing a Gentoo Samba server we have some points for preparation as, Active Directory should be implemented and working; window system should be secured and patched, also Gentoo Linux to be installed. Must have installed some utils, openldap, Kerberos, samba and openldap doesn’t need to be configured. After these points you should follow the instructions of installation.


  • C02232f5bd7fc247ae3e0bd1b3b46e2d?only path=false&size=50&d=404http://www.lok-it.net/encrypted-flash-drive/(usuário não autenticado)
    21 de Abril de 2011, 5:00

    USB Encryption

    Thanks for the huge information about installation and configuration of LDAP and GOSA. These guidelines are very helpful. The only thing that I have to change is when the script creates a user, it's missing the object class "Gosaaccount" but it wasn't hard to correct this in the script. I'm only just starting to use GOSA but actually it is looking good.


Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.