- サイトデザイン工事中です。ご意見をお寄せください。
- 赤色のリンクは、まだ日本語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) を許可 |
WordPress でのパーミッション構成
すべてのファイルにおいて、あなたのユーザアカウントが所有者として設定され、またそのアカウントでの書き込みが可能でなくてはいけません。また、WordPress が書き込みを行う必要のあるファイルにおいては、サーバのシステムアカウントが所有者として設定されている必要があります。そうすることで、例えば、あなたがユーザアカウントの権限でサーバにファイル転送を行う一方で、サーバは dhapache や nobody などのシステムアカウントで動作することが可能になります。
WordPress でのパーミッションは、基本的にほぼすべてのユーザで共通の設定になりますが、使用するサーバ、ユーザの行うインストールのタイプ、およびインストール時のシステム全体の umask 値などにより異なる場合があります。
- 注記 : 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
/.htaccessのパーミッション
/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 Permissions や Apple 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 DIRchmod 747 -v DIRchmod 756 -v DIRchmod 757 -v DIRchmod 764 -v DIRchmod 765 -v DIRchmod 766 -v DIRchmod 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.cgi と php.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 PHP や mod_php の代わりに、カスタムコンパイルされた
php.cgiバイナリを使用しています。通常は 755 が設定されています。
- php5.cgi のパーミッション設定
- 755 > 100
php5.cgiを実行するプロセスはファイル所有者の権限で動作するため、グループや他のユーザに対してアクセス権限を与える必要はなく、ファイル所有者の実行権限を残してすべて削除しても問題ありません。ファイル所有者からも、ファイルの読み込み、書き込み権限が取り除かれますが、PHP スクリプトを実行するための権限は維持されます。また、パーミッション設定を元に戻すことも、ファイル所有者の権限でいつでも可能です。
関連ページ
htaccess for subdirectories /en
最新英語版: WordPress Codex » Changing File Permissions (最新版との差分)