我得到了这一行sudoers
:
Cmnd_Alias NVIDIA = /sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset=1'
user ALL=(ALL) ALL, NOPASSWD: /sbin/systemctl suspend,NVIDIA
我的sudo -l
向我展示:
sudo -l
User user may run the following commands on devbox:
(ALL) ALL, NOPASSWD: /sbin/systemctl suspend, /sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset\=1'
尽管如此,如果我尝试运行/sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset=1'
- 仍然提示我输入密码。
我怀疑=
我在 nvidia 负载的争论中存在一些关于符号的问题modeset
?
首先,确保您始终使用
visudo
edit/etc/sudoers
。它会为您执行语法检查,这样您就不太可能最终将自己拒之门外。现在,使用该命令删除不适当的第一个逗号(在
ALL
和之间NOPASSWD
):接下来,要知道您的
modeset
命令太复杂,无法在sudoers
文件中直接可靠地定义。考虑这个命令(带或不带sudo
):引号将由您自己的(交互式)shell 进行解析,并将带引号的字符串作为单个单词传递。将
sh
看到两个参数,-c
并且date >/tmp/date
;该命令永远不会看到引号。同样,这里的引号永远不会被sudo
任何人看到:将
sudo
看到三个参数sh
,-c
, 和date >/tmp/date
。因此,我的建议是您创建一个简短的 shell 脚本来执行所需的操作,并将其添加到您的
sudoers
文件中。(以 root 身份运行以下命令块 - 用于sudo -s
获取 root shell。)sudoers
现在使用以下命令添加此行visudo
:一旦
/usr/local/bin
添加到您的帐户中,$PATH
您只需使用常用的用户帐户作为标准命令来调用它,