teratern自動ログイン設定

via http://sourceforge.jp/magazine/10/01/08/0825239
を参考に。
俺の場合一旦suしてから対象ユーザにsuし直すから(パスワード覚えなくていいから楽)、とりあえず一気にsuするようにしました。

ツールはteratermpro UTF-8 ver4.67

.ttlファイル作成

サーバ名.ttl

.ttl内で使えるコマンドピックアップ

getpassword [パスワードファイル] [キー] [保存先変数名]
  • 最初の一回だけ入力を求められる
  • 入力した内容はパスワードファイルに保存される
  • 次回以降はパスワードファイルから読み出される
  • 一行でおいしい便利オペコード
strconcat [変数] [文字]
  • [変数]に[文字]を足す。左辺値は受け取り
callmenu [番号]

認証鍵使うやつ

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
username = 'user'
rootname = 'root'
hostname = 'example.jp'
passwdfile = 'C:\hogehoge\terminal\password.dump';
keyfile = 'C:\hogehoge\terminal\ssh_key\cert'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; user password
passwdkey = username
strconcat passwdkey '@'
strconcat passwdkey hostname
getpassword passwdfile passwdkey userpass

; root password
passwdkey = rootname
strconcat passwdkey '@'
strconcat passwdkey hostname
getpassword passwdfile passwdkey rootpass


msg = hostname
strconcat msg ':22 /ssh /1 /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
strconcat msg ' /passwd="'
strconcat msg userpass
strconcat msg '"'
connect msg

timeout=15

;文字コードをeuc-jp
callmenu 54011

; su
wait '$'
sendln 'su -'
Wait ':'
sendln rootpass

認証鍵不要

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
username = 'user'
rootname = 'root'
hostname = 'example.com'
passwdfile = 'C:\hogehoge\terminal\password.dump';
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; user password
passwdkey = username
strconcat passwdkey '@'
strconcat passwdkey hostname
getpassword passwdfile passwdkey userpass

; root password
passwdkey = rootname
strconcat passwdkey '@'
strconcat passwdkey hostname
getpassword passwdfile passwdkey rootpass


msg = hostname
strconcat msg ':22 /ssh /2 /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg userpass

connect msg
timeout=15


; su
wait '$'
sendln 'su -'
Wait ':'
sendln rootpass

FireFoxがメモリを食いまくるのをなんとかする。

現在使用PCのメモリが2GB。
FireFox を立ちあげてると全部食われるので、
対策。
Memory Fox というアドオンを入れたがどうも効果が出ない。

今回は以下の処方をしてみる。
結果はまた後日(不満があれば引き続き書く、便りがないのは無事な証拠)。

profileフォルダ以下にusers.js を作成
中身

// 1.メモリキャッシュの量を指定(単位はKB - 例: 16384/32768/65536など)
user_pref("browser.cache.memory.capacity", 16384);
// 2.ウィンドウ最小化時にメモリ使用量を節約(Windowsのみ)
user_pref("config.trim_on_minimize", true);
// 3. 高速戻る・進む機能の最大保存履歴数を変更する(0:機能を無効)
user_pref("browser.sessionhistory.max_total_viewers", 2);

via http://firefox.geckodev.org/index.php?%E3%83%A1%E3%83%A2%E3%83%AA%E6%B6%88%E8%B2%BB

suexecに適したproftpdの設定

コンフィグの編集

vi /etc/proftpd.conf

変更

umask 027
LoadModule mod_exec.c

追記

ListOptions "-a"
PassivePorts 60000 60100
<IfModule mod_exec.c>
    ExecEngine on
    #ExecLog /var/log/proftpd/exec.log
    ExecOnCommand STOR /usr/local/bin/proftpdcgipermit %u %f
</IfModule>

proftpd から呼ばれる cgiに対してchmod u+xするスクリプトを作成

vi /usr/local/bin/proftpdcgipermit

cgiとaamobile という拡張子のファイルにu+xする

#!/usr/bin/perl
($u,$f)=@ARGV;
$f="/home/$u$f";
`/bin/chmod u+x $f` if($f=~/\.(cgi|aamobile)$/ && $u && $f && -e $f && ! -d $f);
chmod 755 /usr/local/bin/proftpdcgipermit

神聖モテモテ王国+UNIX

http://alfalfalfa.com/archives/1504253.html
より。

「いろんなところで、いろんな風につかえる関数を作ってみました。
 動的にメモリを開放したり、しなかったりします。」

「、、そんなもの使いたくない。」

がツボった。

BSDもいくつか出てくるけど、まずNetBSD,OpenBSDときて、FreeBSDの名前がないとか。やっと出てきたと思ったらLiveFreeBSDだとか。

iptables設定

via http://fedorasrv.com/iptables.shtml
とても素敵な設定例です。ありがとう↑の人!。

(1)ファイアウォール設定スクリプト作成

mkdir /root/iptables
cd /root/iptables/
chmod 700 /root/iptables
vi iptables.sh
#!/bin/bash


#---------------------------------------#
# 設定開始                              #
#---------------------------------------#

# インタフェース名定義
LAN=eth0

#---------------------------------------#
# 設定終了                              #
#---------------------------------------#

# 内部ネットワークのネットマスク取得
LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`

# 内部ネットワークアドレス取得
LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK


# ファイアウォール停止(すべてのルールをクリア)
/etc/rc.d/init.d/iptables stop

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
iptables -P INPUT   DROP   # 受信はすべて破棄
iptables -P OUTPUT  ACCEPT # 送信はすべて許可
iptables -P FORWARD DROP   # 通過はすべて破棄

# 自ホストからのアクセスをすべて許可
iptables -A INPUT -i lo -j ACCEPT

# 内部からのアクセスをすべて許可
iptables -A INPUT -s $LOCALNET -j ACCEPT

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SYN Cookiesを有効にする
# ※TCP SYN Flood攻撃対策
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf

# ブロードキャストアドレス宛pingには応答しない
# ※Smurf攻撃対策
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf

# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done

# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done

# フラグメント化されたパケットはログを記録して破棄
iptables -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A INPUT -f -j DROP

# 外部とのNetBIOS関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT ! -s $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT ! -s $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP

# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
iptables -N LOG_PINGDEATH
iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : '
iptables -A LOG_PINGDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH

# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP

# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

# ACCEPT_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを許可するユーザ定義チェイン作成
ACCEPT_COUNTRY_MAKE(){
    for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
    do
        iptables -A ACCEPT_COUNTRY -s $addr -j ACCEPT
    done
}

# DROP_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成
DROP_COUNTRY_MAKE(){
    for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
    do
        iptables -A DROP_COUNTRY -s $addr -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_COUNTRY] : '
        iptables -A DROP_COUNTRY -s $addr -j DROP
    done
}

# iptables設定スクリプト外部関数取り込み
. /root/iptables/iptables_functions

# IPアドレスリスト取得
IPLISTGET

# 日本からのアクセスを許可するユーザ定義チェインACCEPT_COUNTRY作成
iptables -N ACCEPT_COUNTRY
ACCEPT_COUNTRY_MAKE JP
# 以降,日本からのみアクセスを許可したい場合はACCEPTのかわりにACCEPT_COUNTRYを指定する

# 中国・韓国・台湾※からのアクセスをログを記録して破棄
# ※全国警察施設への攻撃元上位3カ国(日本・アメリカを除く)
# http://www.cyberpolice.go.jp/detect/observation.htmlより
iptables -N DROP_COUNTRY
DROP_COUNTRY_MAKE CN
DROP_COUNTRY_MAKE KR
DROP_COUNTRY_MAKE TW
iptables -A INPUT -j DROP_COUNTRY

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可
# ※SSHサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY

# 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
# ※外部向けDNSサーバーを運用する場合のみ
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 外部からのTCP21番ポート(FTP)へのアクセスを日本からのみ許可
# ※FTPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 21 -j ACCEPT_COUNTRY

# 外部からのPASV用ポート(FTP-DATA)へのアクセスを日本からのみ許可
# ※FTPサーバーを公開する場合のみ
# ※PASV用ポート60000:60100は当サイトの設定例
iptables -A INPUT -p tcp --dport 60000:60100 -j ACCEPT_COUNTRY

# 外部からのTCP25番ポート(SMTP)へのアクセスを許可
# ※SMTPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT

# 外部からのTCP465番ポート(SMTPS)へのアクセスを日本からのみ許可
# ※SMTPSサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 465 -j ACCEPT_COUNTRY

# 外部からのTCP110番ポート(POP3)へのアクセスを日本からのみ許可
# ※POP3サーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 110 -j ACCEPT_COUNTRY

# 外部からのTCP995番ポート(POP3S)へのアクセスを日本からのみ許可
# ※POP3Sサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 995 -j ACCEPT_COUNTRY

# 外部からのTCP143番ポート(IMAP)へのアクセスを日本からのみ許可
# ※IMAPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 143 -j ACCEPT_COUNTRY

# 外部からのTCP993番ポート(IMAPS)へのアクセスを日本からのみ許可
# ※IMAPSサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 993 -j ACCEPT_COUNTRY

# 外部からのUDP1194番ポート(OpenVPN)へのアクセスを日本からのみ許可
# ※OpenVPNサーバーを公開する場合のみ
#iptables -A INPUT -p udp --dport 1194 -j ACCEPT_COUNTRY

# VPNインタフェース用ファイアウォール設定
# ※OpenVPNサーバーを公開する場合のみ
#[ -f /etc/openvpn/openvpn-startup ] && /etc/openvpn/openvpn-startup


#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで)               #
#----------------------------------------------------------#

# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/iptables/deny_ipに1行ごとに記述しておくこと
# (/root/iptables/deny_ipがなければなにもしない)
if [ -s /root/iptables/deny_ip ]; then
    for ip in `cat /root/iptables/deny_ip`
    do
        iptables -I INPUT -s $ip -j DROP
    done
fi

# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP

# サーバー再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save

# iptables 1.4.3.1バグ対処
iptables -V|grep 1.4.3.1 > /dev/null 2>&1
if [ $? -eq 0 ]; then
    sed -i s/"-s \!"/"\! -s"/g /etc/sysconfig/iptables
    sed -i s/"-d \!"/"\! -d"/g /etc/sysconfig/iptables
fi

# ファイアウォール起動
/etc/rc.d/init.d/iptables start

ファイアウォール設定スクリプトへ実行権限付加

chmod 700 iptables.sh

ファイアウォール設定スクリプト外部関数作成

vi iptables_functions
# IPアドレスリスト取得関数定義
IPLISTGET(){
    # http://nami.jp/ipv4bycc/から最新版IPアドレスリストを取得する
    wget -q http://nami.jp/ipv4bycc/cidr.txt.gz
    gunzip cidr.txt.gz > /dev/null 2>&1
    # 最新版IPアドレスリストが取得できなかった場合
    if [ ! -f cidr.txt ]; then
        if [ -f /tmp/cidr.txt ]; then
            # バックアップがある場合はその旨をroot宛にメール通知して処理を打ち切る
            echo cidr.txt was read from the backup! | mail -s $0 root
            return
        else
            # バックアップがない場合はその旨をroot宛にメール通知して処理を打ち切る
            echo cidr.txt not found!|mail -s $0 root
            exit 1
        fi
    fi
    # 最新版IPアドレスリストを /tmpへバックアップする
    /bin/mv cidr.txt /tmp/cidr.txt
}

(2)IPアドレスリスト更新チェック

IPアドレスリストは頻繁に更新されるので、毎日自動でIPアドレスリストの更新有無をチェックし、更新がある場合はファイアウォール設定スクリプトを再起動するようにする。

IPアドレスリストチェックスクリプト作成
vi /etc/cron.daily/iplist_check.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 新旧IPLIST差分チェック件数(0を指定するとチェックしない)
# ※新旧IPLIST差分がSABUN_CHKで指定した件数を越える場合はiptables設定スクリプトを実行しない
# ※新旧IPLIST差分チェック理由はhttp://centossrv.com/bbshtml/webpatio/1592.shtmlを参照
SABUN_CHK=10
[ $# -ne 0 ] && SABUN_CHK=${1}

# チェック国コード
COUNTRY_CODE='JP CN KR TW'

# iptables設定スクリプトパス
IPTABLES=/root/iptables/iptables.sh

# iptables設定スクリプト外部関数取り込み
. /root/iptables/iptables_functions

# IPアドレスリスト最新化
rm -f IPLIST.new
IPLISTGET
for country in $COUNTRY_CODE
do
    if [ -f /tmp/cidr.txt ]; then
        grep ^$country /tmp/cidr.txt >> IPLIST.new
    else
        grep ^$country /tmp/IPLIST >> IPLIST.new
    fi
done
[ ! -f /tmp/IPLIST ] && cp IPLIST.new /tmp/IPLIST

# IPアドレスリスト更新チェック
diff -q /tmp/IPLIST IPLIST.new > /dev/null 2>&1
if [ $? -ne 0 ]; then
    if [ ${SABUN_CHK} -ne 0 ]; then
        if [ $(diff /tmp/IPLIST IPLIST.new | egrep '<|>' | wc -l) -gt ${SABUN_CHK} ]; then
            (
             diff /tmp/IPLIST IPLIST.new
             echo
             echo "$IPTABLES not executed."
            ) | mail -s 'IPLIST UPDATE' root
            rm -f IPLIST.new
            exit
        fi
    fi
    /bin/mv IPLIST.new /tmp/IPLIST
    $IPTABLES > /dev/null
else
    rm -f IPLIST.new
fi
IPアドレスリストチェックスクリプトに実行権限付加
chmod +x /etc/cron.daily/iplist_check.sh


※CRONより/root/iptables/iptables.sh not executed.という内容のメールが届いた場合の対処
なんらかの理由で、http://nami.jp/ipv4bycc/から取得した最新のIPアドレスリストと、前回取得したIPアドレスリストとの差分が10件を超えたため、iptables設定スクリプトを実行しなかったことを示す。
サーバーを長時間停止していた等、前回取得したIPアドレスリストとの差分が10件を超える理由が明確な場合には、「/etc/cron.daily/iplist_check.sh 0」と実行することにより強制的にiptables設定スクリプトを実行する。

iptables起動

※マシンスペックにより時間がかかる

./iptables.sh
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[  OK  ]
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]

iptables自動起動設定

chkconfig iptables on
chkconfig --list iptables
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off

iptables の状態を確認

iptables -nL

FreeBSD 6.2-RELEASE から8.1-RELEASE に一気にアップグレード

一旦7を挟まないでも大丈夫かなーと思ったけどイけた

環境

作業フォルダ作成

以降のコマンドは全部ここで

mkdir /usr/local/src/freebsdupdate/
cd /usr/local/src/freebsdupdate/

アップデートツール入手

fetch http://people.freebsd.org/~cperciva/freebsd-update-upgrade.tgz
fetch http://people.freebsd.org/~cperciva/freebsd-update-upgrade.tgz.asc
gpg --verify freebsd-update-upgrade.tgz.asc freebsd-update-upgrade.tgz
tar -xf freebsd-update-upgrade.tgz

スクリプトを動かす

sh freebsd-update.sh -f freebsd-update.conf -r 8.1-RELEASE upgrade
sh freebsd-update.sh -f freebsd-update.conf install

freebsd-update.sh が各種コンフィグファイルに(/etc/ssh/sshd.conf など)に以下のようなdiff情報を入れる。

>>>>>>>>>>>>>>>>>>>Current Version
...
<<<<<<<<<<<<<<<<<<<8.1 Release
...

いじられたコンフィグファイルは手動でマージしましょう。

再起動してもっかいスクリプト

shutdown -r now
sh freebsd-update.sh -f freebsd-update.conf install

この時点で uname -a すると8.1になってる

perlのアップグレード 5.8.8 → 5.12

perlのアップグレードのためにいろいろ、なお、アップグレードしない場合でも、 portupgrade -fyr perl だけ先にやっといた方が良さそうだ。

portupgrade perl5.12
perl-after-upgrade -f
cpan -r
portsdb -F
setenv DISABLE_CONFLICTS 1
portupgrade -o lang/perl5.12 -f perl-5.10.\*
portupgrade -fyr perl
unsetenv DISABLE_CONFLICTS

締め

portupgrade -fyaP
sh freebsd-update.sh -f freebsd-update.conf install
shutdown -r now
  • 本当は全然すんなり行ってない
  • perlは5.10に結びついてるモジュールが多かった。あと、5.12を5.10の上位互換だと自動認識しないので参った、時期が悪かったのだろう
  • portupgrade は何故かうまく行かないことが多い。その都度pkgdb -F したり、この際ついでだからpkg_deleteしたり
  • pkgdb -F がおかしくなってきたら /var/db/pkgdb.db を一度消すこと
  • 役に立ったコマンド
    • yes | cpan -i [modulename]
    • cpan -r
    • pkginfo | grep [modulename]
    • pkg_delete -f [modulename]
    • pkgdb -F

ついでに、apache22いれたときのポート用config設定

vi /usr/local/etc/pkgtools.conf

MAKE_ARGS = { に足す

        'www/apache22'>'WITH_SUEXEC=yes SUEXEC_DOCROOT=/home SUEXEC_USERDIR=www/docs',

追記:いいページがあった。
http://www.daemonology.net/blog/2007-11-11-freebsd-major-version-upgrade.html
portupgrade する前に以下の手順は挟んだ方が良さそうだ。

portsnap -I update
portupgrade -f ruby
...
rm /var/db/pkg/pkgdb.db
portupgrade -f ruby18-bdb
...
rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db
portupgrade -af

画像切替スクリプト

  • 開く度に画像が変わるjs
  • javascriptわかんない人が編集
  • 画像全読みするから回線的に重いのがデメリット
<img id="img00" src="1.jpg">
<img id="img01" src="2.jpg">
<img id="img02" src="3.jpg">
<img id="img03" src="4.jpg">
<img id="img04" src="5.jpg">
<SCRIPT>
var topimgs    = new Array("img00","img01","img02","img03","img04");
var topimgdisp = Math.floor(Math.random() * topimgs.length);
for(var i=0; i<topimgs.length; i++) {
	if (i==topimgdisp) {
		document.getElementById(topimgs[i]).style.display="block";
	}else{
		document.getElementById(topimgs[i]).style.display="none";
	}
}
</SCRIPT>