Something feels off. The fan won't stop spinning even though you're not doing anything heavy. A command you've run a thousand times behaves strangely. Or maybe you just have that itch — the sense that someone might be poking around where they shouldn't be.
Most of the time, that feeling turns out to be nothing. A runaway browser tab. A background update. A flaky package. But "most of the time" isn't "always," and the cost of checking is a few minutes you'll feel better for spending.
This is a practical guide to the real signs a Linux system has been compromised in 2026 — what to look for, the exact commands to run, and crucially, how to tell genuine trouble from ordinary noise. Because the worst outcome here isn't a missed intrusion. It's panicking over a false alarm and nuking a perfectly healthy system.
Why a hacked Linux box is hard to spot
Here's the uncomfortable part. Modern Linux malware is built specifically to not be noticed. The days of obvious popups and locked screens are mostly behind us — that's not where the money is.
Take perfctl, a cryptominer documented by Aqua Security that's been active for years across countless Linux systems. It installs rootkits to hide itself, disguises its processes as legitimate system services, and goes quiet the moment you log in — then resumes mining when you walk away. Or QLNX, which researchers described in 2026 as combining rootkits, PAM backdoors, and fileless execution specifically to persist and evade detection.
So you can't rely on "it'll be obvious." You have to know where to look. The good news: even stealthy malware leaves traces, and the checks below catch the overwhelming majority of what a desktop user would actually encounter.
Sign 1: Unexplained CPU, fan, or network activity
The most common giveaway, because the most common Linux malware is a cryptominer — and mining is, by definition, burning your CPU for someone else's profit.
If your machine is hot, loud, or sluggish when it should be idle, look at what's eating the cycles:
# Live view, sorted by CPU. Press 'P' to sort by CPU, 'M' for memory.
top
# Nicer if you have it installed
htop
What's normal: your browser, your desktop environment, maybe an indexer or a backup running. What's not: a process you don't recognize pinning a core at 100%, especially one with a random-looking name, or one running from an odd location like /tmp, /dev/shm, or /var/tmp.
The catch — and clever malware knows this — is that some miners detect when you open a system monitor and immediately throttle down to hide. If your fan roars when the screen's idle but everything looks calm the instant you check, that's its own kind of red flag.
Sign 2: Processes you don't recognize
Go beyond the CPU view and actually inventory what's running:
# Full process list with command paths
ps auxf
# Find processes running from suspicious locations
ls -la /proc/*/exe 2>/dev/null | grep -E '/tmp|/dev/shm|/var/tmp'
That second command is a good one. Legitimate software almost never runs its executables out of /tmp or /dev/shm — those are scratch directories. Malware loves them precisely because they're writable without root and often cleared on reboot, which helps it stay quiet.
Things worth a second look:
- Processes with names that mimic real ones but aren't quite right —
kworkerdinstead of the real kernelkworker, orsystemd-networkspelled slightly off. - A process whose executable path points somewhere temporary or hidden (a leading dot, like
/home/you/.config/.cache/.x). - Processes you can't kill, or that respawn instantly after you kill them — a sign something's actively keeping them alive.
Don't trust a single tool. A rootkit can hook ps and top to hide its own processes. If top shows nothing but your CPU is clearly maxed, that discrepancy is the evidence. Cross-check with /proc directly, since hiding a process from /proc is much harder than hiding it from ps.
Sign 3: Connections you can't explain
A compromised machine usually phones home — to a command-and-control server, a mining pool, or somewhere your data is being shipped. So look at what your machine is talking to:
# Active connections with the owning process
sudo ss -tunp
# Per-process bandwidth, live (install with apt/dnf if needed)
sudo nethogs
# What's listening for incoming connections?
sudo ss -tlnp
You're looking for connections to addresses you don't recognize, especially persistent ones from processes that have no business reaching the internet. A text editor shouldn't be holding an outbound connection to an unfamiliar IP. A "system" process talking to a random foreign host on a high port deserves scrutiny.
That last command — what's listening — matters too. If something opened a port to accept incoming connections and you didn't set up a server, that could be a backdoor waiting for its operator.
Sign 4: Accounts, logins, and SSH keys you didn't create
Attackers want to keep their access. The classic ways: add a user, plant an SSH key, or both.
# Who's logged in right now
who
w
# Recent login history (and failed attempts)
last
sudo lastb # failed logins — heavy on an exposed SSH box
# Accounts that can actually log in (UID 0 = root-level)
grep -vE '/(nologin|false)$' /etc/passwd
awk -F: '($3 == 0) {print}' /etc/passwd # should ONLY show root
That last check is important: only root should have UID 0. If a second account shows up with UID 0, someone gave themselves root-equivalent access.
Then check for SSH keys you don't remember adding:
# Authorized keys let someone log in without a password
cat ~/.ssh/authorized_keys
sudo cat /root/.ssh/authorized_keys 2>/dev/null
If there's a key in there you can't account for, that's one of the clearest compromise signals there is. Someone has set up passwordless access to your machine.
Sign 5: Files, cron jobs, and services that appeared on their own
Persistence is the name of the game. Malware wants to survive a reboot, so it hooks into the things Linux runs automatically. Check them.
# Your cron jobs and root's
crontab -l
sudo crontab -l
ls -la /etc/cron.* /etc/cron.d/ /var/spool/cron/
# systemd services and timers — a favorite persistence spot
systemctl list-units --type=service --state=running
systemctl list-timers
ls -la /etc/systemd/system/ ~/.config/systemd/user/
A cron job that runs a script out of /tmp every few minutes is a screaming red flag. So is an unfamiliar systemd service, particularly one with a vague name and an ExecStart pointing somewhere odd.
Also worth a glance — recently modified files in sensitive spots, and your shell startup files (which malware sometimes edits to re-launch itself):
# Recently changed system binaries (last 10 days)
sudo find /usr/bin /usr/sbin /bin -mtime -10 -type f
# Check shell configs for anything you didn't add
cat ~/.bashrc ~/.profile ~/.bash_profile 2>/dev/null
Sign 6: System tools that lie to you (rootkits)
This is the deepest layer. A rootkit's whole purpose is to corrupt the tools you'd use to find it — so ls doesn't show its files, ps doesn't show its processes, and netstat doesn't show its connections. When your own commands are compromised, manual checks stop being reliable.
That's what dedicated rootkit scanners are for. They compare your system against known-good baselines and known rootkit fingerprints:
sudo apt install rkhunter chkrootkit # or dnf/pacman
sudo chkrootkit
sudo rkhunter --update
sudo rkhunter --check
According to the rkhunter project, it checks for SHA256 hash changes on key files, hidden files in system directories, suspicious strings in kernel modules, and executables with anomalous permissions. chkrootkit additionally checks whether your network interface has been quietly put into promiscuous mode — a classic sign of traffic sniffing.
For file-level malware (as opposed to rootkits), pair these with a ClamAV scan. We cover that end to end in how to scan for malware on Linux.
The false alarms that fool everyone
Now the part most "is my Linux hacked?" articles skip — and the part that saves you from wrecking a healthy system. Most scary-looking output is completely normal. Before you conclude you've been breached, rule these out:
- rkhunter and chkrootkit cry wolf constantly. They flag changed file hashes after every system update, warn about hidden files that are perfectly legitimate (like
.gitignoreor systemd's own hidden entries), and report "suspicious" files that ship with normal packages. A yellow "Warning" is a prompt to investigate, not a verdict. After updating your system, runsudo rkhunter --propupdto reset the baseline. - High CPU is usually just software. Browser tabs, Electron apps, a compile job, the GNOME tracker indexer, a Flatpak updating in the background. Identify the process before assuming malice.
- Unfamiliar processes are often system processes. Linux runs dozens of background services with cryptic names.
kworker,kthreadd,systemd-*,dbus— these are normal. Search a name before panicking; the real one will be well documented. - Outbound connections are mostly mundane. Your OS checks for updates, your browser syncs, your cloud client phones home. Match the connection to the app that owns it before assuming the worst.
- Failed SSH logins are background noise. If your machine is reachable from the internet,
lastbwill show endless failed attempts from bots scanning the whole internet. That's not a successful breach — it's just the weather online. What matters is whether any of them succeeded (checklast).
The rule of thumb: One weird signal is rarely proof. Real compromises usually light up several of these checks at once — high CPU and an unknown process and a strange connection and an SSH key you didn't add. A single odd line, by itself, is far more likely to be normal Linux being normal.
What to do if you find something real
Say the signs line up and you're genuinely compromised. Here's the sober playbook — roughly in order.
- Disconnect from the network. Pull the cable or turn off Wi-Fi. This stops data exfiltration and cuts the attacker's control channel immediately.
- Don't reboot yet (usually). Some evidence lives only in memory and running processes. If you want to understand what happened, capture what you can first — running processes, connections, suspicious file paths.
- Change passwords from a different, clean device. Assume anything you typed on the compromised machine was captured — especially passwords and SSH keys. Rotate credentials for email, banking, and anything important, using a device you trust.
- Revoke SSH keys and API tokens. Remove unknown
authorized_keysentries everywhere those keys might grant access, and rotate cloud/API tokens that lived on the machine. - When in doubt, wipe and reinstall. This is the hard truth about a confirmed root-level compromise: you can never be fully certain you've removed everything, because a good rootkit hides exactly the thing you'd look for. A clean install from trusted media, with data restored from a backup you made before the compromise, is the only way to be sure.
That last point is exactly why good backups matter so much — they're what make "wipe and reinstall" a few hours of inconvenience instead of a disaster.
Quietly reducing the odds
You don't need to live in a bunker. A handful of habits cut your risk dramatically:
- Patch regularly. Most intrusions use known, already-patched vulnerabilities. In May 2026 alone, distributions patched over 1,756 Linux vulnerabilities. Staying current closes the doors before anyone walks through.
- Lock down SSH. Keys instead of passwords, no direct root login, and don't expose it to the open internet if you can avoid it.
- Be careful what you run. Avoid
curl | sudo bashfrom sources you haven't vetted. Don't run as root what doesn't need root. - Run a scanner. Catching known malware and the droppers that deliver it heads off a lot of intrusions before they take hold. A background monitor that flags threats as files arrive means you're not relying on remembering to check.
This is the layer where XorShield AV fits — real-time monitoring that watches for known threats the moment they land, automatic quarantine when it finds one, and zero data leaving your device. It won't replace good habits or backups, and we won't pretend it does. But it turns "I hope I'd notice" into "something's actually watching."
The reassuring truth, after all this: most of the time, that uneasy feeling is nothing. Now you know how to check instead of wonder — and how to tell a real problem from your machine just being a machine.
Last updated: May 2026
Stop wondering. Start knowing.
Real-time monitoring catches known threats the moment they appear — with automatic quarantine and zero telemetry. Built for people who chose Linux for a reason.
Get StartedBefore you go
Curious what antivirus feels like when it respects you?
Choose your platform, tell us where to reach you, and you're set.
Get Started