如何授予用户在 Linux 中运行某些命令的权限

在 Linux 中,我们可以轻松地基于命令授予用户权限,根据该权限,该用户将仅被允许以超级用户身份运行这些命令,除此之外,他/她将作为具有普通权限的普通用户运行。

在某些情况下,我们可能希望允许用户重新启动某些特定服务或者以超级用户权限运行某些特定命令,因此在这种情况下,我们只需要在 sudoers 文件中为该用户输入一个条目。

负责向用户提供此类权限的文件是 /etc/sudoers

我们可以使用 vi 打开文件进行编辑,也可以使用替代和更好的选项来编辑 sudoers 文件,例如:使用 visudo 命令

为什么我应该使用 visudo 命令而不是直接使用 vi 或者任何其他编辑器编辑文件?

答案是,如果我们正在使用 vi 编辑器编辑 sudoers 文件并且我们使用了任何错误的语法并保存并退出文件,那么 root 用户甚至可能很难重新登录并再次编辑该文件。

因为 vi 编辑器不会检查文件中的任何语法错误。

这就是我们应该始终更喜欢使用 visudo 的原因,因为即使我们犯了任何语法错误,visudo 也会在进行更改和退出之前提示我们。

# visudo

假设你想给你的用户权限运行网络和apache服务器重启权限

# visudo
%test  192.168.0.100=(root)  /etc/init.d/network, /etc/init.d/httpd9

所以,在上面的行中,我们告诉我们的 Linux 机器,允许来自 192.168.0.61 的测试组的所有用户使用 root 权限运行网络和 apache 服务器相关的命令

让我们尝试以测试用户身份运行这些命令

# su - test
$sudo /etc/init.d/network restart
[sudo] password for test:
Shutting down interface eth0:  Device state: 3 (disconnected)
                                                           [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Active connection state: activated
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/3
                                                           [  OK  ]

它按预期工作

但是如果测试用户尝试运行任何他未经身份验证的命令会发生什么

$sudo /etc/init.d/vsftpd restart
[sudo] password for test:
test is not allowed to run sudo on localhost.  This incident will be reported.

提示incident will be reported(事件将被报告),那么将在哪里查看这些报告?

# tail /var/log/secure
Sep 27 13:04:26 test sudo:     test : TTY=pts/1 ; PWD=/home/test ; USER=root ; COMMAND=/etc/init.d/network restart
Sep 27 13:09:23 test sudo:     test : user NOT authorized on host ; TTY=pts/1 ; PWD=/home/test ; USER=root ; COMMAND=/etc/init.d/vsftpd restart
日期:2020-06-02 22:17:00 来源:oir作者:oir