我正在尝试让我的 NFS 服务器允许非根挂载请求。
服务器:Debian Squeeze,内核 2.6.32-5-686
我现在的情况是:root(或sudoes)可以挂载 NFS 文件系统,但普通用户不能。
我为什么认为这是有可能的:
- FreeBSD 文档:http://www.unix.com/man-page/FreeBSD/8/mountd/选项-n
- Linux 论坛上的问题,例如:http://www.linuxquestions.org/questions/linux-software-2/non-root-account-unable-to-mount-a-nfs-connection-926985/
一、Debian服务器(10.18.51.1)
已安装的软件包:nfs 内核服务器、nfs 通用、端口映射
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)导出文件夹的权限:
$ 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
二、Ubuntu客户端(10.18.51.11)
已安装的软件包:nfs 通用端口映射
$ mount 10.18.51.1:/usr/appl /mnt/nfs/appl
mount: only root can do that
尽管 /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.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
...
有趣的是,按下 Enter 键后,它会打印“Permission denied”,然后等待一段时间,然后尝试连接到 10.18.51.1,然后再次打印“Permission denied”。我知道与服务器的连接,因为我在服务器上使用了 tcpdump(tcpdump host 10.18.51.3):
$ 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
有什么建议么?
更新:解决了一半的问题。我应该使用
mount /mnt/nfs/appl
代替
mount 10.18.51.1:/usr/appl /mnt/nfs/appl
在 Linux(Ubuntu)客户端上。
但在 FreeBSD 中安装仍然存在问题。
答案1
非 root 挂载出现问题的最可能原因是“安全”导出选项,默认情况下处于启用状态。它不允许源端口大于 1024 的挂载请求。在大多数系统上,绑定到小于 1024 的端口需要 root 访问权限,因此这是一种确保挂载由 root 执行的相当不错的方法。
该问题,正如自述对于我的 NfSpy 渗透测试工具,NFS 协议(版本 2、3 甚至 4,没有正确配置)完全信任客户端计算机请求中发送的用户 ID。通过将请求限制为仅由 root 发出的请求,您可以将信任限制为仅具有 root 访问权限的客户端计算机上的用户。如果没有此设置(在导出文件中使用“不安全”),任何用户都可以声称拥有任何 UID 并访问导出中的任何文件。
它在 Linux 上运行的原因可能是因为 /bin/mount 是 setuid root:
~$ ls -l /bin/mount
-rwsr-xr-x 1 root root 72188 2011-01-20 13:54 /bin/mount
只是一种预感,但请检查 FreeBSD 系统上挂载二进制文件的权限。如果它是setuid,那么你仍然有问题,我不知道是什么问题。如果不是,那么这就可以解释发生了什么。
祝你好运,但请考虑允许系统上的任何用户访问服务器上的任何文件的安全隐患。我建议使用带有 GSS 身份验证机制的 NFS4,而不是传统的 AUTH_SYS 方式。