Samba4 integrado com Samba/Winbind e PAM

Introdução

Neste artigo irei mostrar a integração do Serviço de Diretórios(Active Directory) já nativo no SAMBA4, e sua interpolaridade com outros softwares assim como samba 3.x, postfix, webmin, sshd entre outros softwares,  através de autenticação via modulo WINBIND + PAM. A interpolaridade hoje em dia é muito difundida, pois de forma geral e definida como sendo a capacidade de plataformas diferentes atuarem plenamente em conjunto, comunicando-se por intermedio de padrões abertos, neste caso em especial o SAMBA4 pode ser utilizando tanto por aplicativos utilizandos pelo windows como no linux de uma maneira em especial a comunicação entre o Serviço de Diretório(Active Directory) entre aplicativo utilizados no Linux.

O Wibind nesta estrutura é usado na relação de confiança entre domínios e o samba, neste caso entre domínio configurado no SAMBA4 e o SAMBA3x, assim fazendo a troca de informações de usuários e serviços de rede.

O PAM(Pluggable Authentication Modules, ou Módulos de Autenticação Plugáveis/Modulares) é uma biblioteca que permite autenticar usuários em ambientes como GNU/Linux, Unix ou Solaris. A autenticação no Linux era apenas via senhas criptografadas armazenadas em dois arquivos locais chamados /etc/passwd e /etc/shadow, quando um programa que exige login pede o nome do usuário e a senha, criptografava a senha e comparava o resultado com o armazenados nestes arquivos, se fossem iguais, garantia o acesso à máquina se não era regeitado o pedido.

A Sun® criou o PAM  e liberou as especificações em forma de RFC.

Os modulos PAM são divididos em quatro categorias, definindo os tipos diponiveis, no linux, normalmente estão localizados

no diretório /etc/pam.d/. Nestes arquivos, a linha de configuração é dada como:

auth:

Verifica que o usuário é realmente quem ele diz que é. Pode ser bem simples, pedindo apenas por um nome e uma senha, ou utilizando autenticação biométrica, por exemplo (como uma impressão de voz, uma imagem da retina ou impressão digital).

account:

Verifica se o usuário em questão está autorizado a utilizar este serviço ao qual ele está se autenticando. Os módulos aqui podem checar por horário, dia da semana, origem do login, login simultâneo, etc.

passwd:

Este serviço é usado quando se deseja mudar a senha. Por exemplo, aqui podem ser colocados módulos que verificam se a senha é forte ou fraca.

session:

A session fica encarregada de fazer o que for necessário para criar o ambiente do usuário. Por exemplo, fornecer o acesso a alguns dispositivos locais como o de áudio ou cdrom, montar sistemas de arquivos ou simplesmente fazer o registro do evento nos arquivos de log do sistema.

O control-flag é utilizado para indicar de que forma a biblioteca do PAM reagirá ao sucesso ou falha do módulo que está associado, alguns control-flag:

required:

O resultado deste módulo influência diretamente o resultado final. Uma falha em um módulo deste tipo só aparecerá para o usuário após todos os outros módulos desta classe serem executados.

requisite:

Se a autenticação do módulo falhar nega a autenticação imediatamente.

sufficient:

A falha deste módulo não implica em falha da autenticação como um todo. Se o módulo falhar, o próximo da classe é executado. Se não houver próximo, então a classe retorna com sucesso.

optional:

Os módulos marcados como optional praticamente não influenciam o resultado da autenticação ele só é significante se o módulo for único em relação ao serviço ou classe.

Ambiente

Instalação e requisitos do servidor Samba4:

https://diegograssato.wordpress.com/2009/10/06/instalacao-e-configuracao-samba4/

Configurações da máquina “MAIL”:

• Linux: Ubuntu Server 9.10, instalação mínima com o sistema básico e OpenSSH:

http://www.ubuntu.com/getubuntu/download-server

Após a instalação será instalado os seguintes pacotes:

#apt-get install samba samba-common smbclient smbfs winbind krb5-config krb5-user libpam-krb5 finger quota ntpdate nmap

Alguns pacotes foram adicionados para sincronização de horário e verificação de rede “ntpdate e nmap      “.

Configurações

A primeira coisa a ser feita é sincronização da hora da máquina com o servidor, use este comando:

#net time set -S tux.org

Para agilizar o processo adicione esta linha em “/etc/rc.local”, toda vez que o micro iniciar ele irá sincronizar o seu horário.

Agora o primeiro passo é fazer a configuração do cliente kerberos em “/etc/krb5.conf”, faça uma backup antes do arquivo original:

#mv /etc/krb5.conf /etc/krb5.conf-default

Segue conteúdo do arquivo:

#vim /etc/krb5.conf

[libdefaults] default_realm = TUX.ORG

[realms]

TUX.ORG = {

kdc = tux.org:88

admin_server = tux.org:749

default_domain = tux.org

kpasswd_server = tux.org:88

}

[domain_realm]

.tux.org = TUX.ORG

tux.org = TUX.ORG

Em seguida, vamos testar a comunicação com o SAMBA4 utilizando

#kinit administratorPassword for administrator@TUX.ORG:

Kerberos.

# klist Ticket cache: FILE:/tmp/krb5cc_0_U3eIEX

Default principal: administrator@TUX.ORG

Valid starting     Expires            Service principal

01/06/10 00:10:30  01/07/10 00:09:59 krbtgt/TUX.ORG@TUX.ORG

Digite a senha, e vamos testar se ele adquiriu as credenciais:

Pronto!

Em seguida, vamos editaremos o arquivo nsswitch.conf, o arquivo Network Services Switch (/etc/nsswitch.conf) determina a ordem das buscas realizadas quando uma certa informação é requisitada, exatamente como o arquivo /etc/host.conf determina o modo como

# vi /etc/nsswitch.conf

pesquisas de hosts são executadas.

E alterar as linhas:

passwd: compatgroup:  compat

shadow: compat

DE:

passwd: compat winbindgroup:  compat winbind

shadow: compat winbind

PARA:

O ambiente está preparado para receber o SAMBA/Winbind.

Configurando o Samba/Winbind

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

Vamos fazer backup do arquivo original e depois vamos criaremos o nosso arquivo de configuração:

[global]# Segue apenas um comentario que ira parecer no seu ambiente de rede.

comment = Servidor MTA SAMBA 4

# Defini o nome do Grupo de Trabalho , Nesse caso nosso SAMBA4

workgroup = TUX

#Nome de NetBIOS da sua maquina, que aparecerece no ambiente de rede

netbios name = MAIL

# Define o nome do Servidor samba local

server string = SAMBA 4 MTA %v

netbios aliases = MAIL.TUX.ORG

unix charset = ISO-8859-1

#Desabilita Impressao

load printers = no

#Arquivo de log

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

#Tamanho maximo de LOGs

max log size = 500

# Nome do dominio do SAMBA4(Active Directory)

realm = TUX.ORG

security = ads

#Metodo Utilizado na Autenticacao WINBIND

auth methods = winbind

#Servidor onde estao as senhas “*” aceita qualquer entrada voce pode #indicar o endereco do IP do servidorpassword server = *

#Não aceita senhas nulas

null passwords = no

#As  senhas serao transitadas criptografadas

encrypt passwords = true

# Define o nivel de debugacao do arquivo log

debug level = 1

# Verifica a comunicacao a cada 20 segundo

keep alive = 20

# Separador do Winbind, (usado DOMINIO[+,/,@]usuario-do-dominio)

winbind separator = +

winbind cache time = 15

winbind enum users = yes

winbind enum groups = yes

#Configura o Winbind para buscar direto no dominio, ou em caso de no, #obriga a usar o separador

winbind use default domain = yes

# IDs que os usuarios do Dominio (no caso trazidos pelo Winbind) podem #assumir

idmap uid = 10000-20000

# IDs que os grupos do Dominio (trazidos pelo Winbind) podem assumir

idmap gid = 10000-20000

#Opcoes que configuram o socket para o tipo de acesso do server (no #caso rede ads, ou NT, ou Samba)

socket options =  IPTOS_LOWDELAY TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

# Os level alto para que as eleiçs para controlador sejam garantidas, #a ele, neste caso vai ser baixo, pois

#o Controlado e o SAMBA4

os level = 233

#Determina se este servidor vai ser o principal, neste caso “no” pois #o MASTER e o SAMBA4

domain master = no

#Servidor master preferido, definido como “no”, pois quem e o #PREFERIDO e o SAMBA4

preferred master = no

# Aceita os logons dos clientes

domain logons = no

#Servidor MASTER local definido como “no”, pois o SAMBA4 e o MASTER

local master = no

#Diz ao samba se e ou nao para tentar resolver nomes ntbios atraves do nslookup do dns

dns proxy = no

#Desativa ssl do ldap

ldap ssl = no

#Define um shell valido aos usuarios

template shell = /bin/bash

#Home do usuario ja define onde irao ficar os emails

# Path que sera criado o home de um usuario novo #(/home/DOMINIO/usuario)

template homedir = /home/%D/%U

# Permite acesso apenas da sua rede local, basta substituir o endereco #pelo da sua rede se#hosts allow = 192.168.11., 10.10.10.

#Válida o usuário

valid users = %S

#diz para nao modificar o nome do arquivo enviado

preserve case = yes

#Faz o samba intender letras minusculas como minusculas

short preserve case = yes

Criado o arquivo de configuração, vamos reiniciar os serviços do Samba e do Winbind:

# /etc/init.d/samba restart# /etc/init.d/winbind restart
# net ads join -U administrator -S TUX.ORGEnter administrator’s password:

Using short domain name — TUX

Joined ‘MAIL’ to realm ‘tux.org’

Colocando a máquina em domínio.

# wbinfo -tchecking the trust secret via RPC calls succeeded

Verificando se o Winbind está comunicando com o SAMBA4:

# wbinfo –uadministrator

guest

anna

clodonil

diego

dns

root

zeh

Listando Usuários que estão cadastrados no SAMBA4:

Utilizaremos shell script para criação dos diretorios HOMEs dos usuários setando suas permissões de acesso, este script foi retirado de “http://www.vivaolinux.com.br/artigo/Postfix-+-AD-%28Active-Directory%29?pagina=9 e editador por mim, você pode fazer as alterações que achar necesseário ao seu ambiente:

#!/bin/bashclear

echo ” ————————————————————“

#Variveis

######## QUOTAS

TAM=3000000

TAMAX=3000001

ARQ=999

ARQM=1000

#############################################

DOMAIN=”TuX”

CADOMAIN=”/etc/$DOMAIN”

if [ -d $CADOMAIN ] && [ -f $CADOMAIN/local ] ; then

echo ” ————————————————————“

echo

echo ” $DOMAIN, CONFIGURADO CORRETAMENTO, PROCEGUINDO….. “

echo

echo ” ————————————————————“

echo

sleep 3

clear

else

echo ” ————————————————————“

echo ” $DOMAIN, AINDA NAO CONFIGURADO “

mkdir -p $CADOMAIN

#rm  $CADOMAIN/*

touch $CADOMAIN/local

echo ” DOMINIO $DOMAIN, SERA CONFIGURADO EM: $CADOMAIN ”

echo

echo ” ARQUIVO LOCAL , SERA CONFIGURADO EM: $CADOMAIN/local ”

echo

#ls -al $CADOMAIN

echo ” ————————————————————“

echo

sleep 3

clear

fi

ARQ_AD=”$CADOMAIN/AD”

ARQ_LOCAL=”$CADOMAIN/local”

ARQ_CRIA=”$CADOMAIN/cria”

ARQ_DELETE=”$CADOMAIN/deleta”

HOME=”/mail”

echo ” ————————————————————“

echo ” ————————————————————“

#Gerando lista de usuáos no AD por ordem alfabéca

echo ” Buscando usuarios no samba4 “

wbinfo -u | grep -v ‘\$’ | sort > $ARQ_AD

echo “Comparando usuarios buscadso com os que já existem e salvando “

#Comparando a lista nova com a lista existente p/ criar users

comm -13 “$ARQ_LOCAL” “$ARQ_AD” > “$ARQ_CRIA”

mail=`cat $ARQ_CRIA`

contador=0

ini=`echo $mail | wc -w`

while [ $contador -ne $ini ]

do

contador=`expr $contador + 1`

done

echo ” Existem $contador caixas de email a serem configuradas “

sleep 2

#Criando Diretorio HOME

for i in $(cat $ARQ_CRIA)

do

if [ -d $HOME/$i ]; then

teste(){

echo

echo ” Ja existe a pasta para o usuario $i “

echo ” Desja setar permissoes e cria Maildir? [Ss/Nn] “

read RESPOSTA

case $RESPOSTA in

S|s)

uid=`wbinfo -i $i |awk -F “:” ‘{print $3}’`

gid=`wbinfo -i $i |awk -F “:” ‘{print $4}’`

chown -R “$i”:mail $HOME/”$i”

chown -R “$uid”:”$gid” $HOME/”$i”

setquota -u “$i” “$TAM” “$TAMAX” “$ARQ” “$ARQM” -a $HOME/”$i”

echo ” Criando Maildir do usuario -[ $i ]- com quota de $TAM maximo $TAMAX “

;;

N|n)

echo ” Terminando Processamento “

echo ” Ignorado usuario $i, passando para o proximo “

;;

*) echo ” Opcao Invalida! “

teste

;;

esac

}

teste

else

mkdir $HOME/”$i”

maildirmake $HOME/”$i”/Maildir

uid=`wbinfo -i $i |awk -F “:” ‘{print $3}’`

gid=`wbinfo -i $i |awk -F “:” ‘{print $4}’`

chown -R “$i”:mail $HOME/”$i”

chown -R “$uid”:”$gid” $HOME/”$i”

setquota -u “$i” “$TAM” “$TAMAX” “$ARQ” “$ARQM” -a $HOME/”$i”

echo ” Criando Maildir do usuario -[ $i ]- com quota de $TAM maximo $TAMAX “

echo

fi

done

echo ” ————————————————————“echo ” Acertando configurações “

echo ” ————————————————————“

echo

#Copiando usuarios novos na base local e ordena alfabeticamente

echo ” Copiando os novos usuarios na base local e ordenando em ordem alfabetica “

cat “$ARQ_CRIA” >> “$ARQ_LOCAL” && cat “$ARQ_LOCAL” | sort > “$ARQ_CRIA” && cat “$ARQ_CRIA” > “$ARQ_LOCAL” && rm “$ARQ_CRIA”

#Comparando a lista existente com a lista nova p/ remover users

echo ” Comparando a lista existente com a nova para remover usuarios inativos “

comm -23 “$ARQ_LOCAL” “$ARQ_AD” > “$ARQ_DELETE”

#Deletando diretorio HOME de usuários inativos

for i in $(cat $ARQ_DELETE)

do

rm -rf $HOME/”$i”

echo ” Deletando usuario -[ $i ]- inativo “

done

echo ” Deleta arquivos antigos e ordenando os novos usuarios “

cat “$ARQ_DELETE” >> “$ARQ_LOCAL” && sort “$ARQ_LOCAL” > “$ARQ_DELETE” && uniq -u “$ARQ_DELETE” > “$ARQ_LOCAL” && rm “$ARQ_DELETE”

echo ” ————————————————————“

echo

# getent passwdadministrator:*:10000:10000:Administrator:/home/TUX/administrator:/bin/bash

guest:*:10001:10001:Guest:/home/TUX/guest:/bin/bash

anna:*:10005:10000:anna:/home/TUX/anna:/bin/bash

clodonil:*:10016:10000:clodonil:/home/TUX/clodonil:/bin/bash

diego:*:10002:10000:diego:/home/TUX/diego:/bin/bash

dns:*:10003:10000:dns:/home/TUX/dns:/bin/bash

root:*:10019:10000:root:/home/TUX/root:/bin/bash

zeh:*:10008:10000:zeh:/home/TUX/zeh:/bin/bash

Testando se o samba está realmente buscando os uasuários do SAMBA4 e puxando se GUIDs e a pasta HOME:

#finger diegoLogin: diego                 Name: Diego Pereira Grassato

Directory: /home/MAIL/diego              Shell: /bin/bash

Never logged in.

No mail.

No Plan.

Podemos usar o comando “finger” para mostrar as informações de cada usuário:

Configurando SSHD

Agora vamos testar todo este sistema de autenticação com o aplicativo de acesso remoto a servidores mais utilizado o SSH(Secure Shell), vamos instala-lo e configura-lo:

#apt-get install openssh-server openssl#vi /etc/ssh/sshd_config

#vi /etc/pam.d/sshd#PAM configuration for the Secure Shell service

auth    required     pam_winbind.so

account required     pam_winbind.so

session required     pam_winbind.so

password required     pam_winbind.so

Descomentaremos a seguinte linha “UsePAM yes”, que será reponsavél pela busca dos usuários via PAM, agora editaremos o arquivo “sshd” em “/etc/pam.d”:

#/etc/ini.d/ssh restart

Reinicie o daemon sshd:

#ssh administrator@localhost Password:

Last login: Tue Jan  5 22:59:05 2010 from tux.org

administrator@localhost:~$

Vamos testar a autenticação:

#administrator@localhost:~$ pwd/home/TUX/administrator

OK! Funcionando, agora testaremos se o samba direcionou para o diretório home do usuário:

Direcionado!

#apt-cache search webmin

webmin – A web-based administration interface for Unix systems.

#apt-get install webmin

Este é um simples exemplo de sincronização de usuário entre aplicativos, também podemos usar está mesma configuração via modulo PAM_WINBIND a outros aplicativos, agora um exemplo com o software WEBMIN que é usado para administração remota de configurações de servidores via Web, iremos instalar e fazer as configurações necessarias:

#vi /etc/pam.d/webmin

No final da instalação ele pedirá algumas informações sobre acesso e usuário administrador, após a instalação acessaremos o webmin via web, pelo “IP+:10000”, autentique com o usuário criado, agora editaremos o modulo PAM responsavél pela busca de usuários do webmin:

#Webmin web-based administration interface for Unix systemsauth    required     pam_winbind.so

account required     pam_winbind.so

session required     pam_winbind.so

password required     pam_winbind.so

Apague seu conteúdo e coloque este:
Agore mudaremos as configurações de autenticação do webmin siga os seguintes passos:  Webmin -> Configuração do Webmin -> Autenticação”, marque as opções “Utilizar autenticação PAM para Unix, se disponível” e “Support full PAM conversations?”, a tela irá ficar mais ou menos assim:

Quando a autenticação de sessão está habilitada, cada sessão de usuário autenticado será acompanhada pelo Webmin, possibilitando que usuário inativos sejam automaticamente desconectados. Tenha em mente que habilitar ou desabilitar autenticação de sessão pode forçar todos os usuário s se autenticarem novamente.

Agora salve as configurações fala logof e tente autenticar com algum usuário que esteje cadastrado no SAMBA4 e voilaaa!!! autenticou!!!

Podemos adicionar um nivél a mais de segurança em nas autenticações de nossos usuários adicionado aos módulos de autenticação o modulo “pam_krb5.so”, assim quando o usuário fazer a autenticação será gerado um ticket de autenticação, segue o exemplo do sshd:

#vi /etc/pam.d/sshd

# PAM configuration for the Secure Shell service

auth    required     pam_winbind.so

auth    required        pam_krb5.so use_first_pass

account required     pam_winbind.so

account required    pam_krb5.so use_first_pass

session required     pam_winbind.so

session required      pam_krb5.so use_first_pass

password required     pam_winbind.so

password required     pam_krb5.so use_first_pass

#ssh administrator@localhost Password:

Last login: Wed Jan  6 00:47:13 2010 from localhost

#administrator@localhost:~$

Verificando se realmente foi criada as credenciais de autenticação:

#administrator@localhost:~$ klistTicket cache: FILE:/tmp/krb5cc_10000_SLGN6I

Default principal: administrator@TUX.ORG

Valid starting     Expires            Service principal

01/06/10 01:18:26  01/06/10 11:18:55  krbtgt/TUX.ORG@TUX.ORG

renew until 01/06/10 11:18:55

#administrator@localhost:~$

OK! Ele adquiriu os tickets de autenticação relamente!, voçê pode fazer a mesma coisa o com webmin, caso você não queira complicar muito pode usar tando o modulo “pam_krb5.so” enquanto “pam_winbind.so”, o “ pam_krb5.so” é util quando somente se utliza autenticação sem acesso as diretórios correntes do shell da máquina, agora o “pam_winbind.so”, é util na comunicação e busca de informações no SAMBA4 e na montagem dos diretórios pessoais do usuários, claro que aí fica a seu critério,  com este tipo de autenticação pode ser utilizado por outros serviços como de ftp, email, login, entre outros.

Referências: http://www.dimap.ufrn.br/~aguiar/Manuais/Servidor/seg-pam.html

http://www.ibm.com/developerworks/br/library/l-pam/index.html

http://www.vivaolinux.com.br/artigo/Seguranca-no-SSH-via-plugins-da-PAM?pagina=4

http://www.vivaolinux.com.br/artigo/Postfix-+-AD-%28Active-Directory%29/

Uma ideia sobre “Samba4 integrado com Samba/Winbind e PAM

  1. Rubens Urquisa

    Muito bom seu artigo, mas tenho uma dúvida

    Só disponho de um servidor como ficaria os compartilhamento privados do smb.conf eles poderiam utilizar a mesma base de usuarios do samab4 AD ou tenho que fazer a interação em localhost como neste artigo

    Resposta

Deixe um comentário