以前のバージョンのvisudo sudoersを安全に使用する正しい方法は何ですか?

以前のバージョンのvisudo sudoersを安全に使用する正しい方法は何ですか?

次のようにログインしていない他のユーザーとしてスクリプトを実行したいと思います。

/srv/system/check_alerts.sh <NAME>

大文字のみを含むパラメータが1つあります。可変長。 Visudoは古く、extglobを許可していないため、可変長パラメータを受け入れることはできません。

私はこれをsudoersに追加しようとしました。

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z]

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper]

その後、テストを実行します。

sudo -u alerter bash

そして:

bash-4.2$ sudo -u gmail /srv/system/check_alerts.sh TEST

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for alerter:

それでも、面倒なパスワードの入力を求められます。なぜ?

任意のパラメータに共通の「*」ワイルドカードを使用したくありません。 「&」などを使用するサブシェルを許可するため、これはオプションではありません。

それでは、可変長引数を許可し、安全でない「*」を防ぐにはどうすればよいですか?少なくともパスワードプロンプトに邪魔されずに作業する方法はありますか?

編集:今、これを追加しました。

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh *

visudoにはまだパスワードを要求し、NOPASSWDオプションを尊重しません。

デバッグ:以下を実行します:visudo -f /etc/sudoers.d/alerter

そして、次の行を追加しました。

alerter ALL=(gmail) NOPASSWD: ALL

次に、"alerter" bash シェルで次を実行します。

bash-4.2$ sudo -u gmail /srv/system/check_alerts.sh TEST
gmail is not in the sudoers file.  This incident will be reported.

"sudo -l"の出力:

User alerter may run the following commands on test-host:
(ALL) NOPASSWD: /usr/bin/mailq
(gmail) NOPASSWD: ALL

修正する:

これが重要かどうかはわかりませんが、ユーザー「alerter」と「gmail」の両方が「mycompany」グループに属しています。

アップデート2:

提案されているように、 "check_alerts.sh"スクリプトから "sudo"を削除しました。次の場合、コマンドは正しく機能します。

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh *

- パスワードプロンプトなしで動作します。

これで/etc/sudoers.d/alerterに設定されました。

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [[\:upper\:]][[\:upper\:]][[\:upper\:]][[\:upper\:]][[\:upper\:]]

これは素晴らしい作品です。アンケート調査に参加してくださった皆さんに感謝します!

関連情報