Compartilhamento do Samba autenticando no AD
1 Introdução
Este artigo destina-se a mostrar a configuração para integrar um controlador de domínio com Windows server a um servidor de arquivos Samba. Com esta integração, é possível dar as permissões de acesso ao sistema de arquivos conforme os grupos que os usuários do AD pertencem.
2 Cenário
Para este artigo vou utilizar o S.O. CentOS 6.5 i386 para ser o servidor de arquivos, utilizando a versão 3.6.23-12.el6 do SAMBA e Windows Server 2008 Enterprise R2 como PDC (Active directory instalado e estrutura de grupos e usuários criada).
2.1 Configurações Windows Server:
- Nome do host: PDC
- Domínio: teste.net
- IP: 10.0.0.1
2.2 Configurações CentOS:
- Nome do host: fileserver
- Domínio: Vai ingressar no domínio teste.net
- IP: 10.0.0.2
2.3 Configurações Gerais de Rede
- DNS: 10.0.0.1
- Gateway: 10.0.0.254
- Máscara de sub-rede: 255.255.255.0/24
3 Instalação dos pacotes necessários
Serviços que deverão ser instalados: SSH, Kerberos, Samba, Winbind, NTP.
Para instalar os pacotes:
# yum install openssh openssh-clients krb5-config krb5-user vim krb5-user samba samba-common winbind ntpdate krb5-workstation -y
4 Editar o arquivo /etc/hosts
Neste arquivo, será necessário adicionar os dados dos dois servidores (PDC e servidor de arquivos), conforme o modelo abaixo:
ip_do_servidor nome_do_servidor.dominio nome_do_servidor
Vamos editar o arquivo e modificar conforme a nossa estrutura:
Edite:
# vim /etc/hosts
10.0.0.1 PDC.teste.net PDC
10.0.0.2 fileserver.teste.net fileserver
5 Desabilite o firewall
Como este é um ambiente de teste iremos desabilitar o firewall para evitar eventualidades. Lembre-se, em um ambiente de produção, segurança é um dever !
Pare o serviço:
# service iptables stop
Retire o serviço da inicialização do Sistema:
# chkconfig iptables off
6 Atribua IP fixo ao CentOS
Edite:
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.2
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=10.0.0.1
ONBOOT=yes
TYPE=Ethernet
7 Desabilite o SElinux
Como este é um ambiente de teste iremos desabilitar o SELINUX para evitar eventualidades. Lembre-se, em um ambiente de produção, segurança é um dever !
Edite:
# vim /etc/sysconfig/selinux
Altere a opção:
SELINUX=enforcing
Para
SELINUX=disabled
8 Configure o resolv.conf
Este arquivo mostra ao Sistema qual o DNS que será utilizado para resolução de nomes.
Edite:
# Vim /etc/resolv.conf
search teste.net // Coloque aqui o seu domínio
nameserver 10.0.0.1 // Coloque aqui o IP do DNS da rede
nameserver 10.0.0.1 // Coloque aqui o IP do DNS da rede
9 Configuração do Kerberos
Adeque o arquivo de configuração conforme a configuração da sua rede. No arquivo, onde encontrar TESTE.NET, altere para o seu domínio. Onde encontrar 10.0.0.1, altere pelo seu endereço de DNS. Respeite caracteres maiúsculos.
Primeiro, faça um backup do arquivo original:
# cp /etc/krb5.conf /etc/krb5.conf_bkp
Apague todo o conteúdo do arquivo:
# echo “ “ > /etc/krb5.conf
Depois, cole o conteúdo abaixo dentro do arquivo e edite-o, conforme suas necessidades:
# vim /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = TESTE.NET
dns_lookup_realm = true
dns_lookup_kdc = true
clockskew = 24000
[realms]
TESTE.NET = {
default_domain = teste.net
kdc = 10.0.0.1 // IP do PDC
kdc = 10.0.0.1 // IP do PDC
admin_server = 10.0.0.1 // IP do PDC
kdc = 10.0.0.1 // IP do PDC
}
TESTE.NET = {
}
[domain_realm]
.teste.net = TESTE.NET
teste.net = TESTE.NET
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
10 Editar o arquivo nsswitch.conf
O arquivo Network Services Switch (/etc/nsswitch.conf) determina a ordem das buscas realizadas quando uma certa informação é requisitada. Precisamos que as requisições sejam feitas para o PDC, via Winbind.
Primeiro faça um backup do arquivo original:
# cp /etc/nsswitch.conf /etc/nsswitch.conf_bkp
Apague todo o conteúdo do arquivo:
# echo “ “ > /etc/nsswitch.conf
Depois, cole o conteúdo abaixo dentro do arquivo:
# vim /etc/nsswitch.conf
passwd: files winbind
shadow: files winbind
group: files winbind
hosts: files dns
bootparams: files
ethers: files
netmasks: files
networks: files
protocols: files winbind ldap
rpc: files
services: files winbind ldap
netgroup: files
publickey: files
automount: files
aliases: files
11 Configurar samba e criar compartilhamento
Primeiro vamos criar o caminho da pasta compartilhada.
# mkdir –p /home/samba/dados/Grupos
Dentro da pasta grupos, vamos criar 3 pastas:
# cd /home/samba/dados/Grupos
# mkdir marketing
# mkdir tesouraria
# mkdir biblioteca
No Windows, vamos criar 3 grupos: marketing, tesouraria e biblioteca. Após, vamos adicionar os usuários dos setores nos seus respectivos grupos.
Montada a estrutura do servidor de arquivos, vamos agora realizar as configurações do samba e criar o compartilhamento.
Primeiro faça um backup do arquivo original:
# cp /etc/samba/smb.conf /etc/samba/smb.conf_bkp
Apague todo o conteúdo do arquivo:
# echo “ “ > /etc/samba/smb.conf
Depois, cole o conteúdo abaixo dentro do arquivo e Edite conforme necessário. Adeque o arquivo de configuração conforme a configuração da sua rede. No arquivo, onde encontrar TESTE.NET, altere para o seu domínio. Onde encontrar 10.0.0.1, altere pelo seu endereço de DNS.
Note que este smb.conf está com configurações mais complexas, ou seja, com auditoria habilitada, restrição de extensão de arquivos, etc. Não vamos entrar nestes detalhes neste arquivo. Caso não necessite destas funcionalidades, basta remover do arquivo.
Edite:
# vim /etc/samba/smb.conf
[global]
workgroup = TESTE // Coloque seu domínio
realm = TESTE.NET // Coloque o domínio completo
security = ads
template shell = /sbin/nologin
server string = Servidor de Arquivos [FileServer]
netbios name = fileserver // Coloque o nome do servidor
netbios aliases = // Coloque o nome do servidor
socket options = TCP_NODELAY IPTOS_LOWDELAY IPTOS_THROUGHPUT SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
remote announce = 10.0.0.1/TESTE
wins server = 10.0.0.1
interfaces = eth0
msdfs root = no
#-------------------------------------------------------------
# Winbind Options
idmap config DOMAIN: default = yes
idmap config DOMAIN: backend = rid
idmap config DOMAIN: range = 100000-500000000
idmap config * : range = 70000-500000000
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = yes
winbind nested groups = yes
winbind refresh tickets = true
winbind offline logon = true
winbind reconnect delay = 1
template homedir = /dev/null
wins server = 10.0.0.1
encrypt passwords = true
preferred master = no
local master = no
domain master = no
guest account = nobody
map to guest = Bad User
client NTLMv2 auth = Yes
# Unix Password Handling
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n*password\supdated\ssuccessfully* .
pam password change = yes
max xmit = 16644
use sendfile = true
getwd cache = yes
disable netbios = no
smb ports = 139 445
# ACL Permissions
# store dos attributes, causes IE/Chrome Downloads not to automatically occur.
nt acl support = yes
inherit acls = yes
map acl inherit = yes
store dos attributes = yes
map archive = no
map hidden = yes
map read only = yes
map system = no
inherit permissions = yes
# Default Share Parameters
# If a varible needs to be unset or changed, simply redefine it under the share.
writeable = yes
browseable = no
available = yes
access based share enum = yes
usershare allow guests = yes
create mask = 0774
directory mask = 0775
admin users = @"Domain Admins" root
valid users = @"Domain Users"
hide files = /*$RECYCLE.BIN/~$*/desktop.ini/
veto files = /*.cmd/*.exe/*.bat/*.java/desktop.ini/*.swf/*.msi/*.ani/*.dll/*.themepack/
log file = /var/log/samba/%m.log
log level = 1
debug level = 1
max log size = 5000
os level = 40
recycle:repository = .lixeira
recycle:keeptree = True
recycle:touch = True
recycle:versions = True
recycle:exclude = *.tmp|*.temp|*.o|*.obj|~$*|*.$$$
recycle:excludedir = /tmp|/temp|/trash
recycle:noversions = .doc|.xls|.ppt|.dbf|.nsx|.idx|.dbt
recycle:maxsize = 0
full_audit:facility = local5
full_audit:priority = notice
full_audit:prefix = %u|%I|%S
full_audit:success = unlink rename mkdir pwrite write rmdir chown chmod mkdir open opendir
full_audit:failure = none
vfs objects = recycle full_audit
; syslog = 1
; obey pam restrictions = No
# Name mangling options
preserve case = yes
short preserve case = yes
# Configurações de tempo de conexao
# the number of minutes of inactivity before a connection is considered dead
deadtime = 15
# represents the number of seconds between keepalive packets
keepalive = 120
[Grupos]
comment = Pasta M Grupos [Grupos]
path = /home/samba/dados/Grupos
guest ok = Yes
writeable = Yes
directory mask = 2770
create mask = 2770
force create mode = 2770
browseable = Yes
oplocks = No
vfs objects = recycle, full_audit
veto files = /*.3gp/*.wma/*.m4a/*.exe/*.eml/*.lnk/*.mp3/*.ink/*.rmvb/*.com/*.mp4/*.ogg/*.wmv/*.mpg/*.mpeg/*.avi/*.flv/*.mov/autorun.inf/autorun.vbs/autorun.bat/autorun.wsh/autorun.bin/autorun.reg/autorun.txt/AUTORUN.BMK/copy.exe/host.exe/
map acl inherit = Yes
inherit permissions = Yes
inherit acls = Yes
hide unwriteable files = Yes
12 Adicione o servidor no DNS
É necessário adicionar o servidor do sistema de arquivos ao DNS.
Neste caso, basta criar uma entrada A no DNS do Windows com o IP e nome do servidor Linux.
13 Realize um teste do kerberos
Altere o comando abaixo adicionando o usuário administrador do domínio PDC + o domínio escrito com letras maiúsculas. Ao executar o comando, será solicitado a senha do administrador do domínio.
# kinit administrador@TESTE.COM
Após a execução, se nada aconteceu, está tudo ok. Se retornou algum erro, verifique se o servidor de arquivos está corretamente cadastrado no DNS.
14 Sincronize o horário
Para que tudo funcione, a hora do servidor de arquivos deve estar correta. É interessante sincroniza-lo com um servidor NTP. No meu caso, vou sincronizar com o servidor PDC.
# ntpdate 10.0.0.1
15 Iniciar os serviços do samba
# /etc/init.d/samba start
# /etc/init.d/winbind start
# /etc/init.d/winbind start
16 Adicione o Servidor de arquivos no Domínio
# net ads join -U administrador
Ao executar o comando, deve retornar a mensagem:
Using short domain name -- TESTE
Joined ‘FILESERVER' to realm 'teste.net'
Joined ‘FILESERVER' to realm 'teste.net'
17 Reiniciar o samba
# /etc/init.d/samba restart
# /etc/init.d/winbind restart
# /etc/init.d/winbind restart
18 Teste o ingresso no domínio
# net ads testjoin
Join is OK
# wbinfo -t
checking the trust secret via RPC calls succeeded
Mostra os usuários do AD:
# wbinfo -u
Mostra os grupos do AD:
# wbinfo -g
Mostra os usuários do sistema e no final os usuários do AD:
# getent passwd
Mostra os grupos do sistema, e no final os grupos do AD:
# getent group
Join is OK
# wbinfo -t
checking the trust secret via RPC calls succeeded
Mostra os usuários do AD:
# wbinfo -u
Mostra os grupos do AD:
# wbinfo -g
Mostra os usuários do sistema e no final os usuários do AD:
# getent passwd
Mostra os grupos do sistema, e no final os grupos do AD:
# getent group
19 Alterar permissões de compartilhamento
Se o servidor de arquivos conseguiu listar os usuários e grupos do domínio, a integração já está ok.
Agora vamos alterar os donos das pastas compartilhadas
Altere o dono da pasta Grupos para o usuário administrador do domínio e o grupo domain admins:
# chown administrador:domain\ admins Grupos
O próximo passo é adicionar a permissão 775 na pasta Grupos, assim, nenhum usuário conseguirá criar pastas na raiz da pasta Grupos.
# chmod –R 775 /home/samba/dados/Grupos
Agora adicione os arquivos nas sub-pastas (documentos, fotos, vídeos etc) e altere o dono:
# cd /home/samba/dados/Grupos
# chown –R root:marketing marketing
# chown –R root:marketing tesouraria
# chown –R root:marketing biblioteca
Agora, vamos mudar as permissões das sub-pastas para 770, assim, só quem pertence ao grupo correspondente a pasta conseguirá acessar.
# cd /home/samba/dados/Grupos
# chmod –R 770 *
20 Mapeando compartilhamento em estações Windows
Para que a pasta compartilhada seja mapeada automaticamente no logon do usuário, podemos criar um script de logon.
Para isso, crie um arquivo no bloco de notas com o seguinte conteúdo:
@echo off
net use M: \\ip_do_servidor\Grupos
E salve este arquivo com a extensão .bat. No exemplo, darei o nome de logon.bat.
Agora basta colocar este arquivo dentro da pasta netlogon. Vá em iniciar > executar e digite:
E cole o arquivo .bat dentro desta pasta. Agora basta ir até as propriedades de um usuário do domínio e adicionar o nome do script no campo: Perfil > script de logon > logon.bat.
Após, crie uma GPO de script de inicialização, apontando para o arquivo .bat.
No próximo logon, a pasta Grupos será mapeada automaticamente e o usuário terá acesso as sub-pastas que ele tiver permissões.
0 comentários:
Postar um comentário