WEB上からapacheの生ログを見ることができるようにするプログラム
apache生ログをWEB上から見たいという要望を受けて簡単にPHPで作ってみましたのでご紹介致します。突っ込みどころ満載かと思いますが、その場合はコメントに記載いただけましたら幸いです。改善的コメント大歓迎です。
※重大な警告:この手のスクリプトは重大なセキュリティホールを招く場合がありますので、もし実利用される場合は十分ご注意ください。
【プログラムの概要】
今回作成したプログラムでは、特定ディレクトリ内のファイルリストを取得して一覧を出します。そして一覧の中から特定ファイルをクリックするとそのファイルの最後10行(もしくは指定行数)を表示するというものです。例えばこんな感じです。
web1 top>
access_log 38543
access_log 5435
access_log 23533
error_log 10206
error_log 236
error_log 1256
【プログラム】
これを実現するプログラムは以下の通りです。特に難しいことはやってないので容易に理解できるかと思います。(赤字の部分を直して使ってください)
■logview.php
<?php
$scripturl = "http://www.example.com/admin/logview.php";
$basedir = "/var/log/httpd";global $f_cmd;
global $f_filename;
$f_numlist = 10;
if (isset($_GET["c"])) $f_cmd = htmlspecialchars(@$_GET["c"], ENT_QUOTES);
if (isset($_GET["f"])) $f_filename = htmlspecialchars(@$_GET["f"], ENT_QUOTES);
if (isset($_GET["n"])) $f_numlist = htmlspecialchars(@$_GET["n"], ENT_QUOTES);if (strpos($f_filename, "..") !== FALSE) {
print "You can't use '..'.";
exit;
}print `/bin/hostname` . "<a href='$scripturl'>top></a><br />";
?><form method="GET" action="viewlog.php">
<input type="hidden" name="c" value="<?=$f_cmd?>" />
<input type="hidden" name="f" value="<?=$f_filename?>" />
tail -<input type="text" name="n" size=3 value="<?=$f_numlist?>" />
<input type="submit" />
</form><pre>
<?php
//--------------------
//ログ一覧表示
//--------------------
if ($f_cmd == "") {
$lists = `ls -lb $basedir/*log* |awk '{print $9,$5}'`;
$arr_lists = split("\n", $lists);
foreach ($arr_lists as $list) {
$list = str_replace($basedir."/", "", $list);
$arr_list = split(" ", $list);
if ($arr_list[1] != 0) {
$arr_list_new = str_replace("error", "<font color=red>error</font>", $arr_list[0]);
print "<a href='$scripturl?c=p&f=$arr_list[0]'>$arr_list_new</a> $arr_list[1]<br />";
}
}
}//--------------------
//ログ表示
//--------------------
if ($f_cmd == "p" && !empty($f_filename)) {
system("tail -$f_numlist $basedir/$f_filename");
}
?>
</pre>
</html>
「WEBサーバ 【人気】」カテゴリの記事
- WEB上からapacheの生ログを見ることができるようにするプログラム(2010.10.28)
- KeepAliveについて考える(2004.06.11)
- メンテナンス画面を簡単に出してみる(2007.07.09)
- httpd.confがどこにあるか簡単に見つけ出す方法(2008.11.12)
- サーバにアンチウィルスソフトを入れない選択(2009.03.17)

Comments
こんにちは。
手元のCentOS5.5では、/var/www/httpdの読み込み権限がないので、権限を追加するかログをどこかに移動する必要があるみたいです。
$ ls -la /var/log/ | grep httpd | grep -v grep
drwx------ 2 root root 4096 10月 27 15:45 httpd
Posted by: shinobe | October 28, 2010 at 11:44 AM
もしくは sudo させるか、ですかね?
Posted by: segami | October 28, 2010 at 03:21 PM
OSコマンドインジェクションで、任意のコマンドが実行しほうだいじゃないでしょうか?
Posted by: | October 31, 2010 at 09:37 AM