Apache Webサーバーがあります。 PHPスクリプトがあります。スクリプトは、Apacheを実行しているユーザーであるwww-dataユーザーとして実行されます。 PHPスクリプトがスクリプト所有者の権限で実行されるようにApacheを設定したいと思います。以前はsuphpを使用することができましたが、今は孤児になり、アップストリームが機能していないため、Debianはそれを削除することにしました(なぜDebianテストにはsuphpがありませんか?)。この場合、代わりに何を使うべきですか?同じことをする死んでいないApacheモジュールはありますか?
答え1
私はPHPを使用していませんが、FastCGIを使用して他の言語で同様の作業を行ったことがあります。 PHPの公式ウェブサイトで使用する方法のドキュメントを見つけることができます。FastCGIプロセスマネージャ(FPM)。
多くの機能がありますが、最も関連性の高いのは、オペレータが異なるユーザーとグループID(および異なるphp.ini
)を持つことができることです。
答え2
あなたはできません。 Apacheは、意図的に低い特権アカウント(しばしばまたapache
は呼ばれる)httpd
で実行されます。提案されているようにApacheを設定する唯一の方法は、root
Apacheが大きなセキュリティリスクにさらされる可能性があるように実行されることです。
オペレーティングシステムを使用する必要があります。少しでもお好みの効果が得られる機能です。
どのオペレーティングシステムを使用しているかは明らかではありませんでした。
一部のオペレーティングシステムはスクリプトを実行する方法を知っています。シェルボーンラインこの場合、top) は suid ビットを安全に設定します。これには、最新のBSDといくつかのSVR4バリアントが含まれます。
この場合、回避策は簡単です。別のユーザーとして実行する必要があるコマンドを、上部にPHP shebang行を持つ別のスクリプトに移動することから始めます。
#!/usr/bin/php
your commands here
次に、別のユーザーとして実行するように設定します。
$ sudo chown otheruser myscript.php
$ sudo chmod u+s otheruser myscript.php
Linuxを実行すると、suidスクリプトがオペレーティングシステムによってブロックされる可能性が高くなります。などの回避策への参照を見つけることができますが、perl -wT
一部のオペレーティングシステムまたはそのオペレーティングシステムの設定モードでもこれを防ぐことができます。これは、すべての回避策とそれを防ぐすべての方法をリストしたものではありません。簡単に言えば、オペレーティングシステムがsuidスクリプトの安全な実行を可能にする重要な機能を具体的に提供しない限り、これはできません。
標準的な解決策は、次のようにCでsuidラッパーを作成することです。
int main(int argc, char* argv[])
{
execv("/full/path/to/my-script.php", argv);
}
次に、次のコマンドを実行します。この順にラッパーをビルドし、他のユーザーとして実行できるように権限を設定します。
$ make my-script-wrapper
$ sudo chown otheruser my-script-wrapper
$ sudo chmod u+s my-script-wrapper
(ほとんどのオペレーティングシステムでは、suidビットを含むファイルが変更されるたびにsuidビットをクリアするため、順序は重要です。必要な操作を実行するためのこれら3つのコマンドの代替順序はありません。)
これで実行するmy-script-wrapper
と実行されるので、スクリプトが起動するotheruser
と、そのmy-script.php
権限でスクリプトが実行されますotheruser
。
ラッパーは、セキュリティ障害の発生を防ぐために意図的に非常に簡単です。より複雑で便利な方法をいくつか考えてみましょう。質問が多い。
ただ使用したいかもしれませんsudo
。指定されたユーザー以外のユーザーでスクリプトを実行し、root
パスワードを必要としないように構成できます。