FC2ブログ

clamav + cron フルスキャンを定期実行

clamavをインストールしたのはいいけれど、放っておいたまま(入れた意味ない)だったので定期実行するようにしてみました。

clam-full.shを作成します。

#!/bin/sh

clamscan / --infected --recursive --move=/var/log/clamav/virus --log=/var/log/clamav/clamav_`date +%Y-%m-%d`.log

# --infected 感染を検出したファイルのみを結果に出力
# --recursive 指定ディレクトリ以下を再帰的に検査 圧縮ファイルは解凍して検査
# --log=FILE ログファイル
# --move=DIR 感染を検出したファイルの隔離先
# --remove 感染を検出したファイルを削除


実行権限をつけて、所有者をrootにします。

$ sudo chmod 700 clam-full.sh
$ sudo chown root:root clam-full.sh


root用のシェルスクリプト保存ディレクトリを作ってそこに移動させます。

$ sudo mkdir ~root/bin
$ sudo mv clam-full.sh ~root/bin


試しにそのまま実行させてみたら、大量のワーニングが・・・

$ sudo ~root/bin/clam-full.sh

LibClamAV Warning: fmap_readpage: pread fail: asked for 4091 bytes @ offset 5, got 0
WARNING: Can't open file /sys/module/i915/uevent: Permission denied
LibClamAV Warning: fmap_readpage: pread fail: asked for 4094 bytes @ offset 2, got 0
↑こんな感じでワーニング続出

----------- SCAN SUMMARY -----------
Known viruses: 1186419
Engine version: 0.97.4
Scanned directories: 8818
Scanned files: 77137
Infected files: 0
Total errors: 429
Data scanned: 2838.09 MB
Data read: 2958.26 MB (ratio 0.96:1)
Time: 783.596 sec (13 m 3 s)


ログを見てみると、/sys下でPermission denideが429件でていました。
rootなのに???と思いながらワーニングメッセージをgoogleで検索してみたら、おなじ現象になった人が結構いるようで、いろんな所に質問が挙がってました。

要するに、/sys、/dev、/proc 下にあるのはファイルの形式をとっているけれど、本当のデータや実行ファイルではない。このため、clamscanがこれらのファイルを検査しようとするとうまくいかない。という事のようです。

今ひとつよくわかっていないのですが、archwikiにもそのディレクトリを外して検査するサンプルがあったのでOKとします。
スクリプトを作り替えました。(↓行末の\はバックスラッシュです。¥に見えてるかも)

#!/bin/sh

clamscan / \
--infected \
--recursive \
--move=/var/log/clamav/virus \
--log=/var/log/clamav/clamav_`date +%Y-%m-%d`.log \
--exclude-dir=^/sys \
--exclude-dir=^/proc \
--exclude-dir=^/dev \
--exclude-dir=^/var/log/clamav/virus

# --infected   感染を検出したファイルのみを結果に出力
# --recursive   指定ディレクトリ以下を再帰的に検査 圧縮ファイルは解凍して検査
# --log=FILE   ログファイル
# --move=DIR   感染を検出したファイルの隔離先
# --remove   感染を検出したファイルを削除
# --exclude=FILE   検査除外ファイル(パターンで指定)
# --exclude-dir=DIR 検査除外ディレクトリ(パターンで指定)


新しいスクリプトで実行すると、ワーニングが出なくなりました。

$ sudo ~root/bin/clam-full.sh

----------- SCAN SUMMARY -----------
Known viruses: 1186419
Engine version: 0.97.4
Scanned directories: 5585
Scanned files: 66735
Infected files: 0
Data scanned: 2797.91 MB
Data read: 2531.47 MB (ratio 1.11:1)
Time: 777.220 sec (12 m 57 s)


検査対象ファイル数がごっそり減りましたが、エラーもなくなりました。
430件のエラーを避けるために1万件の検査を外したわけですが・・・きっとこれでいいんでしょう・・・きっと。

自動実行設定を行います。

$ sudo crontab -e


viでの設定になるみたいです。viダメな方は EDITORをnanoに切り替えて、↓こんな感じで多分いけます。

$ export EDITOR=nano && sudo crontab -e


下の用に設定をしました。データ量も少ないのでとりあえず毎日実行で。

40 17 * * * /root/bin/clam-full.sh


crontabを作成した、みたいなメッセージが出るのですが、/etc/crontab ができていません。
探してみてもどこにもない・・・

$ sudo find / -name crontab
/usr/bin/crontab


debianも同じらしいですが、各ユーザのcron設定と同様にrootでも、/var/spool/cron 下にユーザ名で設定ファイルが置かれるようです。
/var/spool/cron/root が作られていました。

自動実行で生成された /var/log/crond.log です。

Apr 6 17:39:01 localhost /usr/sbin/crond[488]: (root) CAN'T OPEN (/etc/crontab): No such file or directory
Apr 6 17:39:01 localhost /usr/sbin/crond[488]: (root) RELOAD (/var/spool/cron/root)
Apr 6 17:40:01 localhost /USR/SBIN/CROND[1776]: (root) CMD (/root/bin/clam-full.sh)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (----------- SCAN SUMMARY -----------)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1785]: (CRON) EXEC FAILED (/usr/sbin/sendmail): No such file or directory
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Known viruses: 1186419)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Engine version: 0.97.4)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Scanned directories: 5585)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Scanned files: 66736)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Infected files: 0)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Data scanned: 2797.95 MB)
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Data read: 2531.48 MB (ratio 1.11:1))
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) CMDOUT (Time: 781.862 sec (13 m 1 s))
Apr 6 17:53:03 localhost /USR/SBIN/CROND[1775]: (root) MAIL (mailed 240 bytes of output but got status 0x0001
)


「cronの実行通知メールをだそうとして、sendmailがないので失敗」となっているようです。
postfix、入れればうまく動き出すのでしょうか?sendmailじゃないとダメなのかな?
そのうちpostfix入れて試してみたいと思います。

crontabへの記載が clam-full.shではなく、c「r」am-full.sh となっていて、全然自動実行できずに30分悩んだのはナイショです。
スポンサーサイト





テーマ : Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

イング

Author:イング
LPIC level1チャレンジ(あくまで予定)に向けて勉強中です。

このサイトを読んで何かやってみる場合は、自己責任でお願いします。とんでもないことになってしまっても責任取れません orz

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR