Regular-Expression

sudoers 中程序參數的嚴格條件

  • January 7, 2022

由於 sudoers 不支持正則表達式,是否有人像我在下面的範例中那樣做,或者那很糟糕?

user ALL = (root) NOPASSWD: /bin/program [0-9],\
                           /bin/program [0-9][0-9],\
                           /bin/program [0-9][0-9][0-9],\
                           /bin/program [0-9][0-9][0-9][0-9]

不,這不是“壞”。

您所擁有的應該可以正常工作,但通常最好編寫一個包裝腳本來檢查參數。例如,在/etc/sudoers

user ALL = (root) NOPASSWD: /usr/local/bin/suprogram

以及類似以下的內容/usr/local/bin/suprogram

#!/bin/bash

if [[ $1 =~ ^[0-9]{1,4}$ ]]; then
 exec program "$1"
else
 echo "Bad argument, only 1 to 4 digits allowed"
fi

這可以擴展以允許和檢查更多參數(例如檢查文件名參數是否在某個目錄內或匹配某個模式;或禁止將某些選項傳遞給 sudo 程序;等等)。

您可以在 shell 腳本中執行的任何操作(包括執行其他工具,如 awk、sed、perl 等)都可用於驗證和清理您傳遞給使用 sudo 執行的程序的參數。

檢查也不僅限於參數。您可以檢查 uid、gid、使用者是本地登錄還是通過 ssh 登錄、日期、時間、網路狀態、守護程序狀態、可用磁碟空間、月相等等。

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