ubuntu:让用户以root权限运行脚本

ubuntu:让用户以root权限运行脚本

我有 ubuntu 8.04,我想编写一个root每个用户都可以运行的 bash 脚本。

我自己可以执行 sudo。

我怎么做?

澄清:我不想使用 sudo 来执行此操作,因为这样用户就必须输入密码。我只想让他们以 root 身份运行脚本,也许是 setuid 之类的,不知道。

答案1

如果这是一个普通的二进制文件,你可以通过运行 setuid

# chmod u+s /path/to/binary

不幸的是,脚本不能被 setuid。(你可以,但它被忽略了)。原因是脚本的第一行告诉操作系统在哪个解释器下运行脚本。例如,如果你有一个脚本:

#!/bin/bash

你最终会跑

/bin/bash /path/to/script

显然,你需要将解释器设置为 setuid,这意味着所有脚本都将被设置为 setuid。这很糟糕。

您可以通过运行 visudo 将以下内容放入 /etc/sudoers 文件中,使用 sudo 来执行此操作。

ALL ALL=NOPASSWD: /path/to/script

现在任何用户都可以运行

$ sudo /path/to/script

这使得他们无需输入密码即可运行脚本。

有一种替代方法不需要在命令中使用 sudo,它需要创建一个执行脚本的小型 setuid 二进制文件,但每个额外的 setuid 二进制文件都会增加另一个潜在的安全问题。

答案2

我需要插入那行在最后/etc/sudoers:ALL ALL = NOPASSWD: <filename> 显然,后来的%admin ALL=(ALL) ALL覆盖需要管理员用户的密码。

只要脚本执行了精心策划的、无害的、允许的操作,并且任何参数的值不会导致脚本出现异常,那么允许脚本以 root 身份运行就不会存在安全问题。

但有一个问题...

始终在命令和文件名中使用完整路径。如果您echo Hello world!在 中写入类似 的内容myrootscript,则有人可能会写入~/bin/echo scriptmyrootscript以 root 身份执行其中的任何内容。

/bin/echo "Hoping this will keep you safe":-)

答案3

默认情况下,组成员wheel被允许以sudo身份执行任何命令。这可能是您迄今为止的root使用方式。sudo

要允许其他用户,您需要创建一条sudoers规则。例如:

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

将允许用户mickey.mouse运行该命令/usr/local/bin/test.sh而不root需要额外的密码提示。

你应该读这个文件了解更多信息。

答案4

另一种选择:你可以围绕该脚本做一个小型的 setuid C 包装器

  • 检查您可能想要强制执行的任何限制(用户列表、时间、系统负载......)
  • 如果需要,记录/审计执行情况
  • 执行脚本

有点像您自己的多种功能的子集sudo

相关内容