終了権限を取得するには、ユーザーにsudo権限を付与する必要があります。ただし、ユーザーは3時間を超える終了要求のみを実行できます。ワイルドカードを実装しようとしてきました。
たとえば、
username ALL=/usr/sbin/shutdown +[[:digit:]] -> Trial for any number
username ALL=/usr/sbin/shutdown +[180-*] -> Trial for 180 minutes and beyond
他のケースも多いが効果はない。
ベストアンサー1
私の最初のアイデアは、スクリプトにsudoアクセスを許可し、そのスクリプト内でパラメータチェックを実行するラッパースクリプトでした。
username ALL=/usr/local/sbin/shutdown-wrapper
次に、ラッパーを閉じる方法は次のとおりです。
#!/bin/sh
case $1 in
*[!0-9]*) echo Invalid; exit 2;;
esac
if [ "$1" -ge 180 ]
then
/usr/sbin/shutdown +"$1"
else
echo Invalid
exit 2
fi
...ユーザーに電話をかけるように指示します。sudo /usr/local/sbin/shutdown-wrapper N
ここで、Nは分です。
別のオプションは、次のものを使用することです。sudoersのマニュアルページのワイルドカードセクション:
username ALL=(ALL:ALL) /usr/sbin/shutdown +18[0-9], \
/usr/sbin/shutdown +19[0-9], \
/usr/sbin/shutdown +[2-9][0-9][0-9], \
/usr/sbin/shutdown +[1-9][0-9][0-9][0-9]*
これは、分 180 ~ 189、190 ~ 199、200 ~ 999 を意味し、最初の数字は、ゼロになることができない最低 4 桁の数字(数字またはその他!)で始まるすべてを意味します。たとえば、間違った時間範囲を許可すると、/usr/sbin/shutdown +9999jeff
解析エラーが発生しますshutdown
。
時間仕様を解析できません: +9999jeff