Fui um pouco incomodado pelo NFS4 no Linux. Algumas informações "lá fora" parecem conflitar com outras informações, e outras informações parecem difíceis de encontrar. Então, aqui estão algumas coisas que chamaram minha atenção, espero que alguém por aí possa lançar alguma luz sobre isso.
Esta pergunta se concentra exclusivamente no NFS4 sem o Kerberos etc.
1. Exportações
Há informações ambíguas na página de exports
manual sobre a estrutura do / etc / exportações.
Para citar exports(5)
:
Além disso, cada linha pode ter uma ou mais especificações para opções padrão após o nome do caminho, na forma de um traço ("-") seguido por uma lista de opções.
A lista de opções é usada apenas para todas as exportações subsequentes nessa linha.
O que significa "exportações subsequentes somente nessa linha"?
1.2 fsid=0
não é mais necessário?
Eu estava procurando por fsid quando encontrei um comentário na lista linux-nfs informando que fsid = 0 não é mais necessário. Agora estou confuso, preciso disso com nfs4 ou não ?!
2. Diretório não exportado ainda montável
Digamos que tenho a seguinte árvore:
/exp
/exp/users
/exp/distr
/exp/distr/archlinux
/exp/distr/debian
E eu tenho as seguintes entradas nesta entrada do fstab:
/dev/disk/by-label/users /mnt/users ext4 defaults 0 0
/dev/disk/by-label/distr /mnt/distr ext4 defaults 0 0
/mnt/users /exp/users none bind 0 0
/mnt/distr /exp/distr none bind 0 0
E minhas exportações são exatamente isso:
/exp 192.168.1.0/24(fsid=0,rw,async,no_subtree_check,no_root_squash)
/exp/distr 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
E exportfs -arv
mostra:
exporting 192.168.1.0/24:/exp/distr
exporting 192.168.1.0/24:/exp
Então, por que sou capaz de fazer isso e não recebo nenhum erro em um cliente:
mount -t nfs4 server:/exp/users /tmp/test
Mesmo que /exp/users
não seja exportado? Não exportei este diretório e, embora não veja o conteúdo, a /dev/disk/by-label/users
menos que eu especifique crossmnt
, ainda sou capaz de gravar no diretório. Tudo o que escrevo lá vai para o diretório subjacente /exp/users
e pode ser visto quando eu umount /exp/users; ls /exp/users
..
3. O caso ímpar de showmount -d server
Conforme declarado rpc.mountd(8)
, este comando deve exibir diretórios atualmente montados pelos clientes ou entradas antigas /var/lib/nfs/rmtab
, como pode ser lido:
O daemon rpc.mountd registra cada solicitação MNT bem-sucedida adicionando uma entrada ao arquivo / var / lib / nfs / rmtab. Ao receber uma solicitação UMNT de um cliente NFS, o rpc.mountd simplesmente remove a entrada correspondente de / var / lib / nfs / rmtab, desde que a lista de controle de acesso para essa exportação permita que o remetente acesse a exportação.
(...)
Observe, no entanto, que há pouco para garantir que o conteúdo de / var / lib / nfs / rmtab seja preciso. Um cliente pode continuar acessando uma exportação mesmo depois de chamar o UMNT. Se o cliente reiniciar sem enviar uma solicitação UMNT, as entradas obsoletas permanecerão para esse cliente em / var / lib / nfs / rmtab.
Depois de ler isso, certamente me pergunto:
- Não é terrivelmente inseguro apenas expor esse tipo de informação do cliente;
- Os administradores de servidor inconscientes não devem ter uma rmtab com muitos clientes antigos;
- É por isso que os clientes que montam diretórios nfs4
mount -v
conseguem ver a saída como "nada foi montado", mesmo que algo tenha sido montado?
Eu tenho muitas outras perguntas sobre o nfs4, mas continuarei assim por enquanto .. :)