シェルスクリプト: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権限があります。任意の値に答えるには、スクリプトを質問にそのまま含める必要があります。

答え2

この質問には答えることができると思います。

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

ここで問題が発生する理由はなく、その理由は次のとおりです。

ルートとして実行する必要があるコマンドが1つしかない場合、runプログラムはスクリプトに入る方が長い方法ですrootsudosudoプログラマーが怠惰だという事実を忘れましたか?

多くのコマンドが必要な場合、またはで実行しrunてください。rootrootsudo

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

他のユーザーがあなたのプログラムを望む場合は、あなたのニーズに合わせて大幅にカスタマイズして調整することができますrunsudosudo

例は次のとおりですsudo

visudosudoersファイルを編集するときは、常に以下を使用してください。

kate ALL=(ALL) NOPASSWD: /usr/local/bin/script ARG1 ARG2

sudoまた、プログラム/スクリプトでユーザーを変更するのに非常に便利です。以下は私のスクリプトの1行です。

sudo -i -u "$user" user="$user" CURRENTDIR="$CURRENTDIR" BASHRC="$BASHRC" bash <<'EOF'

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

https://www.cyberciti.biz/tips/shell-root-user-check-script.html
シェルスクリプトがroot権限で実行されていることを確認する方法

bash/sh:

#!/bin/bash
# (Use #!/bin/sh for sh)
if [ `id -u` = 0 ] 
then
        echo "I AM ROOT, HEAR ME ROAR"
fi

csh:

#!/bin/csh
if ( `id -u` == "0" ) 
then
        echo "I AM ROOT, HEAR ME ROAR"
endif

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
  echo "You must be a root user" 2>&1
  exit 1
else
  mount /dev/sdb1 /mnt/disk2
fi

@terdon神社のリクエストに応じて編集されました:

スクリプトを考えてみましょう...

公開スクリプトですか?(他のユーザーもそれを使用します。)このスクリプトの機能は何ですか?時間を教えてくれますか?それとも200台のシステムでiptablesを更新しますか?本人のみ使用する場合、業務/業務関連ですか、それとも個人的な用途ですか?

ユーザーグループが何で構成されているかを事前に知っておく必要があります。

written管理者に与えたり販売したりしても実行scriptを許可しないのはなぜですかroot?どのような年をかけることができますか?

実際のスクリプト/プログラムは、権限のあるユーザーとして実行されることが多く、誰も大丈夫だとは言いませんが、プログラマー(主に私のような初心者)がこれらのことについて話すとき、これは実際のセキュリティ上の脅威です...あなたが言及した投稿にある人が試しています。優雅ではありませんが、一部の人はコントロールコードがありますsystem...使用するよりも多くの権限を持つようにファイルを設定しますか、ロジックのすべてのチェックを実行しますか、それとも才能あるプログラマーがコードで危険を見るのでしょうか。

あなたのものならcode needs root使用しsudo、多ければ実行しなさいroot.。私の答えはここで終わります。よ〜

関連情報