Instalando e Configurando Samba com autenticação em AD no Debian Squeeze

Qual a ideia principal desse HOW TO demostrar a instalação do samba e configurar ele para trabalhar integrado com o AD, pois geralmente trabalhamos com ambientes heterogéneos ou seja, trabalhando com um ambiente multi-plataforma e é o que eu vou mostrar nesse HOW TO. OBS: Não vou mostrar como criar um grupo e inserir usuários no AD

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Vamos primeiro setar essas duas variáveis do ambiente para não ficar nos questionando sobre a configuração inicial dos pacotes por que vamos efetuar todas manualmente.

export DEBIAN_PRIORITY=critical
export DEBIAN_FRONTEND=noninteractive

Agora vamos fazer a instalação dos pacotes necessários.

aptitude update && aptitude dist-upgrade -y
aptitude install -y samba samba-common smbclient winbind krb5-config libpam-krb5 cifs-utils

Agora vamos voltar as variáveis do sistema ao normal

unset DEBIAN_PRIORITY
unset DEBIAN_FRONTEND

Agora vamos efetuar backup do resolv.conf

cp -Rfa /etc/resolv.conf{,.bkp}

Agora vamos configurar o /etc/resolv.conf deixe ele como no exemplo

#Domínio e Ip do servidor Windows Server 2008
search douglasqsantos.com.br
nameserver 192.168.0.254

Agora vamos testar o nslookup

nslookup douglasqsantos.com.br
Server:         192.168.0.254
Address:        192.168.0.254#53

Name:   douglasqsantos.com.br
Address: 192.168.0.254

Agora vamos efetuar o ajuste do relógio dos sistema

ntpdate -u ntp.usp.br
28 Jul 12:02:01 ntpdate[14281]: adjust time server 143.107.255.15 offset 0.034858 sec

Agora vamos fazer backup do arquivo de configuração do cliente kerberos

cp -Rfa /etc/krb5.conf{,.bkp}

Agora vamos configurar o arquivo /etc/krb5.conf do cliente kerberos que vai gerenciar os ticktes das senhas

vim /etc/krb5.conf
[libdefaults]
default_realm = douglasqsantos.com.br
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
douglasqsantos.com.br = {
kdc = 192.168.0.254
admin_server = 192.168.0.254:749
default_server = 192.168.0.254
}
[domain_realm]
.douglasqsantos.com.br=douglasqsantos.com.br
douglasqsantos.com.br=douglasqsantos.com.br
[login]
krb4_convert = true
krb4_get_tickets = false
[kdc]
profile = /etc/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
[logging]
default = file:/var/log/krb5libs.log
kdc = file:/var/log/krb5kdc.log
admin_server = file:/var/log/kadmind.log

Agora vamos acertar o arquivo /etc/security/limits.conf para não ficar mostrando erro no samba

vim /etc/security/limits.conf
#colocar no final do arquivo
root hard nofile 131072
root soft nofile 65536
mioutente hard nofile 32768
mioutente soft nofile 16384

Agora vamos fazer um backup do arquivo de configuração do samba

cp -Rfa /etc/samba/smb.conf{,.bkp}

Agora vamos a configuração do samba /etc/samba/smb.conf deixe o arquivo como no exemplo

vim /etc/samba/smb.conf
[global]
        workgroup = DOUGLASQSANTOS
        realm = douglasqsantos.com.br
        server string = Samba Server
        security = ADS
        auth methods = winbind
        password server = 192.168.0.254
        log level = 1
        log file = /var/log/samba/samba.log
        log file = /var/log/samba/%D.%U.%m.log
        max log size = 1000
        follow symlinks = yes
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
        getwd cache = yes
        dead time = 15
        wide links = no
        debug level = 0
        acl compatibility = Auto
        aio read size = 16384
        max xmit = 65535
        read raw = no
        write raw = no
        large readwrite = yes
        strict locking = yes
        oplocks = yes
        level2 oplocks = yes
        load printers = No
        printcap name = cups
        disable spoolss = Yes
        guest account = nobody
        local master = No
        domain master = No
        idmap uid = 10000-30000
        idmap gid = 10000-30000
        winbind cache time = 15
        winbind enum users = Yes
        winbind enum groups = Yes
        winbind use default domain = Yes
        #Arquivos proibidos em qualquer compartilhamento
        veto files = /*.mp3/*.mp4/*.wma/*.avi/*.divx/*.mpg/*.mpeg/*.rmvb/*.wmv/*.scr/*.inf/*.ogg/*.pif
        vfs objects = full_audit, recycle
        #Auditoria
        full_audit:facility = LOCAL5
        full_audit:priority = NOTICE
        full_audit:success = write, unlink, rename, mkdir, rmdir, chmod, chown
        full_audit:prefix = %P|%U|%I|%m
        full_audit:failure = none
        #Controle da Lixeira
        recycle:facility = LOCAL1
        recycle:priority = NOTICE
        recycle:maxsize = 0
        recycle:repository = .recycle/%U
        recycle:directory_mode = 0777
        recycle:subdir_mode = 0777
        recycle:keeptree = True
        recycle:touch = False
        recycle:maxsize = 0
        recycle:versions = True
        recycle:noversions = .doc|.xls|.ppt|.pdf
        recycle:exclude = *.tmp, *.temp, *.log, *.ldb, *.o, *.obj, ~*.*, *.bak, *.iso
        recycle:exclude_dir = tmp, temp, cache

[programas]
        path = /srv/programas
        browsable = yes
        writable = yes
        public = no
        guest ok = no
        create mask = 0666
        directory mask = 0777
        force create mode = 0644
        force directory mode = 0775
        locking = no
        vfs objects = recycle, full_audit
        #force user = douglas
        #force group = @"%D\ti-admin"
        valid users =  @"%D\ti-admin", @"%D\ti-estagiarios"

Agora vamos configurar o rsyslog para gerenciar os logs de auditoria do samba no arquivo /etc/rsyslog.conf

echo "local5.notice /var/log/samba/auditoria.log" >> /etc/rsyslog.conf

Agora já podemos reiniciar o rsyslog

/etc/init.d/rsyslog restart

Agora vamos criar os diretórios dos compartilhamentos e acertar as permissões

Tenho que deixar as permissões iniciais como 777 para que o sistema consiga criar as pastas iniciais.

mkdir -p /srv/programas
chmod 777 /srv/programas

No samba criamos 1 compartilhamento para os programas e este esta atribuído permissão para o grupo %D\ti-admins e %D\ti-estagiarios a variável %D vai ser o domínio

Então temos que criar esse grupo admins no AD caso não exista e atribuir usuários a ele para que possamos acessar esse compartilhamento, este compartilhamento criei somente para exemplificar como vai ser criado compartilhamentos usando grupos do AD

Agora vamos acertar o arquivo de inicialização do winbind /etc/init.d/winbind para ele não ficar fazendo cache das consultas no AD

#linha 36 deixar como abaixo
start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- no-caching #\$WINBINDD_OPTS"

Vamos fazer um backup do arquivo /etc/nsswitch.conf

cp /etc/nsswitch.conf{,.bkp}

Agora temos que acertar o arquivo /etc/nsswitch.conf que controla aonde vai ser consultado usuários e senhas deixe o arquivo como abaixo.

passwd:         compat winbind
group:          compat winbind
shadow:         compat

hosts:          files dns
networks:       files

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

netgroup:       nis

Agora vamos reiniciar o samba e o winbind para eles pegarem a nova configuração

/etc/init.d/samba restart
/etc/init.d/winbind restart

Agora temos que inserir a maquina no domínio AD

net ads join douglasqsantos.com.br -U administrador
Enter administrador's password: senha
Using short domain name -- DOUGLASQSANTOS
Joined 'DEBIAN' to realm 'douglasqsantos.com.br'

Agora temos que reiniciar os serviços novamente

/etc/init.d/samba restart
/etc/init.d/winbind restart

Agora já podemos testar a conexão do samba com o AD

wbinfo -t
checking the trust secret for domain DOUGLASQSANTOS via RPC calls succeeded

Agora vamos checar os grupos que temos no domínio.

wbinfo -g
computadores do domínio
controladores de domínio
administradores de esquema
administradores de empresa
editores de certificados
admins. do domínio
usuários do domínio
convidados domínio
proprietários criadores de diretiva de grupo
servidores ras e ias
grupo de replicação de senha rodc permitido
grupo de replicação de senha rodc negado
controladores de domínio somente leitura
controladores de domínio de empresa somente leitura
dnsadmins
dnsupdateproxy

Agora vamos chegar os usuários do domínio

wbinfo -u
DEBIAN\nobody
DEBIAN\douglas
administrador
convidado
krbtgt
douglas

Fazendo backup dos arquivos da pam

cp -Rfa /etc/pam.d{,.bkp}

Vamos agora acertar a pam para que o sistema pegue primeiro o usuário e senha local e depois do AD caso precisarmos utilizar os usuários locais arquivo da pam /etc/pam.d/common-password

vim /etc/pam.d/common-password
password        sufficient                      pam_unix.so
password        requisite                       pam_krb5.so minimum_uid=1000
password        [success=2 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
password        [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so

Outra opção interessante que podemos utilizar é que podemos logar via ssh utilizando os usuários do AD porém temos que fazer mais um acerto na pam em /etc/pam.d/common-session

vim /etc/pam.d/common-session
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so 
session optional                        pam_winbind.so 
session optional                        pam_mkhomedir.so skel=/etc/skel umask=0027

Agora vou abordar alguns comandos para manipulação dos compartilhamentos

Aqui vamos fazer a listagem o dos compartilhamentos no servidor com o usuário douglas

smbclient -L //192.168.0.253 -U DOUGLASQSANTOS/douglas
Enter DOUGLASQSANTOS/douglas's password: senha
Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]

  Sharename       Type      Comment
  ---------       ----      -------
  IPC$            IPC       IPC Service (Samba Server)
  programas       Disk      Programas
        [...]

Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]

  Server               Comment
  ---------            -------
  DEBIAN                Samba Server

  Workgroup            Master
  ---------            -------
  DOUGLASQSANTOS              SERVER-PC

Agora vamos logar no servidor samba como se fosse um servidor FTP

smbclient //192.168.0.253/programas -U DOUGLASQSANTOS/douglas
Enter DOUGLASQSANTOS/douglas's password: 
Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]
smb: \> 

Agora vamos logar novamente no servidor como se fosse um servidor FTP porem informando a senha no prompt

smbclient //192.168.0.253/programas -U DOUGLASQSANTOS/douglas%senha
Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]
smb: \> 

Agora vamos efetuar a montagem de um compartilhamento via linha de comando

mkdir /mnt/samba
mount.smbfs -o user=DOUGLASQSANTOS/douglas,password=senha //192.168.0.253/programas /mnt/samba

Agora vamos verificar se obtivemos sucesso

df -Th
Sist. Arq.    Tipo    Size  Used Avail Use% Montado em
/dev/xvda3     xfs     19G  2,6G   17G  14% /
tmpfs        tmpfs   1003M     0 1003M   0% /lib/init/rw
udev         tmpfs    990M   80K  990M   1% /dev
tmpfs        tmpfs   1003M     0 1003M   0% /dev/shm
/dev/xvda1    ext3    184M   23M  153M  13% /boot
/dev/xvdb1     xfs    400G   59G  342G  15% /srv
//192.168.0.253/programas/ cifs    400G   59G  342G  15% /mnt/samba

Podemos efetuar a montagem também da seguinte forma vamos obter o mesmo resultado

mount -t cifs //192.168.0.254/programas /mnt/samba -o user=DOUGLASQSANTOS/douglas,password=senha

Montando no /etc/fstab

//192.168.0.254/programas /mnt/samba cifs auto,credentials=/etc/smbcredentials,workgroup=DOUGLASQSANTOS,gid=douglas,uid=douglas,rw,noserverino 0 0

Agora precisamos criar o smbcredentials para armazenar as informações de usuário e senha

vim /etc/smbcredentials
username=douglas
password=senha

Agora vamos ajustar as permissões do arquivo

chmod 640 /etc/smbcredentials

Agora pra testar é só executar o seguinte comando

mount -a

Referências