O Network File System (NFS) é uma solução de armazenamento distribuído. É um protocolo de sistema de arquivos que permite montar diretórios remotos no servidor local e usá-los como se fossem armazenamento local. O NFS permite que múltiplos clientes compartilhem armazenamento remoto. É ideal para ambientes que exigem recursos compartilhados regularmente. O NFS é baseado no sistema ONC RPC (Open Network Computing Remote Procedure Call). É um padrão aberto definido em RFC (Request for Comments). Isso permite que qualquer pessoa implemente o protocolo.
Neste guia, passaremos pelas etapas de configuração de uma montagem NFS no Ubuntu 20.04.
Pré-requisitos
Como a descrição do NFS sugere, existem duas partes na configuração do NFS:
-
Host: Armazena fisicamente os dados e compartilha o armazenamento com os sistemas “cliente”.
-
Cliente: O sistema que se conecta ao “host” e usa o armazenamento remoto como se fosse local.
Para a nossa demonstração, usaremos dois servidores, ambos configurados com o Ubuntu 20.04. Aqui está um guia fácil sobre como configurar seu servidor Ubuntu. Ao longo do guia, esses servidores serão referidos como o host e o cliente. Observe que a ação para o cliente será a mesma, mesmo que haja mais de um.
Os servidores têm os seguintes endereços IP atribuídos. Esses servidores são hospedados pela CloudSigma:
-
host: 31.171.240.79
-
cliente: 31.171.250.109
Certifique-se de substituí-los pelos endereços IP apropriados.
Instalando o NFS
O NFS está prontamente disponível nos repositórios oficiais do Ubuntu. Existem pacotes de software diferentes para o sistema host e o sistema cliente .
-
Instalando o NFS no host
No host, precisamos dos componentes que equipam a máquina para servir como um NFS host. Ele vem na forma do pacote nfs-kernel-server. O Ubuntu usa APT como gerenciador de pacotes. Primeiro, abra o terminal e atualize o banco de dados de pacotes do APT :
|
1 |
host$ sudo apt update |

Em seguida, instale o pacote nfs-kernel-server. Se necessário, o APT se encarregará de quaisquer dependências adicionais:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
Instalando o NFS no cliente
No sistema cliente, precisamos da funcionalidade para nos conectar aos diretórios do host através da rede. Ele não requer a funcionalidade de servidor NFS. No Ubuntu, ele vem integrado no pacote nfs-common. Atualize o banco de dados de pacotes do APT :
|
1 |
client$ sudo apt update |

Em seguida, instale o pacote nfs-common :
|
1 |
$ sudo apt install nfs-common |

Diretórios Compartilhados no Host
A seguir, vamos compartilhar dois diretórios separados, cada um com uma configuração diferente. Demonstraremos duas maneiras principais pelas quais as montagens NFS funcionam em relação ao acesso do superusuário. Por padrão, os superusuários têm autoridade para realizar qualquer ação em todo o sistema. No entanto, os diretórios montados via NFS não fazem parte do sistema no qual estão montados. O servidor NFS recusará a execução de qualquer operação que exija privilégios de superusuário. Essa restrição se traduz em clientes sem autoridade para gravar, reatribuir permissões de propriedade e outras tarefas de superusuário nas montagens NFS.
É possível permitir que certos usuários confiáveis realizem essas tarefas nos sistemas de arquivos montados. No entanto, isso traz um elemento de risco, pois tal cliente pode potencialmente obter acesso total ao host. Isso pode ser mitigado com o gerenciamento adequado de permissões de usuário. No Linux, o arquivo sudoers controla todos os privilégios de usuário no sistema. Para mais informações, você pode dar uma olhada no nosso tutorial sobre como configurar o arquivo sudoers do Linux.
-
Montagem de uso geral
O primeiro exemplo será uma montagem NFS de uso geral com comportamentos padrão do NFS. Nessa abordagem, é extremamente difícil para o cliente realizar ações de superusuário nas montagens. Esse tipo de montagem NFS é comum para armazenamento de arquivos, upload usando um CMS (Content Management System) ou compartilhamento de arquivos de projeto, etc.
As etapas a seguir devem ser executadas no sistema host. Primeiro, crie um diretório para compartilhamento rotulado como nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

Como o diretório foi criado com sudo privilégio, o proprietário será root:
|
1 |
$ ls -la /var/nfs/general |

Como configuração padrão, o NFS traduzirá qualquer operação root do lado do cliente para as nobody:nogroup credenciais por medidas de segurança. Para consistência, altere a propriedade do diretório para corresponder às credenciais:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Diretório home
O segundo exemplo é disponibilizar o diretório home do host usuário para os clientes. Administradores confiáveis dos clientes selecionados podem acessar para gerenciar usuários de forma conveniente. O /home diretório existe por padrão, portanto não há necessidade de criar nenhum diretório. Quanto à permissão do diretório, não há necessidade de realizar nenhuma alteração, pois isso causará mais problemas do que benefícios.
Configurando as Exportações do NFS
Os diretórios a serem compartilhados já estão criados. Em seguida, o NFS precisa ser configurado para disponibilizá-los para os clientes. O NFS usa um arquivo de configuração para rastrear quais diretórios compartilhar. Abra o seguinte arquivo de configuração do NFS no seu editor de texto de preferência:
|
1 |
host$ sudo nano /etc/exports |

A seção de comentários do arquivo descreve a estrutura de sintaxe geral da configuração. Em resumo, qualquer diretório deve ser declarado no seguinte formato:
|
1 |
$ <diretório> <cliente>(<opcao_1>,<opcao_2>,...,<opcao_N>) |
Para os dois diretórios que decidimos compartilhar, a configuração ficará assim. Ambos os diretórios têm quase as mesmas opções de configuração:
|
1 2 3 |
host$/var/nfs/general 31.171.250.221(rw,sync,no_subtree_check) host$ /home 31.171.250.221(rw,sync,no_root_squash,no_subtree_check) |

Aqui está uma rápida análise das opções de configuração:
-
rw: O cliente recebe permissão de leitura e gravação no volume.
-
sync: Força o NFS a gravar as alterações no disco antes de responder. Oferece uma experiência mais estável e consistente. A resposta refletirá o estado real do volume remoto. No entanto, as operações de arquivo serão mais lentas.
-
no_subtree_check: Evita a verificação de subárvore. Se não for desativado, os hosts serão forçados a verificar a existência do arquivo na árvore exportada para cada solicitação do cliente. Isso pode levar a muitos problemas, por exemplo, um arquivo ser renomeado enquanto o cliente o está usando. Na maioria dos casos, desativar as verificações de subárvore é a melhor opção.
-
no_root_squash: Como mencionado anteriormente, o NFS traduzirá qualquer solicitação do usuário root remoto para um usuário sem privilégios. Este é um recurso de segurança intencional para evitar acesso indesejado ao sistema host. No entanto, o uso desta opção desativará esse comportamento.
Salve o arquivo de configuração e saia do editor. Para que as alterações entrem em vigor, reinicie o servidor NFS:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
Ajustando o Firewall
Para qualquer servidor, a configuração adequada do firewall é obrigatória. Assumindo que você tenha configurado seu servidor Ubuntu 20.04 de acordo, o firewall UFW deve estar ativo. É um firewall simples, mas poderoso, que acompanha a maioria das distribuições Linux. Para iniciantes, aqui está um guia rápido explicando o UFW, como ele funciona e o uso comum do UFW com exemplos.
Por padrão, o firewall bloqueará qualquer tráfego de entrada e saída. Para garantir que o servidor NFS possa se conectar e trocar tráfego corretamente, precisamos adicionar uma exceção para o protocolo NFS. Primeiro, verifique o status do firewall. Ele também exibirá todas as regras atuais:
|
1 |
host$ sudo ufw status |

Como podemos ver, apenas o tráfego SSH é permitido no sistema. Precisamos adicionar uma exceção para permitir o tráfego NFS.
Na maioria dos casos, é altamente recomendável usar a regra mais restritiva que ainda permita o tráfego necessário. Portanto, permitiremos apenas que o(s) cliente(s) selecionado(s) se conecte(m) ao host:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Depois disso, verifique o status do firewall novamente:
|
1 |
host$ sudo ufw status |

Criando Ponto de Montagem
O servidor agora está pronto para permitir que o sistema cliente se conecte ao protocolo NFS. Em seguida, temos que preparar o cliente. Para acessar o volume remoto, ele deve ser montado localmente no cliente. Quanto ao ponto de montagem, é recomendado usar um diretório vazio dedicado.
Para os dois volumes remotos, crie dois pontos de montagem separados:
|
1 |
client$ sudo mkdir -pv /nfs/general |

|
1 |
client$ sudo mkdir -pv /nfs/home |

Agora que os pontos de montagem estão prontos, você precisa montar os volumes remotos:
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
Podemos verificar se as montagens foram bem-sucedidas. Verifique a lista de todos os volumes montados:
|
1 |
client$ df -h |

Voilá! Os volumes remotos foram montados com sucesso. Também podemos verificar o uso do espaço usando o seguinte comando:
|
1 |
client$ du -sh /nfs/home |

Testando o Acesso ao NFS
Até agora, os volumes remotos foram montados corretamente. No entanto, não servirá de nada se o cliente não puder ler/gravar dados no volume remoto. Para verificar, crie um arquivo fictício no(s) ponto(s) de montagem NFS. Aqui, o arquivo será criado com privilégios de root para testar se as configurações específicas do root estão funcionando corretamente:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
Em seguida, verifique a propriedade do arquivo:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Como podemos ver, o NFS está traduzindo o proprietário do arquivo para nobody:nogroup. O diretório /var/nfs/ general tem como proprietário nobody:nogroup, então o NFS está traduzindo a propriedade do arquivo. Hora de testar o outro ponto de montagem NFS:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Verifique a existência e a propriedade do arquivo:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

Neste caso, o NFS não traduziu a propriedade do arquivo. Este cliente foi configurado para poder realizar ações administrativas. Além disso, o diretório original do host directory /home não tem a propriedade definida para nobody:nogroup.
Truques Adicionais
-
Montagem na inicialização
Até agora, tínhamos que montar manualmente o volume NFS em um diretório local. Se não forem desmontados, os pontos de montagem NFS durarão até que o sistema seja reiniciado. Se o volume NFS for usado regularmente, a montagem manual torna-se extremamente tediosa. No caso de múltiplos pontos de montagem NFS, torna-se impraticável montá-los manualmente um por um.
Usando o arquivo /etc/fstab, podemos automatizar o processo. Durante a inicialização, este script montará automaticamente os volumes NFS nos pontos de montagem de destino. Abra o arquivo em um editor de texto:
|
1 |
client$ sudo nano /etc/fstab |

Adicione as seguintes linhas para montar os volumes remotos do sistema host:
|
1 2 3 |
client$ 31.171.240.236:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 client$31.171.240.236:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 |

Salve o script e feche o editor de texto. Na próxima inicialização, o Linux montará automaticamente os volumes remotos. Observe que pode levar algum tempo para o sistema inicializar enquanto ele se conecta e monta os volumes.
-
Desmontando o volume NFS
Se o volume remoto não for mais necessário, a desmontagem dos volumes os removerá do sistema cliente. Antes de desmontar, no entanto, certifique-se de que nenhum aplicativo/script esteja usando o volume remoto. Desmontar pontos de montagem NFS é semelhante a desmontar qualquer outro ponto de montagem. Neste caso, desmonte /nfs/home e /nfs/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/geral |

Em seguida, verifique a ação:
|
1 |
cliente$ df -h |

Considerações finais
Neste guia, criamos um servidor NFS e demonstramos alguns dos conceitos básicos de compartilhamento remoto NFS. Se você estiver interessado em implementar o NFS em um ambiente de produção, lembre-se de que o protocolo NFS não é criptografado. Isso pode apresentar algumas preocupações de segurança, por exemplo, ataques man-in-the-middle.
Boa computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.