Sudo
如何將 echo write 命令添加到 sudoers
我想添加一個使用 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
等等。