特定のパラメータを受け入れるようにsudoを設定する方法

特定のパラメータを受け入れるようにsudoを設定する方法

特にパスワードなしで次のコマンドを許可したいと思います。

 sudo cfgutil --ecid "${Device_ECID}" install-application "${in_File_Name}"

ある通貨から次の通貨に変わりますDevice_ECIDin_File_Nameいくつかの例を見つけましたが、ほとんどはその逆です。可変引数を完全に受け入れないか、すべての引数を受け入れます。


修正する:

公開直後にワイルドカードが見つかりました。以下は私にとって効果的でした。

%_developer ALL=(root) NOPASSWD: /usr/local/bin/cfgutil list-devices
%_developer ALL=(root) NOPASSWD: /usr/local/bin/cfgutil --ecid * install-application *

しかし、@marcus-müllerの答えで判断すると、ファイル名に実際のスペースがないので、これがまさにそのような場合だと思います。それで私がまた何かを逃しているのではないかと思います。

答え1

Sudoにはマルチワードコマンドラインを選択的に許可する機能がありますが、これはどこでも悪い考えです。

しかし、私が知っている限り、可変プレースホルダはサポートされておらsudoersず、正直なところ、代替は簡単です。

代わりに、シェルスクリプトを作成し、ルートのみがそれを変更できることを確認してから、実行可能としてマークすることを強くお勧めします。スクリプトは2つのパラメータのみを受け入れ、cfgutil必要に応じて呼び出されます。

#!/bin/sh
# Add string sanitation here if needed
cfgutil --ecid "$1" install-application "$2"

そしてそれを許可してくださいsudoers。そうすることができ、sudo myscript argument1 argument2動作します。

関連情報