Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

unikan
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした