I am LAZY bones? AN ancient AND boring SITE

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页了,哈哈。

最后修改时间: 2010年09月29日 20:22

本文章发表于: 2010年09月29日 20:22 | 所属分类:经验技巧. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

8 个评论 关于: “sudo的配置”

  1. Iven 在 2010年09月29日 21:21 说:回复

    这个最好不直接打开的,最好用 sudo visudo ……

    • bones7456 在 2010年09月30日 08:55 说:回复

      呃。。。为什么要再说一遍?

      • Iven 在 2010年09月30日 09:02 说:回复

        晕,没仔细看文的掩面……

  2. 淘宝国庆优惠券 在 2010年09月29日 22:47 说:回复

    新手,偶尔用sudo的掩面。。。

  3. MeaCulpa 在 2010年09月29日 23:10 说:回复

    从不用sudo,而且发现有些刚才始用linux的朋友有点滥用sudo,被Ubuntu逼的?

    • bones7456 在 2010年09月30日 08:56 说:回复

      如果只是自己一个人用来当desktop,当然无所谓,如果是几十个人用的一台服务器,就重要了。

  4. Dig 在 2010年09月30日 19:04 说:回复

    文中的例2,是不是所有用户都可以 kill www 的进程了?

  5. icyomik 在 2010年10月07日 14:54 说:回复

    啊,这个不错,Mark一下~肯定会用到的。

发表评论