我有两个文件,一个是桌面文件,另一个是 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 脚本而不输入密码?
答案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
脚本文件的设置配合使用效果很好。