web-dev-qa-db-ja.com

SashでBashスクリプトファイルを実行すると、Bashスクリプト内のすべてのコマンドもSudoとして実行されますか?

Bashで自動化されたインストール後のスクリプト(たとえば、post-install.shと呼ばれます)を書きたいのですが。スクリプトは自動的にリポジトリの追加と更新、パッケージのインストールと更新、設定ファイルの編集などを行います。

ここで、たとえばSudo post-install.shを使用してこのスクリプトを実行すると、Sudoパスワードの入力を1回だけ要求するか、呼び出しごとにSudoパスワードを入力する必要がありますか?スクリプト内のコマンドの場合、Sudo権限が必要ですか?言い換えれば、bashスクリプト内のコマンドは、いわば実行権限を「継承」するのでしょうか。

そして、実際にdoの場合でも、Sudo権限がタイムアウトする可能性があります(たとえば、特定のコマンドがSudo タイムアウト)?または、最初のSudoパスワードの入力は、スクリプト全体の期間中持続しますか?

31
Decent Dabbler

bashおよびそのすべての子プロセスは、スーパーユーザー権限で実行されます。そのため、bashスクリプトでコマンドのパスワードを再入力する必要はありません。

Sudoタイムアウトは、(後で)Sudoを個別に呼び出す場合にのみ適用されます。既に実行中のbashプロセスやその子孫には影響しません。

17

これらの答えはおそらく正しいでしょう。ただし、これは、Sudo権限を必要とするbashスクリプトを作成するために(私が知る限り)一般的に使用される方法ではありません。一般的に、スクリプトの上部では、Sudo権限で実行されていないと想定し、代わりにSudo -vを自分で呼び出して(ユーザーにパスワードの入力を求める)、Sudo 'セッション'を「セットアップ」します。一部のコマンドではechoアクセスが必要であることをユーザーに知らせるために、Sudoプロンプトの前にいくつかの説明テキストを追加するか、Sudoの独自のプロンプトを-pスイッチで上書きできます。

次に、スクリプト内で、それ以上のパスワード要求なしで、それを必要とするコマンド(およびそれを必要とするコマンドのみ)でSudoを呼び出しても問題ありません。スクリプト内で一緒に実行する特定のコマンドグループ(Sudoの独自の使用に関係なく)がSudoタイムアウトを超えて拡張すると思われる場合は、一種の 'keepを発行するために、途中でSudo -vを呼び出すことができます。 -alive 'Sudo'セッション '。

スクリプトの実行中にSudo 'セッション'の期限が切れた場合、ユーザーが次回スクリプトでSudoコマンドを発行するときに、パスワードの入力を求められるだけです。

3
alexrussell