Sudoers 从特定命令中删除密码

Sudoers 从特定命令中删除密码

我在 sudoers 语法方面遇到了一些麻烦。长话短说,我正在与我的显卡作斗争,最近我发现我可以用一个简单的命令打开和关闭它(以前它总是关闭的,这在 90% 的情况下都很好,但有时我会有时喜欢使用它的额外力量)。我的想法是在各种脚本中使用这两个命令来打开GC,执行使用GC的命令,然后将其关闭,如下所示:

sudo tee /proc/acpi/bbswitch <<<ON
optirun [command]
sudo tee /proc/acpi/bbswitch <<<OFF

问题是,这些脚本很少在 shell 中执行,它们大多是通过双击 .sh 文件来执行的。因此,我研究了如何避免特定sudo命令的密码,并发现了sudoers.

我执行visudo并在文件末尾添加了一行:

grb ALL=(ALL) NOPASSWD: tee /proc/acpi/bbswitch <<<OFF, tee /proc/acpi/bbswitch <<<ON

但一旦我关闭编辑器,visudo就说有语法错误,但仅此而已。即使我只添加一个命令,也会引发语法错误:

grb ALL=(ALL) NOPASSWD: tee /proc/acpi/bbswitch <<<OFF

此行是最后添加的,这是我第一次编辑该sudoers文件。

如果有用的话,我正在使用 Ubuntu MATE 18.04。我怀疑答案确实很简单,但我找不到任何适合我的案例的文档。我想强调的是,我需要将可能的输入限制为/proc/acpi/bbswitchON 和 OFF,我不知道如果我写一些不同的东西会发生什么,并且从我的 GC 给我带来的麻烦来看,这可能会很糟糕。我必须知道,如果要求输入密码或程序无法启动,我必须检查开关命令是否正确编写。

答案1

重定向不是实际命令的一部分。它只是向 shell 发出的指令,以某种方式安排标准输入和输出的管道实际运行命令。

<<<因此,在文件的命令中包含“here-string”重定向是没有意义的sudoers

相反,因为您想限制使用仅有的允许将字符串ONorOFF写入/proc/acpi/bbswitch,您可以制作如下脚本:

#!/bin/sh

case $1 in
    ON)  ;;  # nothing
    OFF) ;;  # nothing here either
    *) printf 'Usage: %s ON|OFF\n' "$0" >&2
       exit 1
esac

printf '%s\n' "$1" >/proc/acpi/bbswitch

ON然后,您可以将其放在所需用户可以访问它但不能修改它的目录中,并允许他们通过或OFF命令行参数使用它,例如

grb ALL=(ALL) NOPASSWD: /some/path/script.sh ON, /some/path/script.sh OFF

(或类似的东西)

相关内容