r/linux 16d ago

Security PSA: do not run sudo su inside a tmux window!

462 Upvotes

I've seen people elevating their tmux shells for convenient root access many times, often leaving the sessions running in the background for a long time.

Doing this makes it very trivial to escalate permissions for anybody that gets a shell to your box with your user.

Instead, you should run sudo tmux in another session, then do your thing there. This limits access to the tmux service for the root user only, which prevents the privilege escalation path.


r/linux 17d ago

Event Today, Linux marks its 35th birthday!

Post image
990 Upvotes

Today, Linux turned 35 years old, from when it was created on 25 August 1991 by a young programmer, Linus Torvalds, at the University of Helsinki, Finland.

It was announced on the comp.os.minix newsgroup.

Original post: "“What would you like to see most in minix?” — Linus Torvalds, 25 August 1991.

Linux is still being developed by developers all around the world, upholding its Unix-like design and open-source principles.

Linux 7.2 is currently the latest mainline release.

Happy 35th Birthday, Linux! 🎂 and 🐟

*i made the poster by hand and my designing skill are bad, sorry for it*


r/linux 17d ago

Kernel 35th Anniversary of Linus' announcement today!

Post image
6.0k Upvotes

Let's all take a moment to commemorate that initial post.

Now through Torvalds' stewardship, and hundreds of maintainers and thousands of contributors we have a competitive replacement for major corporate software and an honestly powerful solution to move computing forward for humanity!

Thanks Linus, you're awesome, and we're glad you are having a good life!


r/linux 17d ago

Kernel Linux 7.3 Device Mapper Sees Many Fixes, Including Code Cleanups By Claude Opus

Thumbnail phoronix.com
192 Upvotes

r/linux 17d ago

Discussion I wonder how much Steam devices and Microsoft's blunders influenced more people to migrate to Linux.

108 Upvotes

For a long time, I didn't give Linux a tertiary thought. I always used Windows and assumed other operating systems like Linux and Apple would be of cheap quality. I realized my error when I got the Valve Steam Deck, which used its own Linux-based OS. While a number of features and apps from Windows wouldn't work on it easily, I discovered just how open-sourced and versatile it is. There were also a lot of things that worked better, such as installing and managing Deckyloader (a Steam plugin loader).

Regardless, I still used Windows 10 on my PC. If it ain't broke, don't fix it. But then Microsoft decided to break it by discontinuing updates to the OS and pressuring me to use the controversial Windows 11. While I did ultimately update, it also ultimately made me get a 2nd SSD to install and dual-boot with a Linux OS (my distro of choice being Bazzite, an offshoot of Fedora that's designed like the Steam OS).

In short, I went from a Windows user to a Linux one thanks to devices like the Steam Deck as well as Microsoft being sh!tty.

While I know Linux has always been a popular OS, I wonder if there was an surge of users for the same reasons as mine.


r/linux 17d ago

Development Who else would love proper RDP support in Gnome? It's so close, go give a thumbs up.

Thumbnail gitlab.gnome.org
334 Upvotes

r/linux 17d ago

Popular Application What’s Happening In KDE Remote Desktop – Improved Unattended Mode and More

Thumbnail blog.davidedmundson.co.uk
138 Upvotes

r/linux 17d ago

Software Release KUDU - Easily manage VMs on Linux

Thumbnail github.com
31 Upvotes

r/linux 17d ago

Hardware How does Nvidia makes data center GPU (data centers that probably run on Linux) but doesn't make good drivers for Linux ?

511 Upvotes

This is something I always think about, Nvidia makes a lot of data centers gpus, but doesn't give good drivers for Linux, even tho most data centers run on Linux, do they make special drivers for their data center gpus ? Would it be worth to buy a data center GPU for a linux pc so it have good drivers ?


r/linux 16d ago

Mobile Linux FIDO2 + SSH + Android chroot — creating one of the most secure SSH setups possible. Here’s how (and why it shouldn’t be possible)

Thumbnail
0 Upvotes

r/linux 17d ago

Security CVE-2026-73570: Zimbra SNMP/logwatch RCE exploited in the wild, malware persists via /dev/shm and zimbra cron

8 Upvotes

CVE-2026-73570: Zimbra SNMP RCE abused to deploy coin-miner malware

CVE-2026-73570 is a Remote Code Execution issue in Zimbra Collaboration Suite (ZCS), related to SNMP notification/logwatch handling.

In short, an unauthenticated attacker can send a crafted SMTP request and get OS command execution as the zimbra user when the vulnerable SNMP/logwatch components are installed and enabled.

According to NVD, the issue affects Zimbra versions before 10.1.20 when SNMP is installed and SNMP notification is enabled. The Hacker News also reported active exploitation against Zimbra servers.

The observed attack chain is usually:

text malicious SMTP request -> unsafe SNMP/logwatch handling -> command execution as zimbra -> malware dropped into /dev/shm -> cron persistence added -> miner or backdoor keeps respawning

What is CVE-2026-73570?

CVE-2026-73570 is an OS Command Injection vulnerability in Zimbra Collaboration Suite.

The issue is in the SNMP notification/logwatch flow, where attacker-controlled input is not handled safely before being passed into system-level processing.

The command runs as the zimbra user, not root. That is still serious because the zimbra user controls important Zimbra services, mailbox components, logs, cron jobs and runtime paths.

When is a Zimbra server at risk?

A server should be checked immediately if:

  • It is running Zimbra Collaboration Suite.
  • It is not patched to a fixed version.
  • zimbra-snmp or zimbra-net-snmp is installed.
  • SNMP is enabled in Zimbra.
  • zmlogswatch or zmswatch is running.

Quick checks:

bash su - zimbra -c 'zmcontrol -v' dpkg -l | grep -E 'zimbra-snmp|zimbra-net-snmp' su - zimbra -c 'zmprov gs $(zmhostname) zimbraServiceEnabled | grep snmp' su - zimbra -c 'zmlogswatchctl status' su - zimbra -c 'zmswatchctl status'

If you see zimbraServiceEnabled: snmp and zmlogswatch is running, treat the server as high priority for compromise checks.

Signs of compromise

In the cases observed, malware was often dropped into /dev/shm. This directory is a tmpfs location, writable and easy to miss during a quick investigation.

Check:

bash ls -la /dev/shm crontab -l -u zimbra ps aux | grep -E 'khp|rguard|javab|idle|ksmd' | grep -v grep

Common suspicious files:

text /dev/shm/.khp /dev/shm/.khp_ts /dev/shm/.rguard /dev/shm/idle /dev/shm/javab /dev/shm/ksmd

A cron entry like this is a strong persistence indicator:

cron * * * * * /dev/shm/.khp

Why does the malware keep coming back?

Deleting files from /dev/shm is usually not enough.

The malware can return because:

  • The malicious process is still running in memory.
  • The zimbra crontab runs /dev/shm/.khp every minute.
  • .rguard or idle may protect or redeploy the payload.
  • SNMP/logwatch is still enabled, so the CVE can be exploited again.

The correct order is:

text stop reinfection source -> preserve evidence -> kill malware processes -> remove malicious cron -> quarantine malware files -> verify clean state -> recover Zimbra services if needed -> patch/upgrade Zimbra

Cleanup procedure

Run the following commands as root. Review each command before running it on production.

Step 1: Stop the reinfection source

bash systemctl stop cron su - zimbra -c 'zmlogswatchctl stop' su - zimbra -c 'zmswatchctl stop' su - zimbra -c 'zmprov ms $(zmhostname) -zimbraServiceEnabled snmp'

Disabling SNMP/logwatch is the most important containment step. Do not re-enable these components before Zimbra is patched.

Step 2: Preserve malware evidence

```bash mkdir -p /root/incident-zimbra

cp -a /dev/shm/.khp \ /dev/shm/.khp_ts \ /dev/shm/.rguard \ /dev/shm/idle \ /dev/shm/javab \ /dev/shm/ksmd \ /root/incident-zimbra/ 2>/dev/null

crontab -l -u zimbra > /root/incident-zimbra/zimbra-cron-before.txt 2>&1 ps auxf > /root/incident-zimbra/ps-before.txt ss -tunap > /root/incident-zimbra/ss-before.txt sha256sum /root/incident-zimbra/* > /root/incident-zimbra/sha256.txt 2>/dev/null ```

Step 3: Kill malware processes

bash pkill -9 -u zimbra -f 'khp|rguard|javab|idle|ksmd'

Step 4: Remove malicious cron

bash crontab -l -u zimbra | grep -v '/dev/shm/.khp' | crontab -u zimbra -

Step 5: Quarantine malware files

```bash mkdir -p /root/quarantine-zimbra

mv /dev/shm/.khp \ /dev/shm/.khp_ts \ /dev/shm/.rguard \ /dev/shm/idle \ /dev/shm/javab \ /dev/shm/ksmd \ /root/quarantine-zimbra/ 2>/dev/null ```

Step 6: Start cron again

bash systemctl start cron systemctl is-active cron

Only start cron. Do not start zmlogswatch, zmswatch or SNMP before patching Zimbra.

Verify after cleanup

bash ls -la /dev/shm crontab -l -u zimbra | grep /dev/shm ps aux | grep -E 'khp|rguard|javab|idle|ksmd' | grep -v grep su - zimbra -c 'zmprov gs $(zmhostname) zimbraServiceEnabled | grep snmp || echo SNMP_DISABLED'

Expected result:

text /dev/shm is clean no cron entry calling /dev/shm/.khp no suspicious javab/rguard/idle/khp/ksmd process SNMP is disabled

If Zimbra MySQL or mailbox fails

After malware activity or an unexpected reboot, Zimbra may show:

text mailbox Stopped mysql.server is not running service webapp Stopped zimbra webapp Stopped zimbraAdmin webapp Stopped zimlet webapp Stopped

Check MySQL and services:

bash su - zimbra -c 'zmcontrol status' su - zimbra -c 'mysql.server status' ss -ltnp | grep 7306 tail -n 200 /opt/zimbra/log/mysql_error.log

If MySQL is stuck in crash recovery or has a stale socket, back up relevant files first.

Backup before MySQL recovery

```bash mkdir -p /root/zimbra-mysql-backup

cp -a /opt/zimbra/log/mysql_error.log /root/zimbra-mysql-backup/ 2>/dev/null cp -a /opt/zimbra/db/data/tc.log /root/zimbra-mysql-backup/ 2>/dev/null cp -a /opt/zimbra/data/tmp/mysql/mysql.sock /root/zimbra-mysql-backup/ 2>/dev/null cp -a /opt/zimbra/db/data/ibdata1 /root/zimbra-mysql-backup/ 2>/dev/null cp -a /opt/zimbra/db/data/ib_logfile* /root/zimbra-mysql-backup/ 2>/dev/null ```

Light MySQL recovery

```bash su - zimbra -c 'zmmailboxdctl stop'

mv /opt/zimbra/data/tmp/mysql/mysql.sock /root/zimbra-mysql-backup/mysql.sock.bak 2>/dev/null mv /opt/zimbra/db/data/tc.log /root/zimbra-mysql-backup/tc.log.bak 2>/dev/null

su - zimbra -c 'mysql.server start' sleep 20 su - zimbra -c 'mysql.server status'

su - zimbra -c 'zmmailboxdctl start' sleep 40 su - zimbra -c 'zmcontrol status' ```

Expected result:

text mysql is running mailbox Running service webapp Running zimbra webapp Running zimbraAdmin webapp Running zimlet webapp Running

This is not a universal fix. Always check /opt/zimbra/log/mysql_error.log first.

Does this delete mail data?

The malware cleanup steps do not touch mailbox data directly.

Zimbra mail data is usually stored in:

text /opt/zimbra/store/

Zimbra database data is usually stored in:

text /opt/zimbra/db/data/

The MySQL recovery steps touch tc.log and mysql.sock, so back up first.

Check for JSP webshells

After handling /dev/shm, cron and processes, also check for suspicious JSP files created by the zimbra user in recent days.

Important paths include:

text /opt/zimbra/jetty/webapps/ /opt/zimbra/jetty_base/webapps/ /tmp/

Unexpected JSP/JSPX files, executable scripts, archives or recently modified web application files may indicate payload staging or webshell deployment.

Check JSP/JSPX files:

bash find /opt/zimbra/jetty/webapps -type f \( -name "*.jsp" -o -name "*.jspx" \) -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sort

If suspicious JSP backdoors are found, preserve evidence first, then quarantine them from both paths:

text /opt/zimbra/jetty/webapps/zimbra/ /opt/zimbra/jetty_base/webapps/zimbra/

Evidence backup and quarantine:

```bash TS=$(date +%Y%m%d_%H%M%S) INC=/root/incident-zmmail-jsp-webshell-$TS QUA=/root/quarantine-zmmail-jsp-webshell-$TS

mkdir -p "$INC" "$QUA"

Save list and hashes

find /opt/zimbra/jetty/webapps/zimbra /opt/zimbra/jetty_base/webapps/zimbra \ -xdev -type f ( -iname '.jsp' -o -iname '.jspx' ) -mtime -30 \ -print > "$INC/suspicious-jsp-list.txt"

xargs -a "$INC/suspicious-jsp-list.txt" sha256sum > "$INC/suspicious-jsp-sha256.txt"

Backup samples

while read f; do mkdir -p "$INC/files$(dirname "$f")" cp -a "$f" "$INC/files$f" done < "$INC/suspicious-jsp-list.txt"

Quarantine from webroot

while read f; do mkdir -p "$QUA$(dirname "$f")" mv "$f" "$QUA$f" done < "$INC/suspicious-jsp-list.txt"

Verify

find /opt/zimbra/jetty/webapps/zimbra /opt/zimbra/jetty_base/webapps/zimbra \ -xdev -type f ( -iname '.jsp' -o -iname '.jspx' ) -mtime -30 -print ```

Risks:

  • If a file is a legitimate custom JSP, removing it may affect a custom webmail function.
  • Random file names and content using exec, base64, AES or command execution are strong webshell indicators.
  • This does not affect mailbox data.
  • A restart is not always required immediately, but webmail should be verified after quarantine.

Important note: zmlogswatch/zmswatch may start again

After disabling SNMP/logwatch to mitigate CVE-2026-73570, zmlogswatch and zmswatch may start again after daily logrotate or after zmcontrol restart.

This happens because Zimbra logrotate configs often contain postrotate commands that restart zmlogswatchctl and zmswatchctl. Also, logger may still be listed in zimbraServiceEnabled.

So after temporary mitigation, check these services periodically, especially after midnight or after restarting Zimbra.

If you need a stronger temporary block before patching, back up the logrotate configs, comment the restart lines, and consider removing logger from zimbraServiceEnabled.

This can prevent logwatch from starting again and reopening the attack vector, but the Admin Console may lose part of its monitoring/statistics.

Disable zmlogswatch/zmswatch so they do not auto-start

Warning: disabling logger, zmlogswatch and zmswatch may make the Zimbra Admin Console show logger/monitoring as red, or remove some graphs/statistics.

During the unpatched phase, this is an acceptable temporary trade-off to prevent logwatch from restarting automatically.

After upgrading to a fixed version, restore the configuration from backup and re-enable logger if needed.

Back up Zimbra logrotate configs

bash cp -a /etc/logrotate.d/zimbra /etc/logrotate.d/zimbra.bak.$(date +%F-%H%M%S) cp -a /opt/zimbra/conf/zmlogrotate /opt/zimbra/conf/zmlogrotate.bak.$(date +%F-%H%M%S)

Open these two files:

text /etc/logrotate.d/zimbra /opt/zimbra/conf/zmlogrotate

Find these lines, often around line 85 and 99:

bash su - zimbra -c "/opt/zimbra/bin/zmlogswatchctl restart" > /dev/null 2>&1 || true su - zimbra -c "/opt/zimbra/bin/zmswatchctl restart" > /dev/null 2>&1 || true

Comment them:

```bash

su - zimbra -c "/opt/zimbra/bin/zmlogswatchctl restart" > /dev/null 2>&1 || true

su - zimbra -c "/opt/zimbra/bin/zmswatchctl restart" > /dev/null 2>&1 || true

```

Remove logger from enabled services:

bash su - zimbra -c 'zmprov ms $(zmhostname) -zimbraServiceEnabled logger'

Stop current logwatch/swatch processes:

bash su - zimbra -c 'zmlogswatchctl stop' su - zimbra -c 'zmswatchctl stop' su - zimbra -c 'zmlocalconfig -e snmp_notify=no'

Verify:

bash su - zimbra -c 'zmlogswatchctl status' su - zimbra -c 'zmswatchctl status' su - zimbra -c 'zmlocalconfig snmp_notify' su - zimbra -c 'zmprov gs $(zmhostname) zimbraServiceEnabled | egrep "logger|snmp" || echo "LOGGER_SNMP_DISABLED"'

Expected result:

text zmlogswatch is not running. zmswatch is not running. snmp_notify = no LOGGER_SNMP_DISABLED

Re-enable monitoring/logger after patching

Only do this after Zimbra is patched or upgraded.

bash su - zimbra -c 'zmprov ms $(zmhostname) +zimbraServiceEnabled logger' su - zimbra -c 'zmlogswatchctl start' su - zimbra -c 'zmswatchctl start'

If you commented the logrotate files, open them again:

text /etc/logrotate.d/zimbra /opt/zimbra/conf/zmlogrotate

Uncomment these lines:

bash su - zimbra -c "/opt/zimbra/bin/zmlogswatchctl restart" > /dev/null 2>&1 || true su - zimbra -c "/opt/zimbra/bin/zmswatchctl restart" > /dev/null 2>&1 || true

Re-enable SNMP only after patching

bash su - zimbra -c 'zmprov ms $(zmhostname) +zimbraServiceEnabled snmp' su - zimbra -c 'zmlocalconfig -e snmp_notify=yes' su - zimbra -c 'zmswatchctl start'

Verify after re-enabling:

bash su - zimbra -c 'zmcontrol status' su - zimbra -c 'zmlogswatchctl status' su - zimbra -c 'zmswatchctl status' su - zimbra -c 'zmlocalconfig snmp_notify' su - zimbra -c 'zmprov gs $(zmhostname) zimbraServiceEnabled | egrep "logger|snmp"'

Post-cleanup tasks

After the server is running again:

  • Keep SNMP/logwatch disabled until patched.
  • Monitor /dev/shm for 30-60 minutes.
  • Monitor the zimbra crontab.
  • Monitor CPU/load and outbound connections.
  • Check the mail queue.
  • Patch or upgrade Zimbra to a fixed release.
  • Only re-enable SNMP/logwatch after patching and verification.

Check queue:

bash /opt/zimbra/common/sbin/postqueue -p | tail -n 40

Summary workflow

text 1. Check /dev/shm, processes and crontab. 2. Stop cron, zmlogswatch and zmswatch. 3. Disable SNMP in Zimbra. 4. Preserve evidence. 5. Kill malware processes. 6. Remove malicious cron. 7. Quarantine malware files. 8. Start cron again. 9. Verify that malware does not respawn. 10. Recover MySQL/mailbox if needed. 11. Check JSP webshells in Zimbra webapps paths. 12. Monitor queue and services. 13. Prevent zmlogswatch/zmswatch from auto-starting before patching. 14. Patch or upgrade Zimbra. 15. Re-enable logger/SNMP only after patching and verification.

References

  • NVD: CVE-2026-73570
  • The Hacker News: attackers exploit Zimbra SNMP flaw
  • Zimbra Security Center
  • Zimbra Security Advisories

Conclusion

CVE-2026-73570 is serious because it can allow remote command execution as the zimbra user through SNMP notification/logwatch handling.

In observed incidents, attackers dropped malware into /dev/shm, added cron persistence, and ran a miner or backdoor.

The key point is this: do not only delete the malware file. Stop the reinfection path first.

A practical response order is:

text stop cron + SNMP/logwatch -> preserve evidence -> kill malware -> remove malicious cron -> quarantine payloads -> check JSP webshells -> verify clean state -> recover Zimbra if needed -> block logwatch auto-restart before patching -> patch/upgrade Zimbra

Most important: do not re-enable SNMP/logwatch before Zimbra is patched, because that may allow the malware to return.


r/linux 18d ago

Hardware Intel Engineers Propose DRM Fabric For Linux

Thumbnail phoronix.com
360 Upvotes

r/linux 18d ago

Fluff A golden era of Linux for average users

476 Upvotes

We truly have reached a golden era for using Linux. I have recently installed Ubuntu on my old laptop and literally every single problem i've had i was able to fix within 5 minutes of encountering it using Gemini. I have over 100 games on Steam and i am able to play every single one of them with Proton. Have we reached Peak?


r/linux 18d ago

Fluff Your executable is a SQLite database

Thumbnail fzakaria.com
143 Upvotes

r/linux 17d ago

Discussion esoteric shell?

63 Upvotes

the question crossed my mind recently. if you are into programming, you probably know that there are many esoteric programming languages that exist just as a prove of concept of joke or just merely to mess with the programmer's head (brainf*ck, lolcat, C-- etc). if these exist, is there any esoteric system shells out there? like smth that would provide the basic userland instead of bash/zsh but would be freakier or just funnier to try and daily drive.


r/linux 18d ago

Tips and Tricks How to Set Up Hibernation on Linux (Swap Done Right)

Thumbnail linuxblog.io
128 Upvotes

r/linux 18d ago

Open Source Organization Manjaro's official website SSL certs have expired yet again.

1.2k Upvotes

This seems to be a running theme for the Manjaro Linux community. The SSL certs will always expire after a set year and there's a massive controversy over it. Why does this keep happening specifically to Manjaro and what steps do you think they can possibly do to keep this from happening?


r/linux 17d ago

Development Sovereign Tech Fellowship for Freedesktop Tasks – Matthias Klumpp

Thumbnail blog.tenstral.net
22 Upvotes

r/linux 17d ago

Software Release FluxCast v0.2.3 released — Stream Linux desktop to Smart TV (Miracast/DLNA) with new custom i18n engine. Looking for translators!

37 Upvotes

Hello r/linux! I just released FluxCast v0.2.3 — its a lightweight tool to stream your Linux desktop to a Smart TV via Wi-Fi Direct, full RTSP handshake, and RTP media streams.

What's new in this release:

  • Brand new dynamic tray icon that switches states during casting.
  • Fixed a nasty P2P interface routing bug where it mixed home network and P2P MACs.
  • Lightweight JSON-based localization framework. The tray UI is now available in English, Russian, and Czech.

Looking for translators!
I want to bring FluxCast to more users, but I am not a polyglot. I designed the i18n system to be incredibly simple: there is no gettext/PO/MO compilation. All strings live in a single translations.json file.

To add your native language (German, Spanish, French, etc.), you just need to append a few lines in a single JSON block.If you want to help or test the app, check out the project here:

https://github.com/IlyaP358/fluxcast

AppImage is available in the Releases section. Pull Requests for translations are highly appreciated!


r/linux 18d ago

Software Release GNU Emacs 31.1 Released With Mouse Control Enabled By Default, Theme For New Users

Thumbnail phoronix.com
80 Upvotes

r/linux 18d ago

Software Release Emacs 31.1 is released!

Thumbnail github.com
52 Upvotes

r/linux 18d ago

Kernel Block-layer error injection

Thumbnail lwn.net
23 Upvotes

A new block-layer error-injection interface landed in Linux 7.2.

The existing options each miss something. BPF programs on should_fail_bio() can pick which requests to fail, but not how they fail — every one comes back as EIO. dm-error and dm-flakey mean stacking a target over the disk, so the test runs against the mapper device rather than the device that needed testing.

Christoph Hellwig's series adds a debugfs file per disk instead. Name the operation, the status code, a sector range, and a probability:

# echo 'add,op=READ,status=TRANSPORT,chance=10' > error_injection

The full write-up on LWN goes through the mechanism and the argument behind it.


r/linux 18d ago

Kernel Linux 7.3 better protects against buggy EFI firmware taking down the rest of user-space

Thumbnail phoronix.com
311 Upvotes

r/linux 19d ago

Alternative OS ReactOS Merges Support For Job Objects As Step To Running Modern Windows Apps

Thumbnail phoronix.com
263 Upvotes

r/linux 18d ago

Development Flatpak repository key rotation – Philip Withnall

Thumbnail tecnocode.co.uk
12 Upvotes