介紹如何在 Ubuntu Linux 中安裝並使用 ClamAV 防毒軟體的 clamd
常駐服務,加速掃描病毒的速度。
當安裝好基本的 ClamAV 防毒軟體之後,就可以使用
clamscan
進行掃毒,但是 clamscan
在每次掃毒前的初始化時間相當長,若要持續性進行多次掃描,可以加裝 clamd
常駐服務,改用 clamdscan
掃描工具,可大幅提高掃毒的速度。以下將介紹 clamd
的安裝與 clamdscan
的使用方式。
Ubuntu Linux 安裝、使用 ClamAV 防毒軟體 clamscan 掃毒指令教學與範例
Ubuntu Linux 安裝、使用 ClamAV 防毒軟體 clamonacc 自動掃描教學與範例
安裝 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
的執行畫面會類似這樣: