使用 sudo 以 root 身份运行命令
介绍 -
Linux 遵循非常严格的权限模型。 root 用户可以做任何事情,但普通用户没有权限。要运行任何命令,他们需要向超级用户请求权限。授予非 root 用户管理权限的简单而常见的方法是,用户可以使用su命令并暂时成为root ,但用户必须知道 root 的密码。在企业界,这是非常危险的,因为 root 的所有权限都授予任何可以做任何事情的用户。例如 -
[userA@rhel7 ~]$ su -
Password:
它要求输入超级用户的密码。
为了克服上述风险, sudo命令成为趋势。它允许用户在提供用户自己的密码以进行身份验证后,以 root 或任何其他用户的身份运行命令。这些信息在/etc/sudoers文件中定义。在描述“sudo”命令之前,我想先谈谈visudo
什么是 visudo –
visudo是用于编辑位于/etc/sudoers的sudo命令的配置文件的命令。您不应直接使用普通编辑器编辑此文件,始终使用 visudo 以确保安全。编辑 /etc/sudoers 文件需要超级用户的权限。
visudo 命令不允许仅通过锁定文件来同时编辑 /etc/sudoers 文件,如果有人尝试访问该文件,它将收到一条消息以供稍后尝试。
[root@rhel7 ~]# visudo
visudo: /etc/sudoers busy, try again later
它还检查编辑的语法并提供非常有用的基本完整性检查。如果它识别出任何错误,则 visudo 将不允许保存带有编辑的文件。
在 sudoers 文件中设置规则 –
一个常见的问题出现在大家的脑海中,我们如何定义 sudoers 文件中的规则?因此,在编辑之前最好了解现有配置,该配置定义了哪些用户可以在哪些机器上运行哪些软件。预定义规则的语法如下 -
root ALL=(ALL:ALL) ALL
这允许 root 在任何地方运行任何命令。这一行的含义是 -
username hosts=(users:groups) commands
ALL表示,用户可以在所有主机上运行所有命令,就像所有用户和组一样。因此,root 具有以任何用户或组身份运行任何命令的所有权限。
让我们考虑一个示例,并以 root 身份为 userA 提供所有权力。
userA ALL=(ALL:ALL) ALL
如果您想使用不带密码的命令,请使用 PASSWD 参数 -
userA ALL(ALL:ALL) NOPASSWD:ALL
在下面的示例中,userA 仅启动、停止和重新启动“httpd”服务
userA ALL=(root) /usr/bin/systemctl, /usr/sbin/httpd start stop restart
用户可以检查该命令是否有效。然后按照以下程序检查 -
[root@rhel7 ~]# su - userA
Last login: Thu Sep 13 15:01:18 EDT 2018 on pts/0
[userA@rhel7 ~]$ sudo -u root systemctl stop httpd
[sudo] password for userA:
[userA@rhel7 ~]$
注意 –我们也可以将 vim 与 visudo 一起使用。
export VISUAL=vim; visudo
将 nano 与 visudo 一起使用
export VISUAL=nano; visudo
为组分配权限 –
您可以将类似的权限分配给多个用户,只需将它们分组即可。 sudoers 文件中有一个预定义的组。该组的成员可以使用 sudo 以任何用户(包括超级用户)身份运行任何命令。我们可以将用户添加到该组。它通常配置为 -
%wheel ALL=(ALL) ALL
使用命令在轮组中添加用户 -
usermod -aG wheel username