---
# System prepended metadata

title: Configuração Samba/Kerberos

---

Configuração Samba/Kerberos
===

### Instalar pacotes necessários;

`yum install -y krb5-workstation krb5-libs`
`yum install -y samba samba-client  samba-winbind samba-winbind-clients`

A configuração do Samba V3 no AD implica em configurar no Cliente Kerberos V5 do UNIX (Linux, AIX, Solaris e etc) ao REALM do Windows AD. 

Para o ambiente Embraer AD fica necessário:

### Certificar o Suporte Kerberos nos binários do Samba;

Para integrar ao AD os binários do Samba deve apresentar a versão V3 (ou superior) e suporte para autenticação Kerberos, para certificar. deve-se extrair a lista de configuração de compilação do módulo a partir do comando:

`smbd -V`
> Version 3.5.3

`smbd -b | grep HAVE_KRB5 | grep -v HAVE_KRB5_`
> HAVE_KRB5

Se o módulo “smbd” não apresentar estes requisitos não será possível integrá-lo na autenticação do AD. Neste caso fica necessário atualizar a versão do Samba respeitando a matriz de compatibilidade das bibliotecas Kerberos do sistema operacional em questão. Recomenda-se instalar a versão V3 e Kerberos que o distribuidor do sistema operacional oferece.

### Configurar o Kerberos;

O arquivo padrão do Kerberos é o “/etc/krb5.conf”, entretando, no sistema Unix Solaris o arquivo é "/etc/krb5/krb5.conf". Em todos casos a sintaxe é a mesma, devendo ser configurado no seguinte padrão:


> Nota: A configuração do Cliente Kerberos pode apresentar mais de um serviço de autenticação configurado, para tanto, fica necessário anexar os cartões de controle com o existente, tomando o devido cuidado para avaliar a “RealM default” a ser adotada. Para o Samba não é necessário que a “RealM do AD” seja a “default”. 

`cp -p /etc/krb5.conf /etc/krb5.conf.bak`
`> /etc/krb5.conf`
`vi /etc/krb5.conf`
> 
    [logging]
            default = FILE:/var/log/krb5/krb5libs.log
            kdc = FILE:/var/log/krb5/krb5kdc.log
            admin_server = FILE:/var/log/krb5/kadmind.log

    [libdefaults]
            default_realm = CORP.AD.EMB
            ticket_lifetime = 24h
            forwardable = yes
            clockskew = 300

    [realms]
            CORP.AD.EMB = {
                    kdc = sjkdc01.corp.ad.emb
                    kdc = sjkdc02.corp.ad.emb
                    kdc = sjkdc03.corp.ad.emb
                    kdc = sjkdc04.corp.ad.emb
                    admin_server = sjkdc04.corp.ad.emb
                    default_domain = CORP.AD.EMB
            }

    [domain_realm]
            corp.ad.emb = CORP.AD.EMB
            .corp.ad.emb = CORP.AD.EMB

    [appdefaults]
    pam = {
            ticket_lifetime = 1d
            renew_lifetime = 1d
            forwardable = true
            proxiable = false
            minimum_uid = 1
            clockskew = 300
            external = sshd
            use_shmem = sshd
    }


### Inicializar o Kerberos;

A inicialização é obrigatória para instanciar a comunicação preliminar do cliente com o servidores Kervberos do AD. A partir desta inicialização o Samba irá se integrar ao processo de autenticação.

`kinit [qualquer-login]@CORP.AD.EMB`
> password for [qualquer-login]@CORP.AD.EMB: [password-do-windows]

#### Verificar inicialização

`klist` 
>
    Ticket cache: FILE:/tmp/krb5cc_0
    Default principal: mathalme@CORP.AD.EMB

    Valid starting     Expires            Service principal
    08/07/20 11:49:46  08/07/20 21:49:46  krbtgt/CORP.AD.EMB@CORP.AD.EMB
            renew until 08/08/20 11:49:43

O comando “klist” apenas exibe para efeito de validação o “ticket” de autenticação criado pelo “kinit”.

### Identificar os arquivos de configuração do Samba;

O Samba apresenta alguns arquivos de configuração e inicialização padrão previamente parametrizado no código binário. A identificação dos mesmos pode ser realizada a partir do comando. Exemplificando:

`smbd -b | grep FILE:`
> CONFIGFILE: /usr/local/samba/lib/smb.conf
LMHOSTSFILE: /usr/local/samba/lib/lmhosts
SMB_PASSWD_FILE: /usr/local/samba/private/smbpasswd

`smbd -b | grep DIR:`
> SRCDIR:      /tmp/samba-3.5.3/source3
BUILDDIR:    /tmp/samba-3.5.3/source3
SBINDIR: /usr/local/samba/sbin
BINDIR: /usr/local/samba/bin
SWATDIR: /usr/local/samba/swat
LIBDIR: /usr/local/samba/lib
MODULESDIR: /usr/local/samba/lib
LOCKDIR: /usr/local/samba/var/locks
STATEDIR: /usr/local/samba/var/locks
CACHEDIR: /usr/local/samba/var/locks
PIDDIR: /usr/local/samba/var/locks
PRIVATE_DIR: /usr/local/samba/private

### Configurar o Samba;

O arquivo “smb.conf” deve ser configurado para integrar ao AD. A seguir exemplo das modificações necessárias para a integração, a configuração proposta força o Samba a operar somente em NTLMv2, ignorando os demais protocolos de autenticação:

>
    ######################################################################
    #
    ## !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!!
    ## !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!!
    ## !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!!
    #
    ##      NAO INSERIR SERVICOS NESTE ARQUIVO
    ##      USE OS ARQUIVOS PUBLICOS QUE SAO DO TIPO INCLUDE
    #
    ##      > Servicos de SO:       S.IT_PUBLIC
    ##      > Servicos Eng.:        S.TE_PUBLIC
    #
    ## CCelso, 15-fev-2008
    #
    ######################################################################
    #       Diretrizes GLOBAIS
    ######################################################################

    [global]
            ## estabelece o nome do dominio e identificacao do filer

            workgroup = EMBAD
            server string = FileServer SuporteUnix

            ## configura os parametros de autenticacao com o ADS
            ## o /etc/krb5.conf deve apresentar a lista de pdc configurados

            realm = CORP.AD.EMB
            security = ads
            encrypt passwords = yes
            password server = *

            ## ativa autenticacao NTLMv2

            client use spnego = yes
            client ntlmv2 auth = yes

            ## desativa autenticacao NTLMv1

            client lanman auth = no
            lanman auth = no
            ntlm auth = no

            ## autoriza unmapped users a acessar como guest

            usershare allow guests = yes

            ## inativa as acls NT (necessario para o MentorGraphics)

            nt acl support = no

            ## estabelece a lista de usermap do windows vs unix
            ## nobody = *    ; estabelecer guest access

            username map script = /etc/samba/smbusers.pl
            ## ou a linha abaixo para versão > 3.5.x, ver nota
	        #username map script = /usr/local/samba/sbin/smbusers.pl	
            
            ## parametrizacao de logs e registro de acesso

            log file = /var/log/samba/log-%U-%M
            max log size = 4
            utmp = yes

            ## desativa todas as funcionalidades de masterServer de Windows

            local master = no
            domain master = no
            prefered master = no
            load printers = no
            printing = bsd
            printcap name = /dev/null
            disable spoolss = yes

            ## tunning de tcpip para performance dos servicos

            socket options = TCP_NODELAY
            dns proxy = no
            dead time = 480
            keepalive = 0

            ## habilita o uso dos arquivos padrao unix do tipo "symlink"
            ## parametro "wide links" deve existir nas session

            unix extensions = no

            ## carrega os demais servicos cifs do acesso

            include = /opt/samba/lib/S.IT_PUBLIC
            include = /opt/samba/lib/U.%U

    ######################################################################
    # !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!!
    # !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!!
    # !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!! ATENCAO !!!
    ######################################################################
    #
    ## NAO INSERIR SERVICOS NESTE ARQUIVO
    ## USE OS ARQUIVOS PUBLICOS QUE SAO DO TIPO INCLUDE
    #
    ## Servicos de Sistema: S.IT_PUBLIC
    ## Servicos Engenharia: S.TE_PUBLIC
    #
    ######################################################################
    # End
    ######################################################################

> Nota: A versão 3.5.x suporta o uso de scripts para mapeamento do “username map”. O uso desta opção possibilita a implementação de um script para traduzir o “Login Windows” ao “Login Unix” (quando estes foram distintos. O script deve retornar (via stdout) a identificação do “Login Unix” associado ao “Login Windows”. Esta é informado como “Argumento #1” ao script.

#### Configuração smbusers (Username Map)

O uso de “username map” fica obrigatório quando o “Login Windows” do usuário não existe no servidor Unix em questão. Para este caso, fica necessário associar um “Login Unix” ao “Windows”. Usualmente associa-se um genérico (exemplificando “guest”). É obrigatório a associação de um “Login Unix” mesmo que os serviços Shared apresentem a opção “force user”. 

`cp -p /etc/samba/smbusers /etc/samba/smbusers.bak`
`> /etc/samba/smbusers`
`vi /etc/samba/smbusers`
>
    [unix-login] = EMBAD\[windows-login]
    ...
    guest = EMBAD\*

> Nota: A opção "guest = EMBAD\*" que pode ser usado para vincular um "login default" para qualquer usuário não mapeado no ambiente .


### Inicializar o Samba;

Para operar no AD o Samba necessita carregar os módulos “nmbd”, “smbd” e “winbindd”. Basicamente a partir dos comandos:

`nmbd -D -c [configfile] -l [logfile]`
`smbd -D -c [configfile] -l [logfile]`
`winbindd -D -c [configfile] -l [logfile]`

O parametro -c pode ser ignorado caso não seja mandatório especificar a localização do arquivo de configuração.

> Nota: As opções “configfile” e “logfile” são necessários somente se haver a necessidade de não usar os arquivos “default” associados aos binários dos módulos.

## Instanciar samba no AD

Para inicialização o Samba no AD o administrador deve ter privilégio de “join ao domínio AD” e executar conforme o exemplo a seguir:

`kinit [login-priv-no-ad]@CORP.AD.EMB`
> password for [login-priv-no-ad]@CORP.AD.EMB: 

Utilize um login domain admin para o comando abaixo.

`net ads join -S sjkdc01 -U [login-priv-no-ad]`
> Enter [login-priv-no-ad] password: 
Using short domain name -- EMBAD
Joined '[hostname]' to realm 'corp.ad.emb'
DNS update failed!

Mensagem DNS update failed é comum, não se preocupe.

Especificar o servidor AD com o parametro -S é opcional.

Verificar:
`net ads info`

> Nota: Ao término do “join” o Samba fica operacional para operar no AD, entretanto, recomenda-se executar o processo de “stop/start” para validar a integração.



# IGNORAR ABAIXO, ANOTAÇÕES



Pacotes opcionais:

samba-winbind-3.6.9-151.el6.x86_64		    OK
samba-3.6.9-151.el6.x86_64			        OK
samba-common-3.6.9-151.el6.x86_64		    OK
samba-client-3.6.9-151.el6.x86_64		    OK
samba-winbind-clients-3.6.9-151.el6.x86_64	OK
krb5-devel-1.10.3-10.el6_4.2.x86_64		    OK
pam_krb5-2.3.11-9.el6.x86_64			    OK
krb5-auth-dialog-0.13-3.el6.x86_64		    OK
krb5-libs-1.10.3-10.el6_4.2.x86_64		    OK
krb5-workstation-1.10.3-10.el6_4.2.x86_64	OK
nscd-2.12-1.107.el6.x86_64			        OK

`rpm -q samba`
`yes y | yum install samba`

`useradd <user>`

Substitua _<user>_ pelo usuário desejado

`passwd <user>`

Substitua _<user>_ pelo usuário desejado

`smbpasswd -a root`

`systemctl start smb`
`systemctl enable smb`
`systemctl status smb`

`mkdir -p /anonymous`
`chmod 777 /anonymous`

`mkdir -p /share`

`mkdir -p /smbgrp`

`groupadd --gid 2000 smbgrp`

`useradd -u 3334 <user>`

Substitua _<user>_ pelo usuário desejado

`usermod -aG smbgrp <user>`

Substitua _<user>_ pelo usuário desejado

`chgrp smbgrp /smbgrp`
`chmod g+rwx /smbgrp`
`chmod g+s /smbgrp` _(arquivos e diretórios criados no path deste grupo pertencerá aos editores do grupo)_
ou adicione no _smb.conf_ em [smbgrp] a seguinte linha:
>
    'force group = smbgrp'

>
    valid users = @smbgrp
    write list = @smbgrp
    force group = smbgrp
    create mask = 0770

`smbpasswd -a <user>`

Substitua _<user>_ pelo usuário desejado

PoC
test user created folders
test group folders
test public share
test anonymous share

`semanage fcontext -a -t samba_share_t "/share(/.*)?"`
`restorecon -R -v /share`

`smbd -b | grep "CONFIGFILE"`
`vi /etc/samba/smb.conf`
>
    ntlm auth = true em [global]

`testparm /etc/samba/smb.conf`

`systemctl restart smb`
`systemctl restart nmb`
`systemctl restart nscd`

join para o AD

net ads join -U SW018

service winbind start

service smb status
service nmb status
service nscd status
service winbind status

chkconfig smb on
chkconfig nmb on
chkconfig nscd on
chkconfig winbind on

move do host lnx149in

de

CN=Computers,DC=corp,DC=ad,DC=emb

para

OU=Linux,OU=Servers,DC=corp,DC=ad,DC=emb

Testando servidor samba:
```
mount -t cifs -o user=<user>,password=<password>,rw,soft,_netdev // /mnt/smbgrp
smbclient -U root -L localhost
```

Substitua _<user>_ pelo usuário desejado

Windows CMD/PowerShell:
`net use \user:<user> \\smb`
`net use \delete \\smb`

Substitua _<user>_ pelo usuário desejado