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ê.-
Para assistência na configuração de um usuário não-root com privilégios
sudo
e um firewall, siga nosso guia Configuração Inicial do Servidor com Ubuntu 18.04. -
Se estiver usando Droplets da DigitalOcean para seu servidor e cliente, leia Como Criar uma VPC para configurar uma rede privada.
-
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:
Em seguida, instale o pacote:
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:
Em seguida, instale o pacote:
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:
Uma vez que você está criando com sudo
, o diretório é de propriedade do usuário root do host:
Outputtotal 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:
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
:
O arquivo possui comentários mostrando a estrutura geral de cada linha de configuração. A sintaxe é a seguinte:
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:
/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:
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:
OutputStatus: 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:
Você pode verificar a mudança executando o seguinte:
Você deve receber uma lista de tráfego permitido da porta 2049
na saída:
OutputStatus: 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::
Em seguida, execute este comando para criar o segundo::
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
:
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:
OutputFilesystem 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:
Output44K /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
:
Em seguida, verifique a propriedade do arquivo:
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:
Então, revise a propriedade do arquivo:
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:
No final do arquivo, adicione uma linha para cada um dos seus compartilhamentos, como o seguinte:
. . .
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:
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:
Em seguida, desmonte /nfs/home
. Note que o comando é chamado umount
e não unmount
como você poderia esperar:
Depois, desmonte /nfs/general
:
Isso removerá os compartilhamentos remotos, deixando apenas o armazenamento local acessível:
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