向 bash 脚本添加 root 权限

向 bash 脚本添加 root 权限

我需要为使用 ; 的 bash 脚本添加 root 权限sudo,以便无论何时我们从终端运行脚本;无论用户是否是 root,它都不应提示输入密码。请帮忙!正在做以 Root 身份运行 Bash 脚本没有帮助。

答案1

最好的解决方案是使用visudo(这个工具就是为此而制作的,可以避免暴露 root 密码),我建议你挖掘一下出了什么问题。

作为一种解决方法,您可以运行以下命令:

echo <password> | sudo -S some-script

(以空格开始命令,因此它不会保存在 bash 历史记录中)。

问候。

答案2

在没有进行任何形式的身份检查的情况下通过提升权限(我反对这样做)来创建安全漏洞是非常不明智的,但如果您的脚本是非交互式的,并且系统完全控制脚本本身(这意味着用户无法摆弄它),那么有几种方法可以安全地做到这一点。我给你举了一些使用一种临时“事件触发器”的例子
(是的,定义有点延伸)

这个应该由服务器预先启动(在 /etc/rclocal 或类似文件中),该脚本具有“root”权限。

#!/bin/bash

CMD="/path/to/a/directory/the/user/has/rights/to/write/into"

mkdir -p "$CMD"

while :
do
    inotifywait -q -e moved_to "$CMD" >/dev/null
    /path/to/script/you/want/to/run.sh
done

第二个是用户调用的脚本,它没有root权限:

#!/bin/bash

CMD="/path/to/a/directory/the/user/has/rights/to/write/into"

touch dummyfile ; mv dummyfile "$CMD"

如您所见,用户没有提升权限,也不能做任何超出“按下按钮”的事情。如果客户端正在准备好的目录中移动某些内容,服务器脚本将收到必须运行您的脚本的信号。

另一种方法(不太安全)是使用套接字:

首先,再次由服务器调用脚本(就像第一个示例一样)

#!/bin/bash
PORTNUMBER="12345"  #or whatever you like and not in use

while :
do
    nc -l localhost $PORTNUMBER >/dev/null
    /path/to/script/you/want/to/run.sh
done

然后是客户端脚本

#!/bin/bash
PORTNUMBER="12345"  #or whatever you like and not in use

echo "something" | nc localhost $PORTNUMBER

最后一行也可以替换为:

echo "something" >/dev/tcp/localhost/$PORTNUMBER

再说一遍:回显到套接字将向服务器脚本发出信号来运行您的脚本。

当然,这也可以通过命名管道来实现,不过你明白我的意思吧:-)

答案3

请记住,这样做就是允许任何人运行它,我相信您需要通过授予其适当的权限来对其进行 chmod,0755 应该可以做到。

答案4

您是否尝试过在文件上设置粘滞位,以便运行时它将以 root 身份运行?

您可以chmod 2777对该文件运行,并chown root对该文件赋予 root 权限。

现在,任何执行该文件的人都会以 root 身份运行它。

相关内容