PHPにファイルおよびフォルダーへの書き込み許可を与える


13

さらに明確にするために更新:

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

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

これが何を意味するのかわかりません。特定のファイルとフォルダーをそれぞれ666と777に変更できますが、ここで私はchown'erですが、上記のように、PHPにもこれを実行させる必要があるようです。

元の質問:

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

どうすればよいですか?


2
あなたが解決しようとしている問題がわかりませんか?ファイルが置かれているディレクトリにアクセスでき、その中に実行権限がある場合は、それらの権限を持つファイルとディレクトリに書き込むことができます。
Karlson 2012

上記の詳細を追加しました。
オシロワネン

1
ほとんどのUnixホストの場合、以下が一般的ですが、PHPがファイル(666)およびフォルダー(777)への書き込みを許可するために、より制限されたアクセス許可を使用できるかどうかをホストに確認することができます -昏睡状態はありますか?そうでなければ、このフレーズは意味がありません。上位レベルのディレクトリが制限されていない限り、誰でも書き込み可能なファイルまたはディレクトリへの書き込みに問題はありません。
Karlson、2012

ドキュメントからコピーして貼り付けただけです。さらに、その引用が何を意味するのか理解できないので、私が質問を投稿したのはそのためです...
oshirowanen

1
Webファイルに関連して666または777を使用することを示唆するドキュメントが表示された場合は、説明する正当な理由がない限り、おそらく無視してください。これは通常、適切な権限を設定する方法を理解できず、あきらめて、ファイルへの読み取りまたは書き込みアクセス権を全員に与えた誰かによって書かれたものです。
jsbillings 2012

回答:


18

私はrahmuとMVの答えを技術的な解決策で完成させます。以下はすべて、UNIXライクなシステムにのみ有効です。

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

Webサーバーのユーザー名を見つける

まず、Webサーバーが実行されているユーザー名を知る必要があります。Apacheを使用している場合は、それができるapachehttpdwww-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サーバーへのアクセス許可の付与:chmodおよびの使用chown

やってchmod666または777(GO-を解決悪いドキュメンテーション/チュートリアルでの問題のようなもののために)のを魔法のように、物事を動作させることができますが、安全でないです。666または777権限を付与すると、「その他」へのアクセスが許可されます。したがって、Apacheだけでなく、grandmotherand nsa(それらのユーザーアカウントがマシン上に存在することを前提として-実際には、テスト/トラブルシューティング以外の目的でこれを実行しないでください)。

より具体的で、自分とApacheだけに権限を与える方が良いでしょう。ファイルのグループを変更して、ファイルのフルコントロールをWebサーバーに付与します。これを行うには、所有者を再帰的に変更します。

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

しかし、ほとんどの場合、グループのみを変更することにより、ファイルへのフルアクセスを維持することができます。

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

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

で難解な数字を操作しないようにするにはchmod、次の構文を使用することもできます。

chmod -R g+rw your/folder/

これは、「グループへの(g)、フォルダーへの+読み取りと書き込み(rw)アクセス許可の追加()your/folder/、再帰的な(-R)」を意味します。

ケースの90%では、これで十分です。


私の優先する方法:ACL(アクセス制御リスト)の使用

最初の解決策では不十分な場合があります。大量のデータをログに記録してキャッシュするSymfonyフレームワークの例を取り上げます。したがって、適切なフォルダへの書き込みアクセス権が必要です。

また、CLI(私のユーザーアカウントの下)でSymfonyコンソールとWeb(Webサーバーユーザー)を並行して使用している場合、chmod/ chownメソッドでは不十分な場合があります。symfonyは常にパーミッションを変更しているので、これは多くの問題を引き起こします。

この場合、多くのUNIXシステムでアクセス許可を管理するためのより高度な方法であるACL(アクセス制御リスト)を使用します。

Symfonyの公式ドキュメントで提供されているコマンド(変更app/cacheapp/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

それ以外の場合は、パーティションのマウント方法を変更する必要がある場合があるため、OSのドキュメントに従ってください(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

私はこの方法で問題を抱えたことはありませんでした。


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

4

ファイルの所有者が誰であっても、666のアクセス許可と777で十分です。最後の数字は、システム上のすべてのユーザーがアクセスできることを確認します。これが最も簡単な方法ですが、そのため、間違いなく最も安全ではありません。

それを行うためのより良い方法

最初に理解する必要があるのは、Unixの権限のしくみです。このリンクで私が与えた答えを理解するために、許可は数字に変換できることに注意してください。

  • 0: ---
  • 1: --x
  • 2: -w-
  • 3: -wx
  • 4: r--
  • 5: r-x
  • 6: rw-
  • 7: rwx

A chmod 666は、権限をに変更することと同じrw-rw-rwです。

次に、PHPスクリプトを実行しているユーザーを特定する必要があります。通常、これはWebサーバーを実行しているユーザーです。これを行う方法の例を次に示します(ApacheをWebサーバーの名前に置き換えることができます)。

スクリプトを実行しているユーザーと、あなたが言及しているファイルの所有者がわかったら、適切な権限を設定するのはあなた次第です。システムのすべてのユーザーに書き込みアクセス(読み取りも含む)を与えると、悲惨な結果になる可能性があることに注意してください。


0

式エンジンは、いくつかのファイルとディレクトリへの読み取りと書き込みアクセスを必要とする他の多くのPHP Webアプリケーションと同じです。たとえば、EEはconfig.phpおよびdatabase.phpファイルへの書き込みアクセスと、ファイルアップロードディレクトリへの書き込みアクセスを必要とします。

ドキュメントの説明によると、ほとんどのサーバーはPHPをmod_phpとして実行しているため(そしてWebサーバーの権限で実行しているため)、独自のユーザーを使用してFTP(または同様のもの)でファイルをアップロードすると、これらのファイルとディレクトリには、666(誰でも読み書きできる)および777(誰でも読み書きできる)のアクセス許可を与える必要があります。

これは最も安全な方法ではありませんが、特にホスティングサービスを使用している場合は特に簡単です。

ただし、EEの説明にあるように、mod_phpを使用せずにfastcgi、suphp、または別のバージョンを使用しているホスティングプロバイダーに問い合わせてください。これらのサーバーはPHPを自分のユーザーとして実行するため、アップロードしたすべてのファイルは、PHPおよびEEスクリプトによって作成されたファイルによってすでに読み取りおよび書き込み可能です。その場合、PHPがアクセスするファイルとディレクトリには、600と700のアクセス権を与える必要があります。(PHPランタイムではなく)Webサーバーから直接アクセスされる他のファイルには、666および777アクセスが必要です)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.