2
4

More than 5 years have passed since last update.

ApacheでユーザーディレクトリでCGIが動かない際の対処memo

Last updated at Posted at 2016-05-23

地味にハマって動揺したので、備忘録的に残します。

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で何でもかんでもやったらダメですね…。反省。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4