Regular-Expression
sudoers 中程序參數的嚴格條件
由於 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 登錄、日期、時間、網路狀態、守護程序狀態、可用磁碟空間、月相等等。