Linux

Ubuntu Linux 安裝、使用 ClamAV 防毒軟體 clamonacc 自動掃描教學與範例

介紹如何在 Ubuntu Linux 環境安中並使用 ClamAV 防毒軟體的 clamonacc 工具提供系統自動掃描病毒(On-Access)的功能。

ClamAV 的自動掃描病毒(on-access)是透過 Linux 核心的 fanotify API 功能,阻止行程存取被病毒感染的檔案,這個保護機制是作用在 Linux 核心層級(kernel-space),所以保護力會比一般使用者層級(user-space)更高。

安裝 clamonacc

在使用 clamonacc 之前,必須先安裝好 clamd 常駐服務

若在 Ubuntu Linux 中,clamonacc 這個工具被收錄在 clamav-daemon 套件中,只要安裝好 clamd 常駐服務之後,就可以直接使用 clamonacc 這個工具。

On-Access 自動掃描病毒

若要使用 clamonacc 的 On-Access 自動掃描病毒功能,要先編輯 /etc/clamav/clamd.conf 設定檔,加入基本的 On-Access 相關設定:

# On-Access 自動掃描作用路徑
OnAccessIncludePath /home

# 防止行程存取感染病毒的檔案
OnAccessPrevention true

# 排除 clamav 使用者
OnAccessExcludeUname clamav

這裡的 OnAccessIncludePath 是用來指定 On-Access 自動掃描病毒功能的作用路徑,若指定為 /home,則 clamonacc 就會對整個 /home 目錄與子目路以下的所有檔案進行監控並掃毒。

OnAccessPrevention 功能是自動防止行程存取受病毒感染的檔案,如果有行程嘗試存取有病毒的檔案,就會出現 Operation not permitted 的錯誤。

OnAccessExcludeUname 則是用來排除指定使用者的行程,以 Ubuntu Linux 來說,預設執行 clamd 的使用者是 clamav,所以將其排除。

完成基本的設定之後,就可以用 root 權限執行 clamonacc

# 啟動 clamonacc 常駐程式
sudo clamonacc

如果 clamonacc 相關的設置都沒問題的話,它就會自動以常駐程式的方式在系統上執行,這樣就完成 On-Access 自動掃描病毒的設置了。

測試自動掃描病毒

如果要測試 On-Access 自動掃描病毒的功能是否有正常運作,我們可以自己建立一個 EICAR 測試病毒檔

# 建立 EICAR 測試病毒檔
cat > eicar.virus <<'EOF'
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
EOF

接著再以 cat 指令嘗試存取這個測試用的病毒檔案:

# 測試存取病毒檔案
cat eicar.virus
cat: eicar.virus: Operation not permitted

由於 clamonacc 偵測到這一個 eicar.virus 檔案含有病毒,所以就自動禁止 cat 行程讀取該檔案。

所有被 clamonacc 偵測到的病毒檔案也都會自動被記錄在 /var/log/syslog 記錄檔中:

Jun 22 19:22:02 largeimg clamd[10702]: Tue Jun 22 19:22:02 2021 -> ~/home/ubuntu/eicar.virus: Eicar-Signature(69630e4574ec6798239b091cda43dca0:69) FOUND

常用 clamd.conf 設定

以下設定可讓 clamonacc 監控整個系統,排除 root 管理者與 clamav 使用者。由於這裏沒有設定 OnAccessPrevention,所以當發現病毒時並不會限制行程存取,只會顯示警告訊息。

# 監控整個系統
OnAccessMountPath /

# 排除 root 管理者
OnAccessExcludeRootUID yes

# 排除 clamav 使用者
OnAccessExcludeUname clamav

OnAccessIncludePath 與 OnAccessExcludePath 可以納入與排除指定的目錄,並且可以使用多次來指定不同的目錄。以下設定可讓 clamonacc 監控整個 /home 目錄,但排除 /home/user2/home/user4 兩個目錄:

# 監控 /home 目錄,但排除 /home/user2 與 /home/user4 兩個目錄
OnAccessIncludePath /home
OnAccessExcludePath /home/user2
OnAccessExcludePath /home/user4

若希望 OnAccessIncludePath 在指定目錄時,不要涵蓋任何子目錄,可以將 OnAccessDisableDDD 設定為 yes

# 停用對子目錄掃毒功能
OnAccessDisableDDD yes

常見問題

clamonacc 沒有如預期般正常運作,可以加上 --foreground--verbose 參數,讓 clamonacc 以前景模式執行,並輸出詳細的訊息,方便除錯。

如果在執行 clamonacc 時出現類似這樣的錯誤訊息:

ERROR: ClamInotif: could not watch path '/home', No space left on device

可以嘗試執行以下指令,將 /etc/sysctl.conf 中的 fs.inotify.max_user_watches 設定值調高一些:

# 調整 fs.inotify.max_user_watches 的設定值
echo fs.inotify.max_user_watches=524288 | \
  sudo tee -a /etc/sysctl.conf && sudo sysctl -p

參考資料

Share
Published by
Office Guide

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