こんにちは!
ナビゲータのEVEです。
本日は、昨日作成したバッチファイルの解説をします。
[昨日作ったバッチファイル]
#シェルプログラムの所在を記述
@#!/usr/bin/bash
#ClamAV実行
Aclamscan / \
# 1)感染を検出したファイルのみを結果に出力
--infected \
#2)指定したディレクトリ配下全てを検査対象とする
--recursive \
#3)ログファイルを指定します
--log=/var/log/clamav/`date +%Y%m%d%H%M`.log \
#4)ウイルスに感染したファイルの隔離先を指定します
--move=/var/log/clamav/virus \
#5)検査除外ディレクトリを指定します
--exclude-dir=/var/log/clamav/virus \
#日付を取得します
Bw_date=`date +%Y%m%d%H%M`
#処理が正常に終了したかどうか判定を行います
Cif [ $? = 0 ]; then
#1)正常系
w_title='VirusCheckResultSuccessful'
w_content=' Virus Check Successful'
else
#2)異常系
w_title='VirusCheckResultError'
w_content=' Virus Check Error.You must check your server now!'
fi
#メールを送信
Decho ${w_date}$w_content | mail -s $w_title -r
[送信元メールアドレス(from)] [送信先メールアドレス(to)]
昨日ブログアップロード後bashへシェルを変更しています。shのプログラムの所在が不明だったためです。
[バッチプログラムの解説]
@はシェルプログラムの所在先を記述します。なお、ここではbashのパスを指定していますが、ウイルス検査時にbashではなく、sh [実行ファイル・パス]で実行することも可能です。コメントとして記述しているので、バッチ処理を作成するときの呪文的なモノなのかもしれません???
Aで、ClamAVを実行しています。「/」と記述しているのは検査をルートディレクトリを起点としたいためです。「--recursive」のオプションをつけないと、ルートディレクトリに配置されているファイルのみの検査しか行いません。また、各行に\マークが記述されてますが、この記述がないとエラーになります。円マークを付けない場合は、改行せずにオプションを列記します。
1)「--infected」を指定すると、感染を検出したファイルのみを結果に出力します。
2)「--recursive」を指定すると、指定したディレクトリ配下の全てのファイルを検査対象とします。この場合は、ルートディレクトリ配下すべてのファイルを対象としています。
3)「--log」では、ログファイルの出力先を指定します。ここでは、日時で結果を管理しています。なお、正常の場合空ファイルが作成されます。
4)ウイルスに感染したファイルの隔離先を指定します。A1)「--infected」を指定せず、ウイルスが検知されない場合、空ファイルが作成されます。
5)「--exclude」は、検査の除外パスを指定します。ここでは、ウイルスの隔離先を除外しています。
B日付を変数として取得しています。昨日、ここでバッククォートをつけていなくて、時間を要しました。実は最初シングルクォーテーションでシェルを記述していました。
Cここで実行結果を確認しています。正常の場合は1)のロジックに入り、異常の場合は2)のロジックに入ります。それぞれのロジックで、メールのタイトルと内容を作成しています。メールのタイトルは、スペースをつけずに記述しています。スペースを含めると、同スペースで区切られ、その文字が送り先として指定されます。
Dでは、今までの結果をメールで送信しています。日付を利用する場合、円マークと波カッコは忘れないよにしてください。
対応としては、ウイルスに感染したといった内容のメールが届いた場合、サーバをアクセスできないようにするなどの対応を取ることになります。
[解説を終えて]
たった20行足らずのプログラムに3〜4時間の時間を費やしました。特にif文です。普段使いのプログラムならどこがどういけないのかすぐに分かるのですが、久しぶりのバッチ処理は、どこが違うのか分からないので、プログラムに目に見えないコードが含まれているのでは?と言う結論に至るまで時間がかかってしまいました。
通常バッチ処理は、phpでプログラムを製造し、crontabから実行しています。ただ、OSに近いコマンドはphpから実行するのは問題がある場合があるので、セキュリティを考慮した上で、シェルから実行するコトが多くなることがあるかもしれません。
今書いていて思い出しましたが、PowerShellが今後多く使われる気がしています。Linuxだけでなく、Windows両OSで変更することなく使えると聞いています。Windowsで作った資産をLinuxにもってきて、変更せずに利用できるのは、非常に魅力的です。余談ですが、機会がありましたら、取りあげます。
では、また!
追伸(2023年1月23日)・・・
このブログで、logファイルは空という記述になっていますが、実際には、ClamAV実行内容が入っていました。
《参考サイト》
■【Ubuntu 20.04/18.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する
https://www.yokoweb.net/2017/04/15/ubuntu-server-clamav/
■シェルスクリプトに挑戦しよう(4)変数の定義と参照
https://atmarkit.itmedia.co.jp/ait/articles/1810/03/news001.html
■日時をファイル名に付けるには(@IT)
https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/240datefilename.html
■バッチファイルからメールを送信する
https://qiita.com/shuntaro_tamura/items/40a7d9b4400f31ec0923
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image