NFS. Pedidos de montagem não raiz

4

Estou tentando fazer com que meu servidor NFS permita solicitações de montagem não-raiz .

Servidor: Debian Squeeze, kernel 2.6.32-5-686

O que eu tenho agora: root (ou sudoes) pode montar sistemas de arquivos NFS, mas usuários comuns não podem.

Por que acho que isso é possível:

  1. Documentação do FreeBSD: link opção -n
  2. Perguntas em fóruns orientados ao Linux, como este: link

eu. Servidor Debian (10.18.51.1)

Pacotes instalados: nfs-kernel-server, nfs-common, portmap

1) / etc / exports:

/usr/appl/ 10.18.51.0/24(ro,no_subtree_check)
/usr/private/ 10.18.51.11(rw,sync,no_subtree_check)

2) / var / lib / nfs / etab

/usr/private 10.18.51.11(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
/usr/appl 10.18.51.0/24(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

3) Permissões para pastas exportadas:

$ ls -lh -d /usr/appl
drwxr-xr-x 3 root root 4.0K Feb 25 17:16 /usr/appl
$ ls -lh -d /usr/private
drwxrwxrwx 4 root root 4.0K Feb 27 12:19 /usr/private

II. Cliente Ubuntu (10.18.51.11)

Pacotes instalados: mapa de porta comum do nfs

$ mount 10.18.51.1:/usr/appl /mnt/nfs/appl
mount: only root can do that

Apesar de existir uma tag de usuário em / etc / fstab:

10.18.51.1:/usr/appl    /mnt/nfs/appl      nfs   ro,async,nodev,nosuid,user  0   0
10.18.51.1:/usr/private /mnt/nfs/private   nfs rw,rsize=8192,hard,intr,nfsvers=3,tcp,noatime,nodev,async,user 0  0

III. Cliente do FreeBSD (10.18.51.3)

1)

$ cat /etc/rc.conf
...
nfs_client_enable="YES"

2)

$ mount 10.18.51.1:/usr/appl /mnt/nfs/appl
[tcp] 10.18.51.1:/usr/appl: Permission denied
[tcp] 10.18.51.1:/usr/appl: Permission denied
[tcp] 10.18.51.1:/usr/appl: Permission denied
...

Interessante que logo após pressionar Enter imprime Permissão negada, depois aguarda algum tempo, depois trys para se conectar a 10.18.51.1, depois imprime Permissão negada novamente. Eu sei sobre a conexão com o servidor porque eu usei o tcpdump (host tcpdump 10.18.51.3) no servidor:

$ sudo tcpdump host 10.18.51.3
[sudo] password for sukharevd: 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
23:32:28.029560 ARP, Request who-has msiuioo.local tell 10.18.51.3, length 28
23:32:28.029598 ARP, Request who-has msiuioo.local tell 10.18.51.3, length 28
23:32:28.029661 ARP, Reply msiuioo.local is-at 00:21:85:51:44:02 (oui Unknown), length 28
23:32:28.031075 IP 10.18.51.3.35034 > msiuioo.local.sunrpc: UDP, length 56
23:32:28.031401 IP msiuioo.local.sunrpc > 10.18.51.3.35034: UDP, length 28
23:32:28.033275 IP 10.18.51.3.17157 > msiuioo.local.<b>nfs</b>: Flags [S], seq 4085518488, win     65535, options [mss 1460,nop,wscale 3,sackOK,TS val 405930 ecr 0], length 0
23:32:28.033326 IP msiuioo.local.nfs > 10.18.51.3.17157: Flags [S.], seq 1703965537, ack 4085518489, win 5792, options [mss 1460,sackOK,TS val 2186703 ecr 405930,nop,wscale 6], length 0
23:32:28.034717 IP 10.18.51.3.17157 > msiuioo.local.nfs: Flags [.], ack 1, win 8326, options [nop,nop,TS val 405930 ecr 2186703], length 0
23:32:28.034912 IP 10.18.51.3.4026012106 > msiuioo.local.<b>nfs</b>: 40 null
23:32:28.034978 IP msiuioo.local.nfs > 10.18.51.3.17157: Flags [.], ack 45, win 91, options [nop,nop,TS val 2186704 ecr 405930], length 0
23:32:28.035063 IP msiuioo.local.nfs > 10.18.51.3.4026012106: reply ok 24 null
23:32:28.036892 IP 10.18.51.3.17157 > msiuioo.local.nfs: Flags [F.], seq 45, ack 29, win 8326, options [nop,nop,TS val 405930 ecr 2186704], length 0
23:32:28.036986 IP msiuioo.local.nfs > 10.18.51.3.17157: Flags [F.], seq 29, ack 46, win 91, options [nop,nop,TS val 2186704 ecr 405930], length 0
23:32:28.039021 IP 10.18.51.3.17157 > msiuioo.local.nfs: Flags [.], ack 30, win 8325, options [nop,nop,TS val 405930 ecr 2186704], length 0
23:32:28.039124 IP 10.18.51.3.40381 > msiuioo.local.sunrpc: UDP, length 56
23:32:28.039426 IP msiuioo.local.sunrpc > 10.18.51.3.40381: UDP, length 28

Alguma sugestão?

UPD: Resolvido metade de um problema. Eu deveria ter usado

mount /mnt/nfs/appl

em vez de

mount 10.18.51.1:/usr/appl /mnt/nfs/appl

no cliente Linux (Ubuntu).

Mas ainda há problemas com a montagem no FreeBSD.

    
por Dmitriy Sukharev 28.02.2012 / 23:36

1 resposta

1

O motivo mais provável de você ter problemas com montagens não-raiz é a opção de exportação "segura", que está ativada por padrão. Ele não permite solicitações de montagem que vêm com uma porta de origem maior que 1024. Na maioria dos sistemas, a ligação a uma porta menor que 1024 requer acesso root, portanto, essa é uma maneira bastante decente de garantir que a montagem seja feita por root.

O problema, como explicado na LEIAME da minha ferramenta de teste de penetração NfSpy, é que o protocolo NFS (versões 2, 3 e até 4, sem configuração adequada) confia completamente no ID do usuário enviado em solicitações de máquinas clientes. Ao limitar as solicitações apenas àquelas feitas pelo root, você limita sua confiança apenas aos usuários na máquina cliente que possuem acesso root. Sem essa configuração (usando "inseguro" em seu arquivo de exportação), qualquer usuário pode reivindicar ter qualquer UID e acessar qualquer arquivo na exportação.

O motivo pelo qual ele está trabalhando no Linux é provavelmente porque / bin / mount é root setuid:

~$ ls -l /bin/mount
-rwsr-xr-x 1 root root 72188 2011-01-20 13:54 /bin/mount

Apenas um palpite, mas verifique as permissões no binário de montagem no seu sistema FreeBSD. Se é setuid, você ainda tem um problema e eu não sei o que é. Se não, então isso explicaria o que está acontecendo.

Boa sorte com isso, mas considere as implicações de segurança de permitir que qualquer usuário em um sistema acesse qualquer arquivo em seu servidor. Eu recomendo usar o NFS4 com mecanismos de autenticação GSS em vez do tradicional estilo AUTH_SYS.

    
por 01.03.2012 / 13:44

Tags