• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

ファイルパーミッションの変更

提供: WordPress Codex 日本語版
Changing File Permissionsから転送)
移動先: 案内検索

このページ「ファイルパーミッションの変更」は一部未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています

コンピュータのファイルシステムでは、ディレクトリやファイルの一つ一つにパーミッションが設定されており、その読み込み、編集、アクセスを誰に (何に) 許可するかが指定されています。これは、WordPress が特定の関数を有効化するために wp-content ディレクトリ内のファイルに書き込むためのアクセスが必要になる場合があるので、重要です。

パーミッションモード

  7       7    7
 user   group  world
 r+w+x  r+x    r+x
 4+2+1  4+0+1  4+0+1 = 755

パーミッションモードは、以下の値を所有者 (user)、グループ (group)、他のユ―ザ (other) に割り当てて算出します。

* Read 4 - 読み込みを許可
* Write 2 - 書き込みを許可
* eXecute 1 - 実行を許可

算出は、以下の図のように行えます。

   6      4      0
 user   group  other
 r+w    r
 4+2+0  4+0+0  0+0+0  = 640
  4      0      0
 user   group  other
 r+w     
 4+2+0  4+0+0  0+0+0  = 400

パーミッション例

文字列 説明
0477 -r--rwxrwx 所有者に read (4)、グループと他のユーザに read、write、execute (7) を許可
0677 -rw-rwxrwx 所有者に read、write (6)、グループと他のユーザに read、write、execute (7) を許可
0444 -r--r--r-- 所有者、グループ、他のユーザに read (4) を許可
0666 -rw-rw-rw- 所有者、グループ、他のユーザに read、write (6) を許可
0400 -r-------- 所有者に read (4) を許可、グループと他のユーザは権限なし (0)
0600 -rw------- 所有者に read、write (6) を許可、グループと他のユーザは権限なし (0)
0470 -r--rwx--- 所有者に read (4)、グループに read、write、execute (7) を許可、他のユーザは権限なし (0)
0407 -r-----rwx 所有者に read (4) を許可、グループは権限なし (0)、他のユーザに read、write、execute (7) を許可
0670 -rw-rwx--- 所有者に read、write (6)、グループに read、write、execute (7)を許可、他のユーザは権限なし (0)
0607 -rw----rwx 所有者に read、write (6) を許可、グループは権限なし (0)、他のユーザに read、write、execute (7) を許可
全一覧は 0000 to 0777 を参照

WordPress でのパーミッション構成

Permissions will be different from host to host, so this guide only details general principles. It cannot cover all cases. This guide applies to servers running a standard setup (note, for shared hosting using "suexec" methods, see below).

Typically, all files should be owned by your user (ftp) account on your web server, and should be writable by that account. On shared hosts, files should never be owned by the webserver process itself (sometimes this is www, or apache, or nobody user).

すべてのファイルにおいて、あなたのユーザアカウントが所有者として設定され、またそのアカウントでの書き込みが可能でなくてはいけません。また、WordPress が書き込みを行う必要のあるファイルにおいては、サーバのシステムアカウントが所有者として設定されている必要があります。そうすることで、例えば、あなたがユーザアカウントの権限でサーバにファイル転送を行う一方で、サーバは dhapache や nobody などのシステムアカウントで動作することが可能になります。

/* Any file that needs write access from WordPress should be owned or group-owned by the user account used by the WordPress (which may be different than the server account). For example, you may have a user account that lets you FTP files back and forth to your server, but your server itself may run using a separate user, in a separate usergroup, such as dhapache or nobody. If WordPress is running as the FTP account, that account needs to have write access, i.e., be the owner of the files, or belong to a group that has write access. In the latter case, that would mean permissions are set more permissively than default (for example, 775 rather than 755 for folders, and 664 instead of 644). */

WordPress でのパーミッションは、基本的にほぼすべてのユーザで共通の設定になりますが、使用するサーバ、ユーザの行うインストールのタイプ、およびインストール時のシステム全体の umask 値などにより異なる場合があります。

  • 注記: If an experienced user installed WordPress for you, you likely do not need to modify file permissions. Unless you are experiencing problems with permission errors, or you want to, you probably should not mess with this.

Typically, all core WordPress files should be writable only by your user account (or the httpd account, if different). (Sometimes though, multiple ftp accounts are used to manage an install, and if all ftp users are known and trusted, i.e., not a shared host, then assigning group writable may be appropriate. Ask your server admin for more info.) However, if you utilize mod_rewrite Permalinks or other .htaccess features you should make sure that WordPress can also write to your /.htaccess file.

If you want to use the built-in theme editor, all files need to be group writable. Try using it before modifying file permissions, it should work. (This may be true if different users uploaded the WordPress package and the Plugin or Theme. This wouldn't be a problem for Plugin and Themes installed via the admin. When uploading files with different ftp users group writable is needed. On shared hosting, make sure the group is exclusive to users you trust... the apache user shouldn't be in the group and shouldn't own files.)

Some plugins require the /wp-content/ folder be made writeable, but in such cases they will let you know during installation. In some cases, this may require assigning 755 permissions. The same is true for /wp-content/cache/ and maybe /wp-content/uploads/ (if you're using MultiSite you may also need to do this for /wp-content/blogs.dir/)

Additional directories under /wp-content/ should be documented by whatever plugin / theme requires them. Permissions will vary.

  • 注記: WordPress を自分でインストールした場合、とくにパーミッションを変更する必要はないことがほとんどです。一部のファイルとディレクトリ(具体的に言えば wp-config.php ファイル)は、特に厳しい権限を適用し「(セキュリティの)強化」をすべきです。このファイルは当初644権限で作成され、そのままにしておくのは危険です。WordPress_の安全性を高めるをご覧ください。

以下の図はディレクトリごとのパーミッション設定です。

/ (root directory)        - 所有者に対してのみ、すべてのファイルの書き込み権限を許可                       
|- index.php
|- wp-admin               - 所有者に対してのみ、すべてのファイルの書き込み権限を許可
|   |
|   `- wp-admin.css
|
|- wp-blog-header.php
|- wp-comments-post.php
|- wp-commentsrss2.php
|- wp-config.php
|- wp-content      
|   |- cache
|   |- plugins           - 所有者に対してのみ、すべてのファイルの書き込み権限を許可
|   |
|   |- themes            - 所有者に対してのみ、すべてのファイルの書き込み権限を許可
|   |
|   `- uploads
|- wp-cron.php
|- wp-includes           - 所有者に対してのみ、すべてのファイルの書き込み権限を許可
|
|- wp-images             - 所有者に対してのみ、すべてのファイルの書き込み権限を許可
`- xmlrpc.php

Shared Hosting with suexec

The above may not apply to shared hosting systems that use the "suexec" approach for running PHP binaries. This is a popular approach used by many web hosts. For these systems, the php process runs as the owner of the php files themselves, allowing for a simpler configuration and a more secure environment for the specific case of shared hosting.

Note: suexec methods should NEVER be used on a single-site server configuration, they are more secure only for the specific case of shared hosting.

In such an suexec configuration, the correct permissions scheme is simple to understand.

  • All files should be owned by the actual user's account, not the user account used for the httpd process.
  • Group ownership is irrelevant, unless there's specific group requirements for the web-server process permissions checking. This is not usually the case.
  • All directories should be 755 or 750.
  • All files should be 644 or 640. Exception: wp-config.php should be 440 or 400 to prevent other users on the server from reading it.
  • No directories should ever be given 777, even upload directories. Since the php process is running as the owner of the files, it gets the owners permissions and can write to even a 755 directory.

In this specific type setup, WordPress will detect that it can directly create files with the proper ownership, and so it will not ask for FTP credentials when upgrading or installing plugins.

Popular methods used by sysadmins for this setup are:

  • suPHP, runs through php-cgi, currently unmaintained since 2013.
  • mod_ruid2, apache module, simple but effective.
  • mpm-itk, apache module.
  • mod_fcgid, an Apache module and FastCGI server with more extensive configuration.
  • PHP-FPM, an alternative FastCGI server with shared OPCode, for use with Apache and Nginx.

/* 以下古いコンテンツの可能性? */

  • /.htaccess のパーミッション
mod_rewrite によるパーマリンク.htaccess の諸機能を利用する場合は、/.htaccess の書き込み権限を WordPress (他のユーザ) に与えてください。
  • /wp-content/ のパーミッション
プラグインによっては、/wp-content/ ディレクトリをグループと他のユーザに対して書き込み可能にする必要がありますが、その場合プラグインのインストール時に説明があるはずです。具体的には、パーミッションは 755 か、もしくはそれ以上 (一部のホストでは 777) に設定される必要があります。
同様のパーミッションは、/wp-content/cache/ と、場合によっては /wp-content/uploads/ にも使用できます。
  • /wp-content/themes のパーミッション
WordPress のテーマエディタを使う場合は、編集対象となるテーマファイルの書き込み権限をグループに許可してください。しかし、通常はパーミッションを特別に変更する必要はありません。

FTP クライアントによるパーミッションの変更

FTP クライアントを使用して、リモートホストにあるディレクトリおよびファイルのパーミッションを設定することができます。この機能は、プログラムメニューで通常 chmodパーミッションを変更 などという名前で見つけることができます。

WordPress を設置する際、一般的にユーザがパーミッションの変更を加えるファイルに、index ページとレイアウトを制御する CSS の 2 つがあります。FTP クライアントを使ったパーミッション変更例として、以下に FileZillaを利用したindex.php のパーミッション変更の手順を示します。(この手順は他のファイルで変更を行う際も同じです)

スクリーンショットの右端の項目、文字列で表示された部分がパーミッションです。

1. [index.php] を右クリックし、[ファイル パーミッション] を選択する

変更前のパーミッション設定

2. ポップアップ画面が表示される

パーミッションを変更する
チェックボックスは無視して、[数値(N):] の値を削除し、必要な値 (この場合は 666) を入れて [OK] をクリックする

3. 更新されたパーミッション設定が表示される

変更後のパーミッション

隠しファイルの表示

デフォルト設定では、Filezilla を含む、ほぼすべての FTP クライアントが、ファイル名がピリオド (.) で始まるファイルを非表示にしています。しかし、パーミッションを変更するために隠しファイルを表示する必要があるかもしれません。例えば、パーマリンクを制御する .htaccess ファイルを書き込み可能にする場合などがそうです。

FileZilla では、隠しファイルを表示する場合、メニューバーから [サーバ] → [強制的に隠しファイルを表示] にチェックを入れる必要があります。画面表示が更新され、常に隠しファイルが表示されるようになります。


コマンドラインによるパーミッションの変更

shell/SSH でサーバにアクセスする権限を持っているのであれば、chmod コマンドを使用してパーミッションを変更することができます。chmod コマンドを使用する前に、Unix PermissionsApple Chmod Reference などのチュートリアルを読み、このコマンドについて必ず理解しておいてください。パーミッションを間違えて設定すると、Web サイトはオフラインになります。時間をかけて正確に行ってください。

chmod コマンドは、UNIX で使用されるコマンドで、任意のファイルのパーミッションを変更 (change mode) することを意味します。以下に 2 の例を挙げて、その手順を示します。

ここではまず、wp-content ディレクトリ内のすべてのファイルを、すべてのグループとユーザに対して書き込み可能にしてみましょう。コマンドに -R オプションを追加することで、wp-content 内のすべてのディレクトリおよびファイルに変更を適用するよう指定します。設定するパーミッションは 766 です。この場合 WordPress およびすべてのグループとユーザがディレクトリに読み込み、書き込みを行えるようになります。コマンドの最後に記述されるのは、変更対象となるディレクトリ名 wp-content です。766 でうまくいかない場合は、777 を設定してみてください。その場合、すべてのユーザ、グループ、プロセスが、すべてのディレクトリとファイルに読み込み、書き込み、実行を行えるようになります。

以下の 2 つのステップで wp-content ディレクトリ内のすべてのファイルを、すべてのグループとユーザに対して書き込み可能にできます :

1. コマンドラインで次の行を入力して WordPress のメインディレクトリに移動

  cd wordpress/ 

2. コマンドラインで次の行を入力して該当ディレクトリ内のすべてのファイルのパーミッションを変更

  chmod -R 777 wp-content

この手順を使って、今度は .htaccess ファイルを、すべてのグループとユーザに対して書き込み可能にしてみましょう。 mod_rewrite によるパーマリンクを使用する場合、WordPress が .htaccess ファイルを更新できるようにパーミッションを以下のように設定する必要があります :

1. コマンドラインで次の行を入力して WordPress のメインディレクトリに移動します。

  cd wordpress/

2. コマンドラインで次の行を入力して、該当ファイルのパーミッションを変更します。

  chmod 666 .htaccess 

wp-content ディレクトリ内などですべてのファイルを書き込み可能にする前に、最初はディレクトリのみを書き込み可能にするなど、より安全な方法を試してみてください。下記のコマンドを利用できます。

chmod 746 -v DIR
chmod 747 -v DIR
chmod 756 -v DIR
chmod 757 -v DIR
chmod 764 -v DIR
chmod 765 -v DIR
chmod 766 -v DIR
chmod 767 -v DIR

うまくいかない場合は、recursive オプションを追加して、ディレクトリとその配下のパーミッションを再帰的に変更してみてください。上記コマンドの -v–R に置き換えて実行します。 また、recursive オプションでは、ユーザが作成したディレクトリやファイルに対しても変更を行えます。 DIR を任意のファイル名に置き換えてください。ファイルを指定してパーミッションを変更できます。
これらの設定を行っても書き込みできない場合には、777 を試してください。

  • 注記 :セキュリティの観点から、パーミッションを 777 (すべてのユーザが書き込み可能)に設定することは避け、最低限でも良いのでアクセス制限をかけてください。まずは744 などの限定的なパーミッション設定から始め、動作が確認できるまで順番に変更していきましょう。必要な際にのみ 777 を使い、できることならば短時間の使用にとどめてください。


パーミッション 777 の危険性

パーミッション 777 の危険性の背景にあるのは、Apache のサーバ構成です。通常、サーバ・アプリケーションが Web サイトを動かすときに使うユーザ名は、あなたが FTP や SSH でサーバにアクセスするときに使うユーザ名とは異なります。

  7      7      7
 user   group  other
 r+w+x  r+w+x  r+w+x
 4+2+1  4+2+1  4+2+1  = 777

よく見られるケースでは、Apache サーバのプロセス所有者は、dhapache や nobody といったシステムアカウントに設定されています。そして、これらのシステムアカウントでは、セキュリティ上の理由からディレクトリやファイルへのアクセス権限を制限されています。 しかし、仮にユーザ個人のディレクトリやファイルのパーミッションを 777 に設定した場合、それらのディレクトリやファイルは文字通り「すべてのユーザが書き込み可能」になり、結果として、dhapache および nobody が、あなた個人のファイルへのアクセス権限を持つことになります。

このとき他のローカルユーザを始めとする第三者が、サーバプロセスのどれかひとつでも乗っ取りさえすれば、この脆弱性を突いて、あなたのファイルへアクセスすることができるのです。これらを考慮して、パーミッションを変更する際には、注意して行ってください。通常パ―ミッションの設定を 767 以上に開放することはありません。777 に設定されているときは、その設定が本当に必要か良く考えましょう。

最悪の場合

ディレクトリやファイルに対してパーミッション 777 を設定したとき、最悪の場合、攻撃者や悪意あるユーザが不正なファイルのアップロード、またはファイルの改竄を行い、任意のコードを実行してデータベースの情報およびパスワードを含めた Web サイトのすべてを乗っ取る可能性があります。

回避策

WordPress プラグインを使うことで、比較的簡単にセキュリティの強化を行い、リスクを回避することできます。プラグイン製作者、またはサーバのサポートサービスにコンタクトを取り、回避策を講じてください。

適切なファイル・パーミッション設定

.htaccess ファイルは、サーバプロセスの所有者がアクセスするファイルのひとつです。パーミッションを制限しすぎた場合、サーバがファイルにアクセスできなくなり、エラーの原因となります。しかし適切なパーミッション設定を得るときには、まず限定的な設定から始め、動作が確認できるレベルまで開放していく手順を踏みます。

パーミッション設定例

パーミッションの設定例を説明します。cgi-bin ディレクトリ内に PHP スクリプトの実行のための php.cgiphp.ini ファイル、そしてアクセス制御のための .htaccess が設置されている場合、パーミッションは以下のようになります。

  • デフォルト設定 (umask 022)
 644 -rw-r--r--  /home/user/wp-config.php
 644 -rw-r--r--  /home/user/cgi-bin/.htaccess
 644 -rw-r--r--  /home/user/cgi-bin/php.ini
 755 -rwxr-xr-x  /home/user/cgi-bin/php.cgi
 755 -rwxr-xr-x  /home/user/cgi-bin/php5.cgi
  • 適切な設定
 600 -rw-------  /home/user/wp-config.php
 604 -rw----r--  /home/user/cgi-bin/.htaccess
 600 -rw-------  /home/user/cgi-bin/php.ini
 711 -rwx--x--x  /home/user/cgi-bin/php.cgi
 100 ---x------  /home/user/cgi-bin/php5.cgi

.htaccess のパーミッション設定

644 > 604
グループから .htaccess の読み込み権限を取り除きます。通常は 644 が推奨設定です。

php.ini のパーミッション設定

644 > 600
パーミッション 644 では、すべてのグループとユーザに php.ini に対する読み込み権限が与えられおり、Web サイトから容易にアクセスされる可能性があります。設定変更に際して留意する点は、php.ini にアクセスするファイルは php.cgi のみであるため、最低限 php.cgi のプロセスに権限が与えられていれば動作に問題はないということです。パーミッション 600 では、php.cgi がファイル所有者の権限で動作しながら、グループや他のユーザからのアクセスを制限することができます。

php.cgi のパーミッション設定

755 > 711
ここでは、プロバイダから標準で提供される vanilla PHPmod_php の代わりに、カスタムコンパイルされた php.cgi バイナリを使用しています。通常は 755 が設定されています。

php5.cgi のパーミッション設定

755 > 100
php5.cgi を実行するプロセスはファイル所有者の権限で動作するため、グループや他のユーザに対してアクセス権限を与える必要はなく、ファイル所有者の実行権限を残してすべて削除しても問題ありません。ファイル所有者からも、ファイルの読み込み、書き込み権限が取り除かれますが、PHP スクリプトを実行するための権限は維持されます。また、パーミッション設定を元に戻すことも、ファイル所有者の権限でいつでも可能です。

/* 755 > 100 - Because of the setup where the user account is the owner of the process running the php cgi, no other user or group needs access, so we disable all access except execution access. This is interesting because it really works. You can try reading the file, writing to the file, etc.. but the only access you have to this file is to run php scripts. And as the owner of the file you can always change the permission modes back again.

*/

$ cat: php5.cgi: Permission denied
./php5.cgi:  Welcome

関連ページ

最新英語版: WordPress Codex » Changing File Permissions最新版との差分