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