root账号是Linux的上帝账号,它可以执行很多命令。由于安全原因,日常工作中我们最好使用普通用户,仅仅是在有必要的时候才使用管理员权限账户。同样,root密码的保密工作一定要做好;越多的人知道密码,越有可能遭受泄密。我想到了本杰明·富兰克林的一句话:三个人可以保守一个密码,如果另外两个挂了的话。
如果多个管理员被安排来管理一个系统,保守root密码会很难。sudo通过允许普通用户执行管理员全新对这个问题进行了解决。每个普通用户通过附加sudo权限,可以执行管理员的任务,而root密码也做到了保密。
准备一个CentOS系统,root权限登录。两个普通用户账户(使用useradd命令配置)。
最直接允许普通用户使用sudo的方法是将普通用户加入wheel组。如下命令:
usermod -a -G wheel tboronczyk
groups tboronczyk
touch /etc/sudoers.d/tboronczyk
tboronczyk ALL = ALL
一个普通用户在使用sudo的前提是,必须在sudoers策略中指定。最简单的测试方法是直接sudo 执行命令试一下,看看有没有相关sudo权限。本篇文章介绍了两个路径来完成这个:通过将用户加入到wheel组(已经在sudoers策略中配置),或者直接给账户添加sudoers策略。
在第一个方法里,usermod命令附加给了用户wheel组。-G参数制定了组的名字,-a 的意思是本命令是将用户添加到组里面的。
usermod -a -G wheel tboronczyk
第二个方法是在sudoers.d的目录下,建立一个配置文件。我们也可以直接在/etc/sudoers配置文件里面添加内容。当然,在sudoers.d目录下分别为每个需要sudo权限用户见一个单独文件,会容易管理一些,尤其是当有大量的用户需要配置的时候。
这两种方法都允许用户使用 sudo 来执行他们通常没有足够权限的命令。例如:
sudo umount /media
用户第一次调用 sudo 时, 会显示一条消息, 提醒他们对新发现的权力负责。用户必须提供其密码以验证其身份;验证从上次调用缓存 5分钟, 作为对恶意用户的额外保护, 恶意用户可能会走到不小心离开登录状态的终端。
Sudoers 策略具有足够的灵活性, 允许用户帐户执行某些命令, 而不是授予全权访问权限。回想一下我们的无特权用户帐户的配置指令:
tboronczyk ALL = ALL
指定用户名, 然后将 ALL 别名分配给 ALL。正如您可以通过查看此选项来确定的, ALL 是表示所有命令的预定义别名。我们可以将给定用户的别名重新定义为允许的命令列表:
tboronczyk ALL = /bin/mount /bin/umount
现在, 该帐户可以调用它通常有权访问的任何命令, 但只有具有提升权限的 mount 和 umount 命令 (假设该帐户不是轮子的成员)。
你是否厌倦了在常用的管理命令之前键入 sudo?您可以为更流畅的命令行体验创建别名。假设您的无特权帐户被允许使用装载和 umount 命令与 sudo。将以下行添加到 ~/. bashrc 文件中将允许您在不显式键入 sudo 的情况下调用它们的命令:
alias mount sudo /bin/mountalias umount sudo /bin/umount
策略中的多个指令可以应用于一个帐户, 在这种情况下, 它们是额外应用的, 首先是最后一个。要在操作中看到这一点, 假设一个帐户已经在wheel组中按分配使用了完整的可接受用法。默认情况下, 用户需要提供密码才能执行命令。我们可以放宽此要求, 并允许用户在没有密码的情况下使用 ls 显示受限制目录的内容:
tboronczyk ALL = NOPASSWD: /bin/ls
首先应用wheel的策略, 建立默认行为。然后, 我们的新指令使用 NOPASDD 标记授予用户对 lscommand 的未经身份验证的访问权限。用户仍需要为安装和 passwd 等命令提供密码, 但不需要提供密码来列出受限制的目录。
Refer to the following resources for more information on working with sudo to temporarily elevate an account's privileges: