我正在实现我自己的 RPC 框架,并且大部分工作已经完成,但我需要一些帮助我如何验证 auth_unix?数据结构在http://www.faqs.org/rfcs/rfc1050.html 9.2 UNIX 身份验证中定义,但我应该如何验证用户?
问问题
1009 次
1 回答
1
UID 和 GID 与服务器上的 UID 和 GID 进行比较,以验证其真实性。这些 ID 可以使用 NIS 或其他工具在 unix 系统之间共享。随后在远程系统上执行的任何操作都在该有效 UID 和 GID 下运行。
服务器后面的应用程序可能会实现进一步的身份验证,但请注意 AUTH_UNIX 本身不会对用户进行身份验证;它信任提供的 UID 和 GID。
从第 9.3 节:
9.3 DES Authentication
UNIX authentication suffers from two major problems:
(1) The naming is too UNIX oriented.
(2) There is no verifier, so credentials can easily be faked.
DES authentication attempts to fix these two problems.
如果您使用 Unix 身份验证,则只能假设消息来自受信任的主机,并且在用户有机会执行发起调用的操作之前,已经有某种机制对用户进行身份验证。
在这种情况下,将由应用程序来验证用户凭据。还提供了原始计算机名称,因此您可以确保原始 IP 地址与其匹配并仅回复该地址 - 这对 DNS 缓存中毒攻击具有明显的漏洞。此外,让 DHCP 或 NAT 很好地发挥作用留给读者作为练习;-}
这意味着您别无选择,只能信任 UID 和 GID 或在位于 RPC 库顶部的应用程序中进行额外验证。RFC 讨论了更安全的身份验证机制。但是,Sun RPC 并不是最安全的协议,通常不建议将其用于提供给不受信任的客户端的服务。
于 2009-09-11T12:26:09.940 回答