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 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 performática de acessar sistemas remotos por meio de uma rede e funciona bem em situações em que 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á:
-
Dois servidores Ubuntu 18.04. Cada um deles deve ter um usuário não-root com privilégios
sudo
configurados, um firewall configurado com o UFW e rede privada, se estiver disponível para você.-
Para obter assistência na configuração de um usuário não-root com privilégios
sudo
e um firewall, siga nosso guia Inicial de Configuração do Servidor com Ubuntu 18.04. -
Se você estiver usando Droplets DigitalOcean para seu servidor e cliente, leia Como Criar uma VPC para configurar uma rede privada.
-
Ao longo deste tutorial, nos referimos ao servidor que compartilha seus diretórios como o host e ao servidor que monta esses diretórios como o cliente. Usaremos os seguintes endereços IP como substitutos para os valores do host e cliente:
- Host:
203.0.113.0
- Cliente:
203.0.113.24
Quando esses endereços IP aparecerem em comandos e arquivos de configuração, substitua-os pelos seus próprios endereços IP respectivos do host e cliente.
Etapa 1 — Baixando e Instalando os Componentes
Comece primeiro instalando os componentes necessários em cada servidor.
No Host
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:
Uma vez que esses pacotes estejam 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:
Então, instale o pacote:
Agora que ambos os servidores têm os pacotes necessários, você pode começar a configurá-los.
Etapa 2 — Criando os Diretórios de Compartilhamento no Host
Vamos compartilhar dois diretórios separados com configurações diferentes para ilustrar duas maneiras chave de como montagens NFS podem ser configuradas em relação ao acesso de superusuário.
Superusuários podem fazer qualquer coisa em qualquer lugar em seus sistemas. No entanto, diretórios montados via NFS não fazem parte do sistema no qual estão montados, então por padrão, o servidor NFS recusa-se a executar operações que requerem privilégios de superusuário. Essa restrição padrão significa que superusuários no cliente não podem escrever arquivos como root, reatribuir propriedade ou executar outras tarefas de superusuário na montagem NFS.
Por vezes, no entanto, há usuários confiáveis no sistema cliente que precisam executar essas ações no sistema de arquivos montado, mas que não precisam de acesso de superusuário no host. Você pode configurar o servidor NFS para permitir isso, embora isso introduza um elemento de risco, pois esse usuário pode ganhar acesso root ao sistema inteiro host.
Exemplo 1: Exportando uma Montagem de Propósito Geral
No primeiro exemplo, você criará um ponto de montagem NFS de uso geral que utiliza o comportamento padrão do NFS para tornar difícil para um usuário com privilégios root na máquina cliente interagir 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:
Como você está criando com sudo
, o diretório é pertencente ao 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 irá traduzir qualquer operação 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 esse diretório.
Exemplo 2: Exportando o Diretório Home
No nosso segundo exemplo, o objetivo é tornar os diretórios home dos usuários armazenados no host disponíveis nos servidores cliente, permitindo que administradores confiáveis desses servidores cliente tenham o acesso necessário para gerenciar convenientemente os usuários.
Para fazer isso, você vai exportar o diretório /home
. Como ele já existe, você não precisa criá-lo. Você também não vai alterar as permissões. Se fizesse isso, poderia causar 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 editar o 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 preferido com privilégios de root. Aqui usaremos nano
:
O arquivo contém 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 você planeja compartilhar. Como nosso exemplo client tem um IP de 203.0.113.24
, nossas linhas ficarão como a seguir. Certifique-se de alterar o endereço IP para o de seu client:
/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 a exceção de no_root_squash
. Vamos revisar o que cada uma dessas opções significa:
rw
: Esta opção dá ao computador client 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, pois 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 em que 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 projetado como uma medida de segurança para impedir que uma conta root no cliente use o sistema de arquivos do host como root.no_root_squash
desativa esse comportamento para certas compartilhamentos.
Quando você terminar de fazer suas alterações, salve e feche o arquivo. Se você estiver usando nano
, pode fazer isso pressionando CTRL + X
e então Y
e ENTER
. Então, para tornar os compartilhamentos disponíveis para os clientes que você configurou, reinicie o servidor NFS com o seguinte comando:
Antes de você realmente usar os novos compartilhamentos, no entanto, você precisará ter certeza de que o tráfego para os compartilhamentos é permitido pelas regras do firewall.
Passo 4 — Ajustando o Firewall no Host
Primeiro, verifique o status do firewall para confirmar se ele está ativado e, se sim, revise o que está atualmente permitido:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
No 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 habilitá-los pelo nome, mas nfs
não é um deles. No entanto, pois ufw
também verifica /etc/services
para a porta e o protocolo de um serviço, você ainda pode adicionar o NFS pelo nome. A melhor prática recomenda que você habilite a regra mais restritiva que ainda permitirá o tráfego que você deseja permitir, então em vez de permitir tráfego de qualquer lugar, você será específico.
Use o seguinte comando para abrir a porta 2049
no host, certificando-se de substituir seu endereço IP do cliente:
Você pode verificar a alteração executando o seguinte:
Você deverá 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)
Isso confirma que o UFW permitirá apenas o tráfego NFS na porta 2049
de sua máquina cliente.
Passo 5 – Criando Pontos de Montagem e Diretórios de Montagem no Cliente
Agora que o servidor host está configurado e servindo suas compartilhamentos, você vai preparar seu cliente.
Para tornar os compartilhamentos remotos disponíveis no cliente, você precisa montar os diretórios no host que você quer compartilhar em diretórios vazios no cliente.
Observação: Se houver arquivos e diretórios em seu ponto de montagem, eles ficarão ocultos assim que você montar o compartilhamento NFS. Para evitar a perda de arquivos importantes, certifique-se de que se você 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 você abriu o firewall, você pode montar os compartilhamentos usando o endereço IP de seu servidor host, que neste guia é 203.0.113.0
:
Estes comandos montarão as 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 as 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 foram montados a partir do mesmo sistema de arquivos, eles mostram o mesmo uso de disco. Para verificar quanto espaço está realmente sendo usado em cada ponto de montagem, use o comando de uso de disco du
e o caminho do montagem. O sinalizador -s
fornece um resumo de uso ao invés de exibir o uso de cada arquivo. O -h
imprime uma saída legível para humanos:
Output44K /nfs/home
Isso mostra que o conteúdo de toda a pasta home está usando apenas 44K do espaço disponível.
Etapa 6 — Testando o Acesso NFS
Em seguida, teste o acesso aos compartilhamentos escrevendo algo em cada um deles.
Exemplo 1: O Compartilhamento de Propósito Geral
Primeiro, escreva um arquivo de teste no compartilhamento /var/nfs/general
:
Então, verifique sua propriedade:
Output-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test
Porque você montou este volume sem alterar o comportamento padrão do NFS e criou o arquivo como o usuário cliente root via comando sudo
, a propriedade do arquivo é padrão para nobody:nogroup
. Clientes superusuários não serão capazes de executar 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, nesta partilha montada do NFS.
Exemplo 2: A partilha do diretório Home
Para comparar as permissões da partilha de Propósito Geral com a partilha de Diretório Home, crie um arquivo em /nfs/home
da mesma forma:
Em seguida, reveja 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 forma que você criou o arquivo general.test
. No entanto, neste caso, ele pertence a root porque você substituiu o comportamento padrão ao especificar a opção no_root_squash
nesta montagem. Isso permite que seus usuários root na máquina cliente atuem como root e torna a administração de contas de usuários muito mais conveniente. Ao mesmo tempo, isso significa que você não precisa dar a esses usuários acesso root no host.
Passo 7 – Montando os diretórios remotos NFS na inicialização
Você pode montar as compartilhamentos remotos NFS automaticamente na inicialização adicionando-os ao arquivo /etc/fstab
no cliente.
Abra o seguinte arquivo com privilégios de root em seu editor de texto preferido:
No final do arquivo, adicione uma linha para cada um dos seus compartilhamentos, como a 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 man
do NFS. Você pode acessar isso executando o seguinte comando:
O servidor cliente montará automaticamente as partições remotas na inicialização, embora possa levar alguns momentos para estabelecer a conexão e para que os compartilhamentos estejam disponíveis.
Passo 8 – Desmontando um compartilhamento NFS remoto
Se você não quiser 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.
Primeiro, mude para o diretório home:
Então desmonte /nfs/home
. Note que o comando é chamado umount
e não unmount
como você pode esperar:
Em seguida, desmonte /nfs/general
:
Isso removerá as compartilhamentos remotos, deixando apenas seu 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 quiser impedir que eles sejam remontados na próxima reinicialização, edite /etc/fstab
e delete a linha ou comente-a colocando um 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ê monte manualmente.
Conclusão
Neste tutorial, você criou um host NFS e ilustrou alguns comportamentos chave do NFS criando duas montagens NFS diferentes, que você compartilhou com o seu cliente NFS . Se você está buscando implementar o NFS em produção, é importante notar que o próprio protocolo não é criptografado. Em casos onde você está compartilhando arquivos sobre 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 isto 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