web-dev-qa-db-ja.com

Linuxでのスクリプトの機能

実行可能ファイルに_CAP_NET_BIND_SERVICE_などの機能( capabilities(7) )を設定したい場合、そのファイルはaです。 script、そのスクリプトを開始するインタープリターで機能( setcap(8) )を設定する必要がありますか、それともスクリプトで設定するだけで十分ですか?ファイル自体?

注:この質問は特にScientific Linux 6.1に関するものですが、一般的に答えることができると思います。

8
0xC0000022L

スクリプトの設定機能は有効になりません。これは、スクリプトでsetuidビットが機能しないのと同様の状況です。後者の場合と同様に、execveがShebangを処理する方法と、その背後にあるセキュリティ推論の実装です(詳細については、 シェルスクリプトでsetuidを許可する を参照してください)。

私はあなたがこれらのオプションを持っていると思います

  1. インタプリタ自体に機能を設定します(実際にはそのコピー)

    • ここで問題があるのは、それを実行できる人は誰でもそれらの高度な機能で実行される(任意のスクリプトを実行したり、インタラクティブに開始したりできる)
  2. スクリプトを実行するためのハードコードされたロジックを持つラッパー実行可能ファイルを作成し、この実行可能ファイルに必要な機能を設定します

    • スクリプトを変更したり、削除/置換したりできないことを確認してください
    • それでもchrootを実行すると、そのようなラッパーを誤用する可能性があります

どちらの場合も、execveフラグを設定して、設定された機能がinheritableで存続することを確認する必要があります。また、通常はlibcapと一緒に配布されるpam_capを使用して、選択したユーザーのみの構成によって実際に目的の機能をアクティブ化することもできます。

そして一般的には、環境を変更することによってインタプリタの動作を誰も変更できないようにする必要があります。 PYTHON_PATHまたは同様のもの。

8