您总是可以通过注销当前用户标识,然后以新的用户标识登录来切换到另一个用户标识。但是如果您只需要以另一个用户身份运行几个快捷的命令,那要怎么办呢? Linux 以 su(替代用户,substitute user)命令的形式向您提供了解决方案,该命令允许您暂时以另一个用户身份运行命令。这经常用于需要 root 访问权的任务。实际上,如果您使用终端程序(如 telnet)远程连接一个系统,那么许多 Linux 发行版本会阻止您以 root 用户身份登录。这是良好的安全性做法,我们建议您不要尝试绕开这种限制。相反,您应该以非特权用户身份登录,然后使用 su 命令成为 root。
那么,让我们假定您已经登录并正在使用终端窗口,而且您不是 root 用户,但需要以 root 用户身份运行一条命令。用于这种情形的两种最常见的 su 形式是:
su
su -
第一种形式(不带 - 符号)只是将您切换成 root,但没有更改包括路径在内的环境变量。第二种形式使用了 - 符号,如果您确实喜欢输入额外的字母,也可以输入为 -l 或者 -login。这允许读取替代用户的登录启动文件,从而设置诸如路径、环境和提示符之类的东西。清单 4 显示了这两种形式在 SuSE Linux 系统上的示例。在两个示例中,我们都使用了 pwd(打印工作目录,print working directory)命令来显示当前工作目录。请注意提示符是如何变化的。如果您希望理解关于如何定制您自己的提示符,或想了解是什么使提示符以现在的形式显示的更多信息,请查阅 developerWorks 上的“技巧:提示行魔术” 技巧文章。
清单 3. 切换到 root 用户
ian3@echidna:~ su
Password:
echidna:/home/ian3 #pwd
/home/ian3
ian3@echidna:~ su -
Password:
echidna:~ # pwd
/root
您会注意到必须提供口令以切换到 root 用户,这一点都不足为奇。您还可以使用 su 命令切换到其他非 root 用户。例如:
su - db2inst1
如果您已经是 root 用户,则无需提供口令,但如果您不是 root 用户,那么必须提供正确的口令。
如果您正在使用 bash shell(它是大多数 Linux 系统上的默认 shell),要返回前一个标识,只要按 Ctrl-d 或输入 exit 并按 Enter。
以另一个用户身份使用 GUI 应用程序
您可能注意到了,我们在 前一节 中讨论 su 命令时,只运行了在终端窗口中显示输出的命令。要能够运行 GUI 应用程序,您可能必须采取一些额外的步骤,具体步骤因 Linux 发行版本而异。 Linux 上的 GUI 应用程序使用 X Window 系统(X Window System),它旨在允许多个用户使用窗口化的应用程序通过网络访问计算机。
X 显示器是通过 hostname:displaynumber.screennumber 这种形式的名称知晓的。运行在工作站(如 PC)上的 Linux 通常只有一个带有单个屏幕的显示器。在这种情况下,displayname 可以(并且通常会)被省略,所以显示器称为 :0.0。我们假设您在阅读本文时是使用图形方式登录的,因此您的启动已经为您设置了 DISPLAY 环境变量。但是,当您使用 su 切换到不同用户时,不会设置这个变量。清单 4 展示了如何使用 echo 命令来显示 DISPLAY 环境变量,然后切换到另一个用户并尝试启动 xclock 应用程序,最初 DISPLAY 环境变量是空的,然后将其值设置为 :0.0。这是 SUSE SLES9 系统中的示例。在 Red Hat 系统上有所不同,后面我们将会提到。
清单 4. 尝试启动 xclock
ian@lyrebird:~ whoami
ian
ian@lyrebird:~ echo $DISPLAY
:0.0
ian@lyrebird:~ su -
Password:
lyrebird:~ # echo $DISPLAY
lyrebird:~ # xclock
Error: Can't open display:
lyrebird:~ # export DISPLAY=:0.0
lyrebird:~ # echo $DISPLAY
:0.0
lyrebird:~ # xclock
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Error: Can't open display: :0.0
lyrebird:~ # export XAUTHORITY=~ian/.Xauthority
lyrebird:~ # xclock
lyrebird:~ # ls -l ~ian/.Xauthority
-rw-------
1 ian users 206 Feb 18 16:20 /home/ian/.Xauthority
让我们研究一下这里发生的情况。在本例中,用户 ian 登录到系统,并且正如我们所期望的那样,其 DISPLAY 环境变量被设置为 :0.0。当 ian 切换成用户 root 时,不会去设置 DISPLAY 环境变量,并且因为 xclock 应用程序不能打开显示器,所以启动 xclock 的尝试失败了。
因此,替代用户 root 设置了 DISPLAY 环境变量,并将它导出,以便它可用于可能从该终端窗口启动的其他 shell。请注意,设置和导出环境变量时不使用 $ 前缀符号,但显示和用其他方法使用该值时则使用 $ 作为前缀。也要注意,如果 su 命令省略了 -(减号)符号,那么 DISPLAY 环境就已经如用户 ian 那样被设置。可是,即使设置了环境变量,但 xclock 启动还是失败了。
第二次失败的原因在于 X 的客户机/服务器本质。尽管 root 运行在该系统惟一一个显示器上的窗口中,但该显示器实际上由最初登录的用户(在本例中是 ian)所拥有。对于 Linux 系统中的本地显示器,认证通常是依赖于所谓的 MIT-MAGIC-COOKIE-1,每次 X 服务器重新启动时它都会重新生成。用户可以从他的(或她的)目录中的 .Xauthority 将 magic cookie 导出 (使用 xauth extract 命令),并把它提供给另一个用户,那个用户可以使用 xauth merge 将其 融合 到自己的 .Xauthority 文件。作为另一种选择,用户可以通过 xhost +local: 命令来授权其他用户对本地系统的访问。
有另一个可选方法,即将 XAUTHORITY 环境变量设置为包含正确 MIT-MAGIC-COOKIE-1 的文件的位置。当切换到 root 时,这样做很容易,因为 root 可以读取其他用户所拥有的文件。实际上,在清单 4 中我们就是这样做的,所以,在设置并将 XAUTHORITY 导出到 ~ian/.Xauthority 文件后,root 现在就可以在桌面上打开图形窗口。我们说过将会提及 Red Hat 系统的不同之处,那就是在 Red Hat 系统上使用 su 切换到 root 与 SUSE 系统稍有不同,它会为您自动完成显示器的设置。
那么,如果是切换到另一个非 root 用户时会怎样呢?在清单 4 中,您会注意到,用户 ian 的 .Xauthority 文件只允许所有者进行读写访问。甚至是同组的成员也不能读取它,这正是您所希望的,除非您乐意让某人打开一个接管您的屏幕并禁止您做任务事情的应用程序! 所以,如果您从 .Xauthority 文件中导出了一个 MIT-MAGIC-COOKIE-1,那么必须要找到某个安全的方式来将它交给您信任的非 root 用户。由于这方面的困难,您可能会发现,对单用户的 Linux 系统来说,xhost 更好用,尽管 xauth 方法通常比 xhost 命令用得更多。不过,要谨记 X Windows 系统的网络传统,以便您不会偶然地授予他人不在计划之内的权限,从而开放您的系统,让任意网络用户都可以在您的桌面上打开窗口。
用户 ian 可以使用 xhost 来赋与所有本地用户在显示器(:0.0)上打开应用程序的权限。在您的桌面上打开另一个终端窗口并输入这条命令:
xhost +local:
请注意末尾的冒号(:)。这样将允许同一系统上的其他用户连接到 X 服务器并打开窗口。由于您使用的是一个单用户系统,这就意味着您可以 su 到一个任意的非 root 用户,而且现在可以启动 xclock 或其他 X 应用程序了。
有关使用 xauth 和 xhost 命令的更多详细信息,可以根据需要使用命令 info xauth、man xauth、 info xhost 或者 man xhost 来查看联机手册页。如果您对 X 连接的安全性感兴趣,可以从 Xsecure 的手册页入手。
挂载 DVD 或者 CD-ROM
在 Linux 和 UNIX? 系统上,所有文件都作为一棵大型树的一部分来访问,该树的根是 /。要访问 CD-ROM 上的文件,必须将 CD-ROM 设备挂载在文件树的某个挂载点上。如果您的发行版本安装了 automount 软件包,那么可能会自动为您完成这个步骤。如果是这样,您只需要插入光盘,它就会被自动识别并完成挂载。无论如何,您的安装过程都有可能为您做一些工作,使 DVD 或 CD-ROM 设备易于挂装。
这些步骤中的示例适用于 Red Hat Enterprise Linux 3(RHEL3)系统。您会注意到,根据您的光学设备(CD 或 DVD、IDE、SCSI 或 USB,等等)的类型和位置,会有一些区别。 Red Hat 和 SUSE 实现之间也有一些区别,所以您应该把这些信息作为帮助您找到自己系统的正确设置的向导。具体来说,在 RHEL3 上大部分可移动设置挂载在 /mnt 树中,而在 SLES 9 上它们则挂载在 /media 树中。
Linux 系统的很多设置都存储在 /etc 目录中。在这些设置中有一个文件,其中包含有一张文件系统描述信息表。cat 是拷贝和改写文件的命令。如果没有给定输出文件,则直接输出到标准输出,这个标准输出通常是您的终端窗口。在终端窗口中使用 cat /etc/fstab 命令,以显示 etc/fstab 并查看安装过程认为您的 CD 或者 DVD 应该挂载到哪里。您会看到类似于清单 5 的几行。清单 5 中输出的最后两行表明,这个系统有两个 CD 或者 DVD 设备(/dev/cdrom1 和 /dev/cdrom),它们将被挂载在 /mnt/cdrom1 或 /mnt/cdrom,除非 mount 命令指定了其他位置。
清单 5. /etc/fstab 的内容
[root@lyrebird root]# cat /etc/fstab
LABEL=RHEL3
/
ext3
defaults
1 1
none
/dev/pts
devpts
gid=5,mode=620
0 0
LABEL=GRUBFILE
/grubfile
ex