クロスドメインでiframeの親に値を渡す。

iframeについてメモ。

iframeはセキュリティーの都合上で、別ドメインでは値を渡せないらしい。

実際ためしてみても、うまく行かなかった。

使用用途としては、スクロールバーなどを表示させずにインラインフレームとして表示する場合に、横幅は100%で対応できても高さがページによって可変な場合がある。

この場合は、スクロールバーが表示されるか、やけに下に余白ができる感じになってしまい実用的ではない。

そこで、高さの値を子から親へ渡して、iframeの属性で高さを指定できるようにする。

色々調べて今のところこの方法でいけた。

でも、IE6~7までは見対応なのでそのへんはあしからず。逆に対応できる方法を知っている人教えてください。

それではやり方。

まず子のファイルに下記内容が飛鳥

<script type="text/javascript">
function onlo(){
 var height = document.getElementById("inHeight").offsetHeight;
 document.getElementById("hei").value = height;
 parent.postMessage(document.getElementById("hei").value, "*");
}
</script>
</head>
<body onload="onlo()">
<input type="hidden" id="hei" />
<div id="inHeight">
//////中身///////
</div>
</body>
</html>

これは、基本となる高さををoffsetHeightで取得して、inputで渡している。

親側の受け取りはonmessageで受け取る。

<input type=”hidden” id=”hei” />にvalue属性に値を渡している。

 document.getElementById("hei").value = height;

その後の

 parent.postMessage(document.getElementById("hei").value, "*");

で親に渡す。

親側は・・・・

<script type="text/javascript">
 window.onmessage = function(e){
 document.getElementById('blockrandom').height = e.data+'px';
 }
</script>
<iframe
 name="myframe"
 id="blockrandom"
 src="http://www.----ここに子のURLを入れる-----"
 scrolling="no"
 frameborder="0"
 width="100%"
>
</iframe>

な感じで高さを渡す。

これで読み込み時に高さを判断して自動で調整してくれるはず。

 

Dosアタック攻撃に対する対策について

サーバーを色々触っていると、悪事をはたらく人たちの痕跡があります。

とくに、さくらVPSはスペックがよくない(低いプランは)ので、F5攻撃などがあればすぐにダウンする可能性が大です。

なので、DOS攻撃対策として、

mod_dosdetector

をインストールしたので、メモ書きです。

mod_dosdetectorは悪意のあるアクセスを判断してくれるモジュールです。

その判断されたデータを元に一時的に503を返してアクセスできなくしようと言うものです。

また、設定も細かくできるし日本語の情報も多いのオススメです。

と言うかこれしか試していません・・・・

ちなみに、下記やり方は他のサイト様の寄せ集めです。

参考にしたサイト

http://www.jisakuroom.net/blog/?p=201

http://c-brains.jp/blog/wsg/10/06/24-134947.php

http://ymotoba.blogspot.com/2009/05/apachedso.html

はじめにダウンロードします。

wget http://downloads.sourceforge.net/project/moddosdetector/moddosdetector/version-0.2/mod_dosdetector-0.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmoddosdetector%2F&ts=1293763310&use_mirror=jaist
tar -xzvf mod_dosdetector-0.2.tar.gz

次にインストールします。

その前に準備です。

yum install httpd-devel
cd mod_dosdetector-0.2
make 
コンパイルがすんだらインストールします。
make install
インストールがエラーなく終了すれば、httpd.confの設定を行います。
インストールがうまくいっていると、httpd.confに自動でモジュールの読み込みが記述されますが、今回は設定部分は別ファイルで行うために、httpd.confの記述はコメントアウトします。
vi  /etc/httpd/conf/httpd.conf
LoadModule dosdetector_module /usr/lib/httpd/modules/mod_dosdetector.so 
↓コメントアウト
#LoadModule dosdetector_module /usr/lib/httpd/modules/mod_dosdetector.so

次に、設定用ファイルを新規作成

vi /etc/httpd/conf.d/dos_attack.conf

ファイルの中身は次の内容で、

RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .*  - [R=503,L]
ErrorDocument 503 "Server is busy."

# デフォルトでは favicon のコンテンツタイプは指定されていないので設定
AddType image/vnd.microsoft.icon .ico

# モジュール読み込み
LoadModule dosdetector_module /usr/lib/httpd/modules/mod_dosdetector.so

# モジュール設定
DoSDetection On
DoSPeriod 60
DoSThreshold 70
DoSHardThreshold 90
DoSBanPeriod 7200
DoSTableSize 500
DoSIgnoreContentType ^(image/|application/|text/javascript|text/css)

各設定は次の内容

DoSDetection
DoS 攻撃の検知を有効にするかどうか。
DoSPeriod
DoS 攻撃の判定を行う時間を設定。(秒)
DoSThreshold
DoSPeriod の間にこの数だけアクセスがあれば DoS 攻撃の疑いありとみなし、環境変数 SuspectDoS を 1 にセットする。
DoSHardThreshold
DoSPeriod の間にこの数だけアクセスがあれば DoS 攻撃の疑いが強いとみなし、環境変数 SuspectHardDoS を 1 にセットする。
DoSBanPeriod
DoS 攻撃の疑いが設定されてから解除するまでの時間。(秒)
DoSTableSize
クライアントの追跡記録を保存する数。多すぎるとその分リソースを消費する。
DoSIgnoreContentType
追跡記録から除外するコンテンツタイプをパターンマッチングな文字列で指定。
RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .*  - [R=503,L]
ErrorDocument 503 "Server is busy."

上記の設定は、dosアタックと判断した時に行う処理の部分。

注意点はvirtualhostを使用している場合は、

vi /etc/httpd/conf.d/dos_attack.conf

内に記述するのではなく、virtualhosないの各ディレクティブに記述する必要がある。

以上で設定は終わり。

後は、テストしてどうかを見る。

通常通りうごいていると、

Server is busy.

と表示される

Apacheの構築

インストールと設定はroot権限が必要なコマンドばかりなので、各種インストールの間だけ、sudo ではなく su でrootになって進めましょう。

[admin@ ~]$ su -
 Password:
 [root@ ~]#

CentOSではパッケージのインストールと管理に yum というプログラムを使います。さくらのVPSでは最初から yum がインストール済みで、起動直後から使うことができます。一応、新しくインストールをする前に、既にインストールされているものを最新版にアップデートします。

[root@ ~]# yum -y install httpd

まずはインストールに問題がないか起動してみます。

[root@ ~]# /etc/rc.d/init.d/httpd start
 Starting httpd: [ OK ]

無事に起動できたら、続いて自動起動の設定をします。

[root@ ~]# chkconfig httpd on

設定を確認してみましょう。

[root@ ~]# chkconfig --list httpd
 httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

chkconfig –list を実行すると,起動設定されたラン・レベルの一覧が表示できます。(0:システムの停止,1:シングル・ユーザー,2:ネットワーク機能なしのマルチユーザー,3:CUIログインのマルチユーザー,4:カスタム,5:GUIログインのマルチユーザー,6:システムの再起動)さくらのVPSを起動した時に稼動状態になる為には 3 が on になっている必要があります。起動が問題ないようなので、続いてApacheの設定をします。

Apacheの設定

いちおう元ファイルをコピーしてから vi で開きます。

[root@ ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
 [root@ ~]# vi /etc/httpd/conf/httpd.conf

1.レスポンスヘッダにOSのバージョンを表示させない

ServerTokens OS
   ↓
 ServerTokens Prod

2.KeepAliveを有効にする

KeepAlive Off
   ↓
 KeepAlive On

3.モジュールの読み込み設定

モジュールは必要に応じて設定してください。自分は以下のように設定しました。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so

4.サーバー管理者の指定

ServerAdmin root@localhost

 
ServerAdmin admin@domain.com
5.サーバー名の指定

ServerName new.host.name:80

ServerName www.domain.com:80
6.DocumentRootの確認

DocumentRoot “/var/www/html”
7.ディレクトリ内のファイル表示を無効化

Options Indexes FollowSymLinks

Options -Indexes FollowSymLinks

8.indexの設定

DirectoryIndex index.html index.html.var

DirectoryIndex index.html index.php index.cgi index.html.var
9.ログの設定(414 ERROR は記録しない)

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

LogFormat “%h %l %u %t \”%!414r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
10.カスタムログの設定(wormと画像のアクセスをログに記録しない)

CustomLog logs/access_log combined

SetEnvIf Request_URI “cmd\.exe” nolog
SetEnvIf Request_URI “root\.exe” nolog
SetEnvIf Request_URI “Admin\.dll” nolog
SetEnvIf Request_URI “NULL\.IDA” nolog
SetEnvIf Request_URI “^/_mem_bin/” nolog
SetEnvIf Request_URI “^/_vti_bin/” nolog
SetEnvIf Request_URI “^/c/” nolog
SetEnvIf Request_URI “^/d/” nolog
SetEnvIf Request_URI “^/msadc/” nolog
SetEnvIf Request_URI “^/MSADC/” nolog
SetEnvIf Request_URI “^/scripts/” nolog
SetEnvIf Request_URI “^/default.ida” nolog
SetEnvIf Request_URI “\.(gif)|(jpg)|(png)|(ico)|(css)$” nolog
SetEnvIf Remote_Addr 192.168. no_log
CustomLog logs/access_log combined env=!no_log
11.エラー画面でApacheのバージョン非表示

ServerSignature On

ServerSignature Off
12.indexesがOFFなのでファイル表示のアイコンの設定はコメントアウトします。

Alias /icons/ “/var/www/icons/”

Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all


#Alias /icons/ “/var/www/icons/”
#
# Options Indexes MultiViews
# AllowOverride None
# Order allow,deny
# Allow from all
#
13.ScriptAliasも使わないのでコメントアウト

ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”

AllowOverride None
Options None
Order allow,deny
Allow from all


#ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
#
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#
14.autoindexに関係する設定をコメントアウトする

#IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*
#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core
#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^
#DefaultIcon /icons/unknown.gif
#ReadmeName README.html
#HeaderName HEADER.html
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
15.MIME 言語タイプの適用優先順位(日本語を優先)

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ..

LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ..
16.CGIスクリプト設定を有効化して拡張子 .pl を追加

#AddHandler cgi-script .cgi

AddHandler cgi-script .cgi .pl
17.保存して終了

ESC
:wq
設定の確認

設定ファイルの編集が終わったら、無事に設定ができているか文法チェックをしてみましょう

[root@ ~]# apachectl configtest

httpd: Syntax error on line 210 of /etc/httpd/conf/httpd.conf: Syntax error on line 2 of /etc/httpd/conf.d/proxy_ajp.conf:
Cannot load /etc/httpd/modules/mod_proxy_ajp.so into server: /etc/httpd/modules/mod_proxy_ajp.so: undefined symbol: proxy_module
なにやら /etc/httpd/conf.d/proxy_ajp.conf にエラーがあるとか言われてしまいました。(他のエラーがあったら記述ミスかもしれないので、httpd.confを確認しましょう)これは proxy_module をOFFにしたせいで mod_proxy_ajp も読めなくなったというエラーです。設定内の記述で、/etc/httpd/conf.d 内の設定ファイル(〜.conf)は自動で読み込まれるようになっているのですが、初期状態で入ってる proxy_ajp.conf も welcome.conf も今回の設定では必要ないので、まとめて読み込まないようにしちゃいましょう。

[root@ ~]# mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.bk
[root@ ~]# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bk
そしてチェック。大丈夫なはずです。

[root@ ~]# apachectl configtest
Syntax OK
最後にhttpdを再起動します。

[root@ ~]# /etc/rc.d/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
iptablesの設定追加

80番ポートのパケットを許可するためにiptablesに設定を追加します。

[root@ ~]# iptables -A SERVICE -p tcp –dport 80 -j ACCEPT
iptablesの設定を保存

[root@ ~]# /etc/rc.d/init.d/iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
そしてiptablesを再起動して反映させます。

[root@ ~]# /etc/rc.d/init.d/iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Webブラウザで表示の確認

Webブラウザから設定したドメイン、もしくは http://XXX.XXX.XXX.XXX/ にアクセスしてみましょう。
通常、Apacheのインストール直後だとApacheのテストページが表示されるのですが、先ほどhttpd.confの設定でテストページを表示しないように設定してしまったので、「サーバーにアクセスできません」ではなく、「404 Not Found エラー」が表示されればApacheは問題なく起動しています。
ただ、このままではちょっと味気ないのでDocumentRootに簡単なテストページを作ってみましょう。

[root@ ~]# echo ‘HelloHello’ > /var/www/html/index.html
Webブラウザからアクセスして「Hello」と表示されればOKです。

yumを使ったインストールで[is need package....]となってエラーで入らない時

今回はyumでpearをインストールを試みた。

yum --enablerepo=remi,epel php-pear*

すると、エラーが出てどうにもインストールできない。

そのエラーが

is need package....

調べてみるとこれは、パッケージの依存関係でインストールできない模様。

そこで、今のインストールされている若しくはyum管理のphp-pearを調べる

yum --enablerepo=remi,epel info php-pear

これだと何故かrepoがbaseになって古いバージョンが表示されるこの時はpear.1.4.??

なので、色々調べて一時的に下記を変更することで解決できた

vi /etc/yum/plugin.conf.fd/priorities.conf

を開いて

[main]
enabled = 1←を0に変更
vi /etc/yum/plugin.conf.fd/fastestmirror.conf

 [main]  enabled=1←0に変更 verbose=0 socket_timeout=3 hostfilepath=/var/cache/yum/timedhosts.txt maxhostfileage=10 maxthreads=15 #exclude=.gov, facebook
vi /etc/yum/plugin.conf.fd/fastestmirror.conf/downloadonly.conf 

 [main]
enabled=1←0に変更

上記を変更してもう一度実行

yum --enablerepo=remi,epel info php-pear

すると、1.9.??になったので、インストールする

yum --enablerepo=remi,epel install php-pear*

すると

Transaction Check Error:
file /usr/share/pear/.channels/__uri.reg from install of php-pear-excel-0.9.0-1.el5.rf.noarch conflicts with file from package php-pear-1.9.4-3.el5.remi.noarch
file /usr/share/pear/.channels/pear.php.net.reg from....

とエラーが出た・・・・

これは_86_64(64bit)環境に32bitのパッケージをインストールしようとしたことが原因らしいので、_86_64のみをインストールできるようにする。

最後に --exclude=*.i386を追加する

これでインストール完了しました。

Mysqlとディレクトリのバックアップ方法

サーバーを構築して安心しきっていると危ない目に合う可能性が高い。

攻撃とかもそうだと思うけど、もっと基本的な事でバックアップをとってなかったら、費やしていきた時間が消えてなくなる可能性だってある。

だからバックアップはこまめにとりましょう。

と言うことで、CENTOSでのバックアップ方法です。

これも、他のサイト様から引用です。

http://centossrv.com/mysql-backup.shtmlさんからの引用でバックアップ用のスクリプトを作ります。

[root@centos ~]# vi mysql-backup.sh ← MySQLデータベースバックアップスクリプト作成
#!/bin/bash

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

# バックアップ先ディレクトリ
BACKDIR=/backup/mysql

# MySQLrootパスワード
ROOTPASS=xxxxxxxx

# バックアップ先ディレクトリ再作成
rm  -rf $BACKDIR
mkdir -p $BACKDIR

# データベース名取得
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`

# データベースごとにバックアップ
for dbname in $DBLIST
do
    table_count=`mysql -u root -p$ROOTPASS -B -e "show tables" $dbname|wc -l`
    [ $table_count -ne 0 ] &&
    mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done

[root@centos ~]# chmod 700 mysql-backup.sh ← rootのみ参照・実行できるようにパーミッション変更

そして、スクリプトを実行してうまくいっているのか確認するのですが、こんなエラーがでました。

[root@centos ~]# ./mysql-backup.sh
DBD::mysql::db do failed: SELECT,LOCK TABL command denied to user ‘root’@'localhost’ for table ‘cond_instances’ at /usr/bin/mysqlhotcopy line 489.

この場合は、下記の内容を追記して解決できます。

# データベースごとにバックアップ
for dbname in $DBLIST
do
[ $dbname = "performance_schema" ] && continue  ←追加
table_count=`mysql -u root -p$ROOTPASS -B -e “show tables” $dbname|wc -l`
[ $table_count -ne 0 ] &&
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done

 mysql-backup.shの中身

上記でMYSQLのバックアップは完了です。

最後に毎日実行されるようにcronに入れいます。

echo "0 5 * * * root /root/mysql-backup.sh" > /etc/cron.d/backup

次はディレクトリのバックアップです。

これもhttp://centossrv.com/backup.shtmlさんからの引用です。

まずはバックアプスクリプトを作ります。

[root@centos ~]# vi backup.sh ← バックアップスクリプト作成
#!/bin/bash

#
# ローカル内でバックアップ
#

LANG=C

#
# 設定開始
#

# バックアップ対象リスト名
# ※バックアップ対象をフルパスで記述したリスト
BACKUPLIST=/root/backuplist
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit

# バックアップ対象外リスト名
# ※バックアップ対象外をフルパスで記述したリスト
BACKUPNOLIST=/root/backupnolist

# バックアップ先ディレクトリ名
BACKUPDIR=/backup
mkdir -p $BACKUPDIR

# バックアップ保存世代数
# ※当日分を含めた過去分バックアップを保存する世代数
# ※過去分バックアップを保存しない場合は1を指定する
BACKUPGEN=8

# 暗号化・復号化パスフレーズ
# ※指定がないときは暗号化しない
PASS=''

# バックアップログファイル名
BACKUPLOG=/var/log/backup.log

#
# 設定終了
#

# 異常終了処理関数定義
error_exit () {
    rm -f $TMPBACKUPNOLIST
    exit 1
}

# バックアップファイルをバックアップ対象外リストに追加
# ※バックアップ先ファイルをバックアップしないようにする
TMPBACKUPNOLIST=`mktemp`
[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
echo "$BACKUPDIR/*backup.tar.bz2" >> $TMPBACKUPNOLIST

# 前回バックアップをリネーム
cd $BACKUPDIR
OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null`
if [ -f $OLDBACKUPFILE ]; then
    TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -`
    mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1
fi

# バックアップログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG

# バックアップ実行
echo "`date` backup start" >> $BACKUPLOG
tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1
code=$?
if [ $code -ne 0 ]; then
    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
    rm -f $BACKUPDIR/backup.tar.bz2
    error_exit
fi
echo "`date` backup end" >> $BACKUPLOG

# バックアップ暗号化(暗号化・復号化パスフレーズ指定時のみ)
if [ ! -z $PASS ]; then
    echo "`date` encrypt start" >> $BACKUPLOG
    mkdir -p $HOME/.gnupg
    echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/backup.tar.bz2 > /dev/null 2>&1
	code=$?
	if [ $code -ne 0 ]; then
	    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
	    rm -f $BACKUPDIR/backup.tar.bz2*
	    error_exit
	fi
    rm -f $BACKUPDIR/backup.tar.bz2
    echo "`date` encrypt end" >> $BACKUPLOG
fi

# バックアップ保存世代を超えた古いバックアップを削除
if [ $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) -gt $BACKUPGEN ]; then
    OLDBACKUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) - $BACKUPGEN`
    for file in `ls -t $BACKUPDIR/*backup.tar.bz2*|tail -n $OLDBACKUPCNT`
    do
        rm -f $file
    done
fi

# バックアップ対象外リスト削除
rm -f $TMPBACKUPNOLIST
 chmod 700 backup.sh
バックアップスクリプト権限付与↑

次にバックアップの対象リストを省くリストを作ります。

今回は下記内容で作成

[root@ ~]# echo "/root" >> backuplist 
[root@ ~]# echo "/etc" >> backuplist
[root@ ~]# echo "/var/www" >> backuplist 
[root@ ~]# echo "/var/lib/gitosis" >> backuplist [root@ ~]# echo "/backup/mysql" >> backuplist

拒否リストは下記で

[root@ ~]# echo "/var/www/error" >> backupnolist
[root@ ~]# echo "/var/www/icons" >> backupnolist

あとは正常に動作するかどうかを確かめます。

 ./backup.sh
で実行する

バックアップが正常にいっている事を確認

ls -lh /backup
tar tjvf /backup/backup.tar.bz2

バックアップした一覧が表示される

そして自動実行するためにcronに登録

echo "0 5 * * * root /root/mysql-backup.sh ; /root/backup.sh" > /etc/cron.d/backup  毎朝5時に実行される 

sshdで突然ログインできなくなった時にした対策

sshで色々さわっている間に、突然ログインできなくなった。

sshdの設定を見てみても何もおかしくないし・・・・少し悩んでいかの方法で解決

/etc/hosts.allow で許可されているホストであれば許可

/etc/hosts.allow で許可されたホストを除き、/etc/hosts.deny で拒否されているホストであば拒否

上記のファイルはsshで不正アクセス等があった時に拒否したり許可したりを設定するファイル。それで、よく見てみると・・・・自分のIPアドレスが登録されていた。

/etc/hosts.denyに!!

安全のためしかたないのかもしれないけど・・・これを削除または#でコメントアウトすれば解決した。

めでたし。めでたし