アーカイブ

Posts Tagged ‘apache’

www.msmrrenda.net リプレース計画day2

いままではごちゃまぜに置いていた非公開ページを別ホストに分離しようとしてはまった件。

通常、公開用ページは ~/public_html に置きますが、ホームは全ホスト共有です。
したがって、非公開ページを ~/private_html に分離しました。

ところが、なにやってもcgiが呼び出せません。

Mar 4 22:22:24 ainya suexec[1158]: command not in docroot (/home/renda/private_html/env.cgi)

で、suexec -V とかしてみるとこんなことが書いてあります。

-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_SYSLOG
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"

public_htmlでしか動かないんかーい。
安全上このディレクトリ設定はハードコードされており変更できないようです。
選択肢は二つ。apache全体のリビルドか、バイナリ弄ってGORIOSHI。
ま、手間的に後者かな!!!!

public_htmlよりもprivate_htmlの方が1文字長いので、この際private_htmになっていただきました。が、なぜか動かない。

Mar 4 22:50:08 ainya suexec[1375]: uid: (500/renda) gid: (500/renda) cmd: env.cgi
Mar 4 22:50:08 ainya suexec[1375]: failed to setgid (500: env.cgi)

あれ?suidかsgidでもついてたかなん?と思い、他ホストと見比べます。cap2
cap3
パーミッションは変わらないけどなんか赤い。これはいったい・・・。最悪apacheのリビルドも覚悟し、srpmの中身を覗いてみたら・・・

%caps(cap_setuid,cap_setgid+pe) %attr(510,root,%{suexec_caller}) %{_sbindir}/suexec

そっかー。
cap1

# setcap 'cap_setgid,cap_setuid+ep' /sbin/suexec

したら動きましたとさ。善い子の皆さんは横着せずにapacheをrpmbuildしましょう・・・

広告
カテゴリー:GNU/Linux タグ:

Fedora18のApache2.4の罠

Fedora17までApache2.2がデフォルトだったのですが、Fedora18からApache2.4がデフォルトとなりました。
その影響でACL周りが大幅に変更され、以前の設定が機能しなくなります
場合によってはアップグレードの結果全てのACL設定が無効になって公開されてしまう可能性があるので注意。
(具体的には/var/www/htmlの下や~/public_htmlあたりはデフォルトがAllowなので.htaccessに書いてあったACLが無効になってしまう可能性有。)

さて、今まで当然のように使っていた

Order allow,deny
allow from 192.0.2.0/24
deny from all

ですが、一応mod_access_compatで提供されるもののApache2.4では使用が推奨されません。
Fedora18のApacheではデフォルトでは使用できないようです。デフォルトがDenyのところをDirectoryでAllowしても

[authz_core:error] [pid 25916] [client 192.0.2.100:50340] AH01630: client denied by server configuration:

となりました。
新しいmod_authz系だけではこの記述を無視するようです。

ホワイトリストの新しい書き方は

Require ip 192.0.2.0/24

のようです。
逆に、ブラックリストは

<RequireAll>
Require not ip 192.0.2.100
Require all granted
</RequireAll>

とします。ちょっと掴みづらい。
ipではなくhostとするとドメイン名を指定できます。「host」なのにドメイン。ipは単純なIPv4/v6アドレスの他、prefix表記のサブネット、mask表記のサブネットも受け付ける模様。
RequireAllとRequireAny、RequireNoneを組み合わせて複雑な指定が可能になった上、
意味のない指定(RequireAnyの中でall grantedとnot ipを同時に記述するなど)をすると500を吐いてアクセスできなくなります。安全側に倒しているということでしょう。

公式の移行ガイドはこちら
mod_authz_coreのマニュアルmod_authz_hostのマニュアルも参照。

カテゴリー:GNU/Linux タグ: ,