有一些基于用户空间的 NFS 客户端(例如https://stackoverflow.com/questions/2442691/nfs-client-library/2442729#2442729)。我可以使用这样的客户端来绕过文件权限吗?
例如:
Server1 具有包含文件的 nfs 导出文件系统
-rwxr-xr-x user1 file1
-rwx------ user2 file2
Client1 使用通常的 NFS 客户端(基于内核模式),并且 user1@client1 只能读取file1
,但不能file2
。据我了解,client1 在 nfs 请求中发送 uid,server1 根据请求数据进行权限检查。因此,我建议可以有一个 client2:
Client2 使用用户空间客户端,并且 hacker@client2 知道 user1 和 user2 的 uid;如果他想要读取,file1
他可以发送 user1 的 uid;如果他想要读取 file2,他就发送 user2 的 uid。
这个方案可行吗?
答案1
不,除非 hacker@client2 是 root,因为 NFS 的安全性基于请求的 TCP 源端口。如果用户空间库是从 hacker@client2 启动的,而不是从 root@client2 启动的,则它不能使用 <= 1024 的 TCP 端口。/etc/exportssecure
中的标志将指示 Server1 不要响应来自 > 1024 的 tcp 端口的请求。此标志默认设置。
Linux 中 nfs (v3) 服务器上的典型用户身份验证是 AUTH_NONE 和 AUTH_USER。第二种表示服务器信任请求中的 UID 和 GID。
NFSv4 使得这种攻击根本不可能发生,因为 nfs 服务器要求用户拥有有效的 Kerberos 票证。
所用书籍:http://www.sans.org/reading_room/whitepapers/linux/nfs-security-trusted-untrusted-environments_1956