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]
ベストアンサー1
いいえ、「悪い」ではありません。
あなたが持っているものはうまくいくはずですが、通常はパラメータをチェックするラッパースクリプトを書く方が良いでしょう。たとえば、次のようになります/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プログラムに渡されることを許可しないなど) 。
シェルスクリプトで実行できるすべてのアクション(awk、sed、Perl、およびその他のツールの実行を含む)を使用して、sudoで実行されているプログラムに渡す引数を検証および整理できます。
検証はパラメータに限定されません。 uid、gid、ユーザーがローカルにログインするか、sshを介してログインしたかどうか、日付、時刻、ネットワーク状態、デーモン状態、空きディスク容量、ドアフェーズなどを確認できます。