Linux 下使用 sudo 进行赋权(3)

Defaults secure_path =/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

命令部分

命令部分是 sudoers 文件的主体。不使用别名并不会影响你完成要实现的效果,别名只是让整个配置工作大幅简化而已。

这部分使用之前定义的别名来告诉 sudo 哪些人可以在哪些机器上执行哪些操作。一旦你理解了这部分内容的语法,你会发现这些例子都非常的直观。 下面我们来看看它的语法。

ruser ALL=(ALL) ALL

意即 ruser 可以在任意主机上以任意用户身份运行任意命令

这是一条为用户 ruser 做出的配置。行中第一个 ALL 表示该条规则在所有主机上生效。 第二个 ALL 允许 ruser 以任意其他用户的身份运行命令。 默认情况下, 命令以 root 用户的身份运行, 但 ruser 可以在 sudo 命令行指定程序以其他用户的身份运行。 最后这个 ALL 表示 ruser 可以运行所有命令而不受限制。 这让 ruser 实际上就变成了 root。

注意到下面还有一条针对 root 的配置。这允许 root 能通过 sudo 在任何主机上运行任何命令。

root ALL=(ALL) ALL

意即 root 可以在任意主机上以任意用户身份运行任意命令

为了实验一下效果,我注释掉了这行, 然后以 root 的身份试着直接运行 chown。 出乎意料的是这样是能成功的。 然后我试了下 sudo chown,结果失败了,提示信息 “Root is not in the sudoers file。 This incident will be reported”。 也就是说 root 可以直接运行任何命令, 但当加上 sudo 时则不行。 这会阻止 root 像其他用户一样使用 sudo 命令来运行其他命令, 但是 root 有太多种方法可以绕过这个约束了。

下面这行是我新增来控制访问 myprog 的。它指定了只有上面定义的 AUDIO 组中的用户才能在 guest1 这台主机上使用 myprog 这个命令。

AUDIO guest1=/usr/local/bin/myprog

允许 AUDIO 组成员在 guest1 主机上访问 myprog

注意,上面这一行只指定了允许访问的主机名和程序,而没有说用户可以以其他用户的身份来运行该程序。

省略密码

你也可以通过 NOPASSWORD 来让 AUDIO 组中的用户无需密码就能运行 myprog。像这样:

AUDIO guest1=NOPASSWORD :/usr/local/bin/myprog

允许 AUDIO 组成员在 guest1 主机上不用输入密码即可访问 myprog

我并没有这样做,因为我觉得使用 sudo 的用户必须要停下来想清楚他们正在做的事情,这对他们有好处。 我这里只是举个例子。

wheel

sudoers 文件中命令部分的 wheel 说明(如下所示)允许所有在 wheel 组中的用户在任何机器上运行任何命令。wheel 组在 /etc/group 文件中定义, 用户必须加入该组后才能工作。 组名前面的 % 符号表示 sudo 应该去 /etc/group 文件中查找该组。

%wheel ALL =(ALL) ALL

运行所有定义在 /etc/group 文件中的 “wheel” 组成员可以在任意主机上运行全部命令

这种方法很好的实现了为多个用户赋予完全的 root 权限而不用提供 root 密码。只需要把该用户加入 wheel 组中就能给他们提供完整的 root 的能力。 它也提供了一种通过 sudo 创建的日志来监控他们行为的途径。 有些 Linux 发行版, 比如 Ubuntu, 会自动将用户的 ID 加入 /etc/group 中的 wheel 组中, 这使得他们能够用 sudo 命令运行所有的特权命令。

结语

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13068.html