<< Back to man.ChinaUnix.net

Enghish Version

MandrakeUser.Org - Your Mandrake-Linux Knowledge Base!

* DocIndex - Basics

'root' 身份 第二篇

* 用 'su' 变成 'root'
* 使用图形工具 'kdesu'
* 更为方便的 'sudo'

相关资源:

man su
kdesu -h
man sudoers
man sudo

Article on sudo

Revision / Modified: Feb. 11, 2002
Author: Tom Berger
Translator: Wu XiaoGuang

* 用 'su' 变成 'root'

要进行系统管理,您不必重新登入,只需在 shell 提示符后键入:

su

然后提供密码。这样您就能够以 'root' 身份运行程序,甚至图形工具。要返回普通帐号的话,按 <CTRL d>

为避免在虚拟终端下反复用 'su' ,您可以运行一次 'su' 后,专门保留这个终端用以执行 'root' 任务。
当然,前提是当前没有其他人可以跑过来操作您的计算机。而且,当您在上网时,建议您还是关闭该终端,或退出 'root' 帐号。

有一点要特别注意:普通用户和 root 的 $PATH 设定的区别:

  • 普通用户:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/user/bin:
  • root :/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin

因此,如果要运行 '/usr/local/bin' 中的一个程序,'root' 必须给出完整路径,否则 shell 会返回 'not found' 。'sbin' 目录中的程序对普通用户来说,也是如此。

如果想保留环境变量,如 $PATH ,那可以用

su -p

于是,root 的 $PATH 就和使用 su 的普通用户一样了。请注意,这个命令使得用户的 home 目录变成了 root 的 home 目录(由于 $HOME 被保留了)
这种办法的缺点是,包含系统管理命令的目录,如 '/sbin'、'/usr/sbin',就不再属于 root 的 $PATH 了。现在如果想运行这些命令,就不得不给出完整路径 或者 调整 $PATH 的设定

'su' 另外一个较常用的可选项时 '-c' :

su -c "command"

也就是以 'root' 身份执行 command ,然后再自动返回到普通帐号。但这有个毛病,就是 su -c 后无法应用命令行的自动补齐,所以如果您要安装 RPM 包,那最好先输入 rpm -i rpm<TAB> ,然后再将 su -c 添到前面,不要忘了给执行的命令加上引号。
另一个缺憾是这样您无法运行图形程序。

将下面这行添加到 '/etc/inputrc' ,以后可以省些力气:

\C-xs": "\C-e\"\C-asu -c \"

下次对话,您就在给定的命令上敲 <CTRL x> ,就可以自动转成 su -c "command"

* section index * top

* 使用图形工具 'kdesu'

在普通用户的 KDE 桌面下,可以通过 'kdesu' ,以 'root'身份运行程序。'kdesu' 的语法有点类似于 'su':

kdesu -c "command"

将弹出一个小窗口,询问 'root' 的密码,然后就以 'root' 执行程序。

您可以通过图形登录窗口,以 'root' 身份运行任何程序,只要在命令菜单中新建相应的条目,并用 'kdesu -c ""' 括起来。

请注意,只要安装了 'kdebase' 包,在其他桌面及窗口管理器中,也可以运行 'kdesu'。我还没发现哪种 Mandrake Linux 中未安装 kdebase ,可能有些 KDE hater 能帮我找到答案 ;-) 。

* section index * top

* 更为方便的 'sudo'

'sudo' 是一种很成熟而且容易使用的工具,使得普通用户能够以 root 身份执行一些任务,甚至可以经由网络。通过与 '/etc/syslog.conf' 及内部邮件系统的连接,'sudo' 还支持多种登录方式。

您可以从 'sudo's home page 获得源码 ,也可以直接从 Mandrake Linux CD 来安装。对于“控制狂”(control freaks)和网络管理员,应该从源码开始安装,这样在编译时,就可以应用许多可选项;但对于其他人(包括我 :)),RPM 足已。

'sudo' 的配置文件是 '/etc/sudoers' ,您可以用命令 visudo (man visudo) 来设置。如果还不熟悉 'vi' 编辑器,这儿就有几个最基本的命令:

  • <i> 进入可写模式('insert' mode)
  • <ESC> <Z> <Z> 退出并存盘;
  • <ESC> <:> <q> <!> 退出但不存盘。

适当设定系统参数 $EDITOR 后(比如 export EDITOR=/usr/bin/emacs,您也可以使用其他编辑器。

man sudoers 是主要的文档,内容非常详尽,但大多数情况下,阅读 EXAMPLES 章节就够了。
下面是针对单用户机器的一个简单 '/etc/sudoers' 例子:


          # Host alias specification
          # User alias specification
          # Cmnd alias specification
          Cmnd_Alias RPM = /bin/rpm
          Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
          # User privilege specification
          root ALL = (ALL) ALL
          jim ALL = NOPASSWD: RPM, SHUTDOWN
        

开头的三个 aliases 用来定义内部变量,以后会用到。

第一个 'ALL' 指网络中的所有机器,这些机器可以通过 Host_Alias 来定义。但由于这儿只有一台机器,所以也就无所谓了。
这个 sudoers 文件允许用户 'jim' 安装或卸载 RPM 及 tarballs ,并可以关机。语法是:

sudo command (比如, sudo rpm -i blah.rpm,注意没有 引号!)

'NOPASSWD' 的意思是:'jim' 不需要给出密码。由于默认下,'sudo' 会在执行命令前,要求提供帐号密码,所以这条可选项得明确写出。但是,当您应用这个可选项时,必须确保其他人无法访问您的机器。您也可以用可选项 passwd_timeout min ,来设定密码在内存中的保存时间。还有一个有趣的可选项 insults (取笑),哪位给错了密码,就会收到这样的待遇 ;-) 。
如果您在一个不十分可靠的环境中,那就得好好考虑这些涉及安全的可选项。

要列出当前用户的 sudo 权利,可以用 sudo -l

用户 jim 在机器中运行该命令后,得到:
(root) NOPASSWD: /bin/rpm
(root) NOPASSWD: /usr/sbin/shutdown

这样在不至于对安全造成较大危害的前提下,就可以进行两种常规的系统管理。

* section index * top


Legal: All texts on this site are covered by the GNU Free Documentation License.
Standard disclaimers of warranty apply.