Setting up or Fixing File Permissions

Symfony generates certain files in the var/ directory of your project when running the application. In the dev environment, the bin/console and public/index.php files use umask() to make sure that the directory is writable. This means that you don't need to configure permissions when developing the application in your local machine.

symfony は、アプリケーションの実行時にプロジェクトの var/ ディレクトリに特定のファイルを生成します。開発環境では、bin/console および public/index.php ファイルは umask() を使用して、ディレクトリが書き込み可能であることを確認します。これは、ローカル マシンでアプリケーションを開発するときにアクセス許可を構成する必要がないことを意味します。

However, using umask() is not considered safe in production. That's why you often need to configure some permissions explicitly in your production servers as explained in this article.

ただし、umask() の使用は本番環境では安全とは見なされません。そのため、この記事で説明されているように、運用サーバーでいくつかのアクセス許可を明示的に構成する必要があることがよくあります。

Permissions Required by Symfony Applications

These are the permissions required to run Symfony applications:

これらは、Symfony アプリケーションを実行するために必要なパーミッションです:
  • The var/log/ directory must exist and must be writable by both your web server user and the terminal user;
    var/log/ ディレクトリが存在し、Web サーバー ユーザーと端末ユーザーの両方が書き込み可能である必要があります。
  • The var/cache/ directory must be writable by the terminal user (the user running cache:warmup or cache:clear commands);
    var/cache/ ディレクトリは、端末ユーザー (cache:warmup または cache:clear コマンドを実行しているユーザー) が書き込み可能である必要があります。
  • The var/cache/ directory must be writable by the web server user if you use a filesystem-based cache.
    ファイルシステムベースのキャッシュを使用する場合、var/cache/ ディレクトリは Web サーバーユーザーが書き込み可能である必要があります。

Configuring Permissions for Symfony Applications

On Linux and macOS systems, if your web server user is different from your command line user, you need to configure permissions properly to avoid issues. There are several ways to achieve that:

Linux および macOS システムでは、Web サーバーのユーザーがコマンド ラインのユーザーと異なる場合、問題を回避するために権限を適切に構成する必要があります。これを実現するには、いくつかの方法があります。

1. Using ACL on a System that Supports setfacl (Linux/BSD)

Using Access Control Lists (ACL) permissions is the most safe and recommended method to make the var/ directory writable. You may need to install setfacl and enable ACL support on your disk partition before using this method. Then, use the following script to determine your web server user and grant the needed permissions:

var/ ディレクトリを書き込み可能にする最も安全で推奨される方法は、アクセス制御リスト (ACL) パーミッションを使用することです。この方法を使用する前に、ディスク パーティションで setfacl をインストールし、ACL サポートを有効にする必要がある場合があります。次に、次のスクリプトを使用して Web サーバー ユーザーを特定し、必要な権限を付与します。
1
2
3
4
5
6
7
8
$ HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)

# if the following commands don't work, try adding `-n` option to `setfacl`

# set permissions for future files and folders
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
# set permissions on the existing files and folders
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

Both of these commands assign permissions for the system user (the one running these commands) and the web server user.

これらのコマンドは両方とも、システム ユーザー (これらのコマンドを実行するユーザー) と Web サーバー ユーザーにパーミッションを割り当てます。

Note

ノート

setfacl isn't available on NFS mount points. However, storing cache and logs over NFS is strongly discouraged for performance reasons.

setfacl は NFS マウント ポイントでは使用できません。ただし、パフォーマンス上の理由から、キャッシュとログを NFS 経由で保存することは強くお勧めしません。

2. Use the same User for the CLI and the Web Server

Edit your web server configuration (commonly httpd.conf or apache2.conf for Apache) and set its user to be the same as your CLI user (e.g. for Apache, update the User and Group directives).

Web サーバーの構成 (通常、Apache の場合は httpd.conf または apache2.conf) を編集し、そのユーザーを CLI ユーザーと同じになるように設定します (例: Apache の場合、User および Group ディレクティブを更新します)。

Caution

注意

If this solution is used in a production server, be sure this user only has limited privileges (no access to private data or servers, execution of unsafe binaries, etc.) as a compromised server would give to the hacker those privileges.

このソリューションを運用サーバーで使用する場合は、サーバーが侵害された場合にハッカーに権限が与えられるため、このユーザーには制限付きの権限 (プライベート データやサーバーへのアクセス、安全でないバイナリの実行など) しか持たないようにしてください。

3. Without Using ACL

If none of the previous methods work for you, change the umask so that the cache and log directories are group-writable or world-writable (depending if the web server user and the command line user are in the same group or not). To achieve this, put the following line at the beginning of the bin/console, and public/index.php files:

上記の方法がどれもうまくいかない場合は、umask を変更して、キャッシュ ディレクトリとログ ディレクトリがグループ書き込み可能または全世界書き込み可能になるようにします (Web サーバー ユーザーとコマンド ライン ユーザーが同じグループに属しているかどうかによって異なります)。 、bin/console、およびpublic/index.phpファイルの先頭に次の行を追加します。
1
2
3
4
5
umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777

Caution

注意

Changing the umask is not thread-safe, so the ACL methods are recommended when they are available.

umask の変更はスレッド セーフではないため、ACL メソッドが利用可能な場合は、それらを使用することをお勧めします。