DSO として実行されている PHP で Apache が PHP ファイルに書き込めるようにするには?

DSO として実行されている PHP で Apache が PHP ファイルに書き込めるようにするには?

私は PHP を DSO として実行しています。そのため、インストーラ スクリプト (構成ファイルに書き込む) は書き込みを行うことができません。

Apache (ユーザー: nobody) にファイルへの書き込み権限を与えるにはどうすればよいですか?

答え1

私はこれを安全な環境の開発サーバーでのみ実行します。多くの PHP アプリケーションは、ファイルを画面に生成し、構成ディレクトリに安全にコピーできるようにします。

これを素早く (そして安全ではない方法で) 行うには、chmod 777 .ファイルを置くディレクトリから実行します。これを実行する前に、実行して、ls -ld .設定し直す権限を取得します。必要なディレクトリが存在しない場合もありますので、まず作成する必要があります。構成ファイルが書き込まれたらすぐに、ディレクトリを元の権限にリセットします。正しいコマンドは、chmod 755 .ディレクトリchmod 750 .から実行します。ls コマンドで確認します。

設定ファイルの権限を変更して、Apache が書き込みできないようにします ( chmod o-w configfile)。アプリケーションには、多くの場合、サンプル設定ファイルが付属しています。これらの 1 つを構成ディレクトリに配置して編集する方がよい場合があります。これには、構成オプションを学習して理解する必要があります。編集を支援するために、オンライン構成スクリプトを使用できる場合があります。

答え2

などの一時ディレクトリの下に設定ファイルを書き込むことができます/tmp/config/。次に、シェル スクリプトを実行して、設定ファイルを/tmp/config/目的の場所にコピーできます。

必要な権限を付与するには、ユーザーをnobodysudoers ファイルに追加します。エントリは次のようになります。

nobody   ALL=NOPASSWD: /path/to/your_script.sh

シェル スクリプト (実行権限を追加することを忘れないでください)。

cp -r /tmp/config/* /desired/path/to/config

PHP では、次のような小さなコード スニペットが必要です。

<?php
$output = shell_exec('sudo /path/to/your_script.sh');
echo "$output";
?>

答え3

共有環境では、セキュリティ上の問題が発生すると、すべてが少し複雑になります。ファイルの所有権を「nobody」に変更すると、Apache にそのファイルへの書き込みアクセス権が与えられますが、PHP モジュールに各仮想ホストをそれぞれのディレクトリに制限する設定がない場合、他のユーザーにもアクセス権が与えられます。自分の環境での設定を確認してください。

Apache は通常、ユーザー 'nobody'、グループ 'nobody' として実行されるため、グループ権限も使用できます。ファイルのグループを 'nobody' に変更し、権限を 664 に設定します。

ファイルの所有者またはグループを変更できない場合、FTP では通常、権限を変更できます。Apache がそのファイルを所有するユーザー/グループに含まれていない場合、権限を 777 に設定する必要がありますが、これは非常に安全ではありませんが、すべては環境の種類によって異なります。一時的に設定し、アプリをインストールして、権限を 644 または 444 (読み取り専用) に戻すことができる可能性があります。

答え4

これは、cPanel を使用して PHP を DSO として実行する場合の典型的な問題ですが、他の設定にも当てはまります。

この方法を実行すると、PHP プロセスは httpd を実行しているユーザーによって処理されます。ほとんどの場合、このユーザーは「nobody」ユーザーです。つまり、PHP がファイル システム上のファイルとやり取りする場合、そのファイルは「nobody」ユーザーによってアクセス可能でなければなりません。これにより、権限の問題が発生します。権限を正しく変更しないと、通常の cPanel ベースのユーザーは「nobody」ユーザーが所有する RW (読み取り/書き込み) ファイルにアクセスできないためです。ほとんどの PHP Web アプリ/スクリプトはファイルとディレクトリに書き込む必要がありますが、それらが cPanel ユーザーが所有している場合、ファイル/ディレクトリの権限を 777 に変更しないと、問題が発生し、場合によっては Web サイトが壊れます。

この場合、権限を手動で管理し、777に設定するだけで済みます。

この PHP メソッドを実行する場合、PHP アプリ/スクリプトが機能するために必要なファイルとディレクトリの読み取りと書き込みを実行できるように、ユーザーごとに権限を手動で管理する必要があります。

あるいは、Mod_SuPHP に移行でき、パフォーマンスの問題が発生しない場合は (DSO の方がはるかに高速であるため)、cPanel を実行しているユーザーとして PHP を実行できるようになります。

DSO 経由で PHP を実行する際に発生する可能性のある権限の問題を無視すれば、SuPHP と比較していくつかの利点があります。1 つ目は速度です。Mod_PHP は Mod_SuPHP よりも高速です。これは主に、Mod_SuPHP によって処理されるすべてのリクエストが、ファイルを所有するユーザーとして実行されるようにラップされるという事実によるものです。これは、トラフィックの少ないサイトではあまり目立たないかもしれませんが、トラフィックの多いサイトではすぐに蓄積される可能性があります。2 つ目は、eAcclerator、APC、Xcache などの PHP optcode キャッシュ追加機能による完全な機能です。PHP optcode キャッシュの完全な利点を得るには、コンパイルされた PHP バイト コードをキャッシュするときに使用される共有ユーザーが必要です。また、DSO 経由で PHP を実行すると、このニーズを満たす 'nobody' ユーザーが PHP を実行します。WHM に移動し、メイン >> サービス構成 >> Apache 構成 の下を確認すると、サーバーが DSO 経由で PHP を実行するように設定されているかどうかを確認できます。>> PHP および SuExec 構成

詳細はこちらをご覧ください:

https://helpdesk.wiredtree.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=1663

関連情報