Instalando e Configurando Samba com autenticação em AD no CentOS 6

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

Para iniciarmos a configuração, é necessário a instalação dos pacotes com o comando:

yum install samba samba-winbind samba-winbind-devel samba-client samba-common \
 pam_krb5 cifs-utils samba-winbind-krb5-locator samba-doc -y

Habilitando os serviços para serem inicializados ao ligar o servidor:

  • O chkconfig também pode ser usado para configurar um serviço para ser iniciado (ou não) em um nível de execução específico.

Por exemplo: para ligar o samba e o winbind nos níveis de execução 3, 4 e 5, use o seguinte comando:

chkconfig --level 234 smb on
chkconfig --level 234 winbind on

Ajustando o arquivo de autenticação. Adicione o conteúdo no final do arquivo:

vim /etc/pam.d/system-auth
[...]
session     required      pam_mkhomedir.so skel=/etc/skel/ umask=0027

Ajustando o arquivo de resolução de Nomes:

vim /etc/resolv.conf
search douglasqsantos.com.br
nameserver 192.168.0.254

Ajustando o arquivo de configuração para autenticação em domínio AD:

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.248
admin_server = 192.168.0.248:749
default_server = 192.168.0.248
}
[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

Ajustando o arquivo que determina a ordem a ordem das buscas quando uma informação é requisitada:

vim /etc/nsswitch.conf
passwd:     files winbind
shadow:     files
group:      files winbind
hosts:      files dns
bootparams: nisplus [NOTFOUND=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files
netgroup:   nisplus
publickey:  nisplus
automount:  files nisplus
aliases:    files nisplus

Ajustando o arquivo de configuração do samba.

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.248
        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"

Vamos tirar o erro que fica aparecendo no samba quando utilizamos o testparm

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 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

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

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

Alterando o arquivo responsável pela forma de autenticação no linux.

vim /etc/pam.d/login
#%PAM-1.0 
auth       sufficient    pam_winbind.so
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth


account    sufficient     pam_succeed_if.so user ingroup root
account    required    pam_winbind.so
account    required     pam_nologin.so
account    include      system-auth
#Grupos que vão poder efetuar login no servidor
account    requisite    pam_succeed_if.so user ingroup ti-admin

password   include      system-auth
# pam_selinux.so close should be the first session rule 

session    required     pam_selinux.so close
session    required     pam_mkhomedir.so        skel=/etc/skel umask=0027
session    include      system-auth
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context 
session    required     pam_selinux.so open
session    optional     pam_keyinit.so force revoke

Ajustando o arquivo de autenticação do ssh

vim /etc/pam.d/sshd
#%PAM-1.0 
auth       sufficient    pam_winbind.so
auth       include      system-auth

account    sufficient   pam_succeed_if.so user ingroup root
account    required     pam_winbind.so
account    required     pam_nologin.so
account    include      system-auth
#Grupos que vão poder logar via ssh
account    requisite    pam_succeed_if.so user ingroup ti-admin

password   include      system-auth

session    required     pam_mkhomedir.so        skel=/etc/skel umask=0027
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    required     pam_loginuid.so

Reiniciando os serviços:

/etc/init.d/smb restart
/etc/init.d/winbind restart

Adicionando a máquina no domínio

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

Reiniciando os serviços

/etc/init.d/smb 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
SAMBA\nobody
SAMBA\douglas
administrador
convidado
krbtgt
douglas

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, note que temos que passar DOUGLASQSANTOS/douglas o primeiro douglas é o domínio e o segundo douglas é o usuário.

smbclient -L //192.168.0.254 -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
    ---------            -------
    SAMBA                Samba Server

    Workgroup            Master
    ---------            -------
    DOMINIO              SERVER-PC

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

smbclient //192.168.0.254/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.254/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.254/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