Answers:
如果这是正常的二进制文件,则可以通过运行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二进制文件都会增加另一个潜在的安全问题。
ALL
用户名替换该术语,以允许该用户在不输入密码的情况下即可运行。
我需要插入线在年底在/ etc / sudoers文件:ALL ALL = NOPASSWD: <filename>
很明显,后面的%admin ALL=(ALL) ALL
覆盖需要管理用户密码。
只要脚本执行了确定的,无害的,允许的操作,并且如果任何参数的值都不会导致脚本行为异常,则允许脚本以root用户身份运行不会有安全问题。
但是有一个陷阱...
始终在命令和文件名中使用完整路径。如果您编写类似echo Hello world!
in的内容myrootscript
,则有人可能会编写a ~/bin/echo script
并myrootscript
以root身份执行,无论其中内容是什么。
/bin/echo "Hoping this will keep you safe"
:-)
默认情况下,该wheel
组的成员可以使用来执行sudo
任何命令root
。sudo
到目前为止,这可能是您使用的方式。
要允许其他用户,您需要创建一个sudoers
规则。例如:
mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh
将允许用户mickey.mouse
运行命令/usr/local/bin/test.sh
的root
,而不需要额外的密码提示。
您应该阅读本文档以获取更多信息。