Tutorial

Como configurar uma montagem NFS no Ubuntu 20.04

Published on June 11, 2020
Português
Como configurar uma montagem NFS no Ubuntu 20.04

Introdução

NFS, ou Network File System, é um protocolo de sistema distribuído de arquivos que permite a montagem de diretórios remotos no seu servidor. Isso permite que você gerencie o espaço de armazenamento em um local diferente e grave nesse espaço a partir de vários clientes. O NFS fornece uma maneira relativamente padronizada e de bom desempenho para acessar sistemas remotos através de uma rede e funciona bem em situações onde os recursos compartilhados precisam ser acessados regularmente.

Neste guia, vamos analisar como instalar os softwares necessários para a funcionalidade NFS no Ubuntu 20.04. Além disso, vamos configurar duas montagens NFS em um servidor e cliente, e montar e desmontar os compartilhamentos remotos.

Pré-requisitos

Usaremos dois servidores neste tutorial, com um deles compartilhando seu sistema de arquivos com o outro. Para acompanhar, você precisará de:

  • Dois servidores Ubuntu 20.04. Cada um deles deve possuir um usuário não root com privilégios sudo, um firewall configurado com o UFW e uma rede privada, se estiver disponível para você.

Ao longo deste tutorial, chamaremos o servidor que compartilha seus diretórios de host e o servidor que monta esses diretórios de cliente. Você precisará saber o endereço IP de ambos. Certifique-se de usar o endereço de rede privado, se estiver disponível.

Ao longo deste tutorial, vamos nos referir a esses endereços IP pelos seus espaços reservados host_ip e client_ip. Por favor, substitua-os conforme necessário.

Passo 1 — Baixando e instalando os componentes

Vamos começar instalando os componentes necessários em cada servidor.

No host

No servidor host, instale o pacote nfs-kernel-server, o qual permitirá que você compartilhe seus diretórios. Como esta é a primeira operação que você está executando com o apt nesta sessão, atualize seu índice de pacotes local antes da instalação:

  1. sudo apt update
  2. sudo apt install nfs-kernel-server

Assim que esses pacotes estiverem instalados, vá para o servidor cliente.

No cliente

No servidor cliente, precisamos instalar um pacote chamado nfs-common, que proporciona funcionalidade NFS sem incluir nenhum componente de servidor. Novamente, atualize o índice de pacotes local antes da instalação para garantir que tenha informações atualizadas:

  1. sudo apt update
  2. sudo apt install nfs-common

Agora que os dois servidores possuem os pacotes necessários, podemos começar a configurá-los.

Passo 2 — Criando os diretórios de compartilhamento no host

Vamos compartilhar dois diretórios separados, com diferentes configurações. Faremos isso para ilustrar duas maneiras importantes com as quais montagens NFS podem ser configuradas em relação ao acesso de superusuário.

Os superusuários podem fazer qualquer coisa no sistema deles. No entanto, os diretórios montados via NFS não fazem parte do sistema no qual eles estão montados. Sendo assim, por padrão, o servidor NFS recusa a executar operações que requerem privilégios de superusuário. Esta restrição padrão significa que os superusuários no cliente não podem gravar arquivos como root, reatribuir a posse, ou executar quaisquer outras tarefas de superusuário na montagem NFS.

Algumas vezes, no entanto, existem usuários confiáveis no sistema cliente que precisam realizar essas ações no sistema de arquivos montado, mas não precisam de acesso de superusuário no host. Você pode configurar o servidor NFS para que permita isso, embora essa ação introduza um elemento de risco, pois esse usuário poderia obter acesso root todo o sistema de host.

Exemplo 1: exportando um montagem de uso geral

No primeiro exemplo, criaremos uma montagem NFS de uso geral que usa o comportamento NFS padrão para dificultar a interação de um usuário com privilégios de root na máquina cliente com o host usando esses privilégios de superusuário do cliente. Você pode usar algo parecido para armazenar arquivos que foram armazenados usando um sistema de gerenciamento de conteúdo ou para criar espaço para os usuários compartilharem arquivos de projeto com facilidade.

Primeiro, crie o diretório de compartilhamento:

  1. sudo mkdir /var/nfs/general -p

Como estamos criando-o com o sudo, o diretório é propriedade do usuário root do host:

  1. ls -la /var/nfs/general
Output
drwxr-xr-x 2 root root 4096 May 14 18:36 .

O NFS traduzirá toda operação root no cliente para as credenciais nobody:nogroup como uma medida de segurança. Portanto, precisamos alterar a posse do diretório para que corresponda a essas credenciais.

  1. sudo chown nobody:nogroup /var/nfs/general

Agora, você está pronto para exportar este diretório.

Exemplo 2: exportando o diretório home

Em nosso segundo exemplo, o objetivo é tornar os diretórios home armazenados no host disponíveis nos servidores cliente, ao mesmo tempo em que permite administradores confiáveis desses servidores cliente o acesso que eles precisam para gerenciar os usuários de maneira conveniente.

Para fazer isso, vamos exportar o diretório /home. Como ele já existe, não precisamos criá-lo. Também não vamos alterar as permissões. Se tivéssemos feito isso, uma variedade de problemas poderia ocorrer para qualquer um com um diretório home na máquina de host.

Passo 3 — Configurando as exportações NFS no servidor host

Em seguida, vamos nos aprofundar no arquivo de configuração do NFS para configurar o compartilhamento desses recursos.

Na máquina host, abra o arquivo /etc/exports em seu editor de texto com privilégios root:

  1. sudo nano /etc/exports

O arquivo possui comentários mostrando a estrutura geral de cada linha de configuração. A sintaxe é a seguinte:

/etc/exports
directory_to_share    client(share_option1,...,share_optionN)

Vamos precisar criar uma linha para cada um dos diretórios que planejamos compartilhar. Certifique-se de trocar o espaço reservado client_ip mostrado pelo seu endereço IP:

/etc/exports
/var/nfs/general    client_ip(rw,sync,no_subtree_check)
/home               client_ip(rw,sync,no_root_squash,no_subtree_check)

Aqui, estamos usando as mesmas opções de configuração para ambos os diretórios, exceto a no_root_squash. Vamos dar uma olhada no que cada uma dessas opções significa:

  • rw: essa opção fornece ao computador do cliente tanto o acesso à leitura quanto gravação no volume.
  • sync: essa opção obriga o NFS a gravar alterações no disco antes de responder. Isso resulta em um ambiente mais estável e consistente, uma vez que a resposta reflete o estado real do volume remoto. No entanto, isso também reduz a velocidade das operações de arquivos.
  • no_subtree_check: essa opção impede a verificação de subárvore, que é um processo onde o host deve verificar se o arquivo está de fato disponível na árvore exportada para cada pedido. Isso pode causar muitos problemas quando um arquivo é renomeado enquanto o cliente tem ele aberto. Em quase todos os casos, é melhor desativar a verificação de subárvore.
  • no_root_squash: por padrão, o NFS traduz as solicitações de um usuário root remotamente como um usuário sem privilégios no servidor. Isso foi usado como medida de segurança para evitar que uma conta root no cliente utilize o sistema de arquivos do host como root. A opção no_root_squash desativa esse comportamento para certos compartilhamentos.

Quando terminar de fazer suas alterações, salve e feche o arquivo. Em seguida, para tornar os compartilhamentos disponíveis nos clientes que você configurou, reinicie o servidor NFS com o seguinte comando:

  1. sudo systemctl restart nfs-kernel-server

Antes de usar os novos compartilhamentos, no entanto, você precisará garantir que o tráfego neles seja permitido pelas regras de firewall.

Passo 4 — Ajustando o firewall no host

Primeiro, vamos verificar o status do firewall para ver se ele está habilitado e, caso esteja, para ver o que está atualmente sendo permitido:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

Em nosso sistema, apenas o tráfego SSH está sendo permitido. Dessa forma, precisaremos adicionar uma regra para o tráfego NFS.

Para muitos aplicativos, é possível utilizar sudo ufw app list para habilitá-los pelo nome, mas o nfs não é um desses casos. No entanto, como o ufw também verifica o /etc/services para a porta e o protocolo de um serviço, ainda podemos adicionar o NFS pelo nome. É recomendado que você habilite a regra mais restritiva que ainda permitirá o tráfego que deseja. Dessa forma, ao invés de habilitar o tráfego vindo de qualquer lugar, seremos específicos.

Use o seguinte comando para abrir a porta 2049 no host, certificando-se de colocar seu endereço IP do cliente:

  1. sudo ufw allow from client_ip to any port nfs

Você pode verificar a mudança digitando:

  1. sudo ufw status

Você deve ver que o tráfego está sendo permitido da porta 2049 no resultado:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

Isso confirma que o UFW permitirá apenas o tráfego NFS na porta 2049 a partir da nossa máquina cliente.

Passo 5 — Criando os pontos de montagem e montando diretórios no cliente

Agora que o servidor host está configurado e está servindo seus compartilhamentos, vamos preparar nosso cliente.

Para tornar os compartilhamentos remotos disponíveis no cliente, precisamos montar os diretórios que queremos compartilhar no host em diretórios vazios no cliente.

Nota: se houver arquivos e diretórios em seu ponto de montagem, eles se tornarão ocultos assim que você montar o compartilhamento NFS. Para evitar a perda de arquivos importantes, certifique-se de que o diretório esteja vazio, caso esteja montando em um diretório que já exista.

Criaremos dois diretórios para nossas montagens:

  1. sudo mkdir -p /nfs/general
  2. sudo mkdir -p /nfs/home

Agora que temos um local para colocar os compartilhamentos remotos e que abrimos o firewall, podemos montar os compartilhamentos usando o endereço IP do nosso servidor host:

  1. sudo mount host_ip:/var/nfs/general /nfs/general
  2. sudo mount host_ip:/home /nfs/home

Esses comandos montarão os compartilhamentos do computador host na máquina cliente. Você pode verificar novamente se eles foram montados com sucesso de diversas maneiras. Faça isso com um comando mount ou findmnt, mas o df -h fornece um resultado mais legível:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general 10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home

Ambos os compartilhamentos que montamos aparecem no final. Como eles foram montados do mesmo sistema de arquivos, eles exibem o mesmo uso de disco. Para ver quanto espaço está sendo efetivamente usado em cada ponto de montagem, utilize o comando de uso de disco du e o caminho da montagem. O sinalizador -s fornece um resumo de uso em vez de exibir o uso para cada arquivo. O -h imprime um resultado que pode ser lido por um humano.

Por exemplo:

  1. du -sh /nfs/home
Output
36K /nfs/home

Isso nos mostra que todo o conteúdo do diretório home está usando apenas 36K do espaço disponível.

Passo 6 — Testando o acesso NFS

Em seguida, vamos testar o acesso aos compartilhamentos, gravando algo em cada um deles.

Exemplo 1: o compartilhamento de uso geral

Primeiro, escreva um arquivo de teste no compartilhamento /var/nfs/general:

  1. sudo touch /nfs/general/general.test

Em seguida, verifique quem tem sua posse:

  1. ls -l /nfs/general/general.test
Output
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test

Como montamos esse volume sem alterar o comportamento padrão do NFS e criamos o arquivo como o usuário root da máquina cliente pelo comando sudo, o proprietário padrão do arquivo fica o nobody:nogroup. Os superusuários do cliente não poderão realizar ações administrativas típicas, como a alteração do proprietário de um arquivo ou a criação de um novo diretório para um grupo de usuários, neste compartilhamento montado em NFS.

Exemplo 2: o compartilhamento de diretórios home

Para comparar as permissões do exemplo de uso geral com o compartilhamento de diretórios home, crie um arquivo em /nfs/home da mesma forma:

  1. sudo touch /nfs/home/home.test

Em seguida, confira quem é o proprietário do arquivo:

  1. ls -l /nfs/home/home.test
Output
-rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test

Criamos o home.test como root usando o comando sudo, exatamente da mesma forma que criamos o arquivo general.test. No entanto, neste caso, ele é propriedade de root. Isso acontece pois sobrescrevemos o comportamento padrão quando especificamos a opção no_root_squash nesta montagem. Isso permite que nossos usuários root na máquina cliente ajam como root, tornando o gerenciamento de contas de usuário muito mais conveniente. Ao mesmo tempo, isso significa que não precisamos dar acesso de root a esses usuários no host.

Passo 7 — Montando os diretórios remotos do NFS durante a inicialização do sistema

Podemos montar os compartilhamentos NFS remotos automaticamente na inicialização adicionando-os ao /etc/fstab no cliente.

Abra este arquivo com privilégios root em seu editor de texto:

  1. sudo nano /etc/fstab

No final do arquivo, adicione uma linha para cada um de nossos compartilhamentos. Elas se parecerão com isto:

/etc/fstab
. . .
host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Nota: você pode encontrar mais informações sobre as opções que estamos especificando aqui na página man do NFS. Você pode acessá-la executando o seguinte comando:

  1. man nfs

O cliente irá montar automaticamente as partições remotas na inicialização do sistema, embora possa levar algum tempo para estabelecer a conexão e para que os compartilhamentos fiquem disponíveis.

Passo 8 — Desmontando um compartilhamento NFS remoto

Se não quiser mais que o diretório remoto esteja montado em seu sistema, você pode desmontá-lo saindo da estrutura de diretórios do compartilhamento e desmontando, desta forma:

  1. cd ~
  2. sudo umount /nfs/home
  3. sudo umount /nfs/general

Observe que o comando é chamado de umount não unmount, como é o esperado.

Isso removerá os compartilhamentos remotos, deixando acessível apenas seu armazenamento local:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

Se também quiser evitar que eles sejam remontados na próxima reinicialização do sistema, edite o /etc/fstab e, em seguida, exclua a linha ou transforme-a em comentário colocando um caractere # no início da linha. Você também pode evitar a montagem automática removendo a opção auto, que permitirá que você ainda a monte tudo manualmente.

Conclusão

Neste tutorial, criamos um host NFS e demonstramos alguns comportamentos NFS importantes. Fizemos isso criando duas montagens NFS diferentes, que compartilhamos com um cliente NFS.

Se você quiser implementar o NFS na produção, é importante observar que o protocolo em si não é criptografado. Em casos onde você está compartilhando de uma rede privada, isso pode não ser um problema. Em outros casos, uma VPN ou algum outro tipo de túnel criptografado será necessário para proteger seus dados.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel