209.1 Configuração do Servidor Samba
Introdução
O Samba é um conjunto de programas para Linux/Unix que fornece uma interoperabilidade para o Windows, ou seja, é um serviço (ou conjunto de serviços) que rodam no Linux/Unix mas que possuem uma compatibilidade com Windows. A principal função do samba, apesar de não se limitar a isso, é fornecer um compartilhamento de arquivos e impressoras para dispositivos Windows (usando os protocolos usados pelo Windows, que são SMB/CIFS).
O Samba possui mais funções como o AD, que inclui um LDAP, controle de autenticação com Kerberos, sistema de DNS, NTP e muito mais. Com relação ao AD do Windows, o Samba pode ser um AD ou pode se integrar a um AD já existente.
Vamos começar fazendo a instalação do Samba.
- CentOS 7
- Ubuntu 20.04
$ sudo yum install samba samba-client -y
## samba-client é usado para se conectar no samba (como uma pasta compartilhada).
# Inicie o serviço:
$ sudo systemctl start smb nmb
# Coloque o serviço para subir na inicialização:
$ sudo systemctl enable smb nmb
# Para verificar se está rodando podemos ver o serviço:
$ systemctl status smb
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2023-04-11 22:03:31 UTC; 37s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 3662 (smbd)
Status: "smbd: ready to serve connections..."
CGroup: /system.slice/smb.service
├─3662 /usr/sbin/smbd --foreground --no-process-group
├─3664 /usr/sbin/smbd --foreground --no-process-group
├─3665 /usr/sbin/smbd --foreground --no-process-group
└─3666 /usr/sbin/smbd --foreground --no-process-group
● nmb.service - Samba NMB Daemon
Loaded: loaded (/usr/lib/systemd/system/nmb.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2023-04-11 22:20:15 UTC; 4s ago
Docs: man:nmbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 3700 (nmbd)
Status: "nmbd: ready to serve connections..."
CGroup: /system.slice/nmb.service
└─3700 /usr/sbin/nmbd --foreground --no-process-group
Apr 11 22:20:15 lpic2-centos7 systemd[1]: Starting Samba NMB Daemon...
Apr 11 22:20:15 lpic2-centos7 nmbd[3700]: [2023/04/11 22:20:15.752509, 0] ../../lib/util/become_d...ady)
Apr 11 22:20:15 lpic2-centos7 systemd[1]: Started Samba NMB Daemon.
Apr 11 22:20:15 lpic2-centos7 nmbd[3700]: daemon_ready: daemon 'nmbd' finished starting up and r...ions
Hint: Some lines were ellipsized, use -l to show in full.
$ sudo apt install samba samba-client -y
## samba-client é usado para se conectar no samba (como uma pasta compartilhada).
# Para verificar se está rodando podemos ver o serviço:
$ systemctl status smbd nmbd
● smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-04-11 21:50:25 UTC; 36s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 21353 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 4 (limit: 460)
Memory: 13.0M
CGroup: /system.slice/smbd.service
├─21353 /usr/sbin/smbd --foreground --no-process-group
├─21355 /usr/sbin/smbd --foreground --no-process-group
├─21356 /usr/sbin/smbd --foreground --no-process-group
└─21357 /usr/lib/x86_64-linux-gnu/samba/samba-bgqd --ready-signal-fd=45 --parent-watch-fd=1>
Apr 11 21:50:25 ubuntu2004.localdomain systemd[1]: Starting Samba SMB Daemon...
Apr 11 21:50:25 ubuntu2004.localdomain update-apparmor-samba-profile[21347]: grep: /etc/apparmor.d/samba>
Apr 11 21:50:25 ubuntu2004.localdomain update-apparmor-samba-profile[21350]: diff: /etc/apparmor.d/samba>
Apr 11 21:50:25 ubuntu2004.localdomain systemd[1]: Started Samba SMB Daemon.
● nmbd.service - Samba NMB Daemon
Loaded: loaded (/lib/systemd/system/nmbd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-04-11 21:50:25 UTC; 29min ago
Docs: man:nmbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 21333 (nmbd)
Status: "nmbd: ready to serve connections..."
Tasks: 1 (limit: 460)
Memory: 3.9M
CGroup: /system.slice/nmbd.service
└─21333 /usr/sbin/nmbd --foreground --no-process-group
Apr 11 21:50:24 ubuntu2004.localdomain systemd[1]: Starting Samba NMB Daemon...
Apr 11 21:50:25 ubuntu2004.localdomain systemd[1]: Started Samba NMB Daemon.
O SMBD é o principal serviço Samba, sua função é gerenciar os compartilhamentos (arquivos e impressoras), já o NMBD é responsável por fornecer serviços de resolução de nomes NetBIOS (Network Basic Input/Output System) para os clientes da rede que usam o protocolo NetBIOS.
O NetBIOS é mais usado pelos sistemas operacionais Windows antigos. Sua função é resolver os nomes NetBIOS em endereços IP e vice-versa, permitindo que os computadores se comuniquem entre si usando o protocolo NetBIOS.
O SMBD usa as portas 139 e 445 TCP;
O NMBD usa as portas 137 e 138 UDP;
Caso precise debugar, o Samba armazena os logs em /var/log/samba por padrão. Já o arquivo de configuração fica em /etc/samba/smb.conf.
Estrutura de configuração
A configuração do Samba é segmentada em seções, onde a seção principal é nomeada como [global], as configurações aqui se aplicam para todo o Samba, algumas opções aqui são:
| Opção | Descrição |
|---|---|
| workgroup | Define o grupo de trabalho, configuração importante para entrar no AD. |
| wins | Fornece um serviço de tradução de Nomes NetBIOS em IP, gerenciado pelo NMBD como explicado acima. |
| log file | Para informar ao Samba onde armazenar os logs. |
| server role = standalone server | Fazer o Samba trabalhar como se fosse um AD, não dependendo de outros servidores na Rede. |
| unix password sync = yes | O Samba vai mudar a senha no Linux/Unix quando ele mudar a senha no Samba, para que ambos fiquem com a mesma senha. |
Além das configurações Globais, ainda temos as configurações de compartilhamento, que são específicas para determinado compartilhamento no Samba. Cada compartilhamento possui um nome, mas um deles é especial e veremos com certa frequência, é o [printers] que define o compartilhamento das impressoras e o [homes] que define um compartilhamento da Home de cada usuário, onde um usuário só possa acessar a sua Home.
Compartilhamento de Diretórios
Vamos fazer um compartilhamento, uma das etapas mais simples mas uma das mais importantes.
Compartilhamento do Home
Vamos começar configurando o compartilhamento do Home dos usuários:
# Primeiro acesse o arquivo abaixo:
$ sudo vim /etc/samba/smb.conf
# Agora vamos adicionar a configuração abaixo, no meu arquivo não possui outra configuração para '[homes]', então essa vai ser a primeira:
[homes]
comment = Homes Directories
browseable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %S
# Para testar crie um usuário de teste:
$ sudo useradd -m -s /bin/nologin fulano
useradd: Warning: missing or non-executable shell '/bin/nologin'
## Fiz dessa forma para que esse usuário não consiga logar via SSH!
# Defina uma senha para esse usuário:
$ sudo passwd fulano
New password:
Retype new password:
passwd: password updated successfully
# Adicione o usuário ao Samba:
$ sudo smbpasswd -a fulano
New SMB password:
Retype new SMB password:
Added user fulano.
## Caso precise mudar a senha:
$ sudo smbpasswd fulano
# Verifique se está tudo certo com a configuração:
$ sudo testparm
Segue uma explicação para cada opção usada:
| Opção | Descrição |
|---|---|
| comment | Comentário para o compartilhamento. |
| browseable | Não exibir esse compartilhamento quando buscar por diretórios compartilhados na Rede, para acessar ele, você deve saber da existência dele. |
| read only | Esse diretório vai ser somente leitura? No nosso caso sim, então não será possível editar arquivos a menos que seja administrador. |
| writeable | Substitui o read only, mas a premissa de uso é invertida, aqui é se vai poder escrever. |
| create mask | Permissão padrão para os arquivos criados no compartilhamento do Samba. |
| directory mask | Permissão padrão para os diretórios criados no compartilhamento do Samba. |
| valid users | Quem são os usuários que podem logar nesse compartilhamento?. O S% indica que é apenas o próprio usuário. |
Podemos testar via terminal mesmo:
# Teste o compartilhamento do Home. Faça dessa mesma forma, mudando o usuário:
$ smbclient //192.168.1.153/fulano -U fulano
Password for [WORKGROUP\fulano]:
Try "help" to get a list of possible commands.
smb: \>
Outra forma é usando o Nautilus do Ubuntu por exemplo:
# Faça dessa mesma forma, mudando o usuário:
smb://192.168.1.153/fulano
Uma tela similar a imagem abaixo vai aparecer, preencha os dados e tecle connect.

Essa configuração que usamos para a home são configurações básicas, uma configuração um pouco mais segura pode ser visto abaixo:
[homes]
comment = Home Directories
path = /samba/%S
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
| Opção | Descrição |
|---|---|
| path | Caminho onde estão as homes dos usuários, %S é uma variável que é substituída pelo nome de usuário do usuário que está acessando o compartilhamento. |
valid users | Define quais usuários ou grupos podem acessar o compartilhamento. Em um compartilhamento dinâmico [homes], %S é substituído pelo nome do serviço atual, que normalmente corresponde ao nome do usuário. A expressão %D%w%S representa esse usuário qualificado pelo domínio: %D é o domínio, %w é o separador configurado pelo Winbind e %S é o nome do serviço. Por exemplo, o resultado pode ser DOMINIO\usuario. |
| inherit acls = Yes | Define se as permissões de acesso a arquivos/diretórios serão herdadas do diretório pai. Neste caso, as permissões de acesso serão herdadas do diretório físico que contém os diretórios pessoais dos usuários. |
Usando o comando abaixo é possível verificar quais são os compartilhamentos que um usuário tem acesso, se algum compartilhamento tiver browseable = no não será listado:
$ smbclient -L //192.168.1.153 -U fulano
Password for [WORKGROUP\fulano]:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
IPC$ IPC IPC Service (ubuntu2004 server (Samba, Ubuntu))
fulano Disk Homes Directories
SMB1 disabled -- no workgroup available
Compartilhamento do Public
Vamos configurar um compartilhamento que seja público, para que todos possam acessar:
# Primeiro acesse o arquivo abaixo:
$ sudo vim /etc/samba/smb.conf
# Agora vamos adicionar a configuração:
[public]
comment = Public Directory
browseable = yes
path = /samba/public
read only = no
guest ok = yes
# Ainda podemos configurar um diretório de Logs:
[Logs]
comment = Logs Directory
browseable = no
path = /samba/logs
read only = yes
valid users = fulano
# Verifique se está tudo certo com a configuração:
$ sudo testparm
Compartilhamento Oculto no Windows
No Linux/Unix é usado a opção browseable = no para tornar o compartilhamento oculto, mas no Windows isso é feito colocando um $ (cifrão) no final do nome do compartilhamento.
# Primeiro acesse o arquivo abaixo:
$ sudo vim /etc/samba/smb.conf
# Agora vamos adicionar a configuração:
[oculto$]
comment = Public Directory
browseable = no
path = /samba/oculto
read only = no
guest ok = yes
Montagem Remota de Compartilhamentos
Vamos ver como fazer a montagem de um compartilhamento automaticamente, como por exemplo a Home.
# No Cliente instale o pacote abaixo (vou usar um Centos7 como cliente, no Debian é o mesmo nome):
$ sudo yum install cifs-utils
# Agora monte usando o comando 'mount':
$ sudo mount -t cifs //192.168.1.153/fulano -o username='fulano' /mnt
Password for fulano@//192.168.1.153/fulano: ***********
# Veja se deu certo:
$ df -h /mnt
Filesystem Size Used Avail Use% Mounted on
//192.168.1.153/fulano 124G 11G 113G 9% /mnt
# Podemos passar a senha em texto puro:
$ sudo mount -t cifs //192.168.1.153/fulano -o username='fulano',password='123456' /mnt
Agora vamos ver como colocar isso no fstab:
# Edite o 'fstab':
$ sudo vim /etc/fstab
# Adicione a linha:
//192.168.1.153/fulano /mnt cifs user,credentials=/home/vagrant/cifs.acesso 0 0
# Agora no arquivo referenciado:
$ vim /home/vagrant/cifs.acesso
# Adicione:
username=fulano
password=123456
# Para montar usando fstab podemos fazer assim:
$ sudo mount -a
# Verifique se montou:
$ df -hT /mnt
Filesystem Type Size Used Avail Use% Mounted on
//192.168.1.153/fulano cifs 124G 11G 113G 9% /mnt
Compartilhamento de Impressoras
Vamos ver como compartilhar uma impressora usando o Samba. Por padrão a configuração de compartilhamento de impressoras já vem habilitada.
# Edite o arquivo abaixo:
$ sudo vim /etc/samba/smb.conf
# A configuração abaixo faz o compartilhamento de impressoras:
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
# Já a configuração abaixo é usada para clientes Windows conseguirem obter os drivers da impressora:
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
## Pode ser que você precise mudar o local dos drivers para 'path = /usr/share/cups/drv'.
Mapeamento de Usuários
Vamos ver como usar o Username Map, é um recurso do Samba que permite mapear um nome de usuário no Samba para outro nome de usuário. Isso é útil quando vários usuários precisam ter acesso a um mesmo usuário dentro do Samba ou quando o nome de usuário no Windows é diferente do nome de usuário no Samba.
Ainda existem outras aplicações para esse recurso, vou deixar um link oficial para esse recurso.
Vamos começar configurando um arquivo para ser o nosso mapa:
# Edite o arquivo abaixo:
$ sudo vim /etc/samba/smb.conf
# Adicione a opção abaixo na seção Global:
username map = /etc/samba/username.map
# Agora edite esse arquivo:
$ sudo vim /etc/samba/username.map
# Adicione a configuração abaixo:
fulano = bob
Nessa configuração estamos dizendo que fulano é igual a bob, ou seja, quando acessar o Samba usando o nome de bob ele será mapeado para fulano. O username usado no Samba sempre fica a esquerda e o username que queremos mapear sempre fica a direita.
Ainda é possível colocar mais de um username na mesma linha:
fulano = bob alice
Vamos testar:
# Podemos ver que 'Bob' possui acesso a home de 'fulano' (use a mesma senha de fulano para acessar):
$ smbclient -L //192.168.1.153 -U bob
Enter SAMBA\bob's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
public Disk Public Directory
IPC$ IPC IPC Service (ubuntu2004 server (Samba, Ubuntu))
fulano Disk Homes Directories
Agora veja se com Alice funciona:
$ smbclient -L //192.168.1.153 -U alice
Enter SAMBA\alice's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
public Disk Public Directory
IPC$ IPC IPC Service (ubuntu2004 server (Samba, Ubuntu))
fulano Disk Homes Directories
Configurações de Segurança
Vamos ver os modos de segurança que o Samba disponibiliza, atualmente são 5 modos de segurança. Para usar isso, temos que configurar na seção Global a opção security.
Os modos de segurança são:
user
Neste modo, o próprio servidor Samba valida o nome de usuário e a senha apresentados pelo cliente. As credenciais são verificadas no banco de usuários configurado localmente no servidor.
Após a autenticação, o acesso aos compartilhamentos é determinado pelas opções do Samba e pelas permissões do sistema de arquivos.
Esse modo é normalmente utilizado em servidores Samba autônomos, que não fazem parte de um domínio.share
O acesso aos compartilhamentos é concedido a qualquer usuário que possua as credenciais corretas, aceitando somente a senha, sem necessitar de um username explicito do usuário.
O servidor vai esperar receber uma senha para cada compartilhamento, independente do nome de usuário. Usuários de Windows reportaram vários problemas com este modo e os desenvolvedores do Samba não recomendam seu uso.
Este modo de segurança é menos seguro que o modo `user`, pois não exige autenticação individual de cada usuário que acessa os compartilhamentos.domain - Não cai na LPIC-2
O mododomainé semelhante ao modouser, mas em vez de armazenar as informações de autenticação do usuário localmente no servidor Samba, ele usa um servidor de domínio externo para autenticar os usuários e gerenciar suas permissões de acesso aos compartilhamentos.
Este é um modo muito interessante caso queira usar um sistma de autenticação centralizado como FreeIPA.ADS
Este modo permite que o servidor Samba seja integrado a um domínio Active Directory (AD). Neste modo, os usuários se autenticam usando suas credenciais de AD, e as permissões de acesso aos compartilhamentos são gerenciadas pelo AD. Esse modo é particularmente útil em ambientes de rede complexos, onde há vários servidores Samba e/ou servidores Windows que precisam se integrar a um único domínio AD.
Ingressando o Samba como membro do AD
Vamos fazer o Samba fazer ingressar num domínio AD já existente, para isso é necessário criar um AD usando Windows Server.
No Samba vamos instalar e configurar ele para ingressar no AD:
# Instale o pacote abaixo:
$ sudo apt install winbind libpam-winbind libnss-winbind krb5-config -y
# Edite o arquivo abaixo:
$ sudo vim /etc/nsswitch.conf
## Adicione o 'winbind':
passwd: files systemd winbind
group: files systemd winbind
# Configure o Samba para usar o servidor DNS que tem no AD:
$ sudo vim /etc/resolv.conf
# Edite o arquivo abaixo:
$ sudo vim /etc/pam.d/common-session
## No final do arquivo adicione:
session optional pam_mkhomedir.so skel=/etc/skel umask=077
# Agora vamos configurar o Samba:
$ sudo vim /etc/samba/smb.conf
## As configurações abaixo devem ficar na seção Global:
workgroup = exemplo
security = ads
realm = exemplo.com.br
netbios name = server-samba # Nome do host visto pelo AD.
# Agora reinicie todos os serviços:
$ sudo systemctl restart winbind nmbd smbd
# Agora vamos ingressar no domínio do AD:
$ sudo net ads join -U Administrator
# Para testar se ingressou podemos testar:
$ wbinfo --ping-dc
checking the NETLOGON for domain[EXEMPLO] dc connection to "windows-server.exemplo.com.br" succeeded
Comandos importantes
| Opção | Descrição |
|---|---|
| pdbedit -L | Lista os usuários que estão no Samba |
| sudo testparm | Verifique se existem erros de sintaxe no arquivo de configuração do Samba. |
| smbcontrol | Usado para controlar o Samba. |
| smbcontrol all reload-config | Faz todos os destinos relerem a configuração. |
| smbcontrol all kill-client-ip IP | Mata uma sessão de um usuário no Samba. |
| smbstatus | Mostra detalhes das conexões no Samba . |
Em
smbcontrolo parâmetroallsignifica nmbd, smbd e winbindd.
Abaixo seguem comandos importante para se trabalhar com uma máquina que está ingressada num AD ou usada como PDC.
| Opção | Descrição |
|---|---|
| nmblookup | Usado para resolução de Nomes dentro no NetBIOS, fornece mais opções de informação. |
| samba-tool | Ferramenta para administrar o Samba, muito usada quando o Samba é um PDC. |
| samba-tool dbcheck | Verifica se existem erros no banco de dados do AD. |
| samba-tool proccess | Lista os processos. |
| net | É uma ferramente para administrar o Samba e servidores CIFS remotos. |
| net -S localhost -U username share | Mostra os compartilhamentos de um usuário. |
| net -S windows-server time | Mostra a hora do servidor AD (Nesse caso se chama windows-server). |
Opções de configuração
| Opção | Descrição |
|---|---|
| comment | Comentário para o compartilhamento. |
| browseable | Não exibir esse compartilhamento quando buscar por diretórios compartilhados na Rede, para acessar ele, você deve saber da existência dele. |
| read only | Esse diretório vai ser somente leitura? No nosso caso sim, então não será possível editar arquivos a menos que seja administrador. |
| writeable | Substitui o read only, mas a premissa de uso é invertida, aqui é se vai poder escrever. |
| create mask | Permissão padrão para os arquivos criados no compartilhamento do Samba. |
| directory mask | Permissão padrão para os diretórios criados no compartilhamento do Samba. |
| valid users | Quem são os usuários que podem logar nesse compartilhamento?. O S% indica que é apenas o próprio usuário. |
| path | Caminho onde estão as homes dos usuários, %S é uma variável que é substituída pelo nome de usuário do usuário que está acessando o compartilhamento. |
| valid users | Quem poderá acessar esse compartilhamento, no caso, se tratando de usuários. As flgas %S, %D%w%S significam que o usuário atual e qualquer usuário no mesmo domínio (indicado pelo "%D") e no mesmo endereço IP (indicado pelo "%w") também terão permissão para acessar seus próprios diretórios pessoais. |
| inherit acls = Yes | Define se as permissões de acesso a arquivos/diretórios serão herdadas do diretório pai. Neste caso, as permissões de acesso serão herdadas do diretório físico que contém os diretórios pessoais dos usuários. |
| guest ok = yes | Vai permitir que usuários que não estejam no Samba acessem o compartilhamento. |
| printable = yes | Permite abrir, escrever e enviar arquivos para impressão. É uma configuração mais usada no segmento de impressoras, para que os clientes possam imprimir. |
Fontes importantes
https://en.wikipedia.org/wiki/Administrative_share#cite_note-hidden-create-delete-1
https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html#PRINTABLE
https://www.server-world.info/en/note?os=Debian_9&p=samba&f=3
https://pt.wikipedia.org/wiki/Controlador_de_dom%C3%ADnio