• サイトデザイン工事中です。ご意見をお寄せください
  • 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

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

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

提供:WordPress Codex 日本語版
移動: 案内, 検索

目次

このページはラフドラフトで、まだ内容の検証が済んでいません。情報が間違っていたり書き直されることがあります。
執筆中のため、執筆者の許可なく編集しないでください

コンピュータのファイルシステムでは、ディレクトリやファイルの一つ一つにパーミッションが設定され、その読み込み、書き込み、実行を誰に (何に) 許可するかが指定されています。このパーミッションの設定は、WordPress が特定のディレクトリやファイルにアクセスして正しく機能するうえで、重要な要素となります。

パーミッション

パーミッションは、以下の値を所有者 (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 でのパーミッション構成

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

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

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

/ (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
mod_rewrite によるパーマリンク.htaccess の諸機能を利用する場合は、/.htaccess の書き込み権限を WordPress (他のユーザ) に与えてください。
プラグインによっては、/wp-content/ ディレクトリをグループと他のユーザに対して書き込み可能にする必要がありますが、その場合プラグインのインストール時に説明があるはずです。具体的には、パーミッションは 755 か、もしくはそれ以上 (一部のホストでは 777) に設定される必要があります。
同様のパーミッションは、/wp-content/cache/ と、場合によっては /wp-content/uploads/ にも使用できます。
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 の危険性

パーミッション 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-r--r--  /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 スクリプトを実行するための権限は維持されます。また、パーミッション設定を元に戻すことも、ファイル所有者の権限でいつでも可能です。

関連ページ

htaccess for subdirectories /en

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

個人用ツール
名前空間
変種
操作
このサイトについて
特集
サーバ別情報
リファレンス
ドキュメント整備
ツールボックス
他の言語