Archive for the tag 'profiles'

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

clodonil June 15th, 2009

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.