在 Oracle® Solaris 11.2 中管理网络文件系统

退出打印视图

更新时间: 2014 年 7 月
 
 

安全 NFS 系统

NFS 环境是用于在具有不同计算机体系结构和操作系统的网络中共享文件系统的一种强大而便捷的方式。但是,这些通过 NFS 操作使文件系统共享变得非常便利的功能同时还会造成一些安全问题。以前,大多数 NFS 实现使用 UNIX(或 AUTH_SYS)验证,但是也可以使用更强大的验证方法(如 AUTH_DH)。使用 UNIX 验证时,NFS 服务器通过验证发出请求的计算机(而不是用户)来验证文件请求。因此,客户机用户可运行 su 来成为超级用户并模仿文件的所有者。如果使用 DH 验证,则 NFS 服务器将验证用户,这使得此类模仿非常困难。

凭借 root 访问权限和对网络编程的了解,任何人都可以将任意数据引入网络,并从网络中提取任何数据。最危险的攻击涉及数据的引入。例如,通过生成适当的包或通过记录“会话”并稍后重放来模仿用户。这些攻击将影响数据的完整性。涉及被动窃听(仅侦听网络通信流量,而不模仿任何人)的攻击不是很危险,因为不会损害数据完整性。用户可通过对通过网络发送的数据进行加密来保护敏感信息的保密性。

解决网络安全问题的常见方法是针对每个应用程序都单独制定解决方案。更好的方法是在涉及所有应用程序的级别上实现标准验证系统。

Oracle Solaris 操作系统包括 RPC 级别的验证系统,它是 NFS 操作所基于的机制。此系统(称为安全 RPC)可以大大提高网络环境的安全性,并能为 NFS 系统等服务提供附加安全性。使用由安全 RPC 提供的工具的 NFS 系统称为安全 NFS 系统。

安全 RPC

安全 RPC 是安全 NFS 系统的基础。安全 RPC 的目标是建立至少与分时系统一样安全的系统。在分时系统中,所有用户共享一台计算机,通过登录口令对用户进行验证。使用数据加密标准 (Data Encryption Standard, DES) 验证,可以完成相同的验证过程。用户可以登录任何远程计算机,就像登录本地终端一样。用户的登录口令是其网络安全的保证。在分时环境中,系统管理员出于道义不会更改口令以模仿某人。在安全 RPC 中,网络管理员是可信的,不会更改存储有公钥的数据库中的项。

RPC 验证系统使用凭证和检验器。以 ID 证件为例,凭证就是标识用户的具体内容:姓名、地址和生日。检验器就是附加到证件上的照片。通过对照携带该证件的人员检查该证件上的照片,可以确定该证件未被盗用。在 RPC 中,客户机进程会通过每个 RPC 请求将凭证和检验器发送到服务器。服务器仅发回检验器,因为客户机已经“知晓”服务器的凭证。

RPC 验证是开放式的,这表示可以在其中插入各种验证系统,如 UNIX、DH 和 KERB。

当网络服务使用 UNIX 验证时,凭证包含客户机的主机名、UID、GID 和组访问列表。但是,由于不存在检验器,因此超级用户可以使用如 su 等命令来伪造相应的凭证。另一个问题是,UNIX 验证假定网络上的所有计算机都是 UNIX 计算机。UNIX 验证在应用于异构网络中的其他操作系统时将会中断。

为克服 UNIX 验证问题,安全 RPC 将使用 DH 验证。


注 -  尽管对 Kerberos 验证系统的支持不再作为安全 RPC 的一部分来提供,但是此发行版中包含服务器端和客户端实现。有关 Kerberos 验证实现的更多信息,请参见在 Oracle Solaris 11.2 中管理 Kerberos 和其他验证服务 中的第 2  章 关于 Kerberos 服务
DH 验证

DH 验证使用数据加密标准 (Data Encryption Standard, DES) 和 Diffie-Hellman 公钥密码学来验证网络中的用户和计算机。DES 是标准加密机制。Diffie-Hellman 公钥密码学是包含两个密钥的密码系统:一个公钥和一个私钥。公钥和私钥存储在名称空间中。NIS 将密钥存储在公钥映射中。这些映射包含所有潜在用户的公钥和私钥。有关如何设置映射的更多信息,请参见使用 Oracle Solaris 11.2 目录和命名服务:DNS 和 NIS

DH 验证的安全性依赖于发件人加密当前时间的能力,随后收件人可以对该时间进行解密,并对照自己的时钟进行检查。时间戳是使用 DES 进行加密的。两个代理必须就当前时间达成一致,并且发件人和收件人必须使用相同的加密密钥。

如果网络运行时间同步程序,则系统将自动同步客户机和服务器上的时间。如果时间同步程序不可用,则可以使用服务器的时间(而不是网络时间)来计算时间戳。客户机在启动 RPC 会话之前会向服务器询问时间,然后计算自己的时钟与服务器时钟之间的时间差。此差异用于在计算时间戳时补偿客户机的时钟。如果客户机与服务器的时钟未同步,则服务器将开始拒绝客户机的请求。客户机上的 DH 验证系统将与服务器重新进行同步。

客户机和服务器使用同一个加密密钥,具体方法是:生成一个随机的对话密钥(也称为会话密钥),并使用公钥密码学推导公用密钥。公用密钥是只有客户机和服务器才能推导的密钥。对话密钥用于加密和解密客户机的时间戳。公用密钥用于加密和解密对话密钥。

在 NFS 中使用安全 RPC

    如果计划使用安全 RPC,请注意以下几点:

  • 如果在没有系统管理员的情况下服务器发生崩溃(例如,在断电后),则存储在系统中的所有密钥都将被删除。所有进程都不能访问安全网络服务或挂载 NFS 文件系统。重新引导期间的重要进程通常以 root 身份运行。因此,如果已妥善存储了 root 用户的私钥,且没有人可以键入该私钥的解密口令,则这些进程可以正常工作。keylogin -r 允许 rootkeyserv 可读取的 /etc/.rootkey 中存储明文形式的私钥。

  • 某些系统以单用户模式引导,控制台上会显示 root 登录 shell,而不显示口令提示。在这类情况下,物理安全性是非常必要的。

  • 无盘计算机引导并不是绝对安全的。他人可以模拟引导服务器并引导不正当的内核,例如,在远程计算机上记录密钥。安全 NFS 系统仅在内核和密钥服务器都处于运行状态之后,才会提供保护。否则,无法验证引导服务器提供的回复。此限制可能会是一个严重的问题,不过,只有使用内核源代码的复杂攻击才能利用此限制。此外,犯罪行为会留下证据。如果轮询网络查找引导服务器,则会发现不正当引导服务器的位置。

  • 大多数 setuid 程序都归 root 所有。如果 root 的私钥存储在 /etc/.rootkey 中,则这些程序会正常工作。但是,如果用户拥有 setuid 程序,则 setuid 程序可能有时无法正常工作。例如,假设 setuid 程序归 dave 所有,并且在引导计算机之后 dave 未登录计算机。在这种情况下,该程序可能无法访问安全网络服务。

  • 如果使用 loginrlogintelnet 登录远程计算机并且使用 keylogin 获取访问权限,则可以访问您的帐户。您的密钥将传递给该计算机的密钥服务器,该服务器随后会存储您的密钥。只有在不信任远程计算机的情况下才考虑使用此过程。但是,如果存在疑问,请勿在远程计算机要求口令时登录远程计算机。请使用 NFS 环境来挂载与远程计算机共享的文件系统。此外,也可以使用 keylogout 从密钥服务器中删除私钥。

  • 如果使用 –o sec=dh 选项共享起始目录,则远程登录可能会有问题。如果未将 /etc/hosts.equiv~/.rhosts 文件设置为提示输入口令,将成功登录。但是,用户不能访问其起始目录,因为没有在本地进行验证。如果系统提示用户输入口令,则当该口令与网络口令匹配时,用户有权访问其起始目录。