我需要为使用 ; 的 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 身份运行它。