![使可执行 bash 脚本以 sudo 权限运行?](https://linux22.com/image/1170234/%E4%BD%BF%E5%8F%AF%E6%89%A7%E8%A1%8C%20bash%20%E8%84%9A%E6%9C%AC%E4%BB%A5%20sudo%20%E6%9D%83%E9%99%90%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
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 个命令(的完整路径)。