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
で。
サーバ代わりにしている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
こんなふうにモジュールが足りないがためにエラーが出ることは多いと思うけど、個別に対処することは難しくない。