WebAlizerをインストールする(備考)

WebAlizerを別の環境(NX protection 機構が働いたマシンでSELinux有効になっているケース)に入れた際にはまったポイントがあったので、メモしておく。
1.
webalizerを起動するとファイルがあるにもかかわらず
Error: Can’t open log file (Apacheのログ)
と表示される
ファイルがあるにもかかわらずこのエラーが出る場合は、SELinuxを疑ったほうが良い。
Webminから設定してあげるとうまく書き込み出来ているようなので、よく分からなければWebminから設定してみるのも良いだろう。
また、新たにディレクトリを作成し、OutputDirに指定したうえで、Webサーバーから閲覧できるようにする場合にもSELinuxが有効ならば、chconコマンドでタイプラベルを修正する必要がある。
2.
rpmbuild で警告が出るケース
make中にこんなエラーが出る場合には、RPM_OPT_FLAGSを疑ってみる。
NX protection 機構が働いている場合、
RPM_OPT_FLAGS には -O2 -g -march=i386 -mcpu=i686 ではなく
-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables
がセットされ、gccコンパイルオプションに利用されてしまう。
+ make
gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -I/usr/include/db4 -D_LARGEFILE64_SOURCE -DETCDIR=\”/etc\” -DHAVE_DB_185_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DUSE_DNS -c webalizer.c
webalizer.c: In function ‘main’:
webalizer.c:1035: warning: suggest parentheses around assignment used as truth value
webalizer.c: In function ‘unescape’:
webalizer.c:1947: warning: pointer targets in initialization differ in signedness
webalizer.c:1948: warning: pointer targets in initialization differ in signedness
webalizer.c: In function ‘srch_string’:
webalizer.c:1985: warning: pointer targets in assignment differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of ‘__builtin___strcpy_chk’ differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of ‘__strcpy_ichk’ differ in signedness
webalizer.c:1989: warning: pointer targets in assignment differ in signedness
webalizer.c:1992: warning: pointer targets in assignment differ in signedness
webalizer.c:1994: warning: pointer targets in assignment differ in signedness
webalizer.c:2009: warning: pointer targets in assignment differ in signedness
webalizer.c:2015: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness
webalizer.c:2022: warning: pointer targets in passing argument 1 of ‘put_snode’ differ in signedness
+ make
gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -I/usr/include/db4 -D_LARGEFILE64_SOURCE -DETCDIR=\”/etc\” -DHAVE_DB_185_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DUSE_DNS -c webalizer.c
webalizer.c: In function ‘main’:
webalizer.c:1035: warning: suggest parentheses around assignment used as truth value
webalizer.c: In function ‘unescape’:
webalizer.c:1947: warning: pointer targets in initialization differ in signedness
webalizer.c:1948: warning: pointer targets in initialization differ in signedness
webalizer.c: In function ‘srch_string’:
webalizer.c:1985: warning: pointer targets in assignment differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of ‘__builtin___strcpy_chk’ differ in signedness
webalizer.c:1988: warning: pointer targets in passing argument 2 of ‘__strcpy_ichk’ differ in signedness
webalizer.c:1989: warning: pointer targets in assignment differ in signedness
webalizer.c:1992: warning: pointer targets in assignment differ in signedness
webalizer.c:1994: warning: pointer targets in assignment differ in signedness
webalizer.c:2009: warning: pointer targets in assignment differ in signedness
webalizer.c:2015: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness
webalizer.c:2022: warning: pointer targets in passing argument 1 of ‘put_snode’ differ in signedness
vi webalizer.spec で
%build
CPPFLAGS=”-I%{_includedir}/db4″ ; export CPPFLAGS
CFLAGS=”$RPM_OPT_FLAGS $CPPFLAGS -D_LARGEFILE64_SOURCE” ; export CFLAGS
なっているところを強引に
%build
CPPFLAGS=”-I%{_includedir}/db4″ ; export CPPFLAGS
CFLAGS=”-O2 -g -march=i386 -mcpu=i686 $CPPFLAGS -D_LARGEFILE64_SOURCE” ; export CFLAGS
へ書き換えたらうまくいった。もちろんi686プロセッサであることが前提だが。。。

webalizerを日本語表示して使う

CentOSにてWebAlizerを日本語表示して利用する(GDで描画されるグラフは日本語化されません)方法をやってみた。Webのログ解析ソフトにはAnalogもあるが、機能差についてはまた別途評価したい。
1.yumdownloadを利用するためにyum-utilsをダウンロード
yum install yum-utils
2.ソースパッケージはデフォルトではyumdownloadでダウンロードできないので、ダウンロード先を追加
vi /etc/yum.repos.d/CentOS-Base.repo
※以下をCentOS-Base.repoの最後に追加する
[update-source]
name=CentOS-$releasever – Update Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/updates/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/updates/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1
[extras-source]
name=CentOS-$releasever – Extra Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/extras/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/extras/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1
[os-source]
name=CentOS-$releasever – OS Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/os/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/os/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1
[centosplus-source]
name=CentOS-$releasever – CentOS Plus Source Packages
baseurl=http://ftp.riken.go.jp/Linux/centos/$releasever/centosplus/SRPMS/
#baseurl=http://ftp.kddlabs.co.jp/pub/Linux/packages/CentOS/$releasever/centosplus/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
protect=1
3.yumdownloaderにてwebalizerのソースを取得し、インストールする。インストールの際にユーザーとグループが存在しない旨の警告が出るが無視する。
yumdownloader –source webalizer
rpm -ivh webalizer-2.XX_XX-XX.src.rpm
4.インストールが正しく行われているか確認
ls -l /usr/src/redhat/SPECS/webalizer.spec
5.ディレクトリを移動してソースを修正する(configureオプションを追加する)
cd /usr/src/redhat/SPECS/
vi webalizer.spec
%configure –enable-dns –with-dblib=/lib

%configure –enable-dns –with-dblib=/lib –with-language=japanese
6.rpmをビルドする
rpmbuild -ba webalizer.spec
そうすると、db4-develがないといわれることがあるので、db-4develをインストールして、再ビルドする。もし、同じようなエラーが続く場合(gd-develやlibpng-develが該当する可能性あり)には、パッケージを繰り返しインストールする。
エラー: Failed build dependencies:
db4-devel is needed by webalizer-2.XX_XX-XX.X.i386
yum install db4-devel
rpmbuild -ba webalizer.spec
7.ビルドに成功したらrpmファイルが出来ていることを確認。アーキテクチャによっては、i386のディレクトリ名が違うディレクトリ名となることがあるので確認する。
ls -l /usr/src/redhat/RPMS/i386/
8.webalizerがインストール済みの場合には一度削除し、作成されているrpmをインストールする(webalizer-debuginfoパッケージはインストールしない)
rpm -e webalizer
rpm -ivh /usr/src/redhat/RPMS/i386/webalizer-2.XX_XX-XX.X.i386.rpm
9.webalizer.confを設定する。3項目が変更対象
vi /etc/webalizer.conf
LogFile (Apacheのログファイルの場所 Redhatのデフォルトは /etc/httpd/logs/access_log になる)
OutputDir (WebAlizerのログの書き出し先)
HTMLHead <meta http-equiv=”Content-Type” content=”text/html; charset=EUC-JP”>
10.以下のコマンドを実行する。もし、webalizer.confで設定したLogFile以外のファイルを解析する場合には、引数にログファイルのパスをつけて同様に実行する。
webalizer
11.これをcronに登録しておけば、定期的にログが更新される。
なお、インストールするにあたり以下のサイトを参考にしましたので、ご紹介しておきます。
CentOS 4.5 でソース RPM をダウンロードする方法
Webalizer日本語表示

cronからのメールを送信しないようにする

vi /etc/crontab にて修正する(MAILTOの先のroot指定をなくせば良い)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
HOME=/
なお、これでもメールが送られてくるようであれば、
LANDISK HACKING DIARYの最後を参考に標準出力とエラー出力を工夫すればよい。

ファイルが大量すぎて削除できない場合には

特定のディレクトリにファイルが大量にありすぎてrmコマンドで rm * などとしても
bash: /bin/rm: Argument list too long
と出てしまう場合には、(該当のディレクトリに移動して)
find ./ -exec rm {} \;
と実行し、1ファイルずつに対してrmコマンドを実行するようにすれば削除できる。

findの結果をtarで固める

たとえば、10日以内に更新されたファイルの差分をtar.gzで固めたい場合、
find ./ -mtime -10 | xargs tar zcvf hogehoge.tar.gz
とすればよい。但し、ファイル名にスペースが含まれる場合などはtarで固める場合に、スペースが区切り文字とみなされてしまうので、対策が必要。

ルーティング設定

スタティックルート設定
コマンド:route add -net (ネットワークアドレス) netmask (サブネットマスク) gw (ゲートウェイ)
ファイル:/etc/sysconfig/static-route
デフォルトゲートウェイ設定
/etc/sysconfig/network
の中のGATEWAYを設定する。
デフォルトゲートウェイの設定を有効にするには
/etc/rc.d/network restart
を実行する。

なぜpasswdファイルが閲覧されるとまずいのか?

Linuxにはアカウントの一覧を/etc/passwdで管理しているが、Directory Traversalなどによって閲覧できてしまわないように対策を進める書籍は多い。ただなぜ閲覧させてはいけないかが書かれていないケースが非常に多い。passwdにはパスワードの情報が含まれていないにも関わらずだ。
それはユーザーの一覧が分かると総当たり攻撃に必要な時間が確実に減るからだ。ユーザーが分からなければ不特定多数ユーザー×不特定多数パスワードで無限大になるが、ユーザーが固定されれば試すパターンはユーザー数×不特定パスワードとなる。
ただpasswdが閲覧できなければ安全かと言えばそうではない。デフォルトユーザー(rootやmysqladmin、postgresなど)がログインできないことが必要である。これらがログイン可能であれば結局パターン数が絞れてしまう。
またSMTPサービスによるユーザー問い合わせにも注意しなければならない。

“なぜpasswdファイルが閲覧されるとまずいのか?” の続きを読む

cronの仕組み

cron.hourlyなどがなぜ実行されているのかを/etc/crontabから見てとることができる。
日曜日の午前4時に急にディスクアクセスが発生して自宅サーバーだと眠れなくなる原因がこれで説明できるわけだ。
$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
$ which run-parts
/usr/bin/run-parts
ところでこのrun-partsというコマンドはなんだろうか?これは引数で指定されたディレクトリ内のコマンドを処理するというものらしい。そのため、上記の設定例で行くと、/etc/cron.daily/の中に保存されたプログラムは毎日4時2分に実行されるということになる。

Linuxのメッセージが文字化けする

Linuxでインストール時の言語設定で英語以外にしてしまうと、インストール後のコマンドを入れた結果の画面表示が文字化けしてしまうケースが良くあります。
それを修正する方法がに載っていたので紹介しておきます。@IT

run level

Linuxのrun levelだがnoisettle.ddo.jpにあるように

0:システムの停止
1:シングルユーザーモード(管理者モード)
2:NFSを使わないマルチユーザーモード
3:マルチユーザーモード
4:未使用
5:GUIログインを行えるマルチユーザーモード
6:システムの再起動

となっており、多くの場合には、3(CUI)もしくは5(X Windowsシステムを利用したGUI)になっている。
/sbin/runlevel
で現在のランレベルと以前のランレベルを調べることが出来る。
なお、/sbin/chkconfig (サービス名) on
とすると2, 3, 5がonになる。