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

fly*_*ire 10 ubuntu permissions root sudo

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

我自己可以做 sudo。

我怎么做?

澄清:我不想用 sudo 来做,因为那样用户将不得不输入他们的密码。我只是想让他们以 root 身份运行脚本,也许是 setuid,不知道。

Dav*_*ley 25

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

# chmod u+s /path/to/binary
Run Code Online (Sandbox Code Playgroud)

不幸的是,脚本不能设置uid。(好吧,你可以,但它被忽略了)。这样做的原因是脚本的第一行告诉操作系统在什么解释器下运行脚本。例如,如果您有一个脚本:

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

你实际上最终会跑步

/bin/bash /path/to/script
Run Code Online (Sandbox Code Playgroud)

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

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

ALL ALL=NOPASSWD: /path/to/script
Run Code Online (Sandbox Code Playgroud)

现在任何用户都可以运行

$ sudo /path/to/script
Run Code Online (Sandbox Code Playgroud)

这允许他们在不输入密码的情况下运行脚本。

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


Den*_*asi 1

用于chmod +s <filename>设置 suid 位。这意味着当文件被执行时,它以文件所有者的权限运行(因此将其 chown 到 root 以使其运行)。

但是,对于 bash 脚本之类的东西来说,这可能非常危险,因为用户找到了更改它的方法,他们可以轻松获得 root shell。确保除 root 之外的任何人都无法对其进行写入。

Linux 不允许您在脚本上设置uid,为此您必须将其编译为程序。相反,您可以使用 sudoers 文件 (/etc/sudoers),并添加如下行。

<username> ALL = NOPASSWD: /path/to/script