Comparisons
Linux Malware Detect (maldet) vs Shelltrap
maldet is free, GPL-2.0 and still shipping releases. The real question is the signature feed behind it — measured, with commands to re-check it yourself.
Linux Malware Detect — maldet — is the default free answer to server-side malware scanning on Linux, and it deserves a fair hearing rather than a sales comparison. This article is mostly about the thing both products depend on and only one of them can control: the signature feed.
maldet, fairly described
The project is alive. It is GPL-2.0, the repository is not archived, version 2.0.1 was released on 29 April 2026 with the last commit three days earlier, and the release notes claim a “43x faster native scan engine” — a vendor claim, quoted as such.
It watches files in real time through inotify, batching events with an inotify_sleep default of 15 seconds. Compared with a periodic scan measured in days, that is a genuinely fast detection interval, and it is why maldet remains the sensible free choice. It also quarantines and offers limited cleanup.
If you run one server, have shell access, read your own logs and enjoy the work, maldet plus ClamAV is a defensible stack. What follows is not an argument that it is bad software. It is an argument about what you are responsible for when you choose it.
The dependency that decides your coverage
A signature-based scanner is only as current as its feed. maldet’s documented model is automatic daily signature updates. Measured from the vendor’s own CDN on 4 September 2026:
| Artefact | Result |
|---|---|
cdn.rfxn.com/downloads/maldet.sigs.ver | 2026052490478 — 24 May 2026, 90,478 signatures |
cdn.rfxn.com/downloads/rfxn.yara | Last-Modified: Sun, 24 May 2026 14:33:02 GMT |
cdn.rfxn.com/downloads/maldet-sigpack.tgz | HTTP 200, 7,086,179 bytes |
The infrastructure serves normally, and no end-of-life notice is published anywhere — so this is a maintenance gap, not a shutdown, and one push would change it. Check it yourself rather than trusting a date in an article:
curl -s https://cdn.rfxn.com/downloads/maldet.sigs.ver
curl -sI https://cdn.rfxn.com/downloads/rfxn.yara | grep -i last-modified
For a fair control group we measured a paid ClamAV signature feed in the same category in the same pass — Malware Expert , €50 per month for unlimited servers — and it had been updated on 3 September 2026, the day before. So feed staleness here is a property of this particular free feed, not of signature feeds generally — which is exactly why the honest conclusion is narrow.
Two things follow. First, coverage lives in the feed, not in the scanner, and that is doubly true when ClamAV is the engine: ClamAV’s own documentation says it “is not a traditional anti-virus or endpoint security suite”, and there is no official claim of PHP webshell coverage anywhere on clamav.net. Second, nothing tells you when a feed stops. A scanner running against four-month-old signatures looks identical to a healthy one, right up until an incident.
That is the failure mode we designed against: every Shelltrap generation carries an expiry that must still be in the future when it is verified, feed state is a field in shelltrap health, and a missing active generation puts the daemon into degraded instead of quiet confidence. The full mechanism — signing, provenance, gating, rollback — is in signed signature feeds explained
.
Architecture: inotify against fanotify
maldet watches with inotify. The kernel documents the consequences, verbatim :
Inotify monitoring of directories is not recursive: to monitor subdirectories under a directory, additional watches must be created.
On a hosting box that means a watch per directory, a per-user ceiling in /proc/sys/fs/inotify/max_user_watches, a documented race when new subdirectories appear, and a queue that can overflow. inotify is also notification-only: there is no permission-event mechanism, so nothing can be refused.
fanotify
watches a whole mount “in a race-free manner” — the kernel’s own words — and supports permission events where “the recipient must write a response which decides whether access is granted or not”. It also needs CAP_SYS_ADMIN, and the man page warns about the risk of that capability being held by a process that receives file descriptors, which is why the privileged part should be small. The full comparison is in fanotify vs inotify
.
Neither API gives you certainty. Both queues can overflow, so a periodic full sweep is not optional in either design.
What differs, axis by axis
Where a cell says “not claimed”, it means the project’s own material does not claim it. That is not a test result, and we have not run one.
| maldet | Shelltrap | |
|---|---|---|
| Licence / cost | Free, GPL-2.0 | Commercial, per server |
| Real-time mechanism | inotify, 15 s event batch by default | fanotify where the host allows it, with the achieved tier (A–D) reported by --check, plus a scheduled full sweep |
| Engines | ClamAV plus its own signature set | ClamAV, YARA, hash sets and heuristics in an unprivileged worker under namespaces and Landlock (Full profile); Lite profile documented when clamd or memory is unavailable |
| Signature supply chain | Files fetched from a public CDN | Ed25519-signed generations, per-rule provenance and licence, activation gate against known-good and known-bad corpora, rollback, signed revocation list, multi-tenant circuit breaker |
| Feed freshness signalling | Not claimed | Generation expiry enforced at verification; feed state in health output |
| Upload-time blocking | Not claimed | PHP upload gate via auto_prepend_file, fail-open by default, per-domain on_error |
| Multi-tenant policy | Not claimed | Policies inheriting global → account → domain, per-account finding caps, panel roles enforced by the broker |
| Panel integration | Not claimed | CyberPanel plugin for findings, quarantine, policies, feeds and audit |
| Evidence trail | Quarantine, limited cleanup | Quarantine preserving owner, mode, timestamps, ACL and SELinux context; restore that never overwrites; hash-chained audit log |
| Support | Community | Commercial, from the vendor |
Speed of detection is the wrong axis to argue about
Fifteen seconds versus a few seconds is not the difference that matters. Patchstack’s measured weighted median time to first exploitation is five hours ; both designs are far inside that window, and both are far ahead of any periodic scanner.
The differences that matter on a hosting platform are the ones above the detection loop: whether the rules you run can be attributed and rolled back, whether the tool can be operated per customer, and whether the record it leaves will support an incident report.
When maldet is the right choice
- One or a few servers you administer personally.
- You will actually monitor feed freshness — and now you have the two commands to do it.
- You do not need per-domain policy, delegated panel access, or an audit trail for a regulator.
- Budget is the binding constraint, and a free tool that you supervise beats a paid tool you cannot afford.
When it is not
- Multi-tenant hosting where policy has to differ per customer and support staff need a UI that is not the shell.
- Any obligation to document detection and produce incident evidence — see quarantine or delete .
- Environments where an upload-time control is worth having in front of PHP.
- Situations where “who maintains these rules, under what licence, and how would I roll one back” needs an answer.
What this means for CyberPanel operators
- If you run maldet, add a feed-age check to your monitoring today. Two
curlcalls, one alert, and the biggest silent failure mode in the free stack becomes visible. - Separate the two questions before you compare products: is the scanner maintained, and is the feed maintained. They have different answers here.
- Do not switch on the basis of detection intervals; switch on the basis of policy, evidence and supply-chain assurance, or stay where you are.
- If you evaluate a replacement, run it in report-only mode next to your current scanner for a week and compare findings; the procedure is in the report-only first week , and the installation path is in the installation docs .
Shelltrap ships signed, provenance-tracked signatures and tells you when they are stale — because a quiet scanner is the expensive kind. See what it does .
Frequently asked
Is maldet abandoned?
No. Version 2.0.1 was released on 29 April 2026, the repository is not archived, and the project is GPL-2.0. What has not moved is its signature feed, which is a separate question from whether the code is maintained.
So is the free stack unusable?
No. It is usable by an operator who audits the feed and accepts the coverage that follows from it. The failure mode to avoid is assuming daily updates because that is the documented model, without ever checking.
Can I run both?
Nothing stops you, but two on-write watchers on the same tree cost double the I/O for overlapping coverage. If you are evaluating, run one in report-only mode alongside the other and compare findings before switching.
Sources
Every number, date and vendor claim in this article links to one of these.
- Linux Malware Detect (maldet) project repository — accessed 2026-09-04
- Linux Malware Detect signature feed, rfxn.yara (measured with curl -I) — accessed 2026-09-04
- Linux Malware Detect signature version file, maldet.sigs.ver — accessed 2026-09-04
- Malware Expert — ClamAV signature subscription (paid feed) — accessed 2026-09-04
- ClamAV documentation — accessed 2026-09-04
- inotify(7) — Linux manual page — accessed 2026-09-04
- fanotify(7) — Linux manual page — accessed 2026-09-04
- Patchstack, State of WordPress Security in 2026 (covering 2025) — accessed 2026-09-04
More from the research desk
ClamAV alone is not enough for webshells
ClamAV says so itself. What the engine covers, where PHP webshell detection actually comes from, and what a layered …
Guidesfanotify vs inotify for file monitoring
Two kernel APIs, two very different guarantees. What the man pages actually say about recursion, races, permission …
GuidesFind webshells on a CyberPanel server manually
A root-level triage playbook with find, grep, YARA and clamscan for CyberPanel hosts, including the honest limits of …
Shelltrap watches the files this article is about
Real-time detection, an upload gate in front of your PHP, explainable verdicts, and nothing leaving your server.