帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何在服务器上安装sudo 1.9并使用新的策略工具?

如何在服务器上安装sudo 1.9并使用新的策略工具?

发布时间:2020年05月21日 09:18:52    来源: A5互联

Linux服务器上的sudo系统是控制用户是否可以执行管理任务的方法,而且这个工具在很长一段时间内都运行得很好。然而,就像现在一样,sudo也承受了很多批评的压力。最大的问题之一是粒度控制。例如,如果您让用户在系统上使用sudo,他们总是可以发出以下命令:

sudo rm -rf /

而这个命令将删除系统中的所有内容。

当然,在现代的Linux发行版中,运行上述命令会导致一个警告,表明该命令操作是危险的。但即使有了警告,sudo也会允许对机器进行全盘破坏。

以上是在sudo 1.9版本之前。

在sudo 1.9中,系统得到了一系列的改进。其中一个改进是及时命令审批,通过策略的方式,让第三方插件帮助提高安全性。

今天我们来演示如何使用新的策略系统,这使得控制用户可以使用sudo运行的命令变得非常容易。

这里将在Ubuntu 18.04上进行演示。目前,sudo 1.9可以安装在Ubuntu 20.04中,但是插件系统不起作用。因此,我们将继续使用以前的LTS版本。

Sudo 1.9可以在其他发行版上安装,但只测试过Ubuntu 18.04。

1、如何安装sudo 1.9

您必须做的第一件事是安装sudo 1.9。但是,在执行此操作之前,强烈建议您确保您有权访问root帐户。如果不这样做,您可能会遇到损坏的sudo系统。您可能会在测试环境中进行此操作,因此可以在Ubuntu上为根用户提供密码。为此,请打开一个终端窗口并发出命令:

sudo passwd root

系统将提示您输入并验证新密码。

现在,回到终端窗口,使用以下命令下载必要的.deb文件:

wget https://www.sudo.ws/sudo/dist/packages/1.9.0/sudo_1.9.0-1_ubu1804_amd64.deb

wget https://www.sudo.ws/sudo/dist/packages/1.9.0/sudo -ldap_1.9.0-1_ubu1804_amd64.deb

wget https://www.sudo.ws/sudo/dist/packages/1.9.0/sudo-logsrvd_1.9.0-1_ubu1804_amd64.deb

wget https://www.sudo.ws/sudo /dist/packages/1.9.0/sudo-python_1.9.0-1_ubu1804_amd64.deb

使用以下命令安装这些软件包:

sudo dpkg -i *.deb

安装完成后,就可以进行测试了。

2、如何测试python插件

我们要做的是测试新的python模块,该模块将阻止所有(非root用户)运行除id以外的任何命令。这是令人难以置信的限制,但是它向您展示了新系统的功能。

为此,首先使用命令更改为root用户:

su

使用以下命令创建新策略:

nano /root/policy.py

在该文件中,粘贴以下内容:

import sudo

class SudoPolicyPlugin(sudo.Plugin):

def check_policy(self, argv, env_add):

cmd = argv[0] # the first argument is the command name

if cmd != "id": # Example for a simple reject:

sudo.log_error("You are not allowed to run this command!")

return sudo.RC.REJECT

command_info_out = ( # setup command to execute

"command=/usr/bin/id", # Absolute path of command

"runas_uid=0", # The user id

"runas_gid=0") # The group id

return(sudo.RC.ACCEPT, command_info_out, argv, env_add)

保存并关闭文件。

上面的代码的重要部分是:

if cmd != "id": # Example for a simple reject:

sudo.log_error("You are not allowed to run this command!")

return sudo.RC.REJECT

这实际上是说如果一个命令不是id,就打印出 "You are not allowed to run this command!"的错误。最后,它使用RC.REJECT来拒绝任何不是id的命令。

现在我们需要启用此策略。使用以下命令打开sudo配置文件:

nano /etc/sudo.conf

在该文件中,找到以下部分:

Plugin sudoers_policy sudoers.so

Plugin sudoers_io sudoers.so

注释掉第一行并添加新行,因此它将类似于:

#Plugin sudoers_policy sudoers.so

Plugin sudoers_io sudoers.so

Plugin python_policy python_plugin.so ModulePath=/root/policy.py ClassName=SudoPolicyPlugin

保存并关闭文件。

3、如何测试新政策

现在,您需要打开一个新终端或使用新实例通过SSH进入服务器。完成此操作后,发出命令:

sudo ls

然后,您将看到不再被允许运行该命令。

sudo 1.9禁止运行任何命令,但id禁止。

但是,如果发出id命令,则会看到它起作用。

id命令仍然有效。

需要注意的是(这是为什么您必须为root用户提供密码),这是一个令人难以置信的限制。该策略基于example_policy_plugin.py,您会在其中注意到以下行:

_allowed_commands =(“ id”,“ whoami”)

您可以始终使用example_policy_plugin.py脚本,并在其中添加任何您想允许的命令(以减少限制)。如果确实使用example_policy_plugin.py,请确保更改/etc/sudo.conf中的策略条目。

以上就是您使用sudo 1.9中的新策略系统的方式。