管理员作为特权用户,很容易误操作造成不必要的损失。再者,都由 root 管理也怪累的,管理员也是人,也需要留点时间去约约会、看看电影、装装傻、发发呆,不是吗?所以健康的管理方法是在 Linux 服务架构好后,可授权普通用户协助完成日常管理。
现在较为流行的工具是 sudo,几乎所有 Linux 都已默认安装。还要注意一点,我们在前面介绍的所有权限,比如普通权限、默认权限、ACL权限、特殊权限、文件系统属性权限等操作的对象都是文件和目录,但是 sudo 的操作对象是系统命令,也就是 root 把本来只能由超级用户执行的命令赋予普通用户执行。
sudo 使用简单,管理员 root 使用 visudo 命令即可编辑其配置文件 /etc/sudoers 进行授权。命令如下:
[root@localhost ~]# visudo
…省略部分输出…
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
#这两行是系统为我们提供的模板,我们参照它写自己的就可以了
…省略部分输出…
解释一下文件的格式。
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
4 个参数的具体含义如下:
用户名/组名:代表 root 给哪个用户或用户组赋予命令,注意组名加"%"。
用户可以用指定的命令管理指定 IP 地址的服务器。如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,则不代表只允许本机的用户使用指定命令,而代表指定的用户可以从任何 IP 地址来管理当前服务器。
可使用的身份:就是把来源用户切换成什么身份使用,(ALL) 代表可以切换成任意身份。这个字段可以省略。
授权命令:代表 root 把什么命令授权给普通用户。默认是 ALL,代表任何命令,这当然不行,如果需要给哪个命令授权,则只需写入命令名即可。不过需要注意,一定要写绝对路径。
【例 1】
授权用户 lamp 可以重启服务器,由 root 用户添加,如下行:
[root@localhost ~】# visudo
lamp ALL=/sbin/shutdown -r now
指定组名用百分号标记,如 %admgroup,多个授权命令之间用逗号分隔。用户 lamp 可以使用 sudo -l 查看授权的命令列表。
[root@localhost ~]# su - lamp
#切换成lamp用户
[lamp@localhost ~]$ sudo -l
[sudo] password for lamp:
#需要输入lamp用户的密码
User lamp may run the following commands on this host:
(root) /sbin/shutdown -r now
#可以看到lamp用户拥有了 shutdown -r now的权限
提示输入密码为 lamp 普用户的密码,是为了验证操作服务器的用户是不是 lamp 用户本人。lamp 用户需要执行时,只需使用如下命令:
[lamp@localhost ~]$ sudo /sbin/shutdown -r now
lamp 用户即可以重启服务器。注意,命令写绝对路径,或者把 /sbin 路径导入普通用户 PATH 路径中,否则无法执行。
【例 2】
授权一个用户管理你的 Web 服务器。先来分析一下授权用户管理 Apache 至少要实现哪些基本授权:
可以使用Apache管理脚本。
可以修改Apache配置文件。
可以更新网页内容。
![](/qrcode.jpg)
假设 Apache 管理脚本程序为 /etc/rc.d/init.d/httpd。为满足第一个条件,用 visudo 命令进行授权。
[root@localhost ~]# visudo
lamp 192.168.0.156=/etc/rc.d/init.d/httpd reload,
/etc/rc.d/init.d/httpd configtest
授权用户 lamp 可以连接 192.168.0.156 上的 Apache 服务器,通过 Apache 管理脚本重新读取配置文件让更改的设置生效(reload)和可以检测 Apache 配置文件的语法错误(configtest),但不允许其执行关闭(stop)、 重启(restart)等操作命令(""的意思是一行没有完成,下面的内容和上一行是同一行)。
为满足第二个条件,同样使用 visudo 命令进行授权。
[root@localhost ~]# visudo
lamp 192.168.0.156=/bin/vi /etc/httpd/conf/httpd.conf
授权用户lamp可以用root身份使用vi编辑Apache配置文件。
以上两种 sudo 的设置要特别注意,很多人使用 sudo 会犯两类错误:
第一,授权命令没有细化到选项和参数;
第二,认为只能授权管理员执行的命令;
第三个条件则比较简单,假设网页存放目录为 /var/www/html,则只需授权 lamp 用户对此目录具有写权限或者索性更改目录所有者为 lamp 即可。如果需要,则还可以设置 lamp 用户可以通过 FTP 等文件共享服务更新网页。
至此,本章内容就结束了,我们介绍了 Linux 系统中所有的常见权限。最后请切记系统安全的基本原则:赋予用户最小的权限。蜘蛛侠说"能力越大责任越大";Linux 管理员说"能力越大出错概率越大"!