sudo的配置
大家都知道,root权限是linux系统中的最高权限,有了root权限,就可以对系统做任何操作。
但是,很多情况下,这样一个笼统的root权限并不能很好地满足需求,比如,有时候想让系统的某几个用户有装包的权限(就是执行apt-get或者yum什么的),但是不能随便更改其他系统配置;又比如,想让某个用户有杀死指定另外一个用户的进程的权限(比如www用户什么的),但是也不能随便杀其他用户的进程。
这样一来,便有了细化这个“最高权限”的需求了。于是,权限管理的一大利器——sudo——便应运而生了。
可能是由于sudo的需求本来就比较复杂,看我上面说的例子,用口语表达都比较拗口;也可能是有sudo需要的安全级别比一般的程序要高一些。导致sudo的配置,看上去有点凌乱和摸不着北,所以这里稍微解释一下。
首先,sudo的配置文件是 /etc/sudoers,虽然你也可以手工打开、编辑、保存。但还是建议使用visudo命令来编辑。这是因为:
- 它能够防止多个用户同时修改它
- 它能进行有限的语法检查
- 它能避免因权限位出错而不被sudo认可
然后,打开配置文件以后可以看到有这几部分:
- Host_Alias、User_Alias和Cmnd_Alias,分别是主机、用户和命令的别名。
- Defaults一些默认的特性,比如默认要不要重设环境变量,重设哪几个环境变量,默认以谁的身份执行等等。
- 后面就是重头戏了,类似这样的一行:
root ALL=(ALL) ALL
其实这行是 user machine=(users) commands 这样的格式,也就是,允许在machine登录的 user 用户以users的身份来执行commands命令。这里的machine、users呵呵commands就可以用Host_Alias、User_Alias和Cmnd_Alias来代替了。 %group ALL=(ALL) ALL
和上面的一样,只不过这个按组来限制权限。
还是用例子来说话吧,接着上面的两个例子。
例1. 让系统的某几个用户有装包的权限(就是执行apt-get或者yum什么的),但是不能随便更改其他系统配置。
做法就是将这几个用户加入某个特殊的组里(当然,如果你愿意也可以一个个用户分别设置,哈),比如建了yumer组,把用户都加进去了,然后sudo的配置加上:
%yumer ALL=/usr/bin/yum
例2. 让某个用户(dev)有杀死指定另外一个用户的进程的权限(比如www用户什么的),但是也不能随便杀其他用户的进程。
配置如下:
## Processes
Cmnd_Alias PROCESSES = /bin/kill, /usr/bin/kill, /usr/bin/killall, /usr/bin/pkill
Defaults:dev runas_default=www
dev ALL=(www) PROCESSES
先把几个命令alias成一个 PROCESSES,然后指定dev用户,有以www用户的名义执行PROCESSES里的程序的权限。
本来,dev用户必须使用 sudo -u www kill 1111 来杀死www用户的1111号进程的,但是加个-u显然麻烦,所以有了一行: Defaults:dev runas_default=www
这行的意思,是让sudo知道,只要是dev用户执行的,默认就是www的身份,而不是一般的root身份。
这里只是通过两个简单的例子介绍了sudo最常用的功能,其实sudo还有很多其他的有趣功能。比如,sudo还可以实时将非法操作检测出来,以多种方式记录到日志里,不只是本地日志,还可以通过http等方式传到别的机器等。更多功能,当然得参见man页了,哈哈。
Iven 在 2010年09月29日 21:21 说:【 】
这个最好不直接打开的,最好用 sudo visudo ……
bones7456 在 2010年09月30日 08:55 说:【 】
呃。。。为什么要再说一遍?
Iven 在 2010年09月30日 09:02 说:【 】
晕,没仔细看文的掩面……
淘宝国庆优惠券 在 2010年09月29日 22:47 说:【 】
新手,偶尔用sudo的掩面。。。
MeaCulpa 在 2010年09月29日 23:10 说:【 】
从不用sudo,而且发现有些刚才始用linux的朋友有点滥用sudo,被Ubuntu逼的?
bones7456 在 2010年09月30日 08:56 说:【 】
如果只是自己一个人用来当desktop,当然无所谓,如果是几十个人用的一台服务器,就重要了。
Dig 在 2010年09月30日 19:04 说:【 】
文中的例2,是不是所有用户都可以 kill www 的进程了?
icyomik 在 2010年10月07日 14:54 说:【 】
啊,这个不错,Mark一下~肯定会用到的。