Compartilhamento do Samba autenticando no AD


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

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

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'

17 Reiniciar o samba

# /etc/init.d/samba 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


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.
Share on Google Plus

Sobre Carlos Castro

Administrador e autor do blog hostconfig.
    Blogger Comment
    Facebook Comment

0 comentários:

Postar um comentário