機能を設定したい場合(capabilities(7)
)、たとえば、CAP_NET_BIND_SERVICE
実行可能ファイルでは、ファイルは次のようになります。台本、機能を設定する必要があります(setcap(8)
)スクリプトを起動するインタプリタで、またはスクリプトファイル自体に設定するだけで十分ですか?
注:この質問は特にScientific Linux 6.1に関連していますが、一般的に答えることができると思います。
答え1
スクリプトで設定した機能は適用されません。これはスクリプトを処理しないのと似ていますsetuid
。後者の場合と同様に、shebangの実装がどのように処理されるのか、execve
それに伴うセキュリティの理由があります(詳細については、以下を参照してください。)シェルスクリプトでsetuid設定を許可する)。
私の考えでは、このようなオプションがあると思います。
インタプリタ自体(実際にはコピー)を設定する関数
- ここで重要なのは、これを実行できる人は誰でもこれらの拡張機能(任意のスクリプトを実行したり、対話式で起動できる)を使用して実行されることです。
スクリプトを実行し、この実行可能ファイルに必要な機能を設定するために、ロジックがハードコーディングされたラッパー実行可能ファイルを作成します。
- 誰もがスクリプトを変更、削除、または交換できないようにしてください。
- それでもこれを行うと、
chroot
このようなラッパーを乱用する可能性があります。
どちらの場合も、フラグをexecve
設定してinheritable
機能セットを維持する必要があります。選択したユーザーに対して実際にアクティブにするために必要な機能のみを構成することで、通常は分散を使用することもpam_cap
できます。libcap
一般的に言えば、たとえば誰も環境を変更して通訳の動作を変更できないようにしたいと思います。PYTHON_PATH
またはそのようなもの。
答え2
2022年にシステムがsystemdを使用している場合は、CapabilityBoundingSet=
ディレクティブにリストされている必須機能を使用してsystemdデバイス構成を作成し、そこからスクリプトを実行することもできます。