Category Archives: Linux (Server) - Page 10

Delegate CentOS rpm インストール

色々調べたところmakeするインストール方法が殆どでしたのでrpmでインストールする方法を纏めてみました。

ダウンロードしてくる
# wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/csbuild/SLE_10/i586/delegate-9.9.1-1.1.i586.rpm
インストール
# rpm -ivh delegate-9.9.1-1.1.i586.rpm
インストール場所の確認
# rpm -qs delegate-9.9.1-1.1.i586
通常 /etc/delegated.cf
通常 /usr/sbin/delegated
通常 /usr/share/delegate
通常 /usr/share/delegate/docs/howto.html
通常 /usr/share/delegate/docs/manual.html
通常 /usr/share/delegate/docs/tutor-en.html

設定ファイル格納用ディレクトリの作成
# mkdir /etc/delegate

起動スクリプトを書く

# vi /etc/init.d/delegated
#!/bin/sh
#
# chkconfig: 35 90 10
# description: delegated ftp proxy
# processname: delegated
# config: /etc/delegate/*.conf

DELEGATE=/usr/sbin/delegated
CONFDIR=/etc/delegate
DGROOT=/var/delegate

if [ ! -x $DELEGATE ]; then
    echo -n $"$DELEGATE does not exist."; warning; echo
    exit 0
fi

if [ ! -r $CONFDIR ]; then
    echo -n $"$CONFDIR does not exist."; warning; echo
    exit 0
fi

RETVAL=0

start() {
        echo -n $"Starting up Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          $DELEGATE DGROOT=$DGROOT +=$CONFIG
          echo
        done
        return 0
}

stop() {
        echo -n $"Shutting down Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          $DELEGATE DGROOT=$DGROOT +=$CONFIG -Fkill
          echo
        done
        return 0
}

restart() {
        stop
        start
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit 0

権限を与える
# chmod 700 /etc/init.d/delegated

ログローテーションを設定する
# vi /etc/logrotate.d/delegate

/var/log/delegate/ftp.log /var/log/delegate/pop.log /var/log/delegate/smtp.log /var/log/delegate/errors.log /var/log/delegate/stdout.log /var/log/delegate/0 {
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
create 0600 root:root
}

設定ファイルを書く(FTPプロキシ)※サーバのFTPとかぶらないようにする。
# vi /etc/delegate/ftp.conf

-P2100
SERVER=ftp
MOUNT=”/* ftp://192.168.24.4/*”
ADMIN=orbit@mail.orsx.net

起動
# service delegated start

Proftpd SELinux設定

別けあって今回新たに構築したサーバは勉強にSELinuxを稼働させてみた。
そこで最初は色々と問題が発生したのでそのひとつであるProftpdのアクセスしたディレクトリ内が見えない事について解決しようと思う。

下記のコマンドで一覧を表示する
# getsebool -a

ftp_home_dir –> off
ftpd_connect_db –> off
ftpd_disable_trans –> off
ftpd_is_daemon –> off

これらの機能が現在無効化されているためこれから下記のように有効化したいと思う。

# setsebool ftp_home_dir on
# setsebool ftpd_connect_db on
# setsebool ftpd_disable_trans on
# setsebool ftpd_is_daemon on

もう一度下記のコマンドで一覧を表示し有効になってるか確認する
# getsebool -a

ftp_home_dir –> on
ftpd_connect_db –> on
ftpd_disable_trans –> on
ftpd_is_daemon –> on

※追記
上記の設定では再起動時にリセットされる為設定を維持させるためにはsetseboolに-Pオプションを追加する必要がある。

Apache 2 Test Page powered by CentOS を表示させない

ずいぶん前にサンプルページが表示されないように設定していたはずなのに何故か度々表示されるようになったので調べてみたところ、設定ファイルwelcome.confが復活していた。

削除してもバージョンアップすれば自動で作成されるとのこと。
一応表示させない為に下記のコマンドを実行した。

mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.backup

Visitors 0.7日本語化 色々修正版

ソフトの窓様がVisitorsの日本語化をされていらっしゃいましたので、ファイルを元にその日本語化をもっと徹底的に行ないました。

修正内容
・残りの英語表記であった部分を日本語化しました。
・解析結果を表示するページが左寄でしたので中央寄せに修正しました。

visitors-0.7-JPORSP.tar.gz

使い方はソフトの窓様を参考にお願いします。

WordPress ハッキング注意 一応対策

先程うちのブログがハッキングをうけて乗っ取られました。
被害状況としては、記事を勝手に作成され下記のような画像をアップロードされてました。

また、ハッキングのお土産としてHDDの使用率を100%にするウイルス?を残されていて下記のような訳のわからないファイルを自動作成されていました。
-rw-r–r– 1 apache apache 104857600 7月 28 20:40 Wed Jul 28 20:38:27 JST 2010.dat
-rw-r–r– 1 apache apache 104857600 7月 28 20:40 Wed Jul 28 20:38:31 JST 2010.dat
-rw-r–r– 1 apache apache 104857600 7月 28 20:40 Wed Jul 28 20:38:46 JST 2010.dat
-rw-r–r– 1 apache apache 35831808 7月 28 20:41 Wed Jul 28 20:40:33 JST 2010.dat
-rw-r–r– 1 apache apache 31326208 7月 28 20:41 Wed Jul 28 20:40:34 JST 2010.dat
-rw-r–r– 1 apache apache 30171136 7月 28 20:41 Wed Jul 28 20:40:39 JST 2010.dat
-rw-r–r– 1 apache apache 87064576 7月 28 20:37 date.dat
-rw-r–r– 1 blog blog 237787 7月 28 18:02 hACKED.jpg
-rw-r–rw- 1 apache apache 1731 7月 28 20:37 hACKED.ktai.jpg

これらの止め方と修復の方法をメモしておきます。
ディレクトリへ移動し、下記のコマンドを実行します。

# rm -f hACKED.jpg
# rm -f hACKED.ktai.jpg
# rm -f a.php
# rm -f date.dat
# rm -f Wed*
# pgrep -f ‘head’ | xargs kill

その他の症状としてはtopコマンドで確認したらわかるようにheadで占領されます。

一応ハッキングした人は日本人みたいなので皆さんもご注意下さい。

ユーザにかけたクオータの解除 CentOS

ユーザディレクトリにクオータをかけたは良いが解除する方法が紹介されていない為書き込んでおこうと思う。
ユーザ:testのクオータを解除する。

# edquota -u test
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/cciss/c0d0p6 432 500000 512000 96 0 0

上記をviの方法で下記のように書き換える。

# edquota -u test
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/cciss/c0d0p6 432 0 0 96 0 0

あとは保存することでクオータが解除される。

Apacheのアクセスログを一斉にIPからHOSTへ変換する方法 CentOS

Apacheのアクセスログ(/var/log/httpd/access_log)に含まれるIPアドレスを一斉にHOST名に変更したいと思うことがしばしばある。
しかし、あまり方法が紹介されていないようなので今回書いておこうと思った。

Apachjeにはログに含まれるIPアドレスを自動的にHOST名に変換してくれるlogresolveというコマンドがある。今回これを使い一括して変換を行なおうと思う。

コマンドの形式
# logresolve < 生ログのファイル > 変換した出力先ファイル
例:
# logresolve < /var/log/httpd/access_log > ./laccess_log

これにより/var/log/httpd/access_logに含まれるIPアドレスを一括して変換し./laccess_logへ結果を保存することができる。

eAccelerator ディスクキャッシュしない

/ パーティション肥満化原因が/var/cache関連でしたのでeAcceleratorのディスクキャッシュを止めました。
又、メモリーを大量消費しないように16MBまでに制限しました。

# vi /etc/php.d/eaccelerator.ini

; Enable eAccelerator extension module
zend_extension = /usr/lib/php/modules/eaccelerator.so
; Options for the eAccelerator module
eaccelerator.cache_dir = /var/cache/php-eaccelerator
;eaccelerator.shm_size = 0
eaccelerator.shm_size = 16
eaccelerator.enable = 1
eaccelerator.optimizer = 1
eaccelerator.check_mtime = 1
eaccelerator.filter = ""
eaccelerator.shm_max = 0
eaccelerator.shm_ttl = 3600
eaccelerator.shm_prune_period = 0
;eaccelerator.shm_only = 0
eaccelerator.shm_only = 1
eaccelerator.compress = 1
eaccelerator.compress_level = 9
;eaccelerator.keys = "shm_and_disk"
eaccelerator.keys = "shm_only"
;eaccelerator.sessions = "shm_and_disk"
eaccelerator.sessions = "shm_only"
;eaccelerator.content = "shm_and_disk"
eaccelerator.content = "shm_only"
eaccelerator.debug = 0

eaccelerator.shm_only = 1
CPU使用率を監視しながら使用率が大幅に上がる場合等は考え直そうと思う。

Apache 特定サイトからのアクセスを個別にログする CentOS

あまり必要ないのか紹介が一切ないのでメモしておく。
試しに2chからのアクセスのみ別のログに保存しておくようにしてみる。

# vi /var/log/httpd/2ch_log
# vi /etc/httpd/conf.d/2ch.conf

SetEnvIf Referer "^http://.*.2ch.net" 2ch_log
SetEnvIf Referer "^http://ime.nu" 2ch_log
CustomLog /var/log/httpd/2ch_log combined env=2ch_log

# service httpd restart

余談だが、その気になれば特定のサイトからアクセスがあった場合はメールで知らせることも可能である。
参考元:今週のお題 – Apache のエラーログをメールする
# vi /root/2ch_log.pl

#!/usr/bin/perl
use strict;

my $addr = $ARGV[0] ? shift:"orbit";
while(1) {
    my $r = sysread(STDIN, my $m, 4096);
    if($m) {
        if(open(MAIL, "|/usr/bin/Mail -s '[httpd] 2ch Access' $addr")) {
            print MAIL $m;
            close MAIL;
        }
    }
    if($r <= 0) {
        last;
    }
}

# vi /etc/httpd/conf.d/2ch.conf

SetEnvIf Referer "^http://.*.2ch.net" 2ch_log
SetEnvIf Referer "^http://ime.nu" 2ch_log
CustomLog "/var/log/httpd/2ch_log" combined env=2ch_log
CustomLog "| /root/2ch_log.pl" combined env=2ch_log

# service httpd restart

追記
LAN内からのアクセスをロギングしない設定

SetEnvIf Referer "^http://.*.2ch.net" 2ch_log
SetEnvIf Referer "^http://ime.nu" 2ch_log
SetEnvIf Remote_Addr "^127.0.0." !2ch_log
SetEnvIf Remote_Addr "^192.168.24." !2ch_log
CustomLog "/var/log/httpd/2ch_log" combined env=2ch_log
CustomLog "| /root/2ch_log.pl" combined env=2ch_log

2ch ジャンプ確認 再現 ime.nu

全く同じ働きをするCGIを書いてみました。
※私の妄想にしか過ぎないので間違ってる可能性もあります。

#!/usr/bin/perl
#===================================
#スクリプト名:ジャンプCGI
#作者:ORBIT
#===================================

# URLの後ろパスがついているかチェック
if ($ENV{'PATH_INFO'} eq ""){&error;}

# パスにhttp:/が含まれている場合削除
$ENV{'PATH_INFO'} =~ s/http:///;

# URLの作成
$PATH = "http:/$ENV{'PATH_INFO'}";

# 出力
print "Content-type: text/htmlnn";
print <<EOT
<html><head>
<title>jump</title></head>
<body>
以下のURLに飛びますよろしいですか?<br>
<a href="$PATH">$PATH</a>
</body></html>
EOT
;

# パスが見つからなかった場合は下記を出力
sub error {
print "Content-type: text/htmlnn";
print <<EOT
<html><head>
<title>jump</title></head>
<body>
test
</body></html>
EOT
;
exit;
}

これをエラーページにしてるのかリダイレクトしてるのか多分そんなところかと思います。