私はrahmuとMVの答えを技術的な解決策で完成させます。以下はすべて、UNIXライクなシステムにのみ有効です。
ACLを使用した例については、chmod / chownセクションを超えてスクロールしてください。これは、UNIXファイルモードよりも強力なツールです。
Webサーバーのユーザー名を見つける
まず、Webサーバーが実行されているユーザー名を知る必要があります。Apacheを使用している場合は、それができるapache
かhttpd
、www-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
やってchmod
666または777(GO-を解決悪いドキュメンテーション/チュートリアルでの問題のようなもののために)のを魔法のように、物事を動作させることができますが、安全でないです。666または777権限を付与すると、「その他」へのアクセスが許可されます。したがって、Apacheだけでなく、grandmother
and 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/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
それ以外の場合は、パーティションのマウント方法を変更する必要がある場合があるため、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
私はこの方法で問題を抱えたことはありませんでした。