Sistema de arquivos de rede
| Sistema de arquivos de rede (NFS) | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Família | Protocolos do sistema de arquivos de rede | |||||||||||
| Função | Acesso ao sistema de arquivos via rede. | |||||||||||
| Última versão | NFSv4 | |||||||||||
| portas | 2049 | |||||||||||
| Localização na pilha de protocolos * | ||||||||||||
| ||||||||||||
| * de acordo com o modelo OSI | ||||||||||||
| padrões | ||||||||||||
|
RFC 1094 (versão 2) RFC 1813 (versão 3) RFC 3530 (versão 4) | ||||||||||||
Network File System , ouNFS , é um protocolo de camada de aplicação , de acordo com o Modelo OSI . Ele é usado para sistemas de arquivos distribuídos em um ambiente de rede de computadores de área local . Ele permite que diferentes sistemas conectados à mesma rede acessem arquivos remotos como se fossem locais. Foi desenvolvido originalmente em 1984 pela Sun Microsystems , com o objetivo de ser independente de máquina, sistema operacional e protocolo de transporte, isso foi possível porque é implementado sobre os protocolos XDR .(apresentação) e ONC RPC (sessão). [ 1 ] O protocolo NFS é incluído por padrão nos sistemas operacionais UNIX e na maioria das distribuições Linux .
- O sistema NFS é dividido em pelo menos duas partes principais: um servidor e um ou mais clientes . Os clientes acessam remotamente os dados armazenados no servidor.
- As estações de trabalho locais usam menos espaço em disco porque os dados são centralizados em um único local, mas podem ser acessados e modificados por vários usuários, portanto, as informações não precisam ser replicadas.
- Os usuários não precisam ter um diretório “home” em cada uma das máquinas da organização. Os diretórios pessoais podem ser criados no servidor NFS para que possam ser acessados posteriormente de qualquer máquina na infraestrutura de rede.
- Dispositivos de armazenamento como unidades de disquete, CD-ROMs e unidades ZIP também podem ser compartilhados pela rede . Isso pode reduzir o investimento em tais dispositivos e melhorar o uso do hardware existente na organização.
Todas as operações em arquivos são síncronas . Isso significa que a operação só retornará quando o servidor tiver concluído todo o trabalho associado a essa operação. No caso de uma solicitação de gravação, o servidor gravará fisicamente os dados no disco e, se necessário, atualizará a estrutura de diretórios, antes de retornar uma resposta ao cliente. Isso garante a integridade dos arquivos.
Arquitetura
Suponha que um cliente de sistema de arquivos de rede (NFS) tente montar um diretório obtido do servidor NFS em um diretório local. Para isso, você precisará do seguinte comando:
$ sudo mount -t nfs remote_machine:/home /local_dir
Neste comando especificamos o tipo de sistema de arquivos a ser montado com -t, a máquina remota e o diretório onde vamos montá-lo.
Este comando trata da conexão com o daemon rpc mountd em execução na máquina remota via RPC. O servidor verifica as permissões do cliente no diretório /home onde vai ser montado e se tiver, a montagem é feita como se fosse qualquer outro dispositivo físico. Concluída a montagem, ao acessar o diretório do cliente, você estará acessando o diretório do servidor remoto.
Quando o diretório /local_dir já possui o diretório /home da máquina remota montado, os únicos arquivos de proteção nesse diretório são suas permissões.
Ao acessar os arquivos no diretório NFS, será gerada no servidor uma chamada RPC ao daemon rpc nfsd , na qual estão incluídos os parâmetros correspondentes ao UID e GID do usuário e ao descritor do arquivo, com os quais serão verificadas as permissões.
Implementação típica
Assumindo um cenário no estilo Unix onde uma máquina (o cliente) precisa acessar os dados armazenados em outra máquina (o servidor NFS):
- O servidor implementa processos de daemon NFS, executados por padrão como nfsd, para disponibilizar seus dados genericamente aos clientes.
- O administrador do servidor determina o que disponibilizar exportando os nomes e parâmetros dos diretórios, geralmente usando o arquivo de configuração /etc/exports e o comando exportfs.
- O gerenciamento de segurança do servidor garante que ele possa reconhecer e aprovar clientes validados.
- A configuração de rede do servidor garante que os clientes apropriados possam negociar com ele por meio de qualquer sistema de firewall.
- O computador cliente solicita acesso aos dados exportados, normalmente emitindo um comando de montagem. O cliente pergunta ao servidor (rpcbind) qual porta o servidor NFS está usando, o cliente se conecta ao servidor NFS (nfsd), o nfsd passa a solicitação para mountd.
- Se tudo correr bem, os usuários na máquina cliente podem visualizar e interagir com os sistemas de arquivos montados no servidor dentro dos parâmetros permitidos.
- Observe que a automação do processo de montagem do NFS pode ocorrer, talvez usando /etc/fstab e/ou recursos de montagem.
Este sistema de arquivos é utilizado para que em uma rede local diferentes computadores possam acessar arquivos e compartilhá-los, desta forma, um computador pode acessar as informações de outro computador como se fosse um disco rígido. O NFS se concentra na consistência, assumindo operações de gravação pesadas que provavelmente não serão muito frequentes.
Um dos principais usos do protocolo NFS é poder ter todos os arquivos centralizados em um único servidor. Isso permitirá dispensar unidades de memória nos outros computadores e poder acessar remotamente para ler qualquer arquivo ou baixá-lo.
É muito útil, especialmente quando muitos usuários terão que fazer login para modificar esses arquivos.
Vantagem
- Vários clientes podem acessar arquivos
- Reduz a necessidade de espaço em disco
- Qualquer usuário pode modificar e atualizar os arquivos
- Compatibilidade com muitos dispositivos
Desvantagens
- Segurança: use apenas em redes seguras e atrás de um firewall
- Requer alta sobrecarga para ler arquivos
- Não é fácil bloquear arquivos ou dar permissões
Cliente NFS
O cliente simula as funcionalidades do sistema de arquivos UNIX, integrado diretamente ao kernel. Ele é responsável por controlar as requisições do VFS ao servidor. Envie os blocos ou arquivos do servidor e para o servidor. Quando possível, ele armazena em cache os blocos localmente.
Memória cache
O módulo cliente NFS armazena em cache os resultados das operações <readwritegetattlookup> e readdir. Os clientes são responsáveis por consultar o servidor para verificar a atualidade de seus dados de cache.
Método de carimbo de data/hora para manter caches:
Cada elemento é marcado com dois horários diferentes, um da última vez que o elemento foi validado e outro da última vez que foi modificado no servidor. Uma entrada de cache é válida no tempo t se o tempo t em que foi validada pela última vez for menor que o intervalo de atualização tolerado. Se a entrada não for válida, obtém-se a hora em que foi modificada pela última vez no servidor e se for igual à do cliente, a entrada é válida e a hora do cliente é atualizada, caso contrário a entrada é inválida.
Para minimizar as chamadas para getattr, quando um valor é recebido do servidor de um arquivo, ele é aplicado a todas as entradas relevantes desse arquivo.
Mesmo com isso, haverá problemas de consistência se tivermos gravações em dois clientes com uma diferença de tempo menor que o intervalo de atualização tolerado. Para resolver esse problema, teremos que usar o bloqueio de arquivos transformando o arquivo em uma seção crítica, isso é obtido no NFS através do protocolo Network Lock Manager (NLM) .
Servidor NFS
O servidor NFS faz parte do kernel Linux, nos kernels que o Debian fornece ele é compilado como um módulo do kernel. Sua interface é definida na RFC 1813.
Ele é responsável por receber os pedidos, que podem ser semelhantes aos do modelo de arquivo simples ou simular os do sistema UNIX.
O servidor também oferece serviços de montagem, autenticação e controle de acesso e um cache.
Memória cache
Existem duas opções para manter e garantir a consistência da escrita:
- write-through : os dados das operações de gravação são armazenados em cache e gravados no disco antes de responder ao cliente.
- Commit : Os dados das operações de gravação são armazenados apenas em cache. Eles só são gravados no disco quando uma operação de confirmação é recebida.
Os daemons essenciais do serviço NFS são os seguintes:
- rpc.mountd : Daemon que manipula a montagem remota. Ele recebe a solicitação do cliente NFS e verifica se o sistema de arquivos foi exportado e, se disponível, permite solicitações de acesso NFS e fornece informações sobre ele ( showmount ).
- rpc.nfsd: daemon de serviço de arquivo. Várias cópias deste daemon podem ser iniciadas. Ele usa a porta TCP/UDP 2049.
- rpc.portmap : É responsável por indicar aos clientes onde o serviço real está localizado no servidor. Os serviços baseados em RPC usam o portmap para atender às solicitações do cliente, portanto, esse serviço deve estar disponível primeiro. Não é usado em NFSv4. Para verificar se está ativo, execute:
- $ sudo status do mapa de porta
- rpc.lockd : responsável por fornecer o serviço de bloqueio de arquivos para garantir sua consistência, pois podem ser acessados concorrentemente. Ele é executado no servidor e no cliente.
- rpc.statd : Este daemon funciona em conjunto com lockd para se recuperar de travamentos do sistema. Ele mantém informações sobre os processos nos clientes que possuem bloqueios de arquivos de um determinado servidor. Quando o servidor NFS recupera, o statd informa aos outros clientes que o servidor se recuperou e assim eles resolvem os bloqueios que tinham.
Segurança
Se queremos que nosso serviço NFS seja mais seguro, devemos levar em consideração uma série de detalhes, como:
- Use curingas (metacaracteres) o mínimo possível, pois podemos dar acesso a mais equipes do que estamos pensando.
- Use as regras do Iptables (firewall) para limitar o acesso às portas usadas pelos daemons de serviço NFS.
- O uso dos arquivos /etc/hosts.allow e /etc/hosts.deny não é obrigatório, mas é preferível configurá-los para garantir a segurança dos dados.
- Exporte sistemas de arquivos legíveis (ro) sempre que possível.
- O proprietário dos arquivos e diretórios exportados deve ser root, pois é possível mapear o UID do root para o do usuário none.
- Tente tornar os arquivos exportados não graváveis para o grupo ( ACL ).
- As versões 2 e 3 do NFS não possuem controle de acesso para usuários específicos. Neles, quando um sistema de arquivos é exportado, qualquer usuário em qualquer máquina remota conectada ao servidor NFS pode acessar os dados compartilhados. O único mecanismo de segurança que eles têm é usar acesso somente leitura e reduzir todos os usuários a um comum cujo UID e GID nós especificamos.
- Se a opção de exportação do squash não for usada , qualquer usuário root na máquina cliente pode se tornar um usuário com acesso privilegiado simplesmente executando o comando: su - . É sempre aconselhável ter alguma opção de squash ativada .
- A versão mais segura do NFS é a 4.
<Kerberos>
O NFS inclui a identidade do usuário por padrão nas solicitações ao servidor, mas apenas para compará-la com as permissões de acesso, não a valida.
Com o Kerberos, a autenticação do usuário é executada no momento da montagem do sistema de arquivos. Os resultados dessas autenticações são armazenados e usados em cada solicitação NFS. Isso protege contra a maioria dos ataques.
Versões NFS
As principais versões do NFS são NFSv2 (RFC 1094), NFSv3 (RFC 1813) e NFSv4 (RFC 3530).
O NFS versão 2 é o mais usado e suportado pelos sistemas operacionais, bem como o mais antigo e inseguro. A versão 3 é mais poderosa que a versão 2, mas não é totalmente compatível com os clientes da versão anterior. Essas duas versões podem funcionar com TCP e UDP como protocolo de transporte criando conexões de rede entre cliente e servidor. A vantagem de usar o UDP é que o tráfego de rede é minimizado, mas se cair, os clientes continuarão a enviar mensagens e ficarão saturados.
Em geral, as versões 2 e 3 do NFS permitem controlar a exportação e a montagem de sistemas de arquivos com base na máquina solicitante, mas não no usuário. Em outras palavras, o controle de acesso ao sistema de arquivos pelo usuário não é contemplado. Somente para equipes. Isso implica que, se um sistema de arquivos for exportado do servidor NFS, ele poderá ser acessado por qualquer usuário em uma máquina cliente NFS remota. Os únicos mecanismos de segurança que restam neste caso são as permissões de acesso (somente leitura) ou usando apenas um usuário e grupo. Logicamente, isso limita muito a ideia de compartilhamento que todos nós temos.
No caso da versão 4 do NFS, esses problemas de segurança desaparecem, mas, em troca, ele possui requisitos de configuração muito mais importantes e serviços adicionais. Por exemplo, na versão 4 é obrigatório o uso de mecanismos de autenticação de usuários. Para isso, e dependendo do tipo de segurança selecionado, é necessária a utilização do serviço Kerberos, cuja missão será funcionar como um servidor de entrega de tickets (KDC) e que deve estar configurado e funcionando corretamente antes de configurar o servidor NFSv4. Esse requisito fornece segurança ao serviço NFS em troca de adicionar mais complexidade à sua configuração.
Outro recurso importante do NFS4 é o uso de ACLs (listas de controle de acesso) no estilo Windows que não são suportadas pelas versões 2 e 3 do NFS. Quando falamos de ACLs nos referimos às permissões ou direitos de acesso que cada usuário possui em um arquivo ou diretório e que são especificados como listas editáveis pelo administrador do sistema.
Vantagens do NFS
- Eles reduzem o risco de que a falha de um único equipamento impeça o acesso aos dados.
- Eles fornecem locais centralizados para dados que devem ou devem ser compartilhados entre todos os usuários.
- Eles simplificam o acesso aos dados existentes em sistemas mais rápidos.
- Eles oferecem a oportunidade de centralizar as operações administrativas, como backup de dados ( back-ups ).
- Eles fornecem interoperabilidade e flexibilidade. Os sistemas de arquivos de rede geralmente podem ser acessados de computadores executando Linux, Windows, Mac OS X, BeOS, BSD e muitos outros. Dessa forma, é fácil usar o hardware e o software mais adequados para os requisitos da área de trabalho e ainda acessar os mesmos dados do ambiente do sistema de arquivos da rede.
Desvantagens do NFS
- NFSv2 y NFSv3 pueden utilizar UDP como protocolo de transporte que al ser una conexión desatendida, minimiza el tráfico de red, pero si el servidor NFS cayera por cualquier circunstancia, los clientes NFS seguirían enviando peticiones al servidor produciendo el efecto contrario, que es la saturación da rede.
- As versões 2 e 3 do NFS permitem controlar a exportação e a montagem de sistemas de arquivos com base na máquina solicitante, mas não no usuário. Em outras palavras, o controle de acesso ao sistema de arquivos pelo usuário não é contemplado. Somente para equipes. Isso implica que, se um sistema de arquivos for exportado do servidor NFS, ele poderá ser acessado por qualquer usuário em uma máquina cliente NFS remota.
- O NFS sofre com alguns problemas de desempenho devido ao seu design "sem estado" (alguns desses problemas são atenuados nas versões mais recentes do NFS). Em particular, uma vez que o cliente assume que uma operação de gravação está concluída assim que recebe uma confirmação do servidor, o servidor deve garantir que ele grava cada bloco no disco antes de responder, para evitar discrepâncias em caso de falha. Isso introduz um atraso significativo no caso de gravações NFS.
Operações
O NFS inicialmente suportava 18 procedimentos para todas as operações básicas de E/S. [ 1 ] Os comandos da versão 2 do protocolo são os seguintes: [ 2 ]
- NULL : não faz nada, mas é usado para pingar o servidor e medir tempos.
- CRIAR : cria um novo arquivo.
- LOOKUP : Procura um arquivo no diretório atual e, se encontrado, retorna um descritor para esse arquivo mais informações sobre os atributos do arquivo.
- READ e WRITE : primitivas básicas para acessar o arquivo.
- RENOMEAR : renomear um arquivo.
- REMOVER : exclui um arquivo.
- MKDIR e RMDIR : criar/excluir subdiretórios.
- READDIR : para ler a lista de diretórios.
- GETATTR e SETATTR : retornam conjuntos de atributos de arquivo.
- LINK : Crie um arquivo, que é um link para um arquivo em um diretório especificado.
- SYMLINK e READLINK : para criar e ler, respectivamente, links simbólicos (em uma "string") para um arquivo em um diretório.
- STATFS : Retorna informações do sistema de arquivos.
- ROOT , para ir para a raiz (obsoleto na versão 2).
- WRITECACHE : Reservado para uso futuro.
Na versão 3 do protocolo, os comandos STATFS, ROOT e WRITECACHE são removidos; e foram adicionados os seguintes: [ 3 ]
- ACCESS : Para verificar as permissões de acesso.
- MKNOD : Crie um dispositivo especial.
- READDIRPLUS : Uma versão melhorada do READDIR.
- FSSTAT - Retorna informações do sistema de arquivos dinamicamente.
- FSINFO - Retorna informações do sistema de arquivos em formato estático.
- PATHCONF : Recupera informações POSIX .
- COMMIT : Envie dados de cache em um servidor para um sistema de armazenamento estável.
A versão 4 foi lançada em abril de 2003 e não é compatível com versões anteriores. Suporta 41 comandos: NULL, COMPOUND, ACCESS, CLOSE, COMMIT, CREATE, DELEGPURGE, DELEGRETURN, GETATTR, GETFH, LINK, LOCK, LOCKT, LOCKU, LOOKUP, LOOKUPP, NVERIFY, OPEN, OPENATTR, OPEN_CONFIRM, OPEN_DOWNGRADE, PUTFH, PUTPUBFH, PUTROOTFH, READ, READDIR, READLINK, REMOVE, RENAME, RENEW, RESTOREFH, SAVEFH, SECINFO, SETATTR, SETCLIENTID, SETCLIENTID_CONFIRM, VERIFY, WRITE, RELEASE_LOCKOWNER, ILEGAL. [ 4 ]
Veja também
Tópicos relacionados ao NFS:
- ONC RPC , chamada de procedimento remoto usada com NFS.
- XDR , protocolo de apresentação de dados usado pelo NFS.
- VFS , sistema de arquivos virtual.
Outros sistemas:
- AppleTalk
- Samba (software)
- Bloco de mensagens do servidor
- Sistema de arquivos Andrew
- Sistema de Arquivos Shell Seguro
Referências
- ^ a b Sandberg, R. Goldberg, D. Kleiman, S. Walsh D. Lyon, B. (junho de 1985). "Projeto e Implementação do Sistema de Arquivos de Rede Sun " . Anais da Conferência Usenix de verão de 1985.
- ↑ Especificação de protocolo RFC 1094 versão 2. (em inglês)
- ↑ RFC 1813 Protocol Specification versão 3. (em inglês)
- ↑ Especificação de protocolo RFC 3530 versão 4. (em inglês)
Links externos
- Linux NFS
- O Projeto de Documentação Linux do Sistema de Arquivos de Rede . Guia de Administração de Rede Linux, Capítulo 14.
- Microsoft financia um cliente NFS v4 de código aberto para Windows
- [1] Santamaria, R. Sistemas Distribuídos.
- [2] Ministério da Educação, Cultura e Esportes da Espanha