shelltrap.com
en de

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.

Illustration — Linux Malware Detect (maldet) vs Shelltrap

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:

ArtefactResult
cdn.rfxn.com/downloads/maldet.sigs.ver2026052490478 — 24 May 2026, 90,478 signatures
cdn.rfxn.com/downloads/rfxn.yaraLast-Modified: Sun, 24 May 2026 14:33:02 GMT
cdn.rfxn.com/downloads/maldet-sigpack.tgzHTTP 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.

maldetShelltrap
Licence / costFree, GPL-2.0Commercial, per server
Real-time mechanisminotify, 15 s event batch by defaultfanotify where the host allows it, with the achieved tier (A–D) reported by --check, plus a scheduled full sweep
EnginesClamAV plus its own signature setClamAV, 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 chainFiles fetched from a public CDNEd25519-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 signallingNot claimedGeneration expiry enforced at verification; feed state in health output
Upload-time blockingNot claimedPHP upload gate via auto_prepend_file, fail-open by default, per-domain on_error
Multi-tenant policyNot claimedPolicies inheriting global → account → domain, per-account finding caps, panel roles enforced by the broker
Panel integrationNot claimedCyberPanel plugin for findings, quarantine, policies, feeds and audit
Evidence trailQuarantine, limited cleanupQuarantine preserving owner, mode, timestamps, ACL and SELinux context; restore that never overwrites; hash-chained audit log
SupportCommunityCommercial, 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

  1. If you run maldet, add a feed-age check to your monitoring today. Two curl calls, one alert, and the biggest silent failure mode in the free stack becomes visible.
  2. Separate the two questions before you compare products: is the scanner maintained, and is the feed maintained. They have different answers here.
  3. 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.
  4. 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.

  1. Linux Malware Detect (maldet) project repository — accessed 2026-09-04
  2. Linux Malware Detect signature feed, rfxn.yara (measured with curl -I) — accessed 2026-09-04
  3. Linux Malware Detect signature version file, maldet.sigs.ver — accessed 2026-09-04
  4. Malware Expert — ClamAV signature subscription (paid feed) — accessed 2026-09-04
  5. ClamAV documentation — accessed 2026-09-04
  6. inotify(7) — Linux manual page — accessed 2026-09-04
  7. fanotify(7) — Linux manual page — accessed 2026-09-04
  8. Patchstack, State of WordPress Security in 2026 (covering 2025) — accessed 2026-09-04

More from the research desk

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.