8月 18

ApacheのCGIやPHPをユーザ権限で動かすにはmod_ruid suExec suPHP等色々ありますが今回mod_ruidを使って行ないたいと思います。
※ディフォルトのsuExecは停止させておく必要があります。

下記のパッケージをインストールする
# yum install httpd-devel
# yum install libcap-devel
ソースをダウンロードしてきてコンパイルする
# wget http://www.sourcefiles.org/Internet/WebServers/Modules/Access_Control/mod_ruid-0.6.tar.gz
# tar xvzf mod_ruid-0.6.tar.gz
# cd mod_ruid-0.6
# apxs -a -i -l cap -c mod_ruid.c

再起動するとmod_ruidが有効になる
# service httpd restart

WordPressでのエラーやphpMyAdminでのエラーの対処
※現在他の方法を模索中…
# chmod 777 /tmp/fs_sessions/ (デフォルトは700)
# chmod 777 /var/lib/php/session (デフォルトは770)

このままではapacheユーザによって作られたcgiやphpが削除できなくなったり色々と問題が発生するため現在のユーザディレクトリ内のファイル所有者を変更しpublic_htmlのパーミッションを700にするスクリプトを書いて自動で書き換える。
(色々面倒で適当に書いてるところはありますが当方が急いで書いた為なのでお気になさらずに…)

#!/usr/bin/perl
$homedir = '/home/';

opendir(DIR,$homedir);
  @list = readdir(DIR);
closedir(DIR);

foreach $udir (@list) {
$userdir = "$homedir$udir";
if(-d $userdir && $udir !~ /\.|\+/){
print "$userdir : $udir\n";
$chown = `chown -R $udir:$udir $userdir/public_html`;
$chmod = `chmod 700 $userdir/public_html`;
  }
}

今後作成されるユーザディレクトリのパーミッションを変える
# chmod 700 /etc/skel/public_html

最後に不正に他のユーザのディレクトリやファイルが閲覧出来ない事を確認する。

Tagged with:
8月 18

色々調べたところ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.orsp.net

起動
# service delegated start

Tagged with:
8月 11

別けあって今回新たに構築したサーバは勉強に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オプションを追加する必要がある。

Tagged with:
8月 10

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

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

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

Tagged with:
8月 07

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

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

visitors-0.7-JPORSP.tar.gz

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

Tagged with:
7月 28

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

また、ハッキングのお土産として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で占領されます。

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

Tagged with:
7月 07

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

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

Tagged with:
7月 07

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へ結果を保存することができる。

Tagged with:
5月 30

/ パーティション肥満化原因が/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使用率を監視しながら使用率が大幅に上がる場合等は考え直そうと思う。

Tagged with:
4月 26

あまり必要ないのか紹介が一切ないのでメモしておく。
試しに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
Tagged with: