すべてのコマンドではなく一部のコマンドがスーパーユーザー権限を必要とするシェルスクリプトを記述する場合、
スーパーユーザー権限が必要なコマンドにSudoを追加し、Sudoなしでシェルスクリプトを実行する、または
スーパーユーザー権限が必要なコマンドにSudoを追加しないでください。ただし、sudoを使用してシェルスクリプトを実行しますか?
2番目の方法では、パスワードを1回入力するだけで済みますが、スクリプト内のすべてのコマンドは、不要なコマンドを含め、スーパーユーザー特権で実行されます。
最初の方法では、さまざまなSudoコマンドに対してパスワードを複数回入力する必要がある場合がありますが、スーパーユーザー権限は、それらを必要とするコマンドにのみ付与されます。
セキュリティ上の問題から、最初の方法の方が優れています。便宜上、2番目の方法の方が適しています。
最初の方法を採用することを考えています。したがって、私は シェルスクリプトで複数のSudoコマンドに自分のパスワードを提供するという不便さに対処する必要があります。
適切に作成されたスクリプトは、適切な権限で実行されているかどうかを検出し、Sudoをまったく呼び出さないでしょうが、多くの悪いスクリプトがあります
だから私は2番目の方法を使うべきですか?もしそうなら、
「スクリプトが適切な権限で実行されていて、Sudoをまったく呼び出さないかどうかをスクリプトが検出する」と書くにはどうすればよいですか?
sudoを使用してスクリプトを実行するときに、スーパーユーザー特権を必要としないコマンドにスーパーユーザー特権を与える問題を回避するために、セキュリティをどのように改善できますか?
ありがとう。
最初の問題に対処するには:
「スクリプトが適切な権限で実行されていて、Sudoをまったく呼び出さないかどうかをスクリプトが検出する」と書くには
Rootの簡単なPOSIXチェックがあります。
#!/bin/sh
is_user_root ()
{
[ "$(id -u)" -eq 0 ]
}
あるいは、Bashでは、よりパフォーマンス主導のプログラマーが使用したいと思うかもしれません。
#!/bin/bash
is_user_root ()
{
[ ${EUID:-$(id -u)} -eq 0 ]
}
再利用するために、意図的にコードを関数にラップしたことに注意してください。
2番目の問題に対処するには:
sudoを使用してスクリプトを実行するときに、スーパーユーザー権限を必要としないコマンドにスーパーユーザー権限を与える問題を回避するために、セキュリティをどのように改善できますか?
これについてはあまりできません。少なくとも私の心には何も思い浮かびません。スクリプトを見た場合、提案があるかもしれません。しかし、質問に含まれていなかったので...スクリプト全体をSudo
またはroot
として実行すると、これを制御する方法がわかりません。
コメントに対処するには:
「Sudoを内部で使用するか、Sudoで実行する」についてどう思いますか
私のスクリプトでは、通常、後者の方法を使用しますが、それが必ずしも推奨されているわけではありません。それは、スクリプトの対象者に依存するためです-root
のみ。一部のユーザーがSudo
権限を持つことを除いて、ほとんどの場合ユーザー。私がどんな値でも答えられるようにするには、文字通りスクリプトを質問に含める必要があります。