非対話型スクリプトのsudo

非対話型スクリプトのsudo

3つの機能を実行するスクリプトがありますA && B && C

この関数はBスーパーユーザーとして実行する必要がありますが、そうではありませAC

いくつかの解決策がありますが、それらのどれも満足できません。

  1. スクリプト全体をsudoしてください。sudo 'A && B && C'

    必要でない場合、スーパーユーザーとしてA実行するのは悪い考えのようです。C

  2. スクリプトをインタラクティブにします。A && sudo B && C

    パスワードを入力する必要があるかもしれませんが、各機能に時間がかかり、スクリプトが私を待たないため、スクリプトは非対話型であることを望みます。まあ、それが当初スクリプトだから実行されるのを見る必要がない理由です。

  3. 愚かな解決策:sudo : && A && sudo -n B && C

    まず、最初に無作為に実行するのは愚かなようsudoです$sudo_timeout

  4. 仮説的な解決策(それが存在すると言ってください):

    sudo --store-cred 'A && sudo --use-cred-from-parent-sudo B && C'

    最初はパスワードの入力を求められ、必要なときにのみ資格情報を使用します。

これらすべてについてどう思いますか?非常に一般的な問題だと思ったので、この問題に対する解決策がないという事実に驚きました(それはいかがですかmake all && sudo make install)。

ベストアンサー1

パスワードを要求せずに実行できるようにするには、/etc/sudoersこの属性を持つファイルにスクリプトを追加します。NOPASSWD特定のユーザー(またはユーザーグループ)にバインドしたり、sudoシステム内のすべての人が実行できるようにすることができます。

名前付きスクリプトのサンプル行は/usr/local/bin/bossy次のとおりです。

ALL ALL = (root) NOPASSWD: /usr/local/bin/bossy

その後、次のようなものを使用します。

A && sudo bossy && C

PATHこの例ではincludeと仮定します/usr/local/bin。そうでない場合は、スクリプトのフルパスを使用してください。sudo /usr/local/bin/bossy

おすすめ記事