ฉันต้องการคำแนะนำทั่วไปเกี่ยวกับการตั้งค่า ClamAV (v1.02+) ในสภาพแวดล้อม Docker
ฉันมีหลายคอนเทนเนอร์ที่ทำงานบน Linux (ปัจจุบันคือ Ubuntu 18.04 LTS) ที่ส่งออกไดเร็กทอรีถาวรภายใต้ /var/lib/datastore/tenant_files
ไดเรกทอรีย่อย แอปพลิเคชันบางตัวที่ทำงานภายในคอนเทนเนอร์อนุญาตให้อัปโหลดเอกสาร ซึ่งฉันต้องการให้ ClamAV สแกน
ขณะนี้ฉันมากับการกำหนดค่าต่อไปนี้:
LocalSocket /var/run/clamav/clamd.ctl
FixStaleSocket จริง
คำสั่ง LocalSocketGroup
โหมด LocalSocket 666
# TemporaryDirectory ไม่ได้ตั้งค่าเป็นค่าเริ่มต้น /tmp ที่นี่เพื่อทำการแทนที่
# ค่าเริ่มต้นพร้อมตัวแปรสภาพแวดล้อม TMPDIR/TMP/TEMP ได้
ผู้ใช้ clamav
ScanMail จริง
ScanArchive จริง
ArchiveBlockEncrypted เท็จ
MaxDirectoryRecursion15
FollowDirectorySymlinks เป็นเท็จ
ติดตาม FileSymlinks เท็จ
ReadTimeout 180
เธรดสูงสุด 12
MaxConnectionQueueLength 15
LogSyslog เท็จ
LogRotate จริง
LogFacility LOG_LOCAL6
LogClean เท็จ
LogVerbose เท็จ
โหมโรงเปิดใช้งานหมายเลข
โหมโรงAnalyzerName ClamAV
ไดเรกทอรีฐานข้อมูล /var/lib/clamav
OfficialDatabaseOnly เท็จ
เซลฟ์เช็ค 3600
เบื้องหน้าเป็นเท็จ
ดีบักเป็นเท็จ
ScanPE จริง
MaxEmbeddedPE 10M
ScanOLE2 จริง
ScanPDF จริง
ScanHTML จริง
MaxHTMLทำให้เป็นมาตรฐาน 10M
MaxHTMLNoTags 2M
MaxScript ทำให้เป็นมาตรฐาน 5M
MaxZipTypeRcg 1M
ScanSWF จริง
ExitOnOOM เท็จ
LeaveTemporaryFiles เท็จ
AlgorithmicDetection จริง
ScanELF จริง
IdleTimeout 30
CrossFilesystems จริง
PhishingSignatures จริง
PhishingScanURLs จริง
PhishingAlwaysBlockSSLMไม่ตรงกัน เท็จ
PhishingAlwaysBlockCloak เท็จ
PartitionIntersection เท็จ
ตรวจหา PUA เท็จ
ScanPartialMessages เท็จ
HeuristicScanPrecedence เท็จ
StructuredDataDetection เท็จ
CommandReadTimeout30
SendBufTimeout 200
คิวสูงสุด 100
ExtendedDetectionInfo จริง
OLE2BlockMacros เท็จ
AllowAllMatchScan จริง
ForceToDisk เท็จ
DisableCertCheck เท็จ
ปิดการใช้งานแคชเป็นเท็จ
MaxScanTime 120,000
MaxScanSize 100M
MaxFileSize 25M
MaxRecursion 16
ไฟล์สูงสุด 10,000
แม็กซ์พาร์ติชั่น 50
MaxIconsPE 100
PCREMatchLimit 10,000
PCRERecMatchLimit 5000
PCREMaxFileSize 25M
ScanXMLDOCS จริง
ScanHWP3 จริง
MaxRecHWP3 16
StreamMaxความยาว 25M
LogFile /var/log/clamav/clamav.log
LogTime จริง
LogFileUnlock เท็จ
LogFileMaxSize 0
รหัสไบต์จริง
BytecodeSecurity TrustSigned
BytecodeTimeout 60000
OnAccessMaxFileSize 5M
ExcludePath ^/proc
ExcludePath ^/sys
ExcludePath ^/dev
ยกเว้นเส้นทาง ^/snap
ExcludePath ^/var/lib/lxcfs/cgroup
ExcludePath ^/var/lib/datastore/quarantine
OnAccessIncludePath /var/lib/datastore/tenant_files
OnAccessExcludeUname clamav
OnAccessPrevention ใช่
OnAccessExcludeRootUID เท็จ
VirusEvent /etc/clamav/virus-event.bash
ซึ่งเป็นการรวบรวมบทความบางส่วนที่พบในอินเทอร์เน็ตและเอกสารประกอบจากเว็บไซต์ ClamAV ฉันยังมี คลาโมแนค
บริการตั้งค่าดังนี้:
# /etc/systemd/system/clamonacc.service
[หน่วย]
คำอธิบาย=ClamAV บนเครื่องสแกนการเข้าถึง
ต้องการ=clamav-daemon.service
After=clamav-daemon.service syslog.target network.target
[บริการ]
ประเภท = ง่าย
ผู้ใช้ = ราก
ExecStartPre=/bin/bash -c "ในขณะที่ [ ! -S /var/run/clamav/clamd.ctl ]; นอน 1; เสร็จแล้ว"
ExecStart=/usr/sbin/clamonacc -F --config-file=/etc/clamav/clamd.conf --log=/var/log/clamav/clamonacc.log
[ติดตั้ง]
WantedBy=multi-user.target
ตอนนี้ถ้าฉันให้ ClamAV ทำงานในฐานะผู้ใช้รูท มันจะทำงาน แต่ฉันสังเกตเห็นการวนซ้ำที่คาดเดาไม่ได้เมื่อสแกนไฟล์ที่เป็นของรูท (ตามที่อธิบายไว้ ที่นี่). วิ่งเป็น หอย
ผู้ใช้ทำงานได้ แต่สำหรับผู้ใช้ทั่วไปที่ไม่ใช่รูทเท่านั้น และคอนเทนเนอร์บางส่วนยังคงเรียกใช้กระบวนการภายในในฐานะผู้ใช้รูทภายใน และนั่นแปลเป็นไฟล์ที่ผู้ใช้รูทเป็นเจ้าของในปลายทางที่ส่งออก
ฉันคิดจะใช้ ACL แต่เนื่องจากอาจมีไฟล์จำนวนมาก (เป็นล้าน) ซึ่งอาจเกินความจำเป็นเล็กน้อย คุณคิดอย่างไร? ฉันควรบังคับให้ความเป็นเจ้าของไฟล์เป็น GID ของ หอย
หรืออย่างอื่น?
ไม่ต้องพูดถึงว่าฉันต้องทำให้ ClamAV เข้าสู่โหมดบ่นเพราะโดยปกติแล้วจะไม่บล็อกไฟล์ที่ติดไวรัส และฉันไม่ต้องการเปิดไฟล์ดังกล่าวในฐานะผู้ใช้รูท