installation
静的に組み込みたいモジュール
|
名前 |
|
組込可否 |
|
|
mod_auth_basic |
|
|
|
|
mod_authz_user |
|
|
|
|
mod_authn_file |
|
|
|
アクセスログ解析
visitors
visitorsはコマンドを打って、htmlを出力するという仕組みなので、cronにコマンドを登録する必要がある。
cronには2つの動作のさせ方がある。
+ crontabコマンドでユーザごとのタスクを/var/spool/cron/(ubuntuの場合のパス)に保存する方法
+ /etc/cron.hourly, cron.daily, ...にコマンドを保存する方法
- 上記の各ディレクトリ配下のコマンドは/etc/crontabが呼び出してくれている
詳しくは[[cronの設定>http://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html]]を参照
今回はcron.dailyにコマンドを追加する方法で設定する。/etc/cron.daily/visitorというファイルに以下の内容を記述する
#!/bin/sh
visitors -A -m 30 /var/log/apache2/access.log -o html > /var/www/visitors/report.html
上記コマンドが期待の動作をするか試す場合は下記のようにしてあげないとリダイレクト後の権限がrootで動いてくれない
sudo sh -c 'visitors -A -m 30 /var/log/apache2/access.log -o html > /var/www/visitors/report.html'
/etc/cron.daily/visitorsをrwxrwxr-x(この権限って名前あったっけ?)にする。
chmod 775 /etc/cron.daily/visitors
command
設定ファイルに異常がないか調べる
$ apache2ctl configtest
Syntax OK
静的モジュールを一覧する
apache2 -l
MPMを確認する方法
静的モジュールを一覧すると分かる。worker.cが組み込まれていればworker MPMで動作しており、prefork.cが組み込まれていればpreforkで動作している。
$ apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
Ubuntu 8.04 で配布されているバイナリのApache/2.2.8のコンパイルオプションをチェック
$ apache2 -V
Server version: Apache/2.2.8 (Ubuntu)
Server built: Mar 10 2009 18:05:43
Server's Module Magic Number: 20051115:11
Server loaded: APR 1.2.11, APR-Util 1.2.12
Compiled using: APR 1.2.11, APR-Util 1.2.12
Architecture: 32-bit
Server MPM: Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/worker"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=""
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"
忘れがちなdirective/ modules
Multiview
ScoreBoardFile
親プロセスと子プロセス間の通信用にサーバーで使用されるファイルの設定
content negotiation - 言語や拡張子ごとにレスポンス内容を変更
apacheによる暗黙のファイル名にパターン照合
ファイル名に対する拡張子をタイプマップファイルで指定する
セキュリティのチェックリスト
以下のディレクトリの権限をチェック
rootユーザのみアクセス可能にする
-rw-r--r-- 1 root root
Apacheのユーザ(Userディレクティブで定義されたユーザ)またはグループ(Groupディレクティブで定義されたグループ)のみがウェブコンテンツのディレクトリにアクセスできるようにする。Apache userは読み取り・実行アクセスのみ行うので書き込み権限は必要ない。書き込み -コンテンツ作成(手作業、プログラムによる静的ページの自動生成を含む) - はApacheのグループに所属しているユーザから行う。
$ chmod -R 2570 /www/htdocs
-r-xrws--- 1 www-data www-data
2570の2はsetgid
Apacheのユーザ(Userディレクティブで定義されたユーザ)のみがアクセスできるようにする。Apache userは読み取り・実行アクセスのみ行うので書き込み権限は必要ない。CGIの自動生成を行わない限り、Apache group権限での書き込みは行われない。そのため、所有グループはApache groupではなく開発専用の別のグループを割り当てる。
#webevは開発グループ
chown -R www-data.webdev /www/cgi-bin
chmod -R 2570 /www/cgi-bin
Ubuntuの初期設定のまま変えない
-rw-r----- 1 syslog adm
-rw-r----- 1 root adm
ディレクティブ
サーバの署名
エラー画面などにサーバのバージョンなどの情報が表示されてしまうのを防ぐ
HTTP Headerにサーバの情報が表示されてしまうのを防ぐ
telnet> open www.yourserver.com 80
Trying 10.0.0.2...
Connected to www.yourserver.com
Escape character is '^]'.
HEAD / 1.1
HTTP/1.1 403 Forbidden
Date: Mon, 09 Nov 2009 22:30:41 GMT
Server: Apache/2.2.9 (Ubuntu) DAV/2 SVN/1.5.1 Phusion_Passenger/2.2.5
Connection: close
Content-Type: text/html; charset=iso-8859-1
DAV ON
DAVディレクティブがOnになっていると RESTが有効になってしまう。
例えば以下の例では/var/www/html/webdav以下のディレクトリでPUT DELETEなどのメソッドが有効である。
<Directory /var/www/html/webdav>
DAV On
</Directory>
特定のメソッドの実行に人称を加えたい場合は以下の様にLImitで制限する。
<Limit POST PUT DELETE>
Require valid-user
</Limit>
Option Index
Indexが上位から継承されているときは Option -Indexを指定し、それ以外の場合はOptionからIndexの指定を単に無くす。
FollowSymLinks
FollowSymLinksディレクティブをはずす。もしくは-FollowSymLinksを指定する。
Directory
上位ディレクトリで全てDenyした上で下位ディレクトリをそれぞれ使用するタイミングでAllowする。
<Directory />
Order deny,allow
Deny from all
</Directory>
<Directory “/www/htdocs”>
Order deny,allow
Allow from all
</Directory>
UserDir
その他
ApacheをconfigureするときのオプションでSuExecが実行できるコマンドのPATHを指定できる。
--suexec-safepath=”/usr/local/bin:/usr/bin:/bin”
専用のフォルダを作成し、そこに実行するであろうコマンドのsymリンクだけを作成すればよい。
sudo mkdir /usr/bin/suexec
ln /usr/bin/whois /usr/bin/suexec/whois
web scanners
CGI
設定ファイルやデータベースがDocumentRoot配下にないこと
スクリプトが作成する一時ファイルがDocumentRoot配下に無いこと。バグが引き金になってサーバーサイドの情報を書き込む可能性があるから。逆に言うとApacheユーザが書き込み可能なディレクトリはDocumentRoot以下に持たないこと
スクリプトの拡張子をURLに使用しないこと .pl .cgi mod_rewriteやフレームワークに備え付けのルーターを使用してマッピングを変更する。
Performance Tuning
まず以下の項目をチェックする
- Memoryの検討
- HDの検討
- プロセッサーの検討はCGIが高度な計算をしる以外の場合は特に大きな効果がない
- ネットワークフローの検討
- bandwidthを他のサーバ(web svr, DB svr, NFS)と共有していないか確認する
- Ethernet switch、Load balancerの導入、パケットの経路の確認
- 後記
その上でApacheのDirectiveのTuningを開始する。
ApacheのDirective
HostnameLookups
HostnameLookupsはリクエストがあるたびにリモートホスト(クライアント)のホスト名を取りに行くので使わない
AllowOverride None
AllowOverride はNoneを設定する。そうでない場合、例えば%DocumentRoot%/images/photos/20090921/birthday.jpegへのリクエストは各階層において.htaccessを探すFileI/Oが発生する。
%DocumentRoot%/.htaccess
%DocumentRoot%/images/.htaccess
:
%DocumentRoot%/images/photos/20090921/.htaccess
Option -FollowSymLinks
FollowSymLinksはセキュリティを低下するため”-”を付け足すかserver sectionのOptionには記述しないでおきたいところ。しかし、その場合Apacheは各リクエストに対してlstat()を呼び出し、これがパフォーマンスの低下につながる。これを避けるにはOption FollowSymLinksを記述した上でシムリンクを検索する。
find your_top_web_directory -type l -print
以下広告
最終更新:2009年11月10日 07:41