当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

我自己可以做须藤。

我怎么做?

澄清:我不想使用sudo进行操作,因为那样的话,用户将不得不输入密码。我只希望他们以root身份运行脚本,也许是setuid,dunno。

最佳思路

如果这是正常的二进制文件,则可以通过运行setuid

# chmod u+s /path/to/binary

不幸的是,脚本不能设置为setuid。 (您可以,但是将被忽略)。这样做的原因是脚本的第一行告诉OS在哪个解释器下运行脚本。例如,如果您的脚本具有:

#!/bin/bash

您实际上最终会跑步

/bin/bash /path/to/script

显然,您需要将解释器设置为setuid,这将意味着所有脚本都将为setuid。这样不好

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

ALL ALL=NOPASSWD: /path/to/script

现在,任何用户都可以运行

$ sudo /path/to/script

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

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

次佳思路

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

只要脚本执行了确定的,无害的,允许的操作,并且如果任何参数的值都不会导致脚本行为异常,则允许该脚本以root用户身份运行不会有安全问题。

但是有一个陷阱…

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

/bin/echo "Hoping this will keep you safe" 🙂

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9820.html,未经允许,请勿转载。