📌  相关文章
📜  使用 sudo 以 root 身份运行命令

📅  最后修改于: 2022-05-13 01:57:04.473000             🧑  作者: Mango

使用 sudo 以 root 身份运行命令

介绍 -
Linux 遵循非常严格的权限模型。 root 用户可以做任何事情,但普通用户没有权限。要运行任何命令,他们需要向超级用户请求权限。授予非 root 用户管理权限的简单而常见的方法是,用户可以使用su命令并暂时成为root ,但用户必须知道 root 的密码。在企业界,这是非常危险的,因为 root 的所有权限都授予任何可以做任何事情的用户。例如 -

[userA@rhel7 ~]$ su -
Password:

它要求输入超级用户的密码。

为了克服上述风险, sudo命令成为趋势。它允许用户在提供用户自己的密码以进行身份验证后,以 root 或任何其他用户的身份运行命令。这些信息在/etc/sudoers文件中定义。在描述“sudo”命令之前,我想先谈谈visudo

什么是 visudo –
visudo是用于编辑位于/etc/sudoerssudo命令的配置文件的命令。您不应直接使用普通编辑器编辑此文件,始终使用 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