Configuração Avançada do Samba no Linux: Guia Detalhado para Compartilhamento Seguro e Eficiente
utros sistemas Linux de forma transparente, funcionando como um servidor de arquivos e impressão em redes heterogêneas.
Enquanto uma configuração básica do Samba pode ser relativamente simples, este guia avançado destina-se a administradores de sistema e usuários experientes que buscam aprofundar seus conhecimentos, explorando configurações de segurança robustas, integração com Active Directory, gerenciamento granular de acesso e otimizações de performance.
Pré-requisitos:
- Conhecimento básico de administração de sistemas Linux (terminal, gerenciamento de pacotes, permissões de arquivos).
- Acesso root ou sudo ao servidor Linux.
- Compreensão de conceitos básicos de rede (endereçamento IP, firewall).
1. Instalação do Samba
Os pacotes do Samba estão disponíveis nos repositórios da maioria das distribuições Linux.
Para Debian/Ubuntu e derivados:
sudo apt updatesudo apt install samba samba-client cifs-utils -y
Para RHEL/CentOS/Fedora e derivados:
sudo dnf install samba samba-client samba-common cifs-utils -y # Para Fedora e RHEL/CentOS 8+# ousudo yum install samba samba-client samba-common cifs-utils -y # Para CentOS 7 e RHEL 7Após a instalação, os principais serviços do Samba (smbd e nmbd) geralmente precisam ser habilitados e iniciados:
sudo systemctl enable smbsudo systemctl enable nmbdsudo systemctl start smbsudo systemctl start nmbdVerifique o status:
sudo systemctl status smbsudo systemctl status nmbd
2. Entendendo o Arquivo de Configuração smb.conf
A configuração principal do Samba reside no arquivo /etc/samba/smb.conf. Este arquivo é dividido em seções:
[global]: Contém configurações que se aplicam a todo o servidor Samba.- Seções de Compartilhamento (Ex:
[publico],[documentos]): Definem diretórios ou impressoras específicas a serem compartilhadas, com suas respectivas configurações de acesso e permissões. - Seções Especiais (Ex:
[homes],[printers]): Compartilhamentos com funcionalidades predefinidas.
É uma boa prática fazer um backup do arquivo original antes de realizar modificações:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bkp
3. Configuração Global Avançada ([global])
A seção [global] é crucial para definir o comportamento geral do servidor Samba.
[global] # --- Identificação na Rede --- workgroup = GRUPODETRABALHO # Ou o nome do seu domínio NT4/Workgroup. Se for integrar com AD, será o nome NetBIOS do domínio. server string = Servidor de Arquivos Samba Avançado %v # %v insere a versão do Samba netbios name = MEUSERVIDORLINUX # Nome NetBIOS do servidor # --- Segurança --- security = user # Padrão e recomendado. Usuários precisam se autenticar. # Outras opções: ads (para Active Directory), domain (para NT4 domain member) passdb backend = tdbsam # Backend para senhas. tdbsam é o padrão. smbpasswd é mais antigo. # ldapsam para integração com LDAP (não AD). map to guest = Bad User # Mapeia logins inválidos para o usuário guest (se guest ok = yes) # --- Logging --- log file = /var/log/samba/log.%m # Arquivo de log por máquina cliente (%m) max log size = 1000 # Tamanho máximo do log em KB antes de rotacionar log level = 1 auth:3 winbind:2 # Nível de detalhe do log. Aumente para depuração. # --- Protocolo SMB --- server min protocol = SMB2_10 # Versão mínima do protocolo SMB a ser suportada server max protocol = SMB3 # Versão máxima do protocolo SMB a ser suportada # (Use SMB3 para melhor segurança e performance com clientes modernos) # --- Rede --- # interfaces = lo eth0 192.168.1.0/24 # Especifica em quais interfaces o Samba escutará # bind interfaces only = yes # Garante que o Samba só escute nas interfaces listadas # --- Interoperabilidade e Performance --- # socket options = TCP_NODELAY SO_RCVBUF=131072 SO_SNDBUF=131072 # use sendfile = yes # strict locking = no # Pode ser 'auto' ou 'yes' dependendo da necessidade de locking # oplocks = yes # level2 oplocks = yes # read raw = yes # write raw = yes # --- Impressão (se for compartilhar impressoras via Samba) --- # load printers = yes # printing = cups # printcap name = cups # --- Para integração com Windows ACLs (mais avançado) --- # vfs objects = acl_xattr # map acl inherit = yes # store dos attributes = yesObservações Importantes na Seção [global]:
security = user: Este é o modo mais comum e seguro para compartilhamentos que exigem autenticação. Cada usuário precisará ter uma conta no sistema Linux e uma senha Samba correspondente.passdb backend:tdbsamé o padrão moderno. Se você estiver migrando de uma configuração muito antiga, pode encontrarsmbpasswd.server min/max protocol: Essencial para segurança. Desabilitar SMB1 (NT1) é altamente recomendado devido a vulnerabilidades. Use SMB2 e SMB3 sempre que possível.
4. Criação e Gerenciamento de Usuários Samba
Com security = user, os usuários Samba devem primeiro existir como usuários no sistema Linux. Depois, suas senhas para o Samba são gerenciadas separadamente com o utilitário smbpasswd.
-
Crie um usuário Linux (se ainda não existir):
Bashsudo adduser nome_do_usuario(Siga as instruções para definir a senha do sistema e outras informações).
-
Adicione o usuário ao banco de dados do Samba e defina uma senha Samba:
Bashsudo smbpasswd -a nome_do_usuarioVocê será solicitado a digitar uma nova senha para o Samba para este usuário. Esta senha pode ser diferente da senha de login do sistema Linux.
Outros comandos smbpasswd úteis:
sudo smbpasswd -x nome_do_usuario: Exclui um usuário do Samba.sudo smbpasswd -d nome_do_usuario: Desabilita um usuário Samba.sudo smbpasswd -e nome_do_usuario: Habilita um usuário Samba previamente desabilitado.sudo smbpasswd nome_do_usuario: Permite que um usuário (ou root) altere a senha Samba denome_do_usuario.
5. Configurando Compartilhamentos Seguros e Avançados
Defina cada compartilhamento em sua própria seção no smb.conf.
Exemplo 1: Compartilhamento Privado Autenticado
Suponha que você tenha um diretório /srv/samba/documentos_confidenciais que deve ser acessível apenas por usuario1 (leitura/escrita) e usuario2 (apenas leitura).
Primeiro, crie o diretório e defina as permissões Linux apropriadas:
sudo mkdir -p /srv/samba/documentos_confidenciaissudo chown root:users /srv/samba/documentos_confidenciais # Exemplo: dono root, grupo 'users'sudo chmod 770 /srv/samba/documentos_confidenciais # Permissões para dono e grupo, nenhum para outros(Ajuste o proprietário e grupo conforme sua política. usuario1 e usuario2 devem ser membros do grupo users ou ter permissões específicas via ACLs Linux.)
Adicione ao smb.conf:
[documentos_privados] comment = Documentos Confidenciais da Equipe path = /srv/samba/documentos_confidenciais browseable = yes writable = no # Padrão é não permitir escrita globalmente read only = yes # Sinônimo de writable = no # Controle de Acesso valid users = usuario1, usuario2, @grupo_gerencia # Permite acesso a estes usuários e membros do grupo_gerencia write list = usuario1, @grupo_gerencia # Permite escrita para usuario1 e grupo_gerencia # usuario2 terá apenas leitura (não está no write list) admin users = admin_samba # Usuário com privilégios de administrador neste share # Permissões de Arquivos e Diretórios create mask = 0664 # Permissões para novos arquivos (rw-rw-r--) directory mask = 0775 # Permissões para novos diretórios (rwxrwxr-x) force user = usuario_padrao # Força que todos os arquivos sejam criados como este usuário (cuidado) force group = grupo_padrao # Força que todos os arquivos sejam criados com este grupo (cuidado)Explicação dos Parâmetros de Compartilhamento:
comment: Descrição do compartilhamento.path: Caminho absoluto para o diretório no servidor Linux.browseable: Se o compartilhamento será listado quando os clientes navegarem na rede (sim/não).writable(ouwrite ok): Se o compartilhamento permite escrita.read only = yesé o mesmo quewritable = no.valid users: Lista de usuários e/ou grupos (prefixados com@) que têm permissão para acessar o compartilhamento.write list: Lista de usuários/grupos que têm permissão de escrita, mesmo quewritable = noouread only = yesesteja definido globalmente para o share.read list: Lista de usuários/grupos que têm permissão apenas de leitura.admin users: Usuários que terão privilégios de root dentro deste compartilhamento (use com extrema cautela).create mask/directory mask: Define as permissões Unix máximas para novos arquivos e diretórios criados via Samba. O Samba combina isso com as permissões solicitadas pelo cliente.force user/force group: Força a propriedade de todos os arquivos/diretórios criados neste compartilhamento para o usuário/grupo especificado, independentemente de quem os criou. Útil para garantir consistência de permissões em compartilhamentos de equipe.
Exemplo 2: Compartilhamento de Diretórios Home ([homes])
Esta seção especial mapeia automaticamente o diretório home de um usuário Linux quando ele se conecta.
[homes] comment = Diretório Home do Usuário browseable = no # Geralmente não se quer listar todos os homes read only = no # Usuário deve ter permissão de escrita em seu próprio home create mask = 0700 # Apenas o dono tem permissão total directory mask = 0700 # Apenas o dono tem permissão total valid users = %S # %S é substituído pelo nome do usuário da sessão # Mantenha este compartilhamento seguro, geralmente acessível apenas pelo próprio usuárioQuando um usuário autenticado se conecta a \\servidor\nome_do_usuario, o Samba automaticamente compartilha o diretório home dele (/home/nome_do_usuario).
Exemplo 3: Compartilhamento de Impressoras ([printers])
Se você configurou o CUPS (Common Unix Printing System) no seu servidor Linux.
[printers] comment = Todas as Impressoras path = /var/spool/samba browseable = yes guest ok = yes # Ou no, se quiser autenticação para imprimir writable = no printable = yes # create mask = 0700 # Para arquivos de spool[print$] comment = Drivers de Impressora path = /var/lib/samba/printers # Local para armazenar drivers de impressora para Windows browseable = yes read only = yes guest ok = no # write list = @ntadmins, root # Quem pode adicionar drivers6. Integração com Active Directory (como Member Server)
Integrar o Samba como um servidor membro de um domínio Active Directory (AD) permite que usuários do AD acessem os compartilhamentos Samba usando suas credenciais de domínio. Este é um cenário avançado.
Pré-requisitos:
- Um domínio Active Directory funcional.
- Servidor Linux com horário sincronizado com o DC (via NTP).
- Resolução DNS correta (o servidor Linux deve conseguir resolver os nomes do domínio AD e dos DCs).
- Pacotes necessários:
samba,realmd,sssd,krb5-user,adcli,samba-common-bin,samba-libs,samba-winbind-clients. (Os nomes podem variar ligeiramente entre distribuições).
Passos Gerais (Podem variar significativamente entre distribuições e versões):
-
Instalar Pacotes Adicionais:
Bash# Debian/Ubuntusudo apt install realmd sssd sssd-tools adcli krb5-user samba-common-bin packagekit# RHEL/CentOS/Fedorasudo dnf install realmd sssd sssd-tools adcli krb5-workstation samba-common-tools -
Configurar
/etc/krb5.conf(geralmenterealmdajuda com isso): Pode ser necessário configurar o realm Kerberos manualmente ou deixar orealmddescobrir. -
Juntar-se ao Domínio: Use
realm join:Bashsudo realm discover SEUDOMINIO.COMsudo realm join -U usuario_admin_do_dominio SEUDOMINIO.COMVocê será solicitado a senha do
usuario_admin_do_dominio. Alternativamente,net ads join:Bashsudo net ads join -U usuario_admin_do_dominio -
Configurar
smb.confpara AD: A seção[global]precisará de ajustes significativos:Ini, TOML[global]workgroup = NOMENETBIOSDODOMINIO # Ex: EMPRESArealm = SEUDOMINIO.COM # Ex: EMPRESA.LOCALsecurity = ads# Configurações de ID Mapping com SSSD/Winbind# (Esta parte é complexa e depende da sua configuração SSSD/Winbind)# Exemplo usando SSSD (preferível para sistemas modernos):idmap config * : backend = tdbidmap config * : range = 100000-1999999idmap config SEUNOMENETBIOSDODOMINIO : backend = sss # ou rid, ou adidmap config SEUNOMENETBIOSDODOMINIO : range = 2000000-29999999 # Ajuste o range# idmap config SEUNOMENETBIOSDODOMINIO : schema_mode = rfc2307# idmap config SEUNOMENETBIOSDODOMINIO : unix_primary_group = yeskerberos method = secrets and keytab # ou system keytab# dedicated keytab file = /etc/krb5.keytab# client signing = yes# client use spnego = yes# winbindd use default domain = yeswinbind enum users = yeswinbind enum groups = yeswinbind refresh tickets = yes# winbind offline logon = yes# Para permitir acesso a usuários do domínio sem criar contas locais manualmente:# (Requer configuração SSSD apropriada para prover usuários e grupos do AD ao sistema)# template shell = /bin/bash# template homedir = /home/%D/%U# ACLsvfs objects = acl_xattrmap acl inherit = yesstore dos attributes = yesA configuração de
idmapé crítica e complexa. Ela define como os SIDs do Windows são mapeados para UIDs/GIDs do Unix.sssdé geralmente preferido sobrewinbindpara idmapping em sistemas modernos. Consulte a documentação do Samba e do SSSD para sua distribuição. -
Configurar
sssd(se estiver usando): O arquivo/etc/sssd/sssd.confprecisará ser configurado para o seu domínio AD. Isso envolve definir domínios, provedores de identidade (id_provider = ad), provedores de acesso (access_provider = ad), etc. -
Reiniciar Serviços:
Bashsudo systemctl restart sssd smb nmbd -
Verificar Integração:
wbinfo -u(para listar usuários do domínio via Winbind)wbinfo -g(para listar grupos do domínio via Winbind)getent passwd nome_usuario_do_dominiogetent group "nome_do_grupo_do_dominio"
Agora, nos seus compartilhamentos, você pode usar usuários e grupos do AD em valid users, write list, etc. Ex: valid users = "SEUDOMINIO\usuario" @"SEUDOMINIO\grupo_do_ad".
7. Segurança Adicional
- Firewall: Configure seu firewall para permitir o tráfego Samba.
firewalld(Fedora, RHEL, CentOS):Bashsudo firewall-cmd --permanent --add-service=sambasudo firewall-cmd --reloadufw(Ubuntu, Debian):Bashsudo ufw allow samba# ou especificar portas:# sudo ufw allow 137/udp# sudo ufw allow 138/udp# sudo ufw allow 139/tcp# sudo ufw allow 445/tcpsudo ufw enable
- SELinux (Security-Enhanced Linux): Se o SELinux estiver no modo
enforcing, você precisará configurar os contextos corretos para os diretórios compartilhados e habilitar booleans do Samba:- Definir o contexto para o diretório compartilhado:Bashsudo semanage fcontext -a -t samba_share_t "/srv/samba/nome_do_compartilhamento(/.*)?"sudo restorecon -Rv /srv/samba/nome_do_compartilhamento
- Habilitar booleans para permitir que o Samba compartilhe diretórios e diretórios home:Bashsudo setsebool -P samba_export_all_ro=1 samba_export_all_rw=1 # Para leitura/escrita geralsudo setsebool -P samba_enable_home_dirs=1 # Se estiver usando [homes]
- Verifique os logs do SELinux (
/var/log/audit/audit.logou usandoausearch) se houver negações.
- AppArmor:
Distribuições como Ubuntu usam AppArmor. Normalmente, os perfis padrão do Samba já permitem as operações necessárias, mas se você mover o
smb.confou os diretórios compartilhados para locais não padrão, pode precisar ajustar os perfis em/etc/apparmor.d/.
8. Diagnóstico e Manutenção
testparm: Verifica a sintaxe do seu arquivosmb.conf.Bashtestparmsmbclient: Um cliente SMB de linha de comando para testar o acesso aos compartilhamentos.- Listar compartilhamentos em um servidor:Bashsmbclient -L //localhost -U nome_do_usuario# ousmbclient -L //ip_do_servidor -U nome_do_usuario
- Conectar a um compartilhamento:Bash
smbclient //localhost/nome_do_compartilhamento -U nome_do_usuario
smbstatus: Mostra as conexões Samba atuais, arquivos bloqueados e informações da sessão.Bashsudo smbstatus- Logs do Samba: Localizados em
/var/log/samba/(ou conforme definido emlog file). Aumentar olog levelna seção[global]para depuração.
9. Considerações de Performance (Breve)
Para ambientes com alta demanda, algumas otimizações podem ser consideradas no smb.conf (na seção [global]):
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072use sendfile = yesaio read size = 1aio write size = 1read raw = yeswrite raw = yesoplocks = yeslevel2 oplocks = yesNota: Teste cuidadosamente qualquer alteração de performance, pois o impacto pode variar dependendo da sua rede, hardware e carga de trabalho.
Conclusão
Configurar o Samba de forma avançada oferece um controle granular sobre segurança, acesso e funcionalidade, tornando-o uma solução poderosa para integração em redes corporativas e para usuários domésticos que exigem mais de seus compartilhamentos de arquivos. A integração com Active Directory, o gerenciamento preciso de permissões e a atenção aos aspectos de segurança como firewall e SELinux/AppArmor são cruciais para um ambiente robusto e confiável.
Lembre-se sempre de testar exaustivamente suas configurações e consultar a documentação oficial do Samba (man smb.conf) para obter detalhes sobre parâmetros específicos e cenários de configuração. A flexibilidade do Samba é uma de suas maiores forças, permitindo adaptá-lo a uma vasta gama de necessidades.
