Como Configurar um Ponto de Montagem NFS no Ubuntu 18.04

Introdução

NFS, ou Sistema de Arquivos de Rede, é um protocolo de sistema de arquivos distribuído que permite montar diretórios remotos em seu servidor. Isso permite gerenciar o espaço de armazenamento em um local diferente e gravar nesse espaço a partir de vários clientes. O NFS fornece uma maneira relativamente padrão e eficiente de acessar sistemas remotos em uma rede e funciona bem em situações onde os recursos compartilhados precisam ser acessados regularmente.

Neste guia, você aprenderá como instalar o software necessário para a funcionalidade do NFS no Ubuntu 18.04, configurar montagens NFS em um servidor e cliente, e montar e desmontar os compartilhamentos remotos.

Pré-requisitos

Vamos usar dois servidores neste tutorial, com um compartilhando parte de seu sistema de arquivos com o outro. Para concluir este tutorial, você precisará:

  • Duas servidores Ubuntu 18.04. Cada uma delas deve ter um usuário não-root com privilégios sudo configurados, um firewall configurado com UFW e rede privada, se estiver disponível para você.

Ao longo deste tutorial, referimo-nos ao servidor que partilha os seus diretórios como o anfitrião e ao servidor que monta esses diretórios como o cliente. Utilizaremos os seguintes endereços IP como substitutos para os valores do anfitrião e cliente:

  • Anfitrião: 203.0.113.0
  • Cliente: 203.0.113.24

Quando estes endereços IP aparecerem em comandos e ficheiros de configuração, substitua-os pelos seus próprios endereços IP do anfitrião e cliente.

Passo 1 — Transferência e Instalação dos Componentes

Comece por instalar os componentes necessários em cada servidor.

No Anfitrião

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

  1. sudo apt update

Em seguida, instale o pacote:

  1. sudo apt install nfs-kernel-server

Depois que esses pacotes estiverem instalados, mude para o servidor cliente.

No Cliente

No servidor cliente, instale um pacote chamado nfs-common, que fornece funcionalidade NFS sem incluir componentes do servidor. Novamente, atualize o índice de pacotes local antes da instalação para garantir que você tenha informações atualizadas:

  1. sudo apt update

Em seguida, instale o pacote:

  1. sudo apt install nfs-common

Agora que ambos os servidores têm os pacotes necessários, você pode começar a configurá-los.

Passo 2 — Criando os Diretórios Compartilhados no Host

Vamos compartilhar dois diretórios separados com configurações diferentes para ilustrar duas maneiras principais pelas quais os pontos de montagem NFS podem ser configurados em relação ao acesso de superusuário.

Os superusuários podem fazer qualquer coisa em qualquer lugar do seu sistema. No entanto, os diretórios montados via NFS não fazem parte do sistema no qual estão montados, então, por padrão, o servidor NFS se recusa a executar operações que exigem privilégios de superusuário. Essa restrição padrão significa que os superusuários no cliente não podem escrever arquivos como root, reatribuir propriedade ou realizar outras tarefas de superusuário no ponto de montagem NFS.

Às vezes, no entanto, existem usuários confiáveis no sistema do cliente que precisam executar essas ações no sistema de arquivos montado, mas que não têm necessidade de acesso de superusuário no host. Você pode configurar o servidor NFS para permitir isso, embora isso introduza um elemento de risco, pois tal usuário poderia obter acesso de root ao sistema host inteiro.

Exemplo 1: Exportando uma Montagem de Propósito Geral

No primeiro exemplo, você criará uma montagem NFS de propósito geral que usa o comportamento padrão do NFS para dificultar que um usuário com privilégios de root na máquina cliente interaja com o host usando esses privilégios de superusuário do cliente. Você pode usar algo assim para armazenar arquivos que foram carregados usando um sistema de gerenciamento de conteúdo ou para criar espaço para usuários compartilharem arquivos de projeto.

Primeiro, crie um diretório compartilhado:

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

Uma vez que você está criando com sudo, o diretório é de propriedade do usuário root do host:

  1. ls -la /var/nfs/general
Output
total 8 drwxr-xr-x 2 root root 4096 Feb 7 23:21 . drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..

O NFS traduzirá quaisquer operações de root no cliente para as credenciais nobody:nogroup como medida de segurança. Portanto, você precisa alterar a propriedade do diretório para corresponder 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

No nosso segundo exemplo, o objetivo é disponibilizar os diretórios home dos usuários armazenados no host nos servidores cliente, permitindo que administradores confiáveis desses servidores cliente acessem o que precisam para gerenciar os usuários de forma conveniente.

Para fazer isso, você exportará o diretório /home. Como ele já existe, você não precisa criá-lo. Você também não irá alterar as permissões. Se fizesse isso, poderia resultar em uma série de problemas para qualquer pessoa com um diretório home na máquina host.

Passo 3 — Configurando as Exportações NFS no Servidor Host

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

No computador host, abra o arquivo /etc/exports no seu editor de texto preferido com privilégios de root. Aqui vamos usar o nano:

  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)

Você precisará criar uma linha para cada um dos diretórios que planeja compartilhar. Como nosso exemplo de cliente tem um IP de 203.0.113.24, nossas linhas ficarão assim. Certifique-se de alterar o endereço IP para o do seu cliente:

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

Aqui, estamos usando as mesmas opções de configuração para ambos os diretórios, com exceção de no_root_squash. Vamos revisar o que cada uma dessas opções significa:

  • rw: Esta opção dá ao computador cliente acesso de leitura e escrita ao volume.
  • sync: Esta opção força o NFS a escrever as alterações no disco antes de responder. Isso resulta em um ambiente mais estável e consistente, já que a resposta reflete o estado real do volume remoto. No entanto, também reduz a velocidade das operações de arquivo.
  • no_subtree_check: Esta opção impede a verificação de subárvore, que é um processo onde o host deve verificar se o arquivo ainda está disponível na árvore exportada para cada solicitação. Isso pode causar muitos problemas quando um arquivo é renomeado enquanto o cliente o tem aberto. Em quase todos os casos, é melhor desativar a verificação de subárvore.
  • no_root_squash: Por padrão, o NFS traduz solicitações de um usuário root remotamente para um usuário não privilegiado no servidor. Isso foi pensado como uma medida de segurança para evitar que uma conta root no cliente utilize o sistema de arquivos do host como root. no_root_squash desabilita esse comportamento para determinados compartilhamentos.

Ao terminar de fazer suas alterações, salve e feche o arquivo. Se estiver utilizando nano, você pode fazer isso pressionando CTRL + X, depois Y e ENTER. Em seguida, para disponibilizar os compartilhamentos para os clientes que você configurou, reinicie o servidor NFS com o seguinte comando:

  1. sudo systemctl restart nfs-kernel-server

Antes de poder utilizar efetivamente os novos compartilhamentos, no entanto, você precisará garantir que o tráfego para os compartilhamentos seja permitido pelas regras do firewall.

Passo 4 — Ajustando o Firewall no Host

Primeiro, verifique o status do firewall para confirmar se está habilitado e, se estiver, revise o que está atualmente 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, então precisaremos adicionar uma regra para o tráfego NFS.

Com muitos aplicativos, você pode usar sudo ufw app list e ativá-los pelo nome, mas nfs não é um deles. No entanto, como o ufw também verifica o /etc/services para a porta e o protocolo de um serviço, ainda é possível adicionar o NFS pelo nome. A melhor prática recomenda que você habilite a regra mais restritiva que ainda permitirá o tráfego que deseja permitir, então, em vez de habilitar o tráfego de qualquer lugar, você será específico.

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

  1. sudo ufw allow from 203.0.113.24 to any port nfs

Você pode verificar a mudança executando o seguinte:

  1. sudo ufw status

Você deve receber uma lista de tráfego permitido da porta 2049 na saída:

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

Isto confirma que o UFW só permitirá tráfego NFS na porta 2049 do seu cliente.

Passo 5 — Criando Pontos de Montagem e Montando Diretórios no Cliente

Agora que o servidor host está configurado e servindo suas compartilhamentos, você irá preparar seu cliente.

Para disponibilizar os compartilhamentos remotos no cliente, você precisa montar os diretórios no host que deseja compartilhar para diretórios vazios no cliente.

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

Crie dois diretórios para suas montagens. Execute o seguinte comando para criar o primeiro::

  1. sudo mkdir -p /nfs/general

Em seguida, execute este comando para criar o segundo::

  1. sudo mkdir -p /nfs/home

Agora que você tem um local para colocar os compartilhamentos remotos e abriu o firewall, você pode montar os compartilhamentos usando o endereço IP do seu servidor host, que neste guia é 203.0.113.0:

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

Esses comandos irão montar os compartilhamentos do computador host na máquina cliente. Você pode verificar se eles foram montados com sucesso de várias maneiras. Você pode verificar isso com um comando mount ou findmnt, mas df -h fornece uma saída mais legível que ilustra como o uso do disco é exibido de forma diferente para os compartilhamentos NFS:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.6M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general 203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home

Ambos os compartilhamentos que você montou aparecem na parte inferior. Como eles foram montados do mesmo sistema de arquivos, eles mostram o mesmo uso de disco. Para verificar quanto espaço está sendo realmente usado em cada ponto de montagem, use o comando de uso de disco du e o caminho da montagem. A bandeira -s fornece um resumo do uso em vez de exibir o uso para cada arquivo. O -h imprime saída legível para humanos:

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

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

Passo 6 — Testando o Acesso ao NFS

Em seguida, teste o acesso às compartilhamentos escrevendo 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 a propriedade do arquivo:

  1. ls -l /nfs/general/general.test
Output
-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test

Como você montou este volume sem alterar o comportamento padrão do NFS e criou o arquivo como o usuário cliente da máquina root através do comando sudo, a propriedade do arquivo é definida como nobody:nogroup. Usuários superusuários não poderão realizar ações administrativas típicas, como alterar o proprietário de um arquivo ou criar um novo diretório para um grupo de usuários, neste compartilhamento montado via NFS.

Exemplo 2: O Compartilhamento do Diretório Home

Para comparar as permissões do compartilhamento de Uso Geral com o compartilhamento do Diretório Home, crie um arquivo em /nfs/home da mesma maneira:

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

Então, revise a propriedade do arquivo:

  1. ls -l /nfs/home/home.test
Output
-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test

Você criou home.test como root usando o comando sudo, exatamente da mesma maneira que você criou o arquivo general.test. No entanto, neste caso, é de propriedade do root porque você substituiu o comportamento padrão ao especificar a opção no_root_squash neste ponto de montagem. Isso permite que seus usuários root na máquina cliente ajam como root e torna a administração de contas de usuário muito mais conveniente. Ao mesmo tempo, significa que você não precisa dar acesso root a esses usuários no host.

Passo 7 — Montando os Diretórios NFS Remotos na Inicialização

Você pode montar automaticamente os compartilhamentos NFS remotos na inicialização, adicionando-os ao arquivo /etc/fstab no cliente.

Abra o seguinte arquivo com privilégios de root no seu editor de texto preferido:

  1. sudo nano /etc/fstab

No final do arquivo, adicione uma linha para cada um dos seus compartilhamentos, como o seguinte:

/etc/fstab
. . .
203.0.113.0:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/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 especificadas aqui na página do manual do NFS. Você pode acessar isso executando o seguinte comando:

  1. man nfs

O servidor cliente irá montar automaticamente as partições remotas na inicialização, embora possa levar alguns momentos para estabelecer a conexão e para que as compartilhamentos estejam disponíveis.

Passo 8 — Desmontando um Compartilhamento Remoto NFS

Se você não deseja mais que o diretório remoto seja montado em seu sistema, você pode desmontá-lo saindo da estrutura de diretórios do compartilhamento e desmontando-o.

Primeiro, mude para o diretório raiz:

  1. cd ~

Em seguida, desmonte /nfs/home. Note que o comando é chamado umount e não unmount como você poderia esperar:

  1. sudo umount /nfs/home

Depois, desmonte /nfs/general:

  1. sudo umount /nfs/general

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

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.5M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

Se você também deseja impedir que sejam remontados na próxima inicialização, edite o arquivo /etc/fstab e exclua a linha ou comente-a colocando o caractere # no início da linha. Você também pode impedir a montagem automática removendo a opção auto, o que permitirá que você o monte manualmente.

Conclusão

Neste tutorial, você criou um host NFS e ilustrou alguns comportamentos-chave do NFS criando dois pontos de montagem NFS diferentes, que você compartilhou com seu cliente NFS. Se você pretende implementar o NFS em produção, é importante observar que o próprio protocolo não é criptografado. Em casos onde você está compartilhando arquivos em 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. Note que isso frequentemente resulta em uma redução significativa no desempenho. Se o desempenho for um problema, considere usar SSHFS.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04