在Unix系统中,管理员往往不只是一个人,若每位管理员都用root身份进行管理工作,根本无法弄清楚谁该做什么。所以最好的方式是:管理员当系统的root,然后创建一些普通用户,分配一部分系统管理工作给他们。
我们不可以使用su让他们直接变成root,因为这些用户都必须知道root的密码,这种方法很不安全,而且也不符合我们的分工需求。一般的做法是利用权限的设置,依工作性质分类,让特殊身份的用户成为同一工作组,并设置工作组权限。例如:要wwwadm这位用户负责管理网站数据,一般Apache Web Server的进程httpd的所有者是www,您可以设置用户wwwadm与www为同一工作组,并设置Apache默认存放网页目录/usr/local/httpd/htdocs的工作组权限为可读、可写、可执行,这样属于此工作组的每位用户就都可以进行网页的管理了。
但这并不是最好的解决办法,例如管理员想授予一个普通用户关机的权限,这时使用上述的办法就不是很理想。这时您也许会想,我只让这个用户以root身份执行shutdown命令就行了。完全正确!可惜在通常的Unix系统中无法实现这一功能,不过已经有了工具可以实现这样的功能—sudo。
sudo通过维护一个特权到用户名映射的数据库将特权分配给不同的用户,这些特权可由数据库中所列的一些不同的命令来识别。为了获得某一特权项,有资格的用户只需简单地在命令行输入sudo与命令名之后按照提示再次输入口令(用户自己的口令,不是root用户口令)。例如,sudo允许普通用户格式化磁盘,但是却没有赋予其他的root用户特权。
sudo是一个免费软件,我们可以从网址:http://www.courtesan.com/sudo/下载它的最新版本,也可以获得关于sudo的很多有用的文档资料,在笔者撰写本文时它的最新版本为sudo-1.6.6.tar.gz,执行如下步骤进行安装:
# gzip -d sudo-1.6.6.tar.gz(解压缩)
# tar xvf sudo-1.6.6.tar(解包)
# cd sudo-1.6.6
# ./configure