ユーザー別のページを設定する
プロバイダのサービスでホームページを持つと、URLが「http://○○○/~×××」という形式になる。×××のところに自分のユーザー名が入るわけだが、自宅サーバーでもまったく同じことができる。自分のホームディレクトリに「public_html」というディレクトリを作成し、その中にHTMLファイルを入れると「http://○○○/~×××」という形式でアクセスできる。
ページが表示されないときは
この機能は標準で有効になっているので、特に設定をする必要はない。しかし、ディレクトリのパーミッションを変更しないとうまく動作しないことがあるので注意しよう。
http://○○○/~×××を開こうとして「Forbidden」のエラーが出たときは、まず自分のホームディレクトリ「/home/×××」のパーミッションを確認する。おそらくパーミッションが「700(drwx------)」になっているはずだ。これを「711(drwx--x--x)」に変更すると見えるようになる。
それでもダメなら「public_html」ディレクトリのパーミッションを確認しよう。このディレクトリは「755(drwxr-xr-x)」に設定する必要がある。
$ cd /home ←/homeに移動する $ ls -l ←ディレクトリのパーミッションを確認 合計 12 drwx------ 6 aiko aiko 4096 Feb 5 23:42 aiko/ drwxr-xr-x 5 root root 4096 Feb 6 23:22 httpd/ drwx------ 7 yasu yasu 4096 Feb 5 23:34 yasu/ $ chmod 711 yasu ←ディレクトリの属性を変更 $ ls -l ←ふたたび確認する 合計 12 drwx------ 6 aiko aiko 4096 Feb 5 23:42 aiko/ drwxr-xr-x 5 root root 4096 Feb 6 23:22 httpd/ drwx--x--x 7 yasu yasu 4096 Feb 5 23:34 yasu/ $
ユーザーディレクトリでCGIを使う
まずはCGIスクリプトを格納するディレクトリを作成する。「/home/××/public_html」ディレクトリの中に「cgi-bin」というディレクトリを作り、パーミッションを「755(drwxr-xr-x)」に設定する。というかふつうに作成すると755のパーミッションになる。
この中にCGIスクリプトを入れておく。適当なCGIスクリプトがなければ、viで次のテキストを入力して、test.cgiのような名前で保存するといい。
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "<body>\n"; print "test\n"; print "</body>\n";
次にhttpdでCGIスクリプトを使えるように設定する。「/etc/httpd/conf/httpd.conf」を開いて、「cgi-script」のキーワードで検索をかけてみよう。830行目あたりに「#AddHandler cgi-script .cgi」という記述がある。これは「.cgiの拡張子を持つファイルはCGIスクリプトと判断して実行せよ」という意味だ。行の先頭にある「#」を削除して、この設定を有効にしよう。
とりあえずhttpd.confを保存して、httpdを再起動してみよう。ブラウザで「http://△△△/~××/cgi-bin/test.cgi」と入力して、CGIスクリプトが動くか見てみよう。おそらく「Forbidden」とエラーが表示されるはずだ。これはユーザーディレクトリではCGIスクリプトの実行が許可されていないため。httpd.cofの設定を書き換える必要がある。
ふたたびhttpd.confを開き、480行目あたりを見てみよう。「#」でコメントアウトされているが、<Directory /home/*/public_html>という設定項目がある。ここがユーザーディレクトリの設定を行う部分だ。この下につぎのような記述を追加してほしい。
<Directory /home/*/public_html/cgi-bin>
AllowOverride none
Options ExecCGI
Order deny,allow
Allow from all
</Directory>
この設定のキモは「Options ExecCGI」の行だ。1行目で指定したディレクトリではCGIスクリプトの実行を許可するという意味である。この記述を付け加えてからhttpdを保存し、さきほどのtest.cgiを開いてみる。ブラウザに「test」という文字が表示されたら、設定は完了だ。
public_htmlを自動作成する
useraddコマンドでユーザーを作成したとき、ユーザーディレクトリへ自動的にpublic_htmlディレクトリを作成するように設定することができる。こうすれば、ユーザーがいちいち手動でpublic_htmlディレクトリを作成したり、パーミッションの確認をする手間が省ける。
useraddコマンドを実行したときは「/etc/skel」ディレクトリの内容がユーザーフォルダにコピーされる。この/etc/skelディレクトリの中にpublic_htmlディレクトリを作成し、そのパーミッションを755に設定しておく。これで作業は完了だ。
また、public_htmlディレクトリの中にさらにcgi-binディレクトリも作っておく。こうすればユーザーはすぐにCGIスクリプトを使えるようになる。