网络透明性是 Unix 系统的一个核心特性。X,Unix 操作系统的窗口系统,可以以一种令人印象深刻的方式使用这个特性。使用 X,登录到远程主机并启动一个图形程序,然后通过网络将其发送到您的计算机上显示,这都不是问题。
当一个 X 客户端需要使用 X 服务器进行远程显示时,后者应该保护其管理资源(显示)免受未经授权的访问。更具体地说,必须向客户端程序授予某些权限。使用 X Window 系统,有两种方法可以做到这一点,称为基于主机的访问控制和基于 cookie 的访问控制。前者依赖于客户端应该运行的主机的 IP 地址。用于控制此程序的命令是 xhost。 xhost 将合法客户端的 IP 地址输入到属于 X 服务器的数据库中。但是,依赖 IP 地址进行身份验证是不安全的。例如,如果第二个用户在发送客户端程序的主机上工作,该用户也将能够访问 X 服务器——就像伪造了 IP 地址一样。由于这些缺点,此身份验证方法在此不再详细描述,但您可以通过 man xhost 了解更多信息。
对于基于 cookie 的访问控制,将生成一个只有 X 服务器和合法用户知道的字符字符串,就像一张身份证。此 cookie 在登录时存储在用户主目录中的文件 .Xauthority 中,并可供任何想要使用 X 服务器显示窗口的 X 客户端使用。用户可以使用工具 xauth 检查文件 .Xauthority。如果您重命名 .Xauthority,或者如果您意外从主目录中删除了该文件,您将无法打开任何新窗口或 X 客户端。
SSH(安全外壳)可用于加密网络连接并将其透明地转发到 X 服务器。这也被称为 X 转发。X 转发是通过在服务器端模拟 X 服务器并在远程主机的 shell 中设置 DISPLAY 变量来实现的。有关 SSH 的更多详细信息,请参阅 第 22 章,使用 OpenSSH 保护网络操作。
如果您认为您登录的计算机不是一个安全的宿主,请不要使用 X 转发。如果启用了 X 转发,攻击者可以通过您的 SSH 连接进行身份验证。然后,攻击者可以入侵您的 X 服务器,例如读取您的键盘输入。