実行可能ファイルに_CAP_NET_BIND_SERVICE
_などの機能( capabilities(7)
)を設定したい場合、そのファイルはaです。 script、そのスクリプトを開始するインタープリターで機能( setcap(8)
)を設定する必要がありますか、それともスクリプトで設定するだけで十分ですか?ファイル自体?
注:この質問は特にScientific Linux 6.1に関するものですが、一般的に答えることができると思います。
スクリプトの設定機能は有効になりません。これは、スクリプトでsetuid
ビットが機能しないのと同様の状況です。後者の場合と同様に、execve
がShebangを処理する方法と、その背後にあるセキュリティ推論の実装です(詳細については、 シェルスクリプトでsetuidを許可する を参照してください)。
私はあなたがこれらのオプションを持っていると思います
インタプリタ自体に機能を設定します(実際にはそのコピー)
スクリプトを実行するためのハードコードされたロジックを持つラッパー実行可能ファイルを作成し、この実行可能ファイルに必要な機能を設定します
chroot
を実行すると、そのようなラッパーを誤用する可能性がありますどちらの場合も、execve
フラグを設定して、設定された機能がinheritable
で存続することを確認する必要があります。また、通常はlibcap
と一緒に配布されるpam_cap
を使用して、選択したユーザーのみの構成によって実際に目的の機能をアクティブ化することもできます。
そして一般的には、環境を変更することによってインタプリタの動作を誰も変更できないようにする必要があります。 PYTHON_PATH
または同様のもの。