Voltar ao blog

Configurando uma Montagem NFS no Ubuntu 20.04

Configurando uma Montagem NFS no Ubuntu 20.04

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 :

Server Apt Update

Em seguida, instale o pacote nfs-kernel-server. Se necessário, o APT se encarregará de quaisquer dependências adicionais:

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 :

Client apt update

Em seguida, instale o pacote nfs-common :

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:

Create nfs general dir

Como o diretório foi criado com sudo privilégio, o proprietário será root:

List 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:

Change owner nogroup

  • 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:

exports file

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:

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:

exports file mod

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:

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:

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:

ufw allow ports

Depois disso, verifique o status do firewall novamente:

ufw status after change

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:

Create client nfs general directory

Create client nfs home directory

Agora que os pontos de montagem estão prontos, você precisa montar os volumes remotos:

Mount general directory on client

Mount home directory on client

Podemos verificar se as montagens foram bem-sucedidas. Verifique a lista de todos os volumes montados:

Disk free in client

Voilá! Os volumes remotos foram montados com sucesso. Também podemos verificar o uso do espaço usando o seguinte comando:

Disk usage in client 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:

Create file in nfs

Em seguida, verifique a propriedade do arquivo:

Check ownership of file created

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:

Create home file

Verifique a existência e a propriedade do arquivo:

Check ownership of home file

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:

fstab file

Adicione as seguintes linhas para montar os volumes remotos do sistema host:

fstab file after change

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:

Unmount nfs

Em seguida, verifique a ação:

Disks after unmount

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!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.