NFS e Samba: compartilhamento de arquivos em rede heterogênea
1. Fundamentos do Compartilhamento em Rede Heterogênea
Ambientes de rede heterogêneos combinam sistemas Unix/Linux e Windows, cada um com seus próprios sistemas de arquivos, permissões e protocolos nativos. Enquanto o Linux utiliza permissões POSIX (rwx para owner, group, others), o Windows emprega ACLs (Access Control Lists) mais granulares. Essa diferença fundamental exige protocolos de compartilhamento que possam traduzir e mediar o acesso aos dados.
O NFS (Network File System) foi desenvolvido originalmente pela Sun Microsystems para ambientes Unix. Sua versão mais moderna, NFSv4, oferece suporte a ACLs semelhantes ao Windows, autenticação Kerberos e operação eficiente em WAN. Já o SMB/CIFS (Server Message Block / Common Internet File System) é o protocolo nativo do Windows, implementado pelo Samba em sistemas Linux. O Samba atua como um servidor SMB, permitindo que máquinas Windows acessem arquivos em servidores Linux como se fossem locais.
No modelo cliente-servidor, o servidor exporta diretórios (NFS) ou compartilhamentos (Samba), e os clientes montam ou mapeiam esses recursos. Requisitos de rede incluem portas específicas: NFS usa as portas 2049 (NFSv4) e portas dinâmicas para serviços auxiliares (portmapper, mountd); Samba utiliza as portas 137-139 (NetBIOS) e 445 (SMB direto). Firewalls devem liberar essas portas, e a latência da rede impacta diretamente a performance, especialmente em operações síncronas.
2. Configuração e Operação do Servidor NFS
A instalação do servidor NFS no Ubuntu/Debian é simples:
sudo apt update
sudo apt install nfs-kernel-server
O arquivo de configuração principal é /etc/exports, onde cada linha define um diretório exportado, os clientes autorizados e as opções de montagem. Exemplo:
/srv/compartilhado 192.168.1.0/24(rw,sync,no_subtree_check,root_squash)
rw: permite leitura e escritasync: garante que as operações de escrita sejam confirmadas antes de retornar (mais seguro, porém mais lento)root_squash: mapeia o usuário root do cliente para o usuárionobodyno servidor, evitando acesso privilegiadosec=sys(padrão): autenticação baseada em UID/GID;sec=krb5requer Kerberos
Para gerenciar versões, o NFSv4 é preferível por seu suporte nativo a ACLs, melhor desempenho em WAN e uso de uma única porta (2049). Para ativar ACLs, monte o sistema de arquivos com a opção acl e configure ACLs POSIX:
sudo setfacl -m u:joao:rwx /srv/compartilhado
Após alterar o /etc/exports, recarregue as exportações:
sudo exportfs -ra
3. Clientes NFS em Ambientes Linux e Windows
Em clientes Linux, instale o pacote nfs-common e monte manualmente:
sudo apt install nfs-common
sudo mount -t nfs4 servidor:/srv/compartilhado /mnt/nfs
Para montagem automática via /etc/fstab:
servidor:/srv/compartilhado /mnt/nfs nfs4 defaults,_netdev 0 0
O autofs monta diretórios sob demanda, reduzindo consumo de recursos. Configure o arquivo /etc/auto.master:
/mnt/nfs /etc/auto.nfs --timeout=60
E o arquivo /etc/auto.nfs:
compartilhado -fstype=nfs4 servidor:/srv/compartilhado
No Windows, o cliente NFS é um recurso opcional. Ative-o em "Ativar ou desativar recursos do Windows" > "Serviços para NFS". Para mapear uma unidade:
mount -o anon \\servidor\srv\compartilhado Z:
Limitações incluem falta de suporte a caracteres especiais em nomes de arquivos e problemas com permissões quando o cliente Windows não possui um mapeamento de UID/GID adequado.
Problemas comuns: timeouts podem ser resolvidos aumentando o timeo nas opções de montagem; bloqueios de arquivo requerem o serviço rpc-statd rodando em ambos os lados; permissões incorretas geralmente são corrigidas ajustando root_squash ou configurando ACLs.
4. Configuração e Operação do Servidor Samba
Instale o Samba:
sudo apt install samba
O arquivo de configuração /etc/samba/smb.conf define grupos de trabalho, compartilhamentos e autenticação. Exemplo básico:
[global]
workgroup = WORKGROUP
server string = Servidor Samba
security = user
map to guest = bad user
[compartilhado]
path = /srv/samba
browseable = yes
read only = no
guest ok = no
valid users = @samba_users
O modelo de segurança user exige autenticação por usuário e senha. Para integração com Active Directory, configure security = ads e junte o servidor ao domínio. Permissões e ACLs são mapeadas via parâmetros como inherit permissions = yes e force user.
Adicione usuários Samba:
sudo smbpasswd -a joao
Reinicie o serviço:
sudo systemctl restart smbd
5. Clientes Samba em Ambientes Heterogêneos
Em clientes Linux, use smbclient para navegar:
smbclient -L servidor -U joao
Para montar um compartilhamento:
sudo mount -t cifs //servidor/compartilhado /mnt/samba -o username=joao,uid=1000,gid=1000
No Windows, mapeie uma unidade via Explorador de Arquivos ou comando:
net use Z: \\servidor\compartilhado /user:joao
A resolução de nomes pode usar NetBIOS (porta 137) ou WINS. Para macOS, acesse via Finder com smb://servidor/compartilhado ou monte via terminal:
mount_smbfs //joao@servidor/compartilhado /mnt/samba
6. Integração, Performance e Segurança
Em cenários onde ambos os protocolos coexistem, é possível converter compartilhamentos: exporte via NFS um diretório que também é compartilhado via Samba, desde que as permissões sejam consistentes. Use ACLs POSIX no diretório para atender ambos os protocolos.
Para otimizar performance, ajuste o tamanho do bloco de leitura/escrita no Samba (socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536) e no NFS (rsize=65536,wsize=65536). Jumbo frames (MTU 9000) reduzem overhead em redes Gigabit.
Segurança: isole o tráfego NFS e Samba em VLANs dedicadas. No NFS, use sec=krb5 para criptografia; no Samba, ative SMB over TLS com server smb encrypt = required. Firewalls devem permitir apenas as portas necessárias:
sudo ufw allow from 192.168.1.0/24 to any port 2049 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 445 proto tcp
7. Monitoramento, Logs e Solução de Problemas
Para NFS, use nfsstat para estatísticas e rpcdebug para logs detalhados:
sudo rpcdebug -m nfsd -s all
tail -f /var/log/syslog | grep nfsd
No Samba, ajuste o log level no smb.conf:
[global]
log level = 3
log file = /var/log/samba/log.%m
Ferramentas de auditoria como auditd monitoram acessos a arquivos compartilhados:
sudo auditctl -w /srv/compartilhado -p rwxa -k compartilhamento
Problemas comuns: conflitos de permissão geralmente envolvem mapeamento incorreto de UIDs; travamento de arquivos requer o serviço rpc-statd no NFS; problemas de resolução de nomes no Samba podem ser resolvidos configurando WINS ou usando IPs diretamente.
Referências
- Documentação Oficial do NFS (Linux Kernel) — Guia completo sobre implementação do NFS no kernel Linux, incluindo opções de montagem e versões.
- Samba Official Documentation — Documentação oficial do Samba, com guias de configuração, manuais e exemplos práticos.
- Guia de Configuração NFS no Ubuntu — Tutorial oficial da Canonical para instalação e configuração do servidor NFS no Ubuntu.
- How to Set Up Samba on Ubuntu — Artigo técnico da DigitalOcean com passo a passo para configurar Samba em servidores Ubuntu.
- NFS vs Samba: Choosing the Right File Sharing Protocol — Comparativo detalhado entre NFS e Samba, com casos de uso, performance e segurança.