以 Root 身份运行脚本 + 桌面文件(无需提示)

以 Root 身份运行脚本 + 桌面文件(无需提示)

我有两个文件,一个是桌面文件,另一个是 shell 脚本。桌面文件用于打开 shell 脚本,并以 root 身份在 xTerm GUI 中执行它,而不需要“sudo 密码”。

我被告知要从sudoshell 脚本中完全删除,留下。由于该程序需要 root 访问权限,我将 /etc/sudoers 编辑为以下内容:

david ALL=(ALL) NOPASSWD:/home/david/upgrade.sh
david ALL=(ALL) NOPASSWD:/home/david/Desktop/Upgrade.desktop

根据指示,我配置了桌面文件。我从以下内容开始:

xterm -e sudo sh -p /home/david/upgrade.sh

但是当我运行桌面文件时,它仍然要求我输入密码。我认为sudo桌面文件中的 可能是问题所在,但删除它后,xTerm 窗口不再打开。我怎样才能从桌面文件执行此 shell 脚本而不输入密码?

答案1

首先,从中删除有关桌面文件的行/etc/sudoers,这是不需要的。

/home/david/upgrade.sh其次,您配置了要使用 运行的确切命令NOPASSWD,而不是sh -p /home/david/upgrade.sh您尝试在xterm窗口中运行的命令。您必须运行配置的命令才能从设置中获益NOPASSWD

xterm -e sudo /home/david/upgrade.sh

顺便说一句,你的脚本文件的 shebang 指定/bin/bash为解释器,但你试图用 运行它/bin/sh。只要你不使用 Bash 特有的功能,结果是一样的,但你应该避免这种矛盾。但这与sudo和无关NOPASSWD


作为额外的补充,如果可以直接调用您的脚本,并且如果尚未以 root 身份运行,它会自动提升其权限,那就太好了sudo。我曾经为此写过一个小 Bash 代码片段,它可以简单地添加到任何需要以 root 身份运行的 Bash 脚本的顶部:

#!/bin/bash
if test "$(id -u)" -ne 0 ; then
    sudo "$0" "$1"
    exit $?
fi

这会测试有效用户 ID 是否为 0(root),如果不是,它会执行自己的脚本文件,sudo并在终止时传递其退出代码。这与NOPASSWD脚本文件的设置配合使用效果很好。

相关内容