使可执行 bash 脚本以 sudo 权限运行?

使可执行 bash 脚本以 sudo 权限运行?

Ubuntu 18.04 Gnome 桌面。

我制作了一个简单的 bash 脚本文件,标记下次重启时选择 Windows grub 条目。用于直接从 Linux DE 快速重启到 Windows。

问题是我必须使用 dconf 修改可执行文件以进行询问,这样我才能在终端中单击运行,它会自动询问密码。否则,仅执行文件不会执行任何操作,因为它正在等待密码输入。

有没有办法以固有的 sudo 权限运行这样的 bash 脚本文件,这样它就不需要要求输入密码了?

编辑(尽管它是针对@waltinator 的,因为评论格式太糟糕了):

所以

/bin/kill

我的 bash 脚本文件的位置和名称是什么?例如,我的 bash 脚本文件名为 restart2windows,位于我的桌面上:

/home/myusername/Desktop/restart2windows

所以我只需要将这一行添加到 /etc/sudoers (我仍然不清楚如何使用 visudo 编辑该文件,以及是否应该按照建议编辑 sudoers.d):

myusername     mymachinename = NOPASSWD: /home/myusername/Desktop/restart2windows

这是正确的吗?

编辑2

我尝试通过 visudo 编辑 sudoers:

sudo visudo

并在注释行下方添加了我上面建议的行:

#includedir /etc/sudoers.d

然后尝试从我的桌面运行我的 bash 脚本文件,但它什么也没做。如果我选​​择在终端中运行它,终端正在等待密码输入。

这是我的 bash 脚本文件内容,非常简单:

#!/bin/bash
sudo grub-reboot 2
sudo reboot now

成立这个问题似乎我需要在其中某处添加 sudo?我对这个问题的答案感到困惑,因为他从 OP 那里得到的代码行与 OP 的不匹配。

编辑3:

我也在 Ubuntuforums.org 上提交了同样的帖子:https://ubuntuforums.org/showthread.php?t=2434878

答案1

阅读man sudoers- 它将允许您授予对单个命令的无密码访问权限。man visudo也请阅读。

man页面:

  PASSWD and NOPASSWD

   By default, sudo requires that a user authenticate him or herself before running a
   command.  This behavior can be modified via the NOPASSWD tag.  Like a Runas_Spec, the
   NOPASSWD tag sets a default for the commands that follow it in the Cmnd_Spec_List.
   Conversely, the PASSWD tag can be used to reverse things.  For example:

   ray     rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm

   would allow the user ray to run /bin/kill, /bin/ls, and /usr/bin/lprm as root on the
   machine rushmore without authenticating himself.  If we only want ray to be able to run
   /bin/kill without a password the entry would be:

   ray     rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm

   Note, however, that the PASSWD tag has no effect on users who are in the group specified
   by the exempt_group option.

另外,我要指出的是,“使现有bash脚本以...身份运行root”是许多非常悲伤的安全故事的开始。

不要让脚本以 的身份运行root,而是允许用户无密码访问脚本中的 2 个命令(的完整路径)。

相关内容