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