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


9

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

我自己可以做须藤。

我怎么做?

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

Answers:


23

如果这是正常的二进制文件,则可以通过运行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二进制文件都会增加另一个潜在的安全问题。


我认为这是我一直在寻找的答案。我不能setuid一个bash脚本,只能是一个二进制文件吗?(当然,我会采取措施使其无法修改)
flybywire

不,您不能创建脚本setuid。
wfaulk

wfaulk:您曾经能够这样做,但是最近的Linux发行版不再允许它了。您可以使用shc之类的工具来“编译”脚本,然后将其设置为setuid。
凯尔·布​​兰特

wfaulk:当然,这样做会故意去做一些有残疾的事情,所以这可能是个坏主意:-)
Kyle Brandt

ALL用户名替换该术语,以允许该用户在不输入密码的情况下即可运行。
hdave

3

我需要插入线在年底在/ etc / sudoers文件:ALL ALL = NOPASSWD: <filename> 很明显,后面的%admin ALL=(ALL) ALL覆盖需要管理用户密码。

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

但是有一个陷阱...

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

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


如果计算机上的非root用户可以编辑该脚本,则该用户可以接管计算机。如果同一用户的密码很弱,那么什么也不会阻止您的计算机受到完全破坏。
hdave

2

默认情况下,该wheel组的成员可以使用来执行sudo任何命令rootsudo到目前为止,这可能是您使用的方式。

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

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

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

您应该阅读本文档以获取更多信息。


Debian / Ubuntu使用admin组而不是wheel。这可能是一个稍微准确的名称。
David Pashley,09年

叫我老式,但是..;)
丹·卡利

1
老式的:P
David Pashley

0

用于chmod +s <filename>设置suid位。这意味着在执行文件时,它将在文件所有者的权限下运行(因此将其锁定为root即可使其运行)。

但是,使用bash脚本之类的方法可能会非常危险,因为用户找到了更改方法,因此他们很容易获得root shell。确保除root以外的任何人都不能写入该文件。

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

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


0

另一种选择:您可以在该脚本周围做一个小的setuid C包装器,

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.