Sudo

如何將 echo write 命令添加到 sudoers

  • August 6, 2022

我想添加一個使用 echo 將文件寫入 sudoers 的命令,這樣它就可以在沒有密碼的情況下執行。

通常,該命令將如下所示:

sudo sh -c 'echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo'

(存在 sh -c 是因為直接在 sudo 上執行 echo 只會返回權限被拒絕)

通常,要使使用者無需密碼即可通過 sudo 執行命令,可以通過將其添加到 sudoers 文件中來完成:

cestarian ALL = NOPASSWD: /bin/sh

但是我自然不希望 sh 在沒有密碼的情況下可以執行,因為我想這將是非常可利用的,我只是希望這個特定的命令能夠工作……

cestarian ALL = NOPASSWD: /bin/sh -c 'echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo'

這不起作用,我知道 sudoers 應該能夠接受帶有特定參數的命令,但在這種情況下它不起作用,我不知道為什麼。

我想要一種讓它工作的方法。

另一種方法是允許tee進入sudoers和使用| sudo tee而不是>

echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo

看起來sudo包含引號或空格的參數有問題。可能有一種語法正確的方法來處理這個問題,但最簡單的解決方案是將 shell 命令移動到一個單獨的文件中。例如,/usr/local/bin/enable_no_turbo使用內容創建:

#!/bin/sh
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

使其可執行:

chmod 755 /usr/local/bin/enable-no-turbo

並在您的sudoers

cestarian ALL = NOPASSWD: /usr/local/bin/enable-no-turbo

如果您想要更通用的解決方案,請/usr/local/bin/write-to-file使用以下內容創建:

#!/bin/sh

echo "$2" > "$1"

在你的sudoers

cestarian ALL = NOPASSWD: /usr/local/bin/write-to-file /sys/devices/system/cpu/intel_pstate/no_turbo 1

這將允許:

sudo write-to-file /sys/devices/system/cpu/intel_pstate/no_turbo 1

但不允許:

sudo write-to-file /sys/devices/system/cpu/intel_pstate/no_turbo 0
sudo write-to-file /some/other/file 1

等等。

引用自:https://unix.stackexchange.com/questions/712631