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