Linux Mint – (6)ClamAV

Linuxをサーバー用途でなくデスクトップで使う場合は、ウィルスチェックのソフトは必要ないという意見もあるが、インストールして心の平穏を得られるのであれば、入れる価値がある。

非力なPCに不要なソフトを追加しなくても良いという意見もあるが、そこは負荷をかけないようにniceで調整だ。

Linuxのフリーのウィルスチェックソフトといえば、ClamAVが定番だ。

ググればインストール方法が山のように出てくる。

今回もそれに従って、サクッと終わる予定だったのだが、思った以上に手間取った。

手間取った理由の1つは、OnAccessの設定がUbuntuでは難しいのだ。

1.ClamAvのインストール

まずはClamAvのインストールを行う。

コマンドウィンドウから以下の実行

sudo apt install clamav clamav-daemon

2.ウィルスファイルの移動先を準備

ウィルスが見つかったら移動する場所を作る。

mkdir /root/quarantine

3.clamd.confの修正

ClamAVが読むconfigurationファイルを修正する。

赤字が修正箇所。

ここのサイトを参考に修正した。

ExcludePathを追加している。

#Automatically Generated by clamav-daemon postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-daemon
#Please read /usr/share/doc/clamav-daemon/README.Debian.gz for details
#LocalSocket /var/run/clamav/clamd.ctl
#FixStaleSocket true
#LocalSocketGroup clamav
#LocalSocketGroup root
#LocalSocketMode 666
# TemporaryDirectory is not set to its default /tmp here to make overriding
# the default with environment variables TMPDIR/TMP/TEMP possible
TCPSocket 3333
TCPAddr 127.0.0.1
#User clamav
User root
ScanMail true
ScanArchive true
ArchiveBlockEncrypted false
MaxDirectoryRecursion 15
FollowDirectorySymlinks false
FollowFileSymlinks false
ReadTimeout 180
MaxThreads 12
MaxConnectionQueueLength 15
LogSyslog false
LogRotate true
LogFacility LOG_LOCAL6
LogClean false
LogVerbose false
PreludeEnable no
PreludeAnalyzerName ClamAV
DatabaseDirectory /var/lib/clamav
OfficialDatabaseOnly false
SelfCheck 3600
Foreground false
Debug false
ScanPE true
MaxEmbeddedPE 10M
ScanOLE2 true
ScanPDF true
ScanHTML true
MaxHTMLNormalize 10M
MaxHTMLNoTags 2M
MaxScriptNormalize 5M
MaxZipTypeRcg 1M
ScanSWF true
ExitOnOOM false
LeaveTemporaryFiles false
AlgorithmicDetection true
ScanELF true
IdleTimeout 30
CrossFilesystems true
PhishingSignatures true
PhishingScanURLs true
PhishingAlwaysBlockSSLMismatch false
PhishingAlwaysBlockCloak false
PartitionIntersection false
DetectPUA false
ScanPartialMessages false
HeuristicScanPrecedence false
StructuredDataDetection false
CommandReadTimeout 30
SendBufTimeout 200
MaxQueue 100
ExtendedDetectionInfo true
OLE2BlockMacros false
AllowAllMatchScan true
ForceToDisk false
DisableCertCheck false
DisableCache false
MaxScanTime 120000
MaxScanSize 100M
MaxFileSize 25M
MaxRecursion 16
MaxFiles 10000
MaxPartitions 50
MaxIconsPE 100
PCREMatchLimit 10000
PCRERecMatchLimit 5000
PCREMaxFileSize 25M
ScanXMLDOCS true
ScanHWP3 true
MaxRecHWP3 16
StreamMaxLength 25M
LogFile /var/log/clamav/clamav.log
LogTime true
LogFileUnlock false
LogFileMaxSize 0
Bytecode true
BytecodeSecurity TrustSigned
BytecodeTimeout 60000
ExcludePath ^/dev/
ExcludePath ^/proc/
ExcludePath ^/snap/
ExcludePath ^/run/
ExcludePath ^/sys/
ExcludePath ^/root/quarantine
#ScanOnAccess true
OnAccessMaxFileSize 5M
OnAccessMountPath /home
OnAccessIncludePath /home
OnAccessExcludeUname root
OnAccessPrevention true
OnAccessExtraScanning false
VirusEvent /root/bin/notify_viruscheck.sh
OnAccessExcludeRootUID yes
OnAccessRetryAttempts 3

4.発見時の動作スクリプトnofity_viruscheck.shの準備

メールで知らせることもありだが、今回はメールサーバーも立ち上げる予定もないので、notify-sendのコマンドで、ユーザーに知らせることにした。

ここのサイトを参照した。

ただし、notify-sendコマンドは10秒程度でメッセージが消えてしまうので、表示時間を長くしてある。

この指定をすると約25日(!)表示することになる。

#!/bin/bash

PATH=/usr/bin
ALERT=”Signature detected by clamav: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME”

# Send an alert to all graphical users.
for ADDRESS in /run/user/* ; do
USERID=${ADDRESS#/run/user/}
/usr/bin/sudo -u “#$USERID” DBUS_SESSION_BUS_ADDRESS=”unix:path=$ADDRESS/bus” PATH=${PATH} \
/usr/bin/notify-send -t 2147483647 -i dialog-warning “Virus found!” “$ALERT”
done

5.clamonaccのサービスを作成

Linux Mintに限らず、Ubuntuではclamonaccのサービスは標準では用意されていないらしい。

/etc/systemd/system/clamonacc.service

を作成する。

これも、ここのサイトを参照したが、clamonaccのオプションに–fdpassが抜けており、そのままにするとclamavのアカウントで読めないファイルがに対して、

“File path check failure on: ……………………”

のエラーがsystemのログに大量に発生することになる。

[Unit]
Description=ClamAV On Access Scanner
Requires=clamav-daemon.service
After=clamav-daemon.service syslog.target network.target

[Service]
Type=simple
User=root
ExecStart=/usr/sbin/clamonacc -F –fdpass –log=/var/log/clamav/clamonacc –move=/root/quarantine
Restart=on-failure
RestartSec=120s

[Install]
WantedBy=multi-user.target

6.サービスの開始

用意したサービスを開始する。

systemctl enable clamav-daemon.service
systemctl enable clamonacc.service
systemctl enable clamav-freshclam.service

念のため、エラーがないことを確認。

systemctl status clamav-daemon.service
systemctl status clamonacc.service
systemctl status clamav-freshclam.service

7.rootをclamavに登録

usermod -a -G clamav root

8.cronの登録

$sudo crontab -e

これで、一日2度のワクチンファイルのアップデート

週に5回の/homeと/tmpのウィルスチェック

週に1回の全ファイルチェックが行われる。

niceで優先度低めなので、遅いPCでも大丈夫だろう。

00 01,13 * * *  /usr/bin/freshclam –quiet
0 19 * * 1-5 nice -n 16  systemd-cat –identifier=”clamav-scan” clamdscan –quiet –fdpass –move=/root/quarantine /home /tmp  >/dev/null 2>&1
0 6 * * 6 nice -n 18  systemd-cat –identifier=”clamav-scan” clamdscan –quiet –fdpass –move=/root/quarantine /  >/dev/null 2>&1

9.リブート

PCをリブートだ。


今回、PCを定期的にチェックする方法はいろいろなところに説明の情報がWEBで見つかったけど、OnAccessのやり方が少なくて、結構苦労した。

これができないと、ウィルスファイルをダウンロードしてもすぐにわからない。

実際に動作するかテストする。

https://www.eicar.org/

からダミーのウィルスファイルをダウンロードすると、画面の右上にウィルス発見と表示するようなった。

ようやく、ウィルスチェックができるようになった。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする