Samba usando banco de dados do AD para autenticar usuários em compartilhamentos

By Greyson, 23 de junho de 2010

Olá pessoal,

Acho que este artigo deve ser de grande importância inclusive para administradores de rede já que geralmente nos encontramos à frente de redes heterogêneas, principalmente com Windows e Linux. Estarei compartilhando com a comunidade minha experiência mostrando como realizar tal tarefa. Como sabemos (ou deveríamos saber) o Active Directory usa o Kerberos para autenticação de usuários no domínio. Então partindo deste princípio já podemos ter em mente quais pacotes utilizar para este processo. Não entrarei em detalhes sobre a configuração e parâmetros do samba pois existem muitos artigos e tutorais na internet e assim perderíamos o foco deste post. Pois bem, deixemos de blá blá e vamos ao que interessa:

1 – Preparando o ambiente:

Usaremos o Ubuntu 8.04 LTS (com suporte até 2013) como servidor já que o suporte oferecido pela canonical é de 5 anos, ou seja você administrador instalando esta versão terá tempo de se preparar para uma migração natural que seria o Ubuntu 10.04 que terá suporte até 2015.

2 – Baixando os pacotes necessários:

$ sudo apt-get update && sudo apt-get install krb5-user winbind ssh samba

3 – acerte o horário do seu servidor samba igual ao do servidor Active Directory pois caso contrário ele não permitirá o logon. Para quem não conhece o comando é

$ sudo su

senha:

# date mmddhhmmyyyy

# exit

mm: Mês

dd: Dia

hh: hora

mm: Minuto

yyyy: Ano

3 – Editando os arquivos necessários:

Obs: recomendo fortemente daqui pra frente antes de editar os arquivos realizar uma cópia dos mesmos pois caso algo dê errado, será possível a restauração dos mesmos. Claro que muitos sabem dessas precauções, mas fica aí a dica.

$ sudo nano /etc/resolv.conf

Altere o arquivo conforme o modelo abaixo:

search seu.dominio
nameserver ip_do_dns_primario
nameserver ip_do_dns_secundario

Salve e feche o arquivo.

$ sudo nano /etc/hosts

Altere o arquivo /etc/hosts, conforme o modelo: (neste caso apenas edite a ultima linha)

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts

::1 ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

ff02::3 ip6-allhosts

ip_do_host nome_da_maquina.seu.dominio nome_do_host

Salve e feche o arquivo.

$ sudo nano /etc/nsswitch.conf

Altere o arquivo /etc/nsswitch.conf conforme abaixo:

passwd: compat winbind
group: compat winbind
shadow: compat

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

Salve e feche o arquivo.

$ sudo nano /etc/krb5.conf

Edite o arquivo /etc/krb5.conf e deixe-o assim:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = SEU.DOMINIO
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes
[realms]
SEU.DOMINIO = {
kdc = servidor.seu.dominio
admin_server = servidor. seu.dominio
default_domain = SEU.DOMINIO
}
[domain_realm]
.dominio.seu = SEU.DOMINIO
dominio.seu = SEU.DOMINIO
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

Salve e feche o arquivo.

Para verificar que você consegue se autenticar via kerberos execute o comando:

kinit usuario@ SEU.DOMINIO

Será solicitada a senha do usuário. Se não der nenhuma mensagem de erro, execute o comando klist. Se for mostrada uma mensagem parecida com a abaixo, você se autenticou com sucesso:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: usuario@SEU.DOMINIO
Valid starting Expires Service pricipal

RENEW UNTIL 01/31/10 16:12:30

01/30/10 18:12:30 01/31/10 04:12:34 krbtgt/SEU.DOMINIO@SEU.DOMINIO

$ sudo nano /etc/samba/smb.conf

Altere o arquivo /etc/samba/smb.conf conforme abaixo:

[global]
workgroup = dominio
security = ads
log file = /var/log/samba/%m.log
max log size = 50
dns proxy = no
password server = servidor.seu.dominio
realm = SEU.DOMINIO
idmap uid = 16777216-33554431
idmap gid = 16777216-33554431
template shell = /bin/bash
winbind use default domain = true
winbind enum users = yes
winbind enum groups = yes

Aqui você também acrescentar outros parâmetros como a lixeira do samba, full audit, obviamente os compartilhamentos, impressoras etc. Porém estes parâmetros acima são apenas o necessário para a autenticação.

Salve e feche o arquivo.

Vamos editar os módulos do PAM:

$ sudo nano /etc/pam.d/common-account

O arquivo /etc/pam.d/common-account deve conter somente as linhas:

account sufficient pam_winbind.so
account required pam_unix.so

Salve e feche o arquivo.

$ sudo nano /etc/pam.d/common-auth

O arquivo /etc/pam.d/common-auth deve conter somente as linhas:

auth required pam_listfile.so item=user sense=allow file=/etc/system_users onerr=fail
auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure use_first_pass

Salve e feche o arquivo.

$ sudo nano /etc/pam.d/common-session

Inclua no arquivo /etc/pam.d/common-session a linha:

session required pam_mkhomedir.so umask=0022 skel=/etc/skel

Salve e feche o arquivo.

Crie o arquivo /etc/system_users e coloque os usuários, um em cada linha, que deseja permitir logon no computador. NÃO ESQUEÇA DE SEUS USUÁRIOS LOCAIS.

$ sudo touch /etc/system_users

$ sudo nano /etc/system_users

Depois de adicionados os usuários, salve e feche o arquivo.

Crie o diretório que conterá o home dos usuários do domínio:

$ sudo mkdir /home/DOMINIO

4 – Adicione o computador ao domínio com o comando:

net ads join -U usuario_com_permissao_adicionar@SEU.DOMINIO

5 – Reinicie os serviços:

$ sudo /etc/init.d/samba restart

$ sudo /etc/init.d/winbind restart

$ sudo /etc/init.d/ssh restart

Se você por acaso adicionou usuários do domínio para acessar o servidor faça o teste:

ssh usuario_do_dominio@_seu_servidor

(se por acaso você usar uma porta diferente da 22 especifique com o parâmetro -p porta_do_ssh)

Agora ao criar as permissões no seu domínio Active Directory elas se refletirão diretamente no seu servidor samba.

Por exemplo:

Temos dois usuarios: maria e jose pertencentes ao grupo financeiro

No seu servidor samba basta configurar as permissões utilizando dos parâmetros usados no seu dominio.

Um exemplo de compartilhamento seria:

[financeiro]

path = /departamentos/financeiro

writable = yes

browseable = yes

create mask = 0770

directory mask = 0770

Assim se maria e jose pertencerem ao grupo financeiro, eles poderão além do dono da pasta acessar e criar arquivos e diretórios dentro do compartilhamento.

Para configurar as permissões locais nos diretórios:

$ sudo chgrp financeiro /departamentos/financeiro -R

$ sudo chmod 770 /departamentos/financeiro -R

Está feito. Logicamente se trata de um exemplo. Cada ambiente possui suas necessidades e o Administador deve ser responsável pelo ambiente de sua rede a que é responsável.

Espero ter sido útil neste artigo.

Deixe um comentário

OfficeFolders theme by Themocracy