地味にハマって動揺したので、備忘録的に残します。
httpd.conf を編集する
vi /etc/httpd/conf/httpd.conf
設定ファイル内の以下を編集。
# ユーザーディレクトリを有効にする為に、先頭に#を追加
#UserDir disabled
# ユーザーのホームディレクトリをpublic_htmlにする為に#を削除
UserDir public_html
# CGIが使えるようにする為に、先頭の#を削除
AddHandler cgi-script .cgi
# 末尾に以下を追加
<Directory /home/*/public_html>
Options ExecCGI
</Directory>
保存後、httpdを再起動する。
service httpd restart
ユーザーディレクトリにCGIを設置する
ユーザーasahiのホームディレクトリに、public_html ディレクトリを作成する。
# asahiのホームディレクトリに移動
cd /home/asahi/
# public_html ディレクトリを作成して、パーミッションを755にする
mkdir public_html
chmod 755 public_html
上記で出来た、/home/asahi/public_html/
に適当なCGIを作成する。
http://hogehoge/~asahi/test.cgi にアクセスするも、なんと403エラー…。
所有ユーザーを確認する。
しまった!全部rootでやってた!…ということで、作成した public_html/
フォルダや、test.cgi
の権限をチェックすると、
drwxr-xr-x 2 root root 4096 2月 10 22:09 2016 public_html
-rwxr-xr-x 1 root root 272 2月 10 22:10 2016 test.cgi
…と出る。わーごめんなさい。
ということで、
# 所有者をユーザーasahi、グループasahiに変更する
chown asahi:asahi /home/asahi/public_html/
chown asahi:asahi /home/asahi/public_html/test.cgi
よし!これで!
http://hogehoge/~asahi/test.cgi にアクセスするも、なんと500エラー…。
エラーログをチェックする。
less /var/log/httpd/suexec.log
なんかユーザーのホームディレクトリが他からも書き込み出来るとか文句言っている…?
directory is writable by others: (/home/asahi/public_html)
調べたところ、これは、「CGIを置いている上位ディレクトリのパーミッションが他人による書き込みを許可しているため」だそう。
public_html/
はちゃんと755で作成しているけれど…ということは、ユーザーのホームディレクトリ /home/asahi/
のパーミッションを調べてみる。
# homeディレクトリ配下の一覧情報を出す
ll /home/
# home配下の/home/asahi/の情報が返ってくる
drwx------ 3 asahi asahi 4096 2月 10 22:09 2016 asahi
え……?711とかじゃなくて、700…?
ともかく、このユーザーディレクトリのパーミンションが良くないらしいので、755に変更する。
chmod 755 /home/asahi/
http://hogehoge/~asahi/test.cgi にアクセスすると……動いた!!
これらの情報を得るのに、以下を参考にさせていただきましたが、
Premature end of script headers | 帰ってきただらだら日記--
それによると、
Apache はデフォルトで SuExec が有効で、その要件としてディレクトリが group writable でないということらしい。
ということらしいです。
あと、rootで何でもかんでもやったらダメですね…。反省。