web-dev-qa-db-ja.com

ApacheがPHPファイルをDSOとして実行しているPHPファイルに書き込めるようにしますか?

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

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

6
Rob

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

これを行うための迅速な(そして安全でない)方法は、ファイルが置かれるべきディレクトリからchmod 777 .を実行することです。これを行う前に、ls -ld .を実行して、設定する権限を取得してください。必要なディレクトリが存在しない場合があるため、最初にディレクトリを作成する必要があります。構成ファイルが書き込まれた直後に、ディレクトリを元のアクセス許可にリセットします。正しいコマンドは、ディレクトリから実行されるchmod 755 .またはchmod 750 .である可能性があります。 lsコマンドで確認します。

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

2
BillThor

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

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

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";
?>
2
Khaled

共有環境では、セキュリティの問題に関してはすべてが少し複雑になります。ファイルの所有権を「nobody」に変更することで、Apacheにそのファイルへの書き込みアクセスを許可しますが、PHPモジュールに、各仮想ホストをそれぞれの独自のディレクトリに制限する設定がない場合は、他の人にアクセスを許可します。環境でどのように設定されているかを確認します。

Apacheは通常、ユーザー「nobody」およびグループ「nobody」として実行されるため、グループのアクセス許可で遊ぶこともできます。ファイルのグループを「nobody」に変更し、権限を664に設定します。

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

2

これは、cPanelでDSOとしてPHPを実行する一般的な問題ですが、他のセットアップにも当てはまります。

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

したがって、この場合は、アクセス許可を手動で管理するだけで、777に設定できます。

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

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

DSOを介してPHPを実行するときに発生する可能性のあるアクセス許可の問題を見落とすと、SuPHPと比較した場合にいくつかの利点があります。 1つ目はスピードです。 Mod_PHPはMod_SuPHPよりも高速です。これは主に、Mod_SuPHPによって処理されるすべてのリクエストが、ファイルを所有するユーザーとして実行されるようにラップされているためです。これは、トラフィックの少ないサイトではあまり目立たないかもしれませんが、トラフィックの多いサイトでは、すぐに合計される可能性があります。 2つ目は、eAcclerator、APC、XcacheなどのPHPオペコードキャッシングが追加された完全な機能です。 PHPオペコードキャッシュの利点を最大限に活用するには、コンパイルされたPHPバイトコードをキャッシュし、DSOを介してPHPを実行するときに使用される共有ユーザーが必要です。 'nobody'ユーザーがこのニーズを満たすと、PHPを実行します。サーバーがDSOを介してPHPを実行するように設定されているかどうかは、WHMに移動し、[メイン] >> [サービス構成] >> [Apache構成]で確認できます。 >> PHPおよびSuExec構成

ここで詳細を見つけることができます:

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

0
tmow