Linux

Ubuntu Linux 安裝、使用 ClamAV 防毒軟體 clamd 常駐服務教學與範例

介紹如何在 Ubuntu Linux 中安裝並使用 ClamAV 防毒軟體的 clamd 常駐服務,加速掃描病毒的速度。

當安裝好基本的 ClamAV 防毒軟體之後,就可以使用 clamscan 進行掃毒,但是 clamscan 在每次掃毒前的初始化時間相當長,若要持續性進行多次掃描,可以加裝 clamd 常駐服務,改用 clamdscan 掃描工具,可大幅提高掃毒的速度。以下將介紹 clamd 的安裝與 clamdscan 的使用方式。

安裝 clamd

若在 Ubuntu Linux 系統中,clamd 被收錄在 clamav-daemon 套件中,可以使用 apt 安裝:

# 安裝 clamav-daemon 套件
sudo apt install clamav-daemon

安裝好 clamav-daemon 套件之後,系統上會多出一個 clamav-daemon 服務:

# 查看 clamav-daemon 系統服務狀態
systemctl status clamav-daemon
● clamav-daemon.service - Clam AntiVirus userspace daemon
   Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/clamav-daemon.service.d
           └─extend.conf
   Active: active (running) since Sun 2021-06-20 14:41:15 CST; 5min ago
     Docs: man:clamd(8)
           man:clamd.conf(5)
           https://www.clamav.net/documents/
 Main PID: 31942 (clamd)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/clamav-daemon.service
           └─31942 /usr/sbin/clamd --foreground=true
[略]

clamd 設定檔

clamd 的系統設定檔位於 /etc/clamav/clamd.conf,設定檔的參數設定方式與說明可參考 clamd.conf 的線上說明。

# 查閱 clamd.conf 的線上說明文件
man clamd.conf

clamdscan 掃描病毒

clamdscan 是一個搭配 clamd 常駐服務的掃毒工具,功能非常類似 clamscan,執行效率較高,但是可用的參數較少(因為部分功能是由 clamd 控制的)。

檢查 clamd 與病毒碼版本

在使用 clamdscan 進行掃毒之前,可以先測試與 clamd 的連接是否正常:

# 檢查與 clamd 的連接是否正常
clamdscan -p 3
PONG

若顯示 PONG 就表示與 clamd 的連線正常。

同時也檢查一下 ClamAV 與病毒碼版本:

# 檢查 ClamAV 版本
clamdscan --version
ClamAV 0.103.2/26206/Sat Jun 19 19:15:41 2021

在這段輸出中,26206 是病毒碼(signatures)的版本,而最後的日期則是病毒碼的日期。

個別檔案掃毒

執行 clamdscan 並指定檔案路徑,即可對指定檔案進行掃毒:

# 對 archive.zip 進行掃毒
clamdscan archive.zip
/home/ubuntu/tmp/archive.zip: OK

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 0.002 sec (0 m 0 s)
Start Date: 2021:06:20 15:54:46
End Date:   2021:06:20 15:54:46

目錄掃毒

執行 clamdscan 不帶任何參數,就會自動掃描目前所在的整個目錄:

# 對目前所在目錄進行掃毒
clamdscan

若指定目錄路徑,就會對該目錄進行掃毒:

# 對 /home/ubuntu 目錄進行掃毒
clamdscan /home/ubuntu

檔案清單掃毒

若要對指定的檔案清單進行掃毒,可以使用 -f 參數來指定檔案清單。

先準備好檔案清單 filelist.txt,格式為一行一個檔案,例如:

/home/ubuntu/file1.zip
/home/ubuntu/file2.docx
/home/officeguide/file3.pptx

接著執行以下指令,對檔案清單內的檔案進行掃毒:

# 對檔案清單進行掃毒
clamdscan -f filelist.txt

傳遞檔案描述符權限

將檔案描述符(file descriptor)權限傳遞給 clamd,當 clamd 以不同的使用者權限執行時,若以這種方式進行掃毒,執行效率會比串流(streaming)更好。

# 傳遞檔案描述符權限
clamdscan --fdpass /home/ubuntu

平行化掃描

執行 clamdscan 指令時若加上 -m--multiscan 參數,clamdscan 就會嘗試以多執行緒(multithread)的方式平行掃描每個路徑下的檔案,在多核心 CPU 的環境下可大幅提升掃描速度,此參數可搭配 --fdpass 一起使用:

# 以多執行緒平行掃描
clamdscan -m --fdpass /home/ubuntu

資料串流掃毒

clamscan 也可以對資料串流進行掃毒:

# 掃描資料串流
cat myfile | clamscan -
stream: OK

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 0.216 sec (0 m 0 s)
Start Date: 2021:06:20 15:54:09
End Date:   2021:06:20 15:54:09

移除、搬移、複製中毒檔案

clamdscan 偵測到中毒的檔案時,預設只會顯示訊息,不會刪除檔案,若要自動刪除感染病毒的檔案,可以加上 --remove 參數:

# 自動刪除中毒的檔案
clamdscan --remove /home/ubuntu

使用 --remove 參數會有誤判的風險,如果怕誤刪檔案,可以改用 --move 參數將中毒的檔案搬移到指定的隔離目錄:

# 將中毒檔案搬移至 /home/clamav/virus 目錄
clamdscan --move=/home/clamav/virus /home/ubuntu

另一種更保守的做法是只將中毒的檔案複製一份到指定的目錄,而不更動原始的檔案:

# 將中毒檔案複製一份至 /home/clamav/virus 目錄
clamdscan --copy=/home/clamav/virus /home/ubuntu

輸出訊息

若希望 clamdscan 輸出較詳細的資訊,可以加上 -v 參數:

# 輸出詳細資訊
clamdscan -v /home/ubuntu

若希望 clamdscan 不要輸出任何訊息,可以使用 --quiet 參數:

# 不要輸出任何訊息
clamdscan --quiet /home/ubuntu

若不要輸出最後的掃描結果報表,可以加上 --no-summary 參數:

# 不要輸出掃描結果報表
clamdscan --no-summary /home/ubuntu

若要將輸出訊息直接儲存至檔案中,可以使用 -l 參數指定輸出的檔案路徑:

# 將訊息輸出至 scan.log
clamdscan -l scan.log /home/ubuntu

clamdscan 傳回值

clamdscan 指令在掃描完成後,會依據掃描結果傳回不同的值:

傳回值 說明
0 未發現病毒。
1 發現有檔案感染病毒。
2 掃描過程出現錯誤。

若在 bash shell 指令稿中,可以透過傳回值來判斷是否掃出病毒:

#!/bin/bash
# 以多執行緒平行掃描病毒
clamdscan -m --fdpass /home/ubuntu

# 取得 clamdscan 傳回值
val=$?

# 判斷掃描結果
if [ "$val" = "0" ]; then
  echo "未發現病毒。"
elif [ "$val" = "1" ]; then
  echo "發現有檔案感染病毒。"
else
  echo "掃描過程出現錯誤。"
fi

查看 clamd 狀態

若需要查看 clamd 常駐服務的狀態,可以使用 clamdtop 這個指令工具,它類似標準的 top 工具,會顯示 clamd 的佇列、記憶體使用量以及病毒碼資訊等:

# 查看 clamd daemon 狀態
clamdtop

clamdtop 的執行畫面會類似這樣:

clamdtop 執行畫面

參考資料

Share
Published by
Office Guide
Tags: 資訊安全

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago