1

シェルが必要なすべての状況で、デフォルトの /bin/sh の代わりにシェルが必要な場合に、PHP が特定のパスで実行可能ファイルを使用するようにしたいと思います (たとえば、UNIX プラットフォームで sendmail を起動するための mail() 関数、system()関数、バッククォート演算子など)。PHP を apache モジュールとして使用しているため、webserver はそのユーザーとして実行されるため、/etc/passwd で www-data ユーザーのシェルを変更しようとしました。それは役に立ちませんでした。また、SetEnvを使用してApache構成でSHELL変数を設定しようとしましたが、どちらも役に立ちませんでした。PHP によって実行されたすべてのシェル呼び出しを監査し、ログに記録したり、拒否/受け入れたりしたいので、これを行いたいと思います。system() のような PHP 関数を無効にするオプションはありません。これは、既存の (変更できない) ソリューションで使用されているためです。私はすでにその「制限付きシェル」を C でコーディングしましたが、

はい、私はすでに mail() 関数に関連してこの質問をしましたが、私はもっと一般的な解決策が必要であり、それは mail() に関連しているだけでなく、問題はシェルの一般的な使用法であることに気付きました。状況。apparmor でパス名をオーバーライドする可能性についても考えましたが、それは不可能だと思います。別のシェルを提供するためだけに apache/PHP 用のカスタム chroot "jail" を提供するソリューションは、私にとって非常にやり過ぎの状況のようです :(

よろしくお願いします!

4

1 に答える 1

1

この場合、 PHP はpopen()を使用します。これは通常、使用するようにハードコードされています/bin/sh -c(たとえば、glibc の実装を参照)。

chroot jail を設定することが本当にオプションではなく、AppArmor が提供するものが十分でない場合は、PHP または libc のいずれかを変更する必要があるかもしれません。

于 2013-06-10T08:12:14.513 に答える