シェルスクリプト:sudoを使用するものとsudoで実行すること?

シェルスクリプト:sudoを使用するものとsudoで実行すること?

すべてではありませんが、一部のコマンドでスーパーユーザー権限を必要とするシェルスクリプトを作成するときは、次のことを行う必要があります。

  • スーパーユーザー権限を必要とするコマンドにsudoを追加し、sudoなしでシェルスクリプトを実行するか、

  • スーパーユーザー権限を必要とするコマンドにsudoを追加する代わりに、sudoを使用してシェルスクリプトを実行しますか?

2番目の方法では、パスワードを一度だけ提供する必要がありますが、スクリプト内のすべてのコマンドは、不要なコマンドを含むスーパーユーザー権限で実行されます。

最初の方法では、さまざまなsudoコマンドに複数のパスワードを入力する必要があります。スーパーユーザー権限は、そのコマンドが必要なコマンドにのみ付与されます。

セキュリティの観点からは、最初の方法が優れています。便宜上、第2の方法がより良い。

  1. 私は最初のオプションを考えてきました。だから私はしなければなりませんシェルスクリプトで複数のsudoコマンドにパスワードを提供するという不都合を解決します。

  2. スティーブン・ハリスの投稿:

    よく書かれたスクリプトは正しい権限で実行されていることを検出し、sudoをまったく呼び出すことはありませんが、そこには悪いスクリプトがたくさんあります。

    それでは、2番目の方法を使用する必要がありますか?もしそうなら、

    • 「スクリプトが正しい権限で実行されており、sudoをまったく呼び出さないことを検出します」とどのように書くことができますか?

    • sudoを使用してスクリプトを実行するときにスーパーユーザー権限を必要としないコマンドにスーパーユーザー権限を付与する問題を回避するためにセキュリティを強化するにはどうすればよいですか?

  3. この簡単なアプローチには両方の利点がありますか?必要なコマンドにのみsudoを追加し、利便性が欲しいかセキュリティが必要なかに応じてsudoを使用したり使用したりせずにスクリプトを実行しますか?このアプローチに問題がありますか?

ありがとうございます。

ベストアンサー1

最初の問題を解決するには:

「スクリプトが正しい権限で実行されており、sudoをまったく呼び出さないことを検出します」とどのように書くことができますか?

ルートの簡単なPOSIXチェックがあります:

#!/bin/sh
is_user_root ()
{
    [ "$(id -u)" -eq 0 ]
}

あるいは、Bashでは、パフォーマンス指向のコーダーは次のものを使用できます。

#!/bin/bash
is_user_root ()
{
    [ "${EUID:-$(id -u)}" -eq 0 ]
}

再利用のため、コードを意図的に関数にラップしました。

2番目の質問を解決するには:

sudoを使用してスクリプトを実行するときにスーパーユーザー権限を必要としないコマンドにスーパーユーザー権限を付与する問題を回避するためにセキュリティを強化するにはどうすればよいですか?

あなたができることは何もありません。少なくとも私は何も期待していませんでした。スクリプトを見ると提案があるかもしれません。ところで、質問に含めなかったので... sudoorを使ってスクリプト全体を実行すると、root制御する方法がないと思います。

コメントへの回答:

「にsudoを使用することとsudoを使用して実行すること」についてどう思いますか?

私のスクリプトでは通常、後者のアプローチをとりますが、これが必ずしもあなたにお勧めするわけではありません。スクリプトのターゲットが誰であるかによって異なります。ほとんどの場合、rootユーザーにのみ適用されますが、一部のユーザーにはsudo権限があります。任意の値に答えるには、スクリプトを質問にそのまま含める必要があります。

おすすめ記事