Ir para o conteúdo

Samba

De RJGSWiki
Revisão de 17h01min de 27 de novembro de 2025 por Rjgs (discussão | contribs) (SAMBA 4 AD/CD)

Samba

Samba share

Instalação

Para instalar o Samba basta rodar um *sudo apt install*. Abaixo, o comando que instala o samba juntamente com alguns adicionais.

sudo apt install samba -y 
sudo apt install samba-common -y 
sudo apt install samba-testsuite -y 
sudo apt install samba-vfs-modules -y 
sudo apt install fuse -y 
sudo apt install fuse-emulator-gtk -y 
sudo apt install fuse-emulator-utils -y 
sudo apt install fusefat -y 
sudo apt install fuse-zip -y 
sudo apt install fuseiso -y 
sudo apt install fusesmb -y 
sudo apt install gvfs -y 
sudo apt install gvfs-common -y 
sudo apt install gvfs-fuse -y 

Usuário do samba

Para utilização do samba é necessário cadastrar seu usuário nele.

sudo smbpasswd -a $USER 

Será solicitado incluir uma senha. Pode-se atribuir a mesma senha de login no sistema do usuário, embora não seja aconselhável.

Configuração

Configuração de compartilhamentos

Exemplo de arquivo smb.conf:

workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
wins support = yes
dns proxy = yes
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
server role = standalone server
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
pam password change = yes
map to guest = bad user
#    
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
#
#    
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
#
#    
== ## PASTAS COMPARTILHADAS ==
#    
[usuario2$Servidor]
   comment = Pasta home de Usuario em Servidor.
   path = /home/usuario2/
   browseable = yes
   read only = no
   guest ok = no
   valid users = usuario2
#    
[usuario1$Servidor]
   comment = Pasta home de Bruna usuario1 em Servidor.
   path = /home/usuario1/
   browseable = yes
   read only = no
   guest ok = no
   valid users = usuario1, usuario2
#
[play$Servidor]
   comment = HD de Multimidia em Servidor.
   path = /mnt/A829-4889/
   browseable = yes
   read only = no
   guest ok = yes
#
[HD$Servidor]
   comment = HD em Servidor.
   path = /mnt/3D5F3E455DFDCFF4/
   browseable = yes
   read only = no
   guest ok = no
   valid users = usuario2
#
[host$Servidor]
   comment = Host do Apache em Servidor.
   path = /var/www/html/
   browseable = yes
   read only = no
   guest ok = yes
#
[nuvem$Servidor]
   comment = Pasta do Dropbox em Servidor.
   path = /home/usuario2/Dropbox/
   browseable = yes
   read only = no
   guest ok = no
   valid users = usuario2

Smb.conf (completo)

Parametros iniciais

Variaveis de ambiente que podem ser usadas

  • %a - sistema operacional do cliente
  • %I - endereço ip do cliente
  • %m - nome NetBios do cliente
  • %M - Nome DNS do cliente
  • %u - Nome do usuario efetivo
  • %U - Nome do usuario NetBios
  • %g - Grupo primario Linux correpondente ao %u
  • %G - Grupo primario de %U
  • %H - Diretorio home de %u
  • %S - Nome do servico corrente
  • %d - Numero do processo (PID) do servidor corrente
  • %h - Nome DNS da maquina em que o samba esta rodando
  • %L - Nome NetBios do servidor samba
  • %N - Diretorio home do servidor, do mapeamento automount
  • %v - Versão do samba
  • %R - O nivel do protocolo SMB que foi negociado
  • %T - Data e horario correntes

Configuração Global

[global]

Determina o nome NetBios do servidor samba

netbios name = SAMBA

Determina o dominio ou grupo de trabalho no qual o samba vai se anunciar

workgroup = DOMINIO

Define a pontuação do servidor samba para ser eleito como PDC, minimo de 33

os level = 254

Define se o servidor tentará se tornar o navegador principal do dominio.

domain master = yes

Define se o servidor tentará ou não participar das eleições para navegador local do grupo de trabalho.

local master = yes

Define se o servidor samba na eleição de masterbrowser terá vantagens.

prefered master = yes

Define se o servidor samba é um dominio para que clientes façam logons

domain logons = yes

Define se o servidor é o masterbrowser

master browse = yes

Determina um comentatio que ira aparecer junto ao ambiente de rede

server string = Samba %v on (%h)

Determina o caminho dos perfis das contas, no exemplo abaixo, ficara em \\nomedoservidor\[Profiles]\nome_da_conta

logon path = \\%L\Profiles\%U

Determina o drive de logon

logon drive = J:

Determina o logon home ou seja pasta do usuário principal manualmente

logon home = \\%L\homes\%U

Determina um script de logon padrão caso deseje

logon script = nomedoscript.bat ou nomedoscript.cmd

Define o nivel de segurança do servidor, são eles [user], [server], e [domain]

security = user

Define onde serão armazenadas as informações sobre usuários e grupos do dominio, são eles [tbsam], [smbpasswd], [ldapsam]

passdb backend = tbsam

Determina a localização dos arquivos de log

log file = /var/log/samba/log.%m

Define o tamanho maximo do log do samba. Padrão de 5mb ou 5000kb.

max log size = 5000

Define se ativa ou não a gravação de data/hora nos arquivos de log gerados pelo samba.

debug timestamp = yes

Define a ordem de pesquisa da resolução de nomes do samba

name resolve order = lmhosts host wins bcast
Define o nivel de depuração do samba nos daemons. valores de 0 a 9.
debug level = 1

Define como o servidor samba vai se anunciar

announce as = [NT Server] [NT Workstation] [Windows 9x]

Define o programa de senhas utilizado pelo samba

passwd program = /usr/bin/passwd %u

Define o script de logon da conta, no caso abaixo ele ira procurar algum scipts que bate com o mesmo numero da conta criada, portanto Netbios name.

logon script = %U.bat

Define o arquivo onde estao instaladas e configuradas as impressoras no servidor, muito importante caso deseje compartilhar impressoras no samba

printcap name = /etc/printcap
load printers = yes

Define se tem suporte wins ou nao.

wins support = yes
wins proxy = yes
dns proxy = yes
max wins ttl = 518400
wins server = 192.168.xxx.xxx

Define o numero de caracteres das senhas e do login

password level = 10
username level = 10

Define se as restrições do usuário nos módulos PAM terão efeito também no samba.

obey pam restrictions = yes

Define as condições das senhas.

min password length = 5
password history = 2
user must logon to change password = yes
maximum password age = 10
minimum password age = 5
lockout duration = 3
reset count minutes = 2
bad lockout attempt = 2

Define se o servidor vai mostrar horas

time server = yes
lpq command = lpq -P'%p'
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password*%n\n*passwd:*all*authentication*tokens*updated*successfully*
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
lprm command = lprm -P'%p' %j
lpresume command = lpc release '%p' %j
print command = lpr -r -P'%p' %s
printing = lprng
queuepause command = lpc stop '%p'
unix password sync = Yes
queueresume command = lpc start '%p'
lppause command = lpc hold '%p' %j
log level = 1
Define se usa caracteres em formato windows
unix charset = iso8859-1
display charset = cp850

Define se as palavras vão ser em minusculas

preserve case = no
short preserve case = no
default case = lower

Funções:

comment = [comentário] define um comentario
read only = [yes] [no] define se o compartilhamento é ou não somente leitura
writable = [yes] [no] define se o compartilhamento é ou não modo escrita
public = [yes] [no] define se o compartilhamento é publico
valid users = [user1] [@grupo1] define os usuarios validos a acessar o compartilhamento
create mask = [0600] define a mascara em formato de octetos
create mode = [0640] define as permissões padrões da criação de arquivos
force create mode = [0640]
directory mask = [0700]
force directory mode = [0640]
browsable = [yes] [no]
locking = [yes] [no]
write cache size = [500000]
follow symlink = [yes] [no]
wide links = [yes] [no]
guest ok = [yes] [no]
path = [/arquivos/scripts]
preserve case = [yes] [no]
short preseve case = [yes] [no]
default case = [lower] [upper]
character set = [iso8859-1]  seleciona a lingua padrão do samba
client code page = [850] Seleciona a página de códigos do samba para tratar os caracteres
preserve case = [yes] [no]
valid chars = [á:Á é:É ó:Ó ú:Ú â:Â ê:Ê ô:Ô ã:Ã õ:Ô à:À ò:Ò]
guest acount = [nobody] [@grupo1] Define a conta local que será mapeada quando um usuario se conectar sem senha
invalid users = [user1] [@grupo1] Define uma lista de usuário que estão proibidos a acessar o compartilhamento
valid users = [user1] [@grupo1] Semelhante a "invalid users" porém é ao contrário
obey pam restrictions = [yes] [no] Indica se as restrições do usuário nos módulos PAM terão efeito

Define se oculta ou nao as extenções dos arquivos

hide dot files = Yes

Define quais extenção vão ser ocultadas

hide files = /*.mp3/*.wav/*.tif/*.pif/*.mpg/*.mpeg/*.jpg/*.bmp

Define quais extenções vão ser vetadas, ou seja não poderão ser gravadas.

veto files = /*.mp3/*.wav/*.tif/*.pif/*.mpg/*.mpeg/*.jpg/*.bmp

Define se o usuario pode ou nao apagar os arquivos vetados.

delete veto files = yes

Define uma lixeira

vfs objects = recycle
recycle:repository = .recycle
recycle:keeptree = True
recycle:maxsize = 1024000
recycle:versions = True
recycle:noversions = .doc|.xls|.ppt|.pdf
recycle:touch = False
recycle:exclude = *.tmp*.temp *.obj*.~??

Seção especial do samba, não pode ser esquecida, é a pasta pessoal do login

[homes]
comment = Pastas dos usuarios
read only = no
writable = yes
public = no
writeable = Yes
valid users = %S
create mask = 0664
create mode = 0640
force create mode = 0640
directory mask = 0775
force directory mode = 0777
browsable = yes
locking = no
write cache size = 500000

Define parametros para os perfis do windows

[Profiles]
path = /arquivos/profiles
read only = No
guest ok = Yes
writeable = Yes
browseable = No

Define parametros para os scripts de logon da microsoft

[netlogon]
browseable = no
comment = Compartilhamento de Scripts
path = /arquivos/scripts

Seção especial do samba, não pode ser esquecida

[printers]
comment = Impressoras ( Todas )
path = /var/spool/samba
printable = Yes
browseable = No
guest ok = No
writable = No

Define parametros para uma possivel atualização de anti virus

[base]
guest ok = No
writable = yes
read only = No
path = /arquivos/antivirus/base

Define parametros para uma impressora

[hp2100m]
comment = Impressora Laser Postscript
path = /var/spool/samba
printer name = HP
browseable = yes
printable = yes
printer = lp
printing = lprng
read only = yes
guest ok = yes
valid users = usuario1, usuario2, @grupo1, @grupo2
create mode = 0700

Define parametros para o diretoio principal

[samba]
comment = Diretorio Principal
path = /arquivos
read only = No
force create mode = 0775
force directory mode = 0775
guest ok = yes
writeable = Yes

Define um exemplo de compartilhamento

[teste]
comment = Pasta de teste
path = /arquivos/teste
write list = @suporte
read only = No
force create mode = 0775
force directory mode = 0775
valid users = usuario1, usuario2, @grupo1, @grupo2
guest ok = Yes
browseable = Yes
Define se oculta ou nao as extenções dos arquivos
hide dot files = Yes
Define quais extenção vão ser ocultadas
hide files = /*.mp3/*.wav/*.tif/*.pif/*.mpg/*.mpeg/*.jpg/*.bmp
Define quais extenções vão ser vetadas, ou seja não poderão ser visualizadas
veto files = /*.mp3/*.wav/*.tif/*.pif/*.mpg/*.mpeg/*.jpg/*.bmp
Define se o usuario pode ou nao apagar os arquivos vetados.
delete veto files = yes

Um Exemplo Completo

[exemplo]
comment = Comentario
path = /arquivos/teste
valid users = @grupo1, @grupo2
read only = No
create mask = 0777
force create mode = 0775
force security mode = 0775
guest ok = No
browseable = No
locking = no
write cache size = 500000
share modes = no
veto files = /*.mp3/*.wav/*.tif/*.pif/*.jpg/*.bmp
hide files = /*.mp3/*.wav/*.tif/*.pif/*.jpg/*.bmp
vfs objects = recycle
recycle:repository = .recycle
recycle:keeptree = True
recycle:maxsize = 1024000
recycle:versions = True
recycle:noversions = .doc|.xls|.ppt|.pdf
recycle:touch = False
recycle:exclude = *.tmp *.temp *.obj *.~??

SAMBA 4 AD/CD

Previsionamento

Fixar IP

Cópia de segurança do arquivo
cp /etc/netplan/*.yaml /etc/netplan/*.yaml.bckp

Edite o arquivo ".yaml" em "/etc/netplan" conforme abaixo:

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: false
      adresses: [192.168.0.100/24]
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        adresses:
          - 8.8.8.8
          - 1.1.1.1

Ajuste no /etc/hosts

Edite o arquivo
vim /etc/hosts
ajuste como o trecho abaixo
127.0.0.1       localhost.localdomain   localhost
127.0.1.1       dominio.dominio.local         ad1
192.168.18.10   ad1.dominio.local       ad1

Ajuste no /etc/hostname

Edite o arquivo /etc/hostname
hostnamectl set-hostname AD1.DOMINIO.LOCAL

Ajuste date e hora

timedatectl set-timezone America/Sao_Paulo

Para verificar a hora

date
Instala as dependências
apt install autoconf
apt install bind9utils
apt install bison
apt install debhelper
apt install dnsutils
apt install docbook-xml
apt install docbook-xsl
apt install flex
apt install gdb
apt install libjansson-dev
apt install libacl1-dev
apt install libaio-dev
apt install libarchive-dev
apt install libattr1-dev
apt install libblkid-dev
apt install libbsd-dev
apt install libcap-dev
apt install libcups2-dev
apt install libgnutls28-dev
apt install libgpgme11-dev
apt install libjson-perl
apt install libldap2-dev
apt install libncurses5-dev
apt install libpam0g-dev
apt install libparse-yapp-perl
apt install libpopt-dev
apt install libreadline-dev
apt install nettle-dev
apt install perl
apt install perl-modules
apt install pkg-config
apt install python-all-dev
apt install python-crypto
apt install python-dbg
apt install python-dev
apt install python-dnspython
apt install python3-dnspython
apt install python-gpg
apt install python3-gpg
apt install python-markdown
apt install python3-markdown
apt install python3-dev
apt install xsltproc
apt install zlib1g-dev
apt install liblmdb-dev
apt install lmdb-utils
apt install libsystemd-dev

Reinicia

reboot now

Instala mais o samba e suas dependências

apt install samba
apt install krb5-user
apt install winbind
apt install libnss-winbind
apt install smbclient
apt install ldap-utils 
apt install acl 
apt install attr 
apt install ntp

Configurar o Kerberos

Configuring Kerberos Authentication
default kerberos Realm: 
DOMINIO.LOCAL
Kerberos Server for your realm:
127.0.0.1
Administrative Server for your Kerberos realm:
127.0.0.1

Parar alguns serviços

systemctl stop smbd.service
systemctl stop nmbd.service
systemctl stop winbind.service

Remover o smb.conf

mv /etc/samba/smb.conf /etc/samba/smb.conf.bckp

Provisionamento

samba-tool domain provision --use-rfc2307 --interactive

Em um certo momento do provisionamento, será perguntado algumas informações, confirme como abaixo:

Realm [ ]: DOMINIO.LOCAL
Domain[ ]: DOMINIO
Server Role [dc]: dc
DNS Backend [SAMBA_INTERNAL]: SAMBA_INTERNAL
DNS Forwarder IP address[127.0.0.53]: 8.8.8.8
Administrator password: *************

Iniciar os serviços que foram parados anteriormente:

/etc/init.d/samba-ad-dc restart
systemctl unmask samba-ad-dc.service
systemctl enable samba-ad-dc.service
systemctl restart samba-ad-dc.service
systemctl status samba-ad-dc.service

Desativar o systemd-resolved

systemctl disable systemd-resolved.service
systemctl stop systemd-resolved.service

Editar o arquivo /etc/resolv.conf

vim /etc/resolv.conf

Inclua o trecho abaixo:

nameserver 192.168.0.1
domain dominio.local
search dominio.local

Exportar o krb5.conf

cp -vb /var/lib/samba/private/krb5.conf /etc/krb5.conf

Reinicia

reboot now

Realização de testes

smbclient -L localhost -U Administrator
Verificar se o serviço de DNS está funcionando fazendo as resoluções:
host -t A dominio.local
host -t SRV _ldap._tcp.dominio.local
host -t SRV _kerberos._udp.dominio.local
Verificar o funcionamento do KERBEROS
kinit [email protected]
klist
Verifica o nivel da árvore
samba-tool domain level show

Colocar no Domínio

Linux Desktop

Para inserir seu Ubuntu Desktop (ou qualquer outro com base no Ubuntu) no domínio DOMINIO.LOCAL, execute o passo a passo pelo terminal.

Requisitos:

  • Nome DNS resolvido corretamente (/etc/resolv.conf)
  • Usuário do domínio com permissão para adicionar máquinas (ex: Administrador)
  • Hora sincronizada com o AD
  • Hostname da máquina configurado corretamente
Configure hostname e resolv.conf

Defina o hostname:

sudo hostnamectl set-hostname xubuntu.dominio.local

Edite o /etc/hosts:

sudo vim /etc/hosts

Adicione (ou edite) a linha correspondente:

192.168.0.123  nome_do_pc.dominio.local  nome_do_pc

Configure o DNS para apontar para o Samba AD:

sudo vim /etc/systemd/resolved.conf

Altere (ou descomente e edite) as linhas:

DNS=192.168.0.10
Domains=dominio.local

Salve, e reinicie o serviço de DNS:

sudo systemctl restart systemd-resolved
Configure o timezone e sincronize o relógio (importante!)
sudo timedatectl set-timezone America/Sao_Paulo
sudo apt install chrony -y

Edite /etc/chrony/chrony.conf e adicione no início:

server 192.168.0.10 iburst

Depois:

sudo systemctl restart chrony
chronyc tracking

Instalar os pacotes necessários

sudo apt update
sudo apt install realmd
sudo apt install sssd
sudo apt install sssd-tools
sudo apt install adcli
sudo apt install samba-common-bin
sudo apt install packagekit
sudo apt install libnss-sss
sudo apt install libpam-sss
sudo apt install krb5-user

Durante a instalação do krb5-user, insira:

Realm: DOMINIO.LOCAL
Servidor KDC: dominio.local
Servidor Admin: dominio.local

Testar autenticação no domínio (Kerberos)

kinit [email protected]

Você será solicitado a inserir a senha. Se tudo estiver certo, você pode verificar com:

klist

Ingressar a máquina no domínio

sudo realm join --user=administrador DOMINIO.LOCAL

Verifique se foi ingressado corretamente

realm list

Você deve ver algo como:

realm-name: DOMINIO.LOCAL
configured: kerberos-member

Permitir usuários do domínio

Para permitir todos os usuários:

sudo realm permit --all

Ou apenas um grupo:

sudo realm permit --groups "DOMINIO\Domain Users"

Login de usuários do domínio (no LightDM ou terminal)

Você pode logar com:

[email protected]

Para que usuários do domínio tenham diretórios home:

sudo pam-auth-update

E marque: "Create home directory on login"

Testar no terminal

Tente rodar:

id [email protected]

Você deve ver as informações do usuário, com grupos do domínio. DICA: Evite digitar o domínio no login

Edite /etc/sssd/sssd.conf (se não existir, crie com cuidado):

[sssd]
domains = dominio.local
config_file_version = 2
services = nss, pam

[domain/dominio.local]
id_provider = ad
override_homedir = /home/%u
default_shell = /bin/bash

Depois:

sudo chmod 600 /etc/sssd/sssd.conf
sudo systemctl restart sssd

Fontes