我有两个文件,一个是桌面文件,另一个是 shell 脚本。桌面文件旨在打开 shell 脚本,并以 root 身份在 xTerm GUI 中执行它,而不需要“sudo 密码”。
我被告知sudo
要从 shell 脚本中完全删除,留下这个. 由于该程序需要 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 脚本?
首先,从 中删除关于桌面文件的行
/etc/sudoers
,这不是必需的。其次,您配置了
/home/david/upgrade.sh
要运行的确切命令NOPASSWD
,而不是sh -p /home/david/upgrade.sh
您尝试在xterm
窗口中运行的命令。您必须运行配置的命令才能从设置中受益NOPASSWD
:顺便说一句,您的脚本文件的 shebang 指定
/bin/bash
为解释器,但您尝试使用/bin/sh
. 只要你不使用 Bash 特定的功能,结果是一样的,但你应该避免这样的矛盾。sudo
这与虽然无关NOPASSWD
。作为额外的糖果,如果一个人可以直接调用你的脚本而不用它可能会很好,并且如果
sudo
它还没有以 root 身份运行,它会自动提升它的权限。我曾经为此编写了一个小 Bash 片段,它可以简单地添加到任何需要以 root 身份运行的 Bash 脚本的顶部:这将测试有效用户 id 是否为 0(root),如果不是,它会执行自己的脚本文件,
sudo
并在终止时传递其退出代码。NOPASSWD
这与脚本文件的设置一起工作得很好。