ファイルとフォルダへのPHP書き込み許可

ファイルとフォルダへのPHP書き込み許可

より明確にするために更新されました。

~によるとhttp://expressionengine.com/user_guide/installation/installation.html、それは言う:

以下は、ほとんどのUnixホストで一般的ですが、ホストに問い合わせて、より制限的な権限が利用可能かどうかを確認できます。PHPがファイル(666)とフォルダ(777)に書き込むことを許可する。 Windows サーバーでは、次のことは適用されませんが、ExpressionEngine でファイルとフォルダーを書き込むことができることを確認する必要があります。これについては、家主に連絡する必要があります。

これが何を意味するのかよく分からない。特定のファイルとフォルダをそれぞれ666と777に変更できます。私は愚かですが、上記はPHPでもこれを行うことを許可する必要があるように聞こえますか?

元の質問:

PHPが特定のファイル(666)とフォルダ(777)に書き込むことができることを確認する必要があります。

どうすればいいですか?

ベストアンサー1

ラムとMVの答えを技術的なソリューションに仕上げます。以下はすべてUNIXシリーズシステムにのみ適用されます。

UNIXファイルモードよりも強力なツールであるACLの使用例については、chmod / chownセクションをスクロールしてください。

Webサーバーのユーザー名を探す

まず、Webサーバーが実行されているユーザー名を知る必要があります。 Apacheを使用している場合、またはapacheなどになることがありますhttpdwww-dataほとんどのDebianシリーズシステムでは、Apacheはwww-data。 nginxの場合も一般的に同じですwww-data

確認するには、以下を試してください。

ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1

このコマンドで返されたユーザー名が一致することを確認してください。(たとえば、私はnginxを99%使用しますが、このコマンドはtomcat7私が一度インストールしたJava Webサーバーを返します)


Webサーバーへの許可:有効chmodchown

666または777(間違った文書/チュートリアルでこの種の問題に対して好ましい解決策)を実行すると、魔法のように動作しますが、chmod安全ではありません。 666または777の権限を付与すると、「他人」のアクセス権が付与されます。したがって、Apacheだけでなくgrandmothernsaそのユーザーアカウントがお使いのコンピュータにあると想定していますが、そうでない場合はテスト/問題を解決するためのものではない場合はこれを実行しないでください)。

より具体的に説明し、あなたとApacheにのみ権限を与えることをお勧めします。 Web サーバーにファイルに対するすべての権限を付与するには、ファイル・グループを変更します。これを行うには、所有者を再帰的に変更します。

chown -R www-data:www-data your/folder/

ただし、ほとんどの場合、グループを変更してファイルへのフルアクセスを維持したい場合があります。

chown -R yourusername:www-data your/folder/

その後、適切なタスクを実行して、chmodグループにwww-dataあなたと同じ権限を付与します。たとえば、現在のモードが640の場合(6はあなたを表し、4はwww-dataを表し、0はギターを表し、-rw-r----に翻訳されます)、660に設定(6はあなたを表し、6はwww-dataを表し、0はギターを表し、-rw-rw----に翻訳されます)。古いがエレガントなメカニズムであるファイルモードの詳細については、rahmuの回答を参照してください。

パスワードを操作する必要がないようにするには、次のchmod構文を使用することもできます。

chmod -R g+rw your/folder/

これは、「フォルダに対する読み取りおよび書き込み()権限をグループ()に再帰的にg追加する()」という意味です。+rwyour/folder/-R

90%の場合、これで十分です。


私が好む方法:アクセス制御リスト(ACL)を使う

時には最初の解決策だけでは十分ではありません。私は例を挙げますシンフォニーフレーム大量のデータを記録してキャッシュします。したがって、そのフォルダに対する書き込み権限が必要です。

CLIでSymfonyコンソール(マイユーザーアカウント)とWeb(Webサーバーユーザー)を並べて使用している場合、chmod/メソッドだけでは不十分です。chownSymfonyが権限を変更し続けるため、多くの問題が発生する可能性があります。

この例では、多くのUNIXシステムで権限を管理する高度な方法であるアクセス制御リスト(ACL)を使用しています。

以下は公式のSymfonyドキュメントで提供されるコマンドです(必要に応じてapp/cache変更してください。app/logs):

サポートされるシステムchmod +a(例: Debian/Ubuntu 以外のシステム)

sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

サポートされていないシステムchmod +a(最も一般的な)

このツールが必要な場合がありますsetfacl。システムにデフォルトでインストールされている可能性があるため、setfacl -vコマンドが機能していることを確認してください。

このコマンドが利用できない場合そしてUbuntu 14.04+を使用している場合は、ツールをインストールするだけです。

sudo apt install acl

それ以外の場合は、パーティションのマウント方法を変更する必要がある可能性があるため、オペレーティングシステムのマニュアルに従ってください(Ubuntuのドキュメントはここにあります)。

私たちは:

sudo setfacl  -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs

私はこの方法で何か問題、満足、払い戻しを受けたことがありません。

おすすめ記事