2012-01-20 9 views

答えて

6

、いることを確認することは困難ですシェルスクリプトは意図された機能を実行します。しか敵対的な入力に直面して機能しません。シェルが動作する方法は、環境とそれ自身の多数の構成変数の設定に依存します。各コマンドラインは、複数レベルの拡張、評価、および補間の対象となります。いくつかのシェル構造体はサブプロセスで実行され、構造体に含まれる変数は親プロセス内で展開されます。攻撃される可能性のあるシステムを設計する際には、これはKISSの原則に反します。

3

恐らく簡単に締め付けることができます。 PATHが正しく設定されていないと、スクリプトは間違ったコマンドの実行を開始します。文字列のどこかにスペースを入れると、後で2つの文字列になる可能性があります。これらは、悪用可能なセキュリティホールにつながる可能性があります。手短に言えば、シェルはスクリプトがどのように動作するかについていくつか保証しますが、本当に安全なプログラミングのためには弱すぎたり複雑すぎます。

(私は、セキュアプログラミングを追加したいと思います。これには、それ自体が芸術であり、そして台無しにすることは、任意の言語で可能です。)

ので、シェルの展性の
1

本質的に安全でないスクリプトについては何もないので、私はその声明に同意しません。簡単なガイドラインが続く場合、Bashスクリプトは完全に安全です。

  • 他の人が見ることができない情報がスクリプトに含まれていますか? その場合は、所有者のみが読み取り可能であることを確認してください。
  • スクリプトはsomewherEの入力データに依存していますか?その場合は、入力データ を何らかの方法で汚染できないこと、または汚れたデータを検出して を破棄できることを確認してください。
  • 他の人が スクリプトを試して実行しようとすると問題はありますか?そうであれば、最初の点のように、誰もそれを実行できないようにしてください。 chmod 0700は、システム機能を実行するスクリプトにとっては一般的には良いアイデアです。
  • そして、あなたはスクリプトが(その通訳を介した)のsetuidを持つようにしたいと思いますケースがコンパイルされたプログラムからスクリプトを分ける2つの点は、ソースが表示されていることだろう 非常にまれ

です通訳者がそれを実行することを意味する。通訳が妥協されていない限り(setuidビットを持っているなど)、あなたは大丈夫でしょう。

システムタスクを実行するためのスクリプトを書くとき、誤植や一般的なヒューマンエラーは、ある程度はセキュリティ上の障害となる可能性がありますが、コンパイルされたプログラムの場合もそうです

ほとんどの(すべてではないにしても)Linuxのフレーバーでは、ほとんどの場合(すべてではないにしても、そうでないと考えることはできません)サービスはシェルスクリプトを介して開始されます。

+1

スクリプトが読み込めない場合、実行可能ではありません。スクリプト上のSetuidも可能ではありません。 –

1
  • それは機密データ(パスワードを渡して、対処していい男の子のために難しくなります
  • (それは他のプロセス、PATH、シェル関数、prifileで多くのことを相互作用)異なったシェルスクリプトを動作させるために、不良少年たちのために簡単ですなど)
関連する問題