suEXEC設定

http://httpd.apache.org/docs-2.0/ja/suexec.html参照。

ユーザが複数居る環境だったらsuEXEC化した方が良いからメモ。
CGIの作ったログファイル消えないって良く言われるのよね。
コンパイルが必要だから、rpmとかで入れてたらちゃんと抜いておいてね。

$ tar zxvf httpd-2.0.50.tar.gz
$ cd httpd-2.0.50
$ ./configure --enable-suexec \
 --with-suexec-caller=nobody \
 --with-suexec-userdir=public_html \
 --with-suexec-docroot=/usr/local/apache2/htdocs \
 --with-suexec-logfile=/usr/local/apache2/logs/suexec_log \
 --with-suexec-uidmin=500 \
 --with-suexec-gidmin=500
$ make
$ su
# make install

他のオプションは自分で決めてね?

細かい説明に行くわよ。

  • --enable-suexec

suEXEC有効化のオプションよ。
これを付けないとそもそも意味が無いわ。

  • --with-suexec-caller

Apache2自身を動かすユーザを指定するわよ。
上の例だとnobodyね。

  • --with-suexec-userdir

UserDirディレクティブに対してアクセスする場合に必要よ。
たとえば、http://hogehoge/~hoge/ってアクセスね。
UserDirディレクティブに設定したディレクトリ名を指定すれば良いわよ。
たとえば、デフォルトだと「public_html」ね。

  • --with-suexec-docroot

こっちはドキュメントルートを指定するわ。
httpd.confと同じようにドキュメントルートを指定してあげてね。

  • --with-suexec-logfile

これはsuEXECの動作のログを吐き出す場所をしていするオプションね。
デフォルトで「/usr/local/apache2/logs/」に吐き出されるから、名前とか変えなくてもいいんだったら使わなくてもいいわよ。

  • --with-suexec-uidmin

これはsuEXECを有効にするuidの最低値ね。
Fedora Coreだったら500以降がユーザのはずだから、500って指定すれば良いわね。

  • --with-suexec-gidmin

こっちはsuEXECを有効にするgidの最低値ね。
こっちも500以降がユーザのgidのはずだから、500でいいわよ。

他にもオプションはあるのだけど、それは./configure --helpで確認してね。

suEXECが動いているかを確認する方法は、Apacheを起動させた後にエラーログを見てみてね。

tail /usr/local/apache2/logs/error_log
     :
     :
suEXEC mechanism enabled (wrapper: /usr/local/apache2/bin/suexec) 

suEXECが動いてることが確認できたら、ちゃんとファイルの権限を確認しておかなきゃ駄目よ?
下にリストを用意しておくから、確認してちょうだい。

  • ユーザディレクトリ:755
  • public_html:711
  • 実行ファイル:701
  • ログファイル:600
  • ロックフォルダ等:701

検索エンジン対策

http://fuga.jp/~densuke/hiki/hiki.cgi?Apache参照。
Googlebotは通すけど、GoogleBotは弾くわよ。
GoogleBotは某NaverBOTの詐称なの。

SetEnvIf User-Agent "pompos.html" BadRobot nolog
SetEnvIf User-Agent "WWWC" BadRobot nolog
SetEnvIf User-Agent "WebFetch" BadRobot nolog
SetEnvIf User-Agent "htdig" BadRobot nolog
SetEnvIf User-Agent "ia_archiver" BadRobot nolog
SetEnvIf User-Agent "Openfind" BadRobot nolog
SetEnvIf User-Agent "TurnitinBot" BadRobot nolog
SetEnvIf User-Agent "dloader" BadRobot nolog
SetEnvIf User-Agent "FAST-WebCrawler" BadRobot nolog
SetEnvIf User-Agent "Sidewinder" BadRobot nolog
SetEnvIf User-Agent "Mercator" BadRobot nolog
SetEnvIf User-Agent "BaiDuSpider" BadRobot nolog
SetEnvIf User-Agent "WISEnutbot" BadRobot nolog
SetEnvIf User-Agent "mogimogi" BadRobot nolog
SetEnvIf User-Agent "Rumours-Agent" BadRobot nolog
SetEnvIf User-Agent "Openbot" BadRobot nolog
SetEnvIf User-Agent "Scooter" BadRobot nolog
SetEnvIf User-Agent "SideWinder" BadRobot nolog
SetEnvIf User-Agent "CyberSpider" BadRobot nolog
SetEnvIf User-Agent "Gaisbot" BadRobot nolog
SetEnvIf User-Agent "InternetLinkAgent" BadRobot nolog
SetEnvIf User-Agent "slurp@inktomi.com" BadRobot nolog
SetEnvIf User-Agent "NPBot" BadRobot nolog
SetEnvIf User-Agent "searchhippo" BadRobot nolog
SetEnvIf User-Agent "grub-client" BadRobot nolog
SetEnvIf User-Agent "MSNBOT" BadRobot nolog
SetEnvIf User-Agent "www.kokotoi.org" BadRobot nolog
SetEnvIf User-Agent "Tkensaku" BadRobot nolog
SetEnvIf User-Agent "HenryTheMiragoRobot" BadRobot nolog
SetEnvIf User-Agent "GoogleBot" BadRobot nolog

Deny from env=BadRobot

CustomLog logs/access.log combined env=!nolog
CustomLog logs/badrobot.log combined env=BadRobbot

画像直リン対策

画像への直リンは大嫌いなので禁止してみる。

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://自分のアドレス/.*$ [NC] 
RewriteRule .*?.gif$ - [F]
RewriteRule .*?.png$ - [F]
RewriteRule .*?.jpg$ - [F]

mod_rewriteが入ってなかったら画像フォルダに.htaccessを置いておいて、リファラーを見て対応できるわよ。
リファラー取れないブラウザはちゃんとした経由でアクセスしてても見えないけどね。

SetEnvIf REFERER "http://以降のアドレス" Chris
Order Deny,Allow
Deny from all
Allow from env=Chris

ワーム対策編

ワームのログや画像のログが邪魔だから、ロギングしないように調整するわね。

#画像とスタイルシートをログに出力しない
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)$" nolog

#ワームはworm.logに記録
SetEnvIf Request_URI "default.ida" worm nolog
SetEnvIf Request_URI "root.exe" worm nolog
SetEnvIf Request_URI "cmd.exe" worm nolog
SetEnvIf Request_URI "Admin.dll" worm nolog
SetEnvIf Request_URI "mem_bin" worm nolog
SetEnvIf Request_URI "vti_bin" worm nolog
SetEnvIf Request_URI "msadc" worm nolog
SetEnvIf Request_URI "MSADC" worm nolog
SetEnvIf Request_URI "scripts" worm nolog

#ローカルからのアクセスは記録しない
SetEnvIf Remote_Addr 192.168.12. nolog
SetEnvIf Remote_Addr 127.0.0.1 nolog

#ログの出力先
CustomLog logs/worm.log common env=worm
CustomLog logs/access.log combined env=!nolog