Samba usando banco de dados do AD para autenticar usuários em compartilhamentos
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.






















