にsudo
アクセスする必要はありませんecho
。実際、これは無意味です。たとえば、sudo echo foo > bar
では、リダイレクトはルートとしてではなく、元のユーザーとして行われます。
小さなスクリプトを呼び出すsudo
ことができ、NOPASSWD:
それへのアクセスを必要とするユーザー(複数可)のみでそのスクリプト(および他の同様のスクリプト)へのアクセスを。
これは常にを使用するのに最適で最も安全な方法sudo
です。ルート権限が必要な少数のコマンドを独自の個別のスクリプトに分離し、信頼されていないユーザーまたは部分的に信頼されているユーザーがそのスクリプトをルートとしてのみ実行できるようにします。
小さなsudo
-ableスクリプトは、ユーザーからの引数(または入力)を受け取らない(つまり、呼び出す他のプログラムにはハードコードされたオプションと引数が必要です)か、必要な引数/入力を非常に慎重に検証する必要がありますユーザーから受け入れます。
検証には偏執的である-除外する「既知の悪い」ものを探し、「既知の良い」もののみを許可し、不一致やエラー、またはリモートで疑わしいものでも中止します。
検証は、スクリプトのできるだけ早い段階で行う必要があります(ルートとして何か他のことを行う前に行うことが望ましい)。
私は本当に私が最初にこの答えを書いたとき、これを言及している必要がありますが、あなたのスクリプトはシェルスクリプトであれば、それはしなければならない適切に引用するすべての変数を。でユーザによって供給される入力含む変数引用するように、特に注意してください任意の方法を、いくつかの変数が安全であると仮定しないでください、それら全てを引用。
それは潜在的に(例えば、ユーザによって制御された環境変数が含ま"$PATH"
、"$HOME"
、"$USER"
などの間違いを含む"$QUERY_STRING"
と"HTTP_USER_AGENT"
などのCGIスクリプトでは)。実際、それらすべてを引用してください。複数の引数を使用してコマンドラインを作成する必要がある場合は、配列を使用して引数リストを作成し、その引用符を付け"${myarray[@]}"
ます。
まだ十分に頻繁に「それらを引用する」と言ったことがありますか それを覚えて。やる