下一页 上一页 目录

9. 设置 X 终端

利用你的旧电脑!把它变成一个额外的工作场所!无需购买昂贵的新硬件!你已经拥有所需的一切!

认真地说,你可以将一台旧电脑设置为 X 终端。X 终端基本上是一台只运行 X 服务器的计算机。你可以在其上登录,并获得一个 X 会话,其中包含 xterms、xbiff、xclock 以及所有其他可以想象的 X 客户端。然而,所有客户端都在远程主机上运行,并使用远程 X 在你的本地 X 终端上显示它们的输出。甚至窗口管理器也在远程运行。

与功能齐全的 Unix 机器相比,X 终端占用的资源非常少。我这里有一个 X 终端,配备 486 CPU、16M 内存和 250M 磁盘空间。哦,当然还有网络连接。它甚至没有用户主目录。

如需相关阅读材料,请查看

与上述文档相比,本文档(远程 X 应用程序迷你教程)将自身限制为对 XDMCP 的简短描述,但更侧重于所涉及的安全问题。

9.1 再谈一点理论基础

就 X 而言,X 终端将只运行 X 服务器。此 X 服务器将被配置为使用 XDMCP(X 显示管理器控制协议)与远程主机通信。它将向远程主机请求一个 X 会话。远程主机将在 X 终端上弹出一个登录窗口,登录后,它将运行一个功能齐全的 X 会话,包括窗口管理器,所有这些都使用远程 X 在 X 终端上显示。

你可能会注意到,远程主机的作用类似于服务器,但不是 X 服务器。远程主机正在向请求 X 会话的 X 服务器提供 X 会话。因此,对于 XDMCP 而言,远程主机实际上是一个服务器,提供 X 会话,也称为 XDMCP 服务器。X 服务器扮演着 XDMCP 客户端的角色!你还跟得上吗?

在 XDMCP 服务器上提供 XDMCP 服务的程序是 xdm。因此,为了启动并运行 X 终端,你必须配置两个程序:X 终端上的 X(XDMCP 客户端)和远程主机上的 xdm(XDMCP 服务器)。

你必须始终记住,X 协议(和 XDMCP 协议)未加密。如果你使用远程 X,则网络上其他主机可以嗅探到网络传输的所有内容。这对于远程 X 会话尤其糟糕,因为首先发生的事情是通过提供用户名和密码登录。因此,你必须仅在受信任的网络上运行远程 X!

9.2 配置 X 作为 XDMCP 客户端

如果你想将一台 Linux 机器设置为 X 终端,你只需要很少的资源。基本上,你需要让一台最简化的 Linux 机器运行起来所需的东西,再加上一个 X 服务器。具体来说,你需要 X 客户端和库。安装一些 X 字体可能很有用,但你也可以使用网络上某处的字体服务器。

X 服务器可以通过几种方式从 XDMCP 服务器获取 X 会话。最简单的方法是直接连接到已知的 XDMCP 服务器并请求一个会话。或者,X 服务器可以广播对 XDMCP 服务的请求,并使用第一个响应的 XDMCP 服务器。最后,X 服务器可以连接到 XDMCP 服务器,向其请求愿意提供会话的主机列表,并让用户选择会话主机。

  1. 当你知道将要为你提供会话的主机时,直接连接到它。运行
    X -query sessionhost
    
    并且,假设 xdmsessionhost 上运行,你将获得一个登录窗口,登录后,将获得一个 X 会话。
  2. 当你不太关心在哪个主机上获得会话时,请使用广播方法。运行
    X -broadcast
    
    并且,假设 xdm 在网络上的某处运行,你将从第一个(并且希望是最快的)响应的 xdm 获得一个登录窗口,登录后,将获得一个 X 会话。
  3. 当你想选择要在哪个主机上拥有会话时,请向 XDMCP 服务器请求一个列表。运行
    X -indirect xdmcpserver
    
    并且,假设 xdm 在那里配置正确,你将看到一个主机列表供你选择。选择一个;你将获得该主机的登录窗口,登录后,将获得你想要的会话。

你可能已经注意到缺少 -auth 选项。X 服务器将使用 XDMCP 与 XDMCP 服务器协商一个魔术 cookie。XDMCP 服务器将在你登录后将 cookie 放入你的远程 ~/.Xauthority 中。

会话结束后,X 服务器将循环并返回到原始 XDMCP 服务器并请求另一个会话(或选择器列表)。如果你不希望这样,可以使用 -once 选项。注意:由于选择器的实现,这似乎不适用于 -indirect 选项。

当你确定了运行 X 服务器的方式后,你也可以将其放入启动脚本中,甚至直接从 /etc/inittab 运行它。请查阅你自己的发行版的文档,了解如何修改你的启动脚本或 /etc/inittab

不要Xservers 配置文件中像这样运行 X 服务器。xdm 希望能够连接到此类服务器,如果无法连接,可能会终止它们。

9.3 配置 xdm 作为 XDMCP 服务器

提供 XDMCP 服务(会话服务)的程序通常是 xdm。Linux 上有 wdmgdm 等变体,但它们基本上以相同的方式工作。因此,请确保在你想要运行 X 会话的主机上安装了 xdm 或其变体。如果 X 会话主机上有本地图形登录,则 xdm 已安装;现在大多数 Linux 发行版都是这样。

除了 xdm 之外,你还需要希望能够在 X 会话中运行的程序。也就是说,所有 X 客户端,如 xtermxfigxclock、窗口管理器等等。但是,对于 XDMCP 服务器,你必安装 X 服务器;X 服务器将在 X 终端上运行。

从上面的 X 服务器说明中,你可以得出结论,XDMCP 服务基本上有两种类型。一种是直接服务,包括让 XDMCP 客户端登录,然后为其提供 X 会话。另一种是间接服务,其中向 XDMCP 客户端提供一个主机列表(这些主机提供直接服务),供其选择。

所有 xdm 服务都在访问文件中配置,通常位于 /etc/X11/xdm/Xaccess 或类似位置。此位置实际上在通用 xdm 配置文件 /etc/X11/xdm/xdm-config 中通过 accessFile 资源定义。有关默认位置,请参阅你的 xdm 手册。

  1. 如果你想允许 xdm 为连接的 XDMCP 客户端提供 X 会话,无论是否通过广播,你都需要将 XDMCP 客户端(记住,是 X 服务器?)的主机名单独放在 Xaccess 文件中的一行上。实际上,你可以在行中放置一个匹配多个主机的模式。以下是一些有效的模式

    xterm023.my.domain      # xterm023.my.domain can get an X session
    *.my.domain             # any host in my.domain can get an X session
    *                       # any host on Internet can get an X session (unsafe)
    

    你是否应该希望为互联网上的任何主机提供 X 会话是值得商榷的。显然,你提供的任何服务都会给你的服务器安全增加一个可能的漏洞。另一方面,服务器本身应该是安全的,并且请求 X 会话的 XDMCP 客户端必须在授予 X 会话之前提供有效的身份验证。

    此外,X 会话使用未加密的远程 X 连接。用于登录的用户名/密码对将在此连接上传输。外界的人可能会像使用普通 telnet 连接一样嗅探有效的用户名/密码组合。这甚至比嗅探 xauth 魔术 cookie 更糟糕。

    在此处做出你自己的决定,但我建议不要向全世界启用此服务,除非你有充分的理由。

  2. 如果你想为 XDMCP 客户端(X -indirect xdmcpserver)提供选择器列表(一个主机列表,从中选择一个主机以获得 X 会话),请在客户端模式后跟关键字 CHOOSER 和该客户端可以选择的主机列表。除了要选择的主机列表之外,你还可以指定 BROADCAST;使用此选项,xdm 会在网络上广播以查询愿意提供会话的服务器。以下是一些有效示例

    xterm023.my.domain      CHOOSER seshost1 seshost2
    *.my.domain             CHOOSER BROADCAST
    *                       CHOOSER extseshost1 extseshost2
    
    第一个示例允许 xterm023seshost1seshost2 上的会话之间进行选择。第二个示例允许 my.domain 中的任何主机从任何愿意提供 X 会话的主机中进行选择。第三个示例允许外界的任何主机在 extseshost1etsseshost2 上的会话之间进行选择。

    执行 * CHOOSER BROADCAST 可能不是一个好主意。这将允许你网络外部的主机获取有关你网络内部主机的信息。你可能不想泄露此类信息。事实上,允许任何外部主机使用选择器可能无论如何都没有用,因为你也不应该启用任意的直接连接。

当你重新配置 xdm 后,向其发送 HUP 信号,使其重新读取其配置文件。

# kill -HUP pid-of-xdm
#

9.4 XDMCP 技术细节

从技术上讲,据我所知,XDMCP 并不完全是你从上述描述中期望的那样。xdm 可以将连接的 X 服务器重定向到另一个位置,并使用此技巧来实现选择器。因此,选择发生在 xdm 内部,而不是在 X 服务器中,尽管选择器列表显示在 X 服务器的显示器上。这也是 X 服务器的 -once 选项不与 -indirect 结合使用的原因。


下一页 上一页 目录