Ubuntu で検証用・開発用LAMP環境を構築する 〜 権限のこと

LAMP環境を使いたい場面は、たいていWebアプリケーションが関連している。Webアプリケーションでは、ファイルやディレクトリへの権限をどうするか、ちょっと問題になることがある。XAMPP for Windowsで権限を気にしないといけない場面は出てこないが、権限が厳格に定められているLinux/UNIXでは重要。

個人的によく使う"Konawiki"というWikiアプリケーションをインストールする例を考えてみる。"Konawiki"SQLiteで動作するWikiで、日本語の文字を使った記法が特徴。シンプルな作りが気に入っている。

ドキュメントルート以下に解凍する

ドキュメントルートは、"~/www"。インストールするディレクトリは、"~/www/konawiki"とする。
ダウンロードしたzipを解凍する。

~/www$ unzip konawiki2g-haihu-r111.zip -d ./

ディレクトリも作られるが長くてわかりにくいので、リネームする。

~/www$ mv konawiki2g-haihu konawiki

権限を設定する

インストールが完了したので"http://127.0.0.1/konawiki/"へアクセスすると、次のようなエラーが出力されるはず。

[ERROR] The directory is not wriable. : /home/kosuke/www/konawiki/data

konawikiは最初にアクセスしたときにSQLiteのデータベースファイルをディレクトリ"data"に作るようになっている。UbuntuのtaskselからインストールしたLAMPサーバのApache実行ユーザーは"www-data"である。だから、"www-data"がディレクトリ"data"にファイル作成するための権限を付与してやれば良い。

~/www/konawiki$ chmod o+w attach data
~/www/konawiki$ ls -l
合計 72
-rw-r--r--  1 kosuke kosuke 1757 2010-07-17 10:37 ReadMe.txt
drwxr-xr-x  2 kosuke kosuke 4096 2010-04-01 13:09 action
drwxr-xrwx  2 kosuke kosuke 4096 2010-04-01 13:09 attach
drwxr-xr-x  2 kosuke kosuke 4096 2010-04-01 13:09 config
drwxr-xrwx  2 kosuke kosuke 4096 2011-05-16 16:10 data
-rw-r--r--  1 kosuke kosuke  697 2008-10-10 09:32 for_cgi.htaccess
-rw-r--r--  1 kosuke kosuke  146 2010-05-25 22:34 for_lolipop.htaccess
-rw-r--r--  1 kosuke kosuke  696 2008-10-10 09:33 for_mod.htaccess
drwxr-xr-x  2 kosuke kosuke 4096 2010-04-01 13:09 help
-rw-r--r--  1 kosuke kosuke 1801 2010-11-01 22:55 index.php
drwxr-xr-x  3 kosuke kosuke 4096 2010-07-17 10:45 lib
-rw-r--r--  1 kosuke kosuke  188 2008-10-10 02:36 page
drwxr-xr-x  2 kosuke kosuke 4096 2010-08-06 01:17 plugins
drwxr-xr-x  4 kosuke kosuke 4096 2010-07-02 23:04 resource
drwxr-xr-x 10 kosuke kosuke 4096 2010-07-02 23:04 skin
-rw-r--r--  1 kosuke kosuke 6324 2010-04-09 02:48 temp-konawiki.ini.php
drwxr-xr-x  2 kosuke kosuke 4096 2010-07-02 23:04 template
~/www/konawiki$ 

"data"だけでなく、添付ファイル保存用のディレクトリ"attach"にも書き込み権限を与えておく。これで改めて"http://127.0.0.1/konawiki/"を開き直すと、エラーなしで表示されるようになる。

権限をどうするのが適切なのか

この類の問題は、他のWebアプリケーションをインストールするときにも出てくる。みんなどうやって対処してるか調べると、所有者をまるごと"www-data"にしてしまう、というやり方があったりする。

~/www$ sudo chown -R www-data:www-data konawiki

みたいな感じで(sudoが必要)。これでも問題はないといえばないんだけど、編集するときにも"sudo"を使うかユーザを"www-data"に変更する必要があるので、面倒だと思った。
ちなみにユーザーをwww-dataに変えるときは、

$ sudo su www-data

で。
マンガでわかるWebマーケティング ―Webマーケッター瞳の挑戦!―サーバ代わりにしているUbuntuを外からでも使えるようにしている関係上、ユーザーのパスワードを長く複雑にしているため、ちょっとした作業でいちいち"sudo"を使わないといけないのは手間なのだ。だから、書き込みが生じる可能性があるファイルやディレクトリだけを特定して、書き込み権限を付与するようにしている。
Wordpressの場合だと、まず初回アクセスのウィザード実行時に"wp-config.php"を生成するので、Wordpressのインストールディレクトリに書き込み権限の付与が必要(手動でwp-config.phpを作るなら必要ない)。テーマやプラグインのインストールをダッシュボードで行うなら、ディレクトリ"wp-content"にも書き込み権限を付与しておく必要がある。wp-content配下のディレクトリにも権限が必要だから、

~/www/wordpress$ chmod -R o+w wp-content

とするか、

~/www/wordpress$ cd wp-content
~/www/wordpress/wp-content$ chmod o+w plugins themes

のように実行すればOK。"-R"を付与すると、指定したディレクトリ以下にあるファイルやディレクトリにも同じ権限を設定することができる。
これが適切な設定なのかどうかはちょっと自信はないけど、頻繁に開いたり編集するファイルならログインユーザーを所有者にしておきたいと思った。

Konawikiインストール時の補足

taskselからインストールしたLAMPサーバーは、初期状態でSQLiteが使えないので、以下のようなエラーがでる。

SQLiteが利用できません!
[ERROR] The directory is not wriable. : /home/kosuke/www/konawiki/data

次のコマンドを実行してSQLite用のモジュールをインストールしたあとで、Apache2を再起動すれば使えるようになる。

$ sudo apt-get install php5-sqlite

再起動は、

$ sudo /etc/init.d/apache2 restart

こんなふうにモジュールが足りないがためにエラーが出ることは多いと思うけど、個別に対処することは難しくない。