使用sudo提升权限
root账号是Linux的上帝账号,它可以执行很多命令。由于安全原因,日常工作中我们最好使用普通用户,仅仅是在有必要的时候才使用管理员权限账户。同样,root密码的保密工作一定要做好;越多的人知道密码,越有可能遭受泄密。我想到了本杰明·富兰克林的一句话:三个人可以保守一个密码,如果另外两个挂了的话。
如果多个管理员被安排来管理一个系统,保守root密码会很难。sudo通过允许普通用户执行管理员全新对这个问题进行了解决。每个普通用户通过附加sudo权限,可以执行管理员的任务,而root密码也做到了保密。
准备
准备一个CentOS系统,root权限登录。两个普通用户账户(使用useradd命令配置)。
步骤
最直接允许普通用户使用sudo的方法是将普通用户加入wheel组。如下命令:
- 使用usermod命令,将用户加入到wheel组:
usermod -a -G wheel tboronczyk
- 检查组状态是否更新。wheel应该会在tboronczytk组列表中的一个:
groups tboronczyk
- 另外一个配置sudo权限的方法是配置sudoers策略(指定了哪些用户可以使用sudo,以及使用机制)。我们可以使用如下的命令做到。
- 在/etc/sudoers.d目录下,创建一个新的文件,可以以用户名来看:
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分钟, 作为对恶意用户的额外保护, 恶意用户可能会走到不小心离开登录状态的终端。
sudo 提醒用户, 用强大的力量来伟大的负责任
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 等命令提供密码, 但不需要提供密码来列出受限制的目录。
See also
Refer to the following resources for more information on working with sudo to temporarily elevate an account's privileges:
- The sudo man page (man 8 sudo)
- The sudoers man page (man 5 sudoers)
- Code Snipcademy: Using sudo and su and their differences