ApacheでUserDir以下でCGIが実行できない
ApacheでUserDir以下でCGIが実行できないという話。
やったこと。
mod_userdirを有効化。
<IfModule mod_userdir.c> UserDir public_html </IfModule> ...... <Directory /home/*/public_html> AllowOverride All </Directory>
userのディレクトリをotherが読めるようにする。
# chmod 755 /home/user
CGIを実行できるようにする。
# cat > ~/public_html/.htaccess <<EOS Options +ExecCGI AddType application/x-httpd-cgi .cgi EOS
CGIを書く。
# cat > ~/public_html/echo.cgi <<EOS #!/bin/sh echo "Content-Type: text/plain" echo echo "It will be fine, tomorrow!" EOS
Apacheを起動してアクセスしたら500が出た。
userdir以下なのでsuexecのログを見てみる。suEXECというのは、sudoみたいにファイルオーナーの権限を使ってプログラムを実行するという仕組みです。この場合はuserの権限で実行してくれる。はず。なんだけど、(タイムスタンプは略)
# cat /var/log/httpd/suexec.log uid: (222/user) gid: (500/user) cmd: echo.cgi cannot run as forbidden uid (222/echo.cgi)
suexecがなんか文句言ってる。uidが見つからないって。ちゃんとあるよ。
suexecの設定を確認してみる。
# suexec -V -D AP_DOC_ROOT="/var/www" -D AP_GID_MIN=100 -D AP_HTTPD_USER="apache" -D AP_LOG_EXEC="/var/log/httpd/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=500 -D AP_USERDIR_SUFFIX="public_html"
userのUIDが500未満だからダメですって。
え、それどうすんの。
usermod -u UID USER
で変えて、chownでパーミッション変更してやるといいみたい。
リモート環境で、ログイン中のユーザのUIDは変えられないのでログインしなおすのがめんどい。