All-in-one native cyber defense, hardware integrity, and privacy sentinel plugin for Omarchy Linux.
Author: Ozan Ozdil (ozdil)
License: MIT
Plugin ID: ozdil.security-sentinel
Version: 1.5.0 (changelog)
Security Sentinel Hub unifies 9 Linux defense and privacy subsystems into a single high-performance native Rust daemon (sentinel-engine) with an integrated, theme-harmonized Omarchy Quickshell dashboard.
Fully hardened with HANCORE Military-Grade Security Standards, providing kernel-level zero-trust policies, bounded IPC processes, and real-time hardware integrity validation.
Fixes from a second full-stack analysis. Highlights (full list in CHANGELOG.md):
- CVE severities from
arch-auditare read correctly, so a fixable critical advisory raises an alert again. - A deleted tripwire canary is an alert, not silently re-created.
- USB Armor blocks without a password prompt a keystroke injector could dismiss; a failed block is retried and reported.
- The panel fails closed: a missing or broken engine shows "ENGINE OFFLINE", never "ALL SYSTEMS SECURE".
- Failed actions show the engine's reason; Freeze/Kill are pinned to the process the report showed.
- The OpSec scrubber also cleans progressive JPEGs and drops data after the image (phone MPF images, trailers).
- The package installs a plugin Omarchy actually finds (see Installation).
- Event-driven background monitor: USB hot-plug is checked within a second, not on the next 20 s poll.
- BadUSB fingerprints pin serial number and interface classes, so a cloned VID:PID with an added keyboard is caught.
- Real CVE data from the Arch Security Tracker via
arch-audit. - Every socket names its process and PID; the socket anomaly analyzer now runs.
- Privileged actions go through the shipped polkit policy; PIDs are signalled via pidfd.
- USB Armor no longer locks out your own keyboard and mouse after "Trust Devices".
- Failed toggles roll back instead of reporting success; destructive actions need a confirming click.
- Simpler, flat Omarchy-style panel and dashboard.
Each subsystem features an interactive inspection menu:
- Network and Sockets Radar: Real-time socket monitoring (
/proc/net/tcp*,/proc/net/udp*) reporting Listening versus Established sockets and detecting suspicious ports. Expands to display individual listening ports (LISTEN :53,LISTEN :631) and active sockets. - BadUSB Defense & Hardware Armor: Hardware HID device monitoring (
/sys/bus/usb/devices), maintaining a local device-fingerprint baseline (trusted_usb.json, mode 0600: VID:PID, serial number and interface classes) so a device that clones a trusted ID but adds a keyboard interface is flagged the moment it is plugged in (kernel uevent, no 20 s polling gap) to alert against unauthorized Rubber Ducky and BadUSB keystroke injectors. Features an instant UI killswitch to toggle USB Armor lockdown. - CVE Vulnerability Radar: Matches installed packages against the Arch Security Tracker via
arch-audit(CVE IDs, severity, fixed version; cached for 6 h) and lists pending updates viacheckupdates(pacman-contrib). A critical advisory that already has a fix raises an alert. - Authentication Watch: Systemd journald and PAM audit monitoring unauthorized login and SSH authentication failures over a rolling 24-hour window.
- Tripwire Canaries & Self-Defense: Honey-token canary files with SHA-256 baseline verification for ransomware and tampering early warning. Includes active self-integrity verification (Self-Exe SHA-256 hash checks) and Panic Blackout triggers.
- DNS Leak Guard (DoT): Native integration with
/usr/bin/omarchy-dns, featuring an interactive toggle to enable Cloudflare DNS-over-TLS (1.1.1.1, opportunistic mode in systemd-resolved). A custom resolver set withomarchy dns Customis reported as such and never overwritten. - Ghost MAC (Wi-Fi Randomizer): NetworkManager integration (
nmcli) featuring an interactive toggle enforcing per-connection randomized MAC addressing and triggering live interface re-association to cloak hardware vendor fingerprints. - Process Behavior Heuristics ("AI Behavioral Threat Shield"): rule-based scoring of every process: execution from writable paths such as
/tmp, reverse-shell and miner command-line signatures, high-entropy arguments, and padded (over 64 KiB) command lines. There is no machine-learning model; the score and its reasons are shown per process, with Freeze/Kill actions. - OpSec Metadata Scrubber: Lossless in-memory JPEG and PNG metadata and EXIF stripper (every scan of progressive JPEGs; anything after the end of the image is dropped). Supports panel drag-and-drop, native file picker dialog, and batch cleaning for downloads.
- cargo and rustc (Rust toolchain, for building from source)
- polkit (privileged actions)
- libnotify (for desktop notifications via notify-send)
- networkmanager (nmcli, for MAC address management)
- systemd (journalctl, for authentication log monitoring; the user needs the
systemd-journal,wheeloradmgroup to see system logs) - nftables and iproute2 (network quarantine, blackout and socket sever)
- Optional: arch-audit (CVE data), pacman-contrib (
checkupdates), zenity (file picker)
Under the Omarchy Linux Security Standards (AGENTS.md Rule 5.3), precompiled binaries are strictly forbidden from Git repositories to guarantee user system integrity. Therefore, the native engine must be compiled from source on your local machine after adding the plugin.
omarchy plugin add https://github.com/ozdil/omarchy-security-sentinel.gitNavigate to the plugin directory and compile the engine:
cd ~/.config/omarchy/plugins/ozdil.security-sentinel
cargo build --release --locked
install -m 755 target/release/sentinel-engine ./sentinel-engineActions on processes you do not own, USB blocking and the network killswitch need the root-owned engine and polkit policy (the package installs both). For a source install:
sudo install -Dm755 target/release/sentinel-engine /usr/bin/sentinel-engine
sudo install -Dm644 assets/io.omarchy.sentinel.policy /usr/share/polkit-1/actions/io.omarchy.sentinel.policyWithout them, monitoring works, but those actions fail with an explanation instead of falling back to a generic pkexec kill.
makepkg -si with the shipped PKGBUILD installs the engine, the polkit policy and the plugin in /usr/share/omarchy-security-sentinel. Omarchy only loads plugins from your config, so link it in once:
ln -s /usr/share/omarchy-security-sentinel ~/.config/omarchy/plugins/ozdil.security-sentinel
omarchy plugin enable ozdil.security-sentinelAdd ozdil.security-sentinel to bar.layout.right in ~/.config/omarchy/shell.json:
{
"id": "ozdil.security-sentinel"
}omarchy-restart-shellThe sentinel engine can be run directly from the command line:
# Output formatted status summary
sentinel-engine
# Run status check for bar widget
sentinel-engine --status
# Output machine-readable JSON telemetry
sentinel-engine --json
# Background monitor (started by the panel): reacts to USB hot-plug via kernel
# uevents within a second and keeps $XDG_RUNTIME_DIR/omarchy-security-sentinel/report.json fresh
sentinel-engine --daemonSecurity Sentinel Hub complies strictly with the Omarchy Linux Security Standards (AGENTS.md):
- Subprocess Isolation: Process executions run in isolated process groups (
cmd.process_group(0)) with non-blocking I/O and strict monotonic deadlines. - Least Privilege: Monitoring runs unprivileged in user space. Interventions that need root go through
pkexecand the shipped polkit policy (io.omarchy.sentinel.policy), and the root-side helper re-validates every argument. Every action asks for the password each time (auth_admin, no 5-minute grace), except blocking a USB device: that only removes access, so the active session may do it without a prompt a BadUSB device could dismiss. Hubs are never blocked. - State File Hardening: Baseline hashes and state files are written with POSIX mode 0600 permissions. Symlinks are rejected.
- Plain Text UI: All dynamic text rendered in QML components utilizes
textFormat: Text.PlainTextto prevent script and markup injection.
If you find Security Sentinel Hub valuable and want to support independent Linux cyber defense:
MIT License. See LICENSE for details.

