首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 新用户的基本任务(5)

Linux 新用户的基本任务(5)

作为另一个用户使用一个 GUI 应用程序您可能已经注意到,在  对 su 命令的讨论中,我们只运行了在终端窗口中显示了输出的命令。通常,您也可以运行 GUI 命令。例如,有些安装程序需要有根权限才能安装一个程序和拥有一个 GUI 安装程序。如果您发现自己不能作为另一个用户启动 GUI 应用程序,那么请继续阅读,因为在有些发行版上,要作为另一个用户运行 GUI 应用程序,可能必须额外采取一些步骤。
注意: 最新的发行版通常允许同时打开多个桌面,使用一个键序列(比如 Ctrl-Alt-F7 或 Ctrl-Alt-F8)在桌面之间切换。根据您需要执行的操作,这可能是另一个替代方法。请参阅 注销 小节了解这个菜单选项的更多信息。
Linux 上的 GUI 应用程序使用 X Window System,这是一个客户机-服务器系统,旨在允许多个用户使用一些窗口化的应用程序跨一个网络访问一台计算机。X 显示的名称采用以下形式:hostname:displaynumber.screennumber。对于在一台 PC 这样的工作站上运行的 Linux,通常只有一个包含一个屏幕的显示。在本例中,displayname 可能(且通常)被省略,因此显示名为 :0.0,或者,有时只是 :0。
X Window System 服务器需要知道显示,还要知道您是否有权连接服务器。通常通过使用 MIT-MAGIC-COOKIE-1 进行授权,这是一个随机长字符串,每当服务器重置时都会重新生成。为了应用程序能将此信息传递到 X 服务器,需要在您的环境变量中设置 DISPLAY 和 XAUTHORITY 变量。作为一项安全预防措施,XAUTHORITY 变量指向一个通常只能由拥有用户读取或写入的文件。如果您正在读取此文件,我们假设您正在使用一个图形登录,以便您的启动文件已经为您设置了这些变量。清单 6 中的示例来自我们的 Ubuntu 系统,展示了 DISPLAY 和 XAUTHORITY 变量的值,以及 XAUTHORITY 变量指向的文件的所有权。
清单 6. DISPLAY 和 XAUTHORITY
1
2
3
4
5
6
ian@pinguino:~$ echo $DISPLAY
:0.0
ian@pinguino:~$ echo $XAUTHORITY
/var/run/gdm/auth-for-ian-WoeKHn/database
ian@pinguino:~$ ls -l $XAUTHORITY
-rw------- 1 ian ian 53 2011-04-01 16:24 /var/run/gdm/auth-for-ian-WoeKHn/database




现在,同样在我们的 Ubuntu 系统上,我们尝试作为用户 editor 使用 sudo 运行 xclock 命令。如 清单 7 所示,DISPLAY 和 XAUTHORITY 变量的值与用户 ian 的相同,但 xclock 命令失败。
清单 7. sudo 与 DISPLAY 和 XAUTHORITY
1
2
3
4
5
6
7
8
ian@pinguino:~$ sudo -u editor echo $DISPLAY
[sudo] password for ian:
:0.0
ian@pinguino:~$ sudo -u editor echo $XAUTHORITY
/var/run/gdm/auth-for-ian-WoeKHn/database
ian@pinguino:~$ sudo -u editor xclock
No protocol specified
Error: Can't open display: :0.0




在本例中,用户 editor 将 XAUTHORITY 变量设置为 /var/run/gdm/auth-for-ian-WoeKHn/database,但我们已经看到,该文件上的权限只允许用户 ian 读写它。如果用户 editor 不能读取它指向的文件,那么此变量也可能没有设置。在了解如何解决这个问题之前,我们先看看如果我们取消设置(unset)用户 ian 的 DISPLAY 或 XAUTHORITY 变量,会发生什么情况。为此,我们将运行 xclock 命令,在运行命令之前,使用 env 命令的 -u 选项取消设置一个环境变量,修改该环境变量。我们的结果如 清单 8 所示。
清单 8. 取消设置 DISPLAY 和 XAUTHORITY
1
2
3
ian@pinguino:~$ env -u DISPLAY xclock
Error: Can't open display:
ian@pinguino:~$ env -u XAUTHORITY xclock




您可能会感到吃惊:尽管我们取消设置了 XAUTHORITY 环境变量,xclock 命令仍然会运行。
此前,我们提到过 MIT-MAGIC-COOKIE-1 安全方法。如果这个令牌没有提供,X 服务器仍将检查一个未授权主机列表。使用 xhost 命令显示或更新该列表。使用 + 选项增加条目,- 选项移除条目。使用特殊的 family 条目 local:(注意 “:”)允许系统上的任何本地用户访问此显示。由于您使用一个单用户系统,这意味着可以 su 到一个任意非根用户,且现在可以启动 xclock 或其他 X 应用程序。清单 9 展示了 xhost 命令的用法。
清单 9. 使用 xhost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ian@pinguino:~$ xhost
access control enabled, only authorized clients can connect
SI:localuser:ian
ian@pinguino:~$ xhost +local:
non-network local connections being added to access control list
ian@pinguino:~$ xhost
access control enabled, only authorized clients can connect
LOCAL:
SI:localuser:ian
ian@pinguino:~$ sudo -u editor xclock
ian@pinguino:~$ # Close the xclock window to return here
ian@pinguino:~$ xhost -local:
non-network local connections being removed from access control list
ian@pinguino:~$ xhost
access control enabled, only authorized clients can connect
SI:localuser:ian




在单一用户系统上,允许所有本地用户使用这个显示通常是一种简单合理的解决方案。如果您需要进行更多限制,可以使用 xauth 从 XAUTHORITY 文件提取 cookie,将其给予需要访问这个显示的用户。清单 10 执行以下任务:
  • 作为用户 ian 使用 xauth,以一种特定格式显示 cookie,以便可以通过电子邮件或其他方式发送到其他指定用户。
  • 使用 sudo -s 并切换到用户 editor 以运行几个命令。
  • 使用 xauth 新建一个授权文件。注意,我们使用 echo 将数据管道传输到 stdin,同时使用一个后置反斜杠(\)将此命令分分割为几行。
  • 我们为 XAUTHORITY 变量导出一个新值,以便它指向新建的授权文件。
  • 最后,我们运行 xclock 命令,使用一个后置(&)以后台模式运行并保留对我们的终端窗口的控制权。
清单 10. 使用 xauth
1
2
3
4
5
6
7
8
9
10
11
12
ian@pinguino:~$ xauth -f $XAUTHORITY nextract - :0
0100 0008 70696e6775696e6f 0001 30 0012 4d49542d4d414749432d434f4f4b49452d31 0010 3c4bc87
c2ce4ce5e97f8199c213b4ec9
ian@pinguino:~$ sudo -s -u editor
editor@pinguino:~$ echo "0100 0008 70696e6775696e6f 0001 30 0012"\
> " 4d49542d4d414749432d434f4f4b49452d31"\
> " 0010 3c4bc87c2ce4ce5e97f8199c213b4ec9" |
> xauth -f ~editor/temp-xauth nmerge -
xauth:  creating new authority file /home/editor/temp-xauth
editor@pinguino:~$ export XAUTHORITY=~editor/temp-xauth
editor@pinguino:~$ xclock&
[1] 4827




通过这个简单的介绍,您应该了解如何作为另一个用户运行 X 应用程序。尽管我们以 Ubuntu 为例,但这里演示的基本原则适用于所有发行版。要详细了解如何使用 xauth 和 xhost 命令,可以使用以下命令查看在线手册页:
  • info xauth
  • man xauth
  • info xhost
  • man xhost
返回列表