<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ivan Ivanov</title>
	<atom:link href="https://ivanivanov.de/feed/" rel="self" type="application/rss+xml" />
	<link>https://ivanivanov.de/landing-page/</link>
	<description>Have you tried turning it off and on again?</description>
	<lastBuildDate>Wed, 19 Aug 2026 08:55:16 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">121858272</site>	<item>
		<title>Paperless-ngx Docker Upgrade: von 2.20.15 auf 3.0.4</title>
		<link>https://ivanivanov.de/blog/paperless-ngx-docker-upgrade-von-2-20-15-auf-3-0-4/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 22:41:56 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Compose]]></category>
		<category><![CDATA[Homelab]]></category>
		<category><![CDATA[Paperless-ngx]]></category>
		<category><![CDATA[Self-Hosting]]></category>
		<category><![CDATA[Tantivy]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5625</guid>

					<description><![CDATA[<p>Paperless-ngx Docker Upgrade: von 2.20.15 auf 3.0.4 Paperless-ngx 3.0 bringt Breaking Changes. Diese Anleitung zeigt das Upgrade einer Docker-Installation, Schritt für Schritt. Voraussetzung: Ausgangsversion muss 2.20.15 sein. Nur von dort aus ist der Sprung auf 3.0 offiziell unterstützt. Ältere Versionen zuerst auf 2.20.15 bringen. Was sich in 3.0 ändert Suchindex wechselt von Whoosh zu Tantivy [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/paperless-ngx-docker-upgrade-von-2-20-15-auf-3-0-4/">Paperless-ngx Docker Upgrade: von 2.20.15 auf 3.0.4</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="h-full" data-testid="chat-stale-nav-body">
<div class="flex flex-1 w-full -mt-[var(--df-header-h,0px)] h-[calc(100%+var(--df-header-h,0px))] overflow-hidden print:!h-auto print:!overflow-visible print:!mt-0">
<div class="z-20 draggable-none print:hidden overflow-hidden outline-none flex-grow-0 flex-shrink-0 basis-0 h-full pt-[var(--df-header-h,0px)]" tabindex="-1" aria-hidden="false">
<div class="flex flex-col h-full">
<div class="flex-1 overflow-hidden h-full bg-surface-1">
<div class="flex h-full flex-col relative outline-none bg-surface-3" tabindex="-1">
<div class="flex-1 min-h-0 bg-surface-3 overflow-auto">
<div class="flex h-full flex-col" data-skill-file-viewer="true">
<div class="min-h-0 flex-1">
<div class="h-full">
<div class="relative h-full">
<div class="absolute inset-0 overflow-auto scroll-fade-y scroll-fade-size-6">
<div class="mx-auto w-full max-w-3xl leading-[1.65rem] py-4 pl-6 pr-6 md:py-6 md:pl-11 md:pr-11">
<div class="standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3 [&amp;_&gt;_*:last-child]:mb-0 print:block print:[&amp;_&gt;_:where(:not(:first-child))]:mt-3 font-claude-response">
<p dir="auto"><strong>Paperless-ngx Docker Upgrade: von 2.20.15 auf 3.0.4</strong></p>
<p dir="auto">Paperless-ngx 3.0 bringt Breaking Changes. Diese Anleitung zeigt das Upgrade einer Docker-Installation, Schritt für Schritt.</p>
<p dir="auto"><strong>Voraussetzung:</strong> Ausgangsversion muss 2.20.15 sein. Nur von dort aus ist der Sprung auf 3.0 offiziell unterstützt. Ältere Versionen zuerst auf 2.20.15 bringen.</p>
<h3 dir="auto">Was sich in 3.0 ändert</h3>
<ul dir="auto">
<li>Suchindex wechselt von Whoosh zu Tantivy (Rust). Volltextindex muss neu aufgebaut werden, passiert im Docker-Image automatisch beim Start.</li>
<li>PAPERLESS_SECRET_KEY ist jetzt Pflicht.</li>
<li>PAPERLESS_DBENGINE ist bei PostgreSQL/MariaDB jetzt Pflicht (vorher aus PAPERLESS_DBHOST abgeleitet).</li>
<li>Diverse SSL-/Timeout-/Pooling-Variablen der DB entfallen zugunsten von PAPERLESS_DB_OPTIONS.</li>
<li>API-Version 1 fällt weg.</li>
<li>Dokument-Prüfsummen wechseln auf SHA-256.</li>
<li>Datenbankmigrationen sind nicht rückwärtskompatibel. Ohne Backup kein Rollback.</li>
</ul>
<p dir="auto">Vollständige Liste: github.com/paperless-ngx/paperless-ngx/releases</p>
<h3 dir="auto">Schritt 1: Backup</h3>
<div dir="auto">
<div data-testid="code-block">
<div>
<div>
<pre tabindex="0"><code>cd /opt/paperless

docker compose stop

# Datenbank (Beispiel PostgreSQL)
docker compose exec -T db pg_dump -U paperless paperless &gt; /opt/backup/paperless-db-$(date +%F).sql

# Volumes sichern
sudo tar -czf /opt/backup/paperless-data-$(date +%F).tar.gz ./data
sudo tar -czf /opt/backup/paperless-media-$(date +%F).tar.gz ./media

# Compose-Files sichern
cp docker-compose.yml /opt/backup/docker-compose.yml.bak
cp docker-compose.env /opt/backup/docker-compose.env.bak</code></pre>
</div>
</div>
</div>
</div>
<p dir="auto">Alternativ den eingebauten Paperless-Exporter nutzen:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>docker compose run --rm webserver document_exporter ../export</code></pre>
</div>
</div>
</div>
<h3 dir="auto">Schritt 2: Secret Key setzen</h3>
<p dir="auto">Falls bisher kein PAPERLESS_SECRET_KEY gesetzt war, lief 2.x mit einem eingebauten Default-Key. Für 3.0 wird ein expliziter Key Pflicht.</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>openssl rand -base64 64</code></pre>
</div>
</div>
</div>
<p dir="auto">In docker-compose.env oder direkt in docker-compose.yml unter environment eintragen:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<div>YAML Datei</div>
<div>
<pre tabindex="0"><code>PAPERLESS_SECRET_KEY: "&lt;generierter-wert&gt;"</code></pre>
</div>
</div>
</div>
</div>
<p dir="auto"><strong>Wichtig:</strong> Wird ein neuer, zufälliger Key gesetzt statt des alten Default-Keys, werden bestehende Sessions und API-Tokens ungültig. Nutzer müssen sich neu anmelden.</p>
<h3 dir="auto">Schritt 3: Datenbank-Engine explizit setzen</h3>
<p dir="auto">Nur bei PostgreSQL oder MariaDB nötig, nicht bei SQLite.</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<div>
<p>YAML Datei</p>
</div>
<div>
<pre tabindex="0"><code># v2 (PostgreSQL wurde aus PAPERLESS_DBHOST abgeleitet)
PAPERLESS_DBHOST: postgres

# v3 (Engine muss explizit gesetzt sein)
PAPERLESS_DBENGINE: postgresql
PAPERLESS_DBHOST: postgres</code></pre>
</div>
</div>
</div>
</div>
<p dir="auto">Zulässige Werte: postgresql oder mariadb. Bisherige einzelne SSL-/Timeout-/Pooling-Variablen durch PAPERLESS_DB_OPTIONS ersetzen, falls verwendet:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<div>YAML Datei</div>
<div>
<pre tabindex="0"><code>PAPERLESS_DB_OPTIONS: "sslmode=require,pool.max_size=20"</code></pre>
</div>
</div>
</div>
</div>
<p dir="auto">Alte Variablen funktionieren übergangsweise weiter, loggen aber eine Deprecation-Warnung beim Start.</p>
<h3 dir="auto">Schritt 4: Image-Tag auf 3.0.4 setzen</h3>
<p dir="auto">In docker-compose.yml:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<div>YAML Datei</div>
<div>
<pre tabindex="0"><code>services:
  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:2.20.15</code></pre>
</div>
</div>
</div>
</div>
<p dir="auto">ändern zu:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<div>
<p>YAML Datei</p>
</div>
<div>
<pre tabindex="0"><code>services:
  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:3.0.4</code></pre>
</div>
</div>
</div>
</div>
<p dir="auto">Wer bisher :latest nutzt: :latest zeigt seit Juli 2026 bereits auf 3.x. Für kontrollierte Major-Upgrades empfiehlt sich grundsätzlich ein fester Versions-Tag statt :latest.</p>
<h3 dir="auto">Schritt 5: Neues Image ziehen und Container neu erstellen</h3>
<div dir="auto">
<div data-testid="code-block">
<div>
<div>
<pre tabindex="0"><code>docker compose pull
docker compose up -d</code></pre>
</div>
</div>
</div>
</div>
<p dir="auto">Der Suchindex-Rebuild (Whoosh → Tantivy) läuft beim ersten Start automatisch im Container. Bei größeren Archiven dauert das spürbar.</p>
<h3 dir="auto">Schritt 6: Logs beobachten</h3>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>docker compose logs -f webserver</code></pre>
</div>
</div>
</div>
<p dir="auto">Auf Migrationsfehler, fehlende Env-Variablen oder Reindex-Fortschritt achten.</p>
<h3 dir="auto">Schritt 7: Verifikation</h3>
<ul dir="auto">
<li>Version in der Weboberfläche prüfen (Systemstatus zeigt 3.0.4).</li>
<li>Volltextsuche testen, auch nach Umlauten und mehreren Suchbegriffen (Tantivy verknüpft Begriffe standardmäßig mit OR statt AND wie zuvor Whoosh).</li>
<li>Ein Testdokument einscannen/konsumieren lassen, OCR-Ergebnis prüfen.</li>
<li>Download und Vorschau eines bestehenden Dokuments prüfen.</li>
<li>Login/API-Token testen, falls der Secret Key neu gesetzt wurde.</li>
<li>Containerstatus prüfen: docker compose ps.</li>
</ul>
<h3 dir="auto">Rollback</h3>
<p dir="auto">Bei Problemen:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>docker compose down</code></pre>
</div>
</div>
</div>
<p dir="auto">Alten Image-Tag (2.20.15) in docker-compose.yml zurücksetzen, DB-Dump aus Schritt 1 einspielen, data/ und media/ aus dem Backup zurückkopieren, dann:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>docker compose up -d</code></pre>
</div>
</div>
</div>
<h3 dir="auto">Bekannte Stolperfallen</h3>
<ul dir="auto">
<li>Fehlender PAPERLESS_SECRET_KEY bricht den Start ab.</li>
<li>PAPERLESS_DBENGINE vergessen bei PostgreSQL/MariaDB führt zu Verbindungsfehlern.</li>
<li>Zusätzliche, verwaiste Container aus älteren Compose-Setups können mit dem neuen Consumer kollidieren.</li>
<li>Veraltete Syntax in globalen Dateinamensvorlagen kann nach dem Upgrade Fehler werfen.</li>
</ul>
<p dir="auto"><strong>Quelle:</strong> <a href="https://github.com/paperless-ngx/paperless-ngx/releases" target="_blank" rel="noopener">github.com/paperless-ngx/paperless-ngx/releases</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="absolute inset-x-0 bottom-0 -top-[var(--df-header-h,0px)] cursor-default" hidden="" data-testid="chat-stale-nav-shield" aria-hidden="true"></div>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/paperless-ngx-docker-upgrade-von-2-20-15-auf-3-0-4/">Paperless-ngx Docker Upgrade: von 2.20.15 auf 3.0.4</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5625</post-id>	</item>
		<item>
		<title>Debian 12 auf 13 Upgrade im Proxmox LXC Container</title>
		<link>https://ivanivanov.de/blog/debian-12-auf-13-upgrade-proxmox-lxc/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 22:41:29 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian 13]]></category>
		<category><![CDATA[Homelab]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[LXC]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[Self-Hosting]]></category>
		<category><![CDATA[Trixie]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5626</guid>

					<description><![CDATA[<p>Debian 12 auf 13 Upgrade im Proxmox LXC Container (Copy &#38; Paste) Debian 12 Bookworm auf 13 Trixie upgraden, direkt im LXC Container auf Proxmox. Fertiges Script zum Copy &#38; Paste, plus Backup und Verifikation. Vorher: Snapshot Vor jedem Major-Upgrade einen Snapshot des Containers erstellen. Einzige einfache Rückfallebene bei Problemen. pct snapshot &#60;CTID&#62; pre-debian13-upgrade Das [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/debian-12-auf-13-upgrade-proxmox-lxc/">Debian 12 auf 13 Upgrade im Proxmox LXC Container</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p dir="auto"><strong>Debian 12 auf 13 Upgrade im Proxmox LXC Container (Copy &amp; Paste)</strong></p>
<p dir="auto">Debian 12 Bookworm auf 13 Trixie upgraden, direkt im LXC Container auf Proxmox. Fertiges Script zum Copy &amp; Paste, plus Backup und Verifikation.</p>
<h3 dir="auto">Vorher: Snapshot</h3>
<p dir="auto">Vor jedem Major-Upgrade einen Snapshot des Containers erstellen. Einzige einfache Rückfallebene bei Problemen.</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>pct snapshot &lt;CTID&gt; pre-debian13-upgrade</code></pre>
</div>
</div>
</div>
<h3 dir="auto">Das Upgrade-Script</h3>
<p dir="auto">Im Container als root ausführen:</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>cat &lt;&lt;EOF &gt;/etc/apt/sources.list
deb http://ftp.debian.org/debian trixie main contrib non-free non-free-firmware
deb http://ftp.debian.org/debian trixie-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
deb http://ftp.debian.org/debian trixie-backports main contrib non-free non-free-firmware
EOF

apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y

# Disable services that break in LXC / containers (harmless if not present)
systemctl disable --now systemd-networkd-wait-online.service || true
systemctl disable --now systemd-networkd.service || true
systemctl disable --now ifupdown-wait-online || true

# Install ifupdown2 (better networking stack for LXC/VMs)
apt-get install -y ifupdown2

# Cleanup
apt-get autoremove --purge -y
apt-get clean

reboot</code></pre>
</div>
</div>
</div>
<h3 dir="auto">Was das Script macht</h3>
<ul dir="auto">
<li><strong>Sources.list:</strong> ersetzt Bookworm-Quellen durch Trixie-Quellen, inklusive Security und Backports.</li>
<li><strong>dist-upgrade:</strong> zieht alle Pakete auf Trixie, &#8211;force-confold behält bestehende Config-Dateien bei Konflikten.</li>
<li><strong>Service-Disables:</strong> systemd-networkd-wait-online, systemd-networkd und ifupdown-wait-online können im LXC-Kontext beim Boot hängen bleiben, da sie auf Netzwerk-Hardware warten, die im Container nicht existiert. Deaktivieren verhindert das. || true sorgt dafür, dass das Script nicht abbricht, falls ein Dienst gar nicht installiert ist.</li>
<li><strong>ifupdown2:</strong> modernerer Networking-Stack, funktioniert zuverlässiger in LXC/VM-Umgebungen als das klassische ifupdown.</li>
<li><strong>Cleanup:</strong> entfernt nicht mehr benötigte Pakete und den apt-Cache.</li>
<li><strong>Reboot:</strong> notwendig, damit Kernel-Userspace-Tools, systemd und Netzwerkstack sauber auf Trixie laufen.</li>
</ul>
<h3 dir="auto">Danach: Verifikation</h3>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>cat /etc/debian_version
lsb_release -a
apt list --upgradable
ip a
systemctl --failed</code></pre>
</div>
</div>
</div>
<ul dir="auto">
<li>debian_version sollte 13.x zeigen.</li>
<li>apt list &#8211;upgradable sollte leer sein.</li>
<li>ip a prüft, ob die Netzwerkschnittstelle nach dem Reboot korrekt hochgekommen ist.</li>
<li>systemctl &#8211;failed zeigt fehlgeschlagene Dienste nach dem Upgrade.</li>
</ul>
<h3 dir="auto">Bekannte Stolperfallen</h3>
<ul dir="auto">
<li>Container-Config auf Proxmox-Host prüfen: sehr alte LXC-Templates können mit Trixie inkompatible Cgroup- oder AppArmor-Profile mitbringen.</li>
<li>Bei gepinnten Paket-Repos (Docker, PostgreSQL, etc.) müssen deren eigene sources.list-Einträge separat auf trixie umgestellt werden, das Script deckt nur die Debian-Basisquellen ab.</li>
<li>Nach dem Upgrade Dienste einzeln prüfen, die auf spezifische Paketversionen angewiesen sind (z. B. PHP, Python, Datenbanken).</li>
</ul>
<h3 dir="auto">Rollback</h3>
<p dir="auto">Bei Problemen: Container stoppen, Snapshot aus dem ersten Schritt zurückspielen.</p>
<div dir="auto">
<div data-testid="code-block">
<div>
<pre tabindex="0"><code>pct rollback &lt;CTID&gt; pre-debian13-upgrade</code></pre>
</div>
</div>
</div>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/debian-12-auf-13-upgrade-proxmox-lxc/">Debian 12 auf 13 Upgrade im Proxmox LXC Container</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5626</post-id>	</item>
		<item>
		<title>Paperless-ngx Upgrade: von 2.20.15 auf 3.0.4 (Debian-VM auf Proxmox)</title>
		<link>https://ivanivanov.de/blog/paperless-ngx-upgrade-von-2-20-15-auf-3-0-4-debian-vm-auf-proxmox/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 22:33:20 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Homelab]]></category>
		<category><![CDATA[Paperless-ngx]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[Self-Hosting]]></category>
		<category><![CDATA[Tantivy]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5618</guid>

					<description><![CDATA[<p>Paperless-ngx Upgrade: von 2.20.15 auf 3.0.4 (Debian-VM auf Proxmox) Paperless-ngx 3.0 bringt Breaking Changes. Diese Anleitung zeigt das Bare-Metal-Upgrade auf einer Debian-VM unter Proxmox, Schritt für Schritt. Voraussetzung: Ausgangsversion muss 2.20.15 sein. Nur von dort aus ist der Sprung auf 3.0 offiziell unterstützt. Ältere Versionen zuerst auf 2.20.15 bringen. Was sich in 3.0 ändert Suchindex [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/paperless-ngx-upgrade-von-2-20-15-auf-3-0-4-debian-vm-auf-proxmox/">Paperless-ngx Upgrade: von 2.20.15 auf 3.0.4 (Debian-VM auf Proxmox)</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1 class="mt-3 -mb-1 text-[1.375rem] font-bold" dir="ltr">Paperless-ngx Upgrade: von 2.20.15 auf 3.0.4 (Debian-VM auf Proxmox)</h1>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Paperless-ngx 3.0 bringt Breaking Changes. Diese Anleitung zeigt das Bare-Metal-Upgrade auf einer Debian-VM unter Proxmox, Schritt für Schritt.</p>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr"><strong>Voraussetzung:</strong> Ausgangsversion muss 2.20.15 sein. Nur von dort aus ist der Sprung auf 3.0 offiziell unterstützt. Ältere Versionen zuerst auf 2.20.15 bringen.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Was sich in 3.0 ändert</h2>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1" dir="ltr">
<li class="font-claude-response-body whitespace-normal break-words pl-2">Suchindex wechselt von Whoosh zu Tantivy (Rust). Volltextindex muss neu aufgebaut werden.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_SECRET_KEY</code> ist jetzt Pflicht.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_DBENGINE</code> ist bei PostgreSQL/MariaDB jetzt Pflicht (vorher aus <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_DBHOST</code> abgeleitet).</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Diverse SSL-/Timeout-/Pooling-Variablen der DB entfallen zugunsten von <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_DB_OPTIONS</code>.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">API-Version 1 fällt weg.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Dokument-Prüfsummen wechseln auf SHA-256.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Consumer-/OCR-Variablen teils umbenannt, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">OCR_MODE=skip</code>-Verhalten ändert sich.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Datenbankmigrationen sind nicht rückwärtskompatibel. Ohne Backup kein Rollback.</li>
</ul>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 1: Snapshot der Proxmox-VM</h2>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Vor allem anderen: VM-Snapshot in Proxmox erstellen. Das ist der schnellste Rollback-Weg, unabhängig vom Applikations-Backup. Backup wichtig! Es kann immer was schief laufen!</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">qm snapshot &lt;VMID&gt; pre-paperless-3-0-4</code></pre>
</div>
</div>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 2: Anwendungs-Backup</h2>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Zusätzlich zum Snapshot ein Paperless-eigenes Backup, da die DB-Migration nicht reversibel ist.</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">sudo systemctl stop paperless-webserver paperless-consumer paperless-scheduler paperless-task-queue

# Datenbank (Beispiel PostgreSQL)
sudo -u postgres pg_dump paperless &gt; /opt/backup/paperless-db-$(date +%F).sql

# Daten- und Medienverzeichnisse
sudo tar -czf /opt/backup/paperless-media-$(date +%F).tar.gz /opt/paperless/media
sudo tar -czf /opt/backup/paperless-data-$(date +%F).tar.gz /opt/paperless/data

# Konfiguration
sudo cp /opt/paperless/paperless.conf /opt/backup/paperless.conf.bak</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Bei SQLite genügt eine Kopie der <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">.sqlite3</code>-Datei aus dem Datenverzeichnis.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 3: Version prüfen</h2>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">cd /opt/paperless
sudo -Hu paperless git describe --tags</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Muss <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">v2.20.15</code> zeigen. Falls nicht: erst dorthin updaten, dann weiter.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 4: Secret Key sichern/setzen</h2>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Falls bisher kein <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_SECRET_KEY</code> gesetzt war, lief 2.x mit einem eingebauten Default-Key. Für 3.0 wird ein expliziter Key Pflicht.</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">python3 -c "import secrets; print(secrets.token_urlsafe(64))"</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Wert in <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">paperless.conf</code> eintragen:</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="ini-Code">
<div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right">
<div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"></div>
</div>
<div class="text-text-500 font-small p-3.5 pb-0">ini</div>
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-ini">PAPERLESS_SECRET_KEY=&lt;generierter-wert&gt;</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Wichtig: Wird ein neuer, zufälliger Key gesetzt statt des alten Default-Keys, werden bestehende Sessions und API-Tokens ungültig. Nutzer müssen sich neu anmelden.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 5: Datenbank-Engine explizit setzen</h2>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Nur bei PostgreSQL oder MariaDB nötig, nicht bei SQLite.</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="ini-Code">
<div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right">
<div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"></div>
</div>
<div class="text-text-500 font-small p-3.5 pb-0">ini</div>
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-ini">PAPERLESS_DBENGINE=postgresql
PAPERLESS_DBHOST=postgres</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Zulässige Werte: <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">postgresql</code> oder <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">mariadb</code>. Bisherige einzelne SSL-/Timeout-/Pooling-Variablen durch <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_DB_OPTIONS</code> ersetzen, falls verwendet, z. B.:</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="ini-Code">
<div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right">
<div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"></div>
</div>
<div class="text-text-500 font-small p-3.5 pb-0">ini</div>
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-ini">PAPERLESS_DB_OPTIONS=sslmode=require,pool.max_size=20</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Alte Variablen funktionieren übergangsweise weiter, loggen aber eine Deprecation-Warnung beim Start.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 6: Systemabhängigkeiten aktualisieren</h2>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right">
<div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"></div>
</div>
<div class="text-text-500 font-small p-3.5 pb-0">bash</div>
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">sudo apt update
sudo apt install --only-upgrade python3 python3-pip python3-dev imagemagick fonts-liberation \
  gnupg libpq-dev default-libmysqlclient-dev pkg-config libmagic-dev mime-support \
  libzbar0 poppler-utils unpaper ghostscript icc-profiles-free qpdf liblept5 \
  libxml2 pngquant zlib1g tesseract-ocr</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Ergänzend benötigte OCR-Sprachpakete (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">tesseract-ocr-deu</code> etc.) prüfen, falls sich Sprachvorgaben geändert haben.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 7: Dienste stoppen</h2>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Falls Schritt 2 nicht schon erledigt:</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">sudo systemctl stop paperless-webserver paperless-consumer paperless-scheduler paperless-task-queue</code></pre>
</div>
</div>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 8: Quellcode auf 3.0.4 bringen</h2>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right">
<div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"></div>
</div>
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">cd /opt/paperless
sudo -Hu paperless git fetch --all --tags
sudo -Hu paperless git checkout tags/v3.0.4</code></pre>
</div>
</div>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 9: Python-Abhängigkeiten aktualisieren</h2>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Venv aktivieren und Requirements neu installieren:</p>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">sudo -Hu paperless bash -c '
  source /opt/paperless/venv/bin/activate
  pip install --upgrade pip
  pip install -r requirements.txt
'</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Danach die installierten Pakete gegen die neue <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">requirements.txt</code> abgleichen und nicht mehr benötigte Pakete entfernen, um Konflikte zu vermeiden.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 10: Datenbankmigration</h2>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">cd /opt/paperless/src
sudo -Hu paperless ../venv/bin/python3 manage.py migrate</code></pre>
</div>
</div>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 11: Statische Dateien und Suchindex</h2>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">sudo -Hu paperless ../venv/bin/python3 manage.py collectstatic --clear --no-input
sudo -Hu paperless ../venv/bin/python3 manage.py document_index reindex --if-needed</code></pre>
</div>
</div>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Der <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">--if-needed</code>-Flag prüft Schema-Version und Sprach-Sentinels und baut den Tantivy-Index nur neu, wenn nötig. Bei größeren Archiven (mehrere zehntausend Dokumente) dauert das spürbar; Fortschritt im Log beobachten.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 12: Dienste starten</h2>
<div class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100" tabindex="0" role="group" aria-label="bash-Code">
<div class="overflow-x-auto">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5"><code class="language-bash">sudo systemctl start paperless-webserver paperless-consumer paperless-scheduler paperless-task-queue
sudo systemctl status paperless-webserver</code></pre>
</div>
</div>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Schritt 13: Verifikation</h2>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1" dir="ltr">
<li class="font-claude-response-body whitespace-normal break-words pl-2">Version in der Weboberfläche prüfen (Systemstatus zeigt 3.0.4).</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Volltextsuche testen, auch nach Umlauten und mehreren Suchbegriffen (Tantivy verknüpft Begriffe standardmäßig mit OR statt AND wie zuvor Whoosh).</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Ein Testdokument einscannen/konsumieren lassen, OCR-Ergebnis prüfen.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Download und Vorschau eines bestehenden Dokuments prüfen.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Login/API-Token testen, falls der Secret Key neu gesetzt wurde.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Log auf Fehler prüfen: <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">journalctl -u paperless-webserver -n 200</code>.</li>
</ul>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Rollback</h2>
<p class="font-claude-response-body break-words whitespace-normal" dir="ltr">Bei Problemen: Dienste stoppen, VM-Snapshot aus Schritt 1 zurückspielen. Alternativ Git-Checkout auf <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">v2.20.15</code>, DB-Dump aus Schritt 2 einspielen, altes <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">paperless.conf</code> zurückkopieren, Venv-Requirements der 2.20.15 neu installieren.</p>
<h2 class="mt-3 -mb-1 text-[1.125rem] font-bold" dir="ltr">Bekannte Stolperfallen</h2>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1" dir="ltr">
<li class="font-claude-response-body whitespace-normal break-words pl-2">Fehlender <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_SECRET_KEY</code> bricht den Start ab.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">PAPERLESS_DBENGINE</code> vergessen bei PostgreSQL/MariaDB führt zu Verbindungsfehlern.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Veraltete Syntax in globalen Dateinamensvorlagen kann nach dem Upgrade Fehler werfen.</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">Zusätzliche, nicht mehr benötigte Container/Prozesse aus älteren Setups können mit dem neuen Consumer kollidieren.</li>
</ul>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/paperless-ngx-upgrade-von-2-20-15-auf-3-0-4-debian-vm-auf-proxmox/">Paperless-ngx Upgrade: von 2.20.15 auf 3.0.4 (Debian-VM auf Proxmox)</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5618</post-id>	</item>
		<item>
		<title>PatchMon v2.1.1 &#8211; v2.1.3: Fixes für SSO, Webhooks &#038; Compliance</title>
		<link>https://ivanivanov.de/blog/patchmon-updates-v2-1-1-v2-1-2-v2-1-3-bugfixes/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 22:19:27 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Entra ID xms_edov PatchMon]]></category>
		<category><![CDATA[Generic Webhook Slack Text Key]]></category>
		<category><![CDATA[Mattermost Webhook PatchMon]]></category>
		<category><![CDATA[Open Source Patching Bugfix]]></category>
		<category><![CDATA[PatchMon ADFS Single Sign On]]></category>
		<category><![CDATA[PatchMon Proxmox LXC Compliance]]></category>
		<category><![CDATA[PatchMon Release Notes Github]]></category>
		<category><![CDATA[PatchMon Standby Laptop Stale]]></category>
		<category><![CDATA[PatchMon Supply Chain SBOM]]></category>
		<category><![CDATA[PatchMon v2.1.3 Update]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5617</guid>

					<description><![CDATA[<p>PatchMon v2.1.1 bis v2.1.3: Maintenance-Releases bringen Bugfixes für SSO, Webhooks und Compliance Direkt im Anschluss an das große v2.1.0-Release hat das Entwicklerteam von PatchMon mit den Versionen v2.1.1, v2.1.2 und v2.1.3 drei schnelle Bugfix-Updates veröffentlicht. Während das Hauptrelease v2.1.0 massive Architektur- und Performance-Änderungen mit sich brachte, kümmern sich die Point-Releases um die Beseitigung von Unschärfen [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/patchmon-updates-v2-1-1-v2-1-2-v2-1-3-bugfixes/">PatchMon v2.1.1 &#8211; v2.1.3: Fixes für SSO, Webhooks &#038; Compliance</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p dir="auto"><strong>PatchMon v2.1.1 bis v2.1.3: Maintenance-Releases bringen Bugfixes für SSO, Webhooks und Compliance</strong></p>
<p dir="auto">Direkt im Anschluss an das große v2.1.0-Release hat das Entwicklerteam von PatchMon mit den Versionen v2.1.1, v2.1.2 und v2.1.3 drei schnelle Bugfix-Updates veröffentlicht. Während das Hauptrelease v2.1.0 massive Architektur- und Performance-Änderungen mit sich brachte, kümmern sich die Point-Releases um die Beseitigung von Unschärfen bei Single Sign-On (SSO), Benachrichtigungen und der Compliance-Infrastruktur.</p>
<p dir="auto">Die beste Nachricht für Betreiber: Bei allen drei Versionen handelt es sich um reine In-Place-Updates. Es sind keine Änderungen an der docker-compose.yml und keine manuellen Updates der Agents erforderlich.</p>
<h3 dir="auto">Die zentralen Verbesserungen in den Updates</h3>
<p dir="auto"><strong>1. SSO-Stabilisierung für ADFS und Microsoft Entra ID</strong></p>
<p dir="auto">Beim OIDC-basierten Single Sign-On kam es bei spezifischen Anbietern zu Login-Abbrüchen:</p>
<ul dir="auto">
<li><strong>Microsoft ADFS:</strong> ADFS übermittelt Einzelwerte in Claims (wie E-Mails) häufig als JSON-Array. PatchMon akzeptierte bisher nur Strings und brach den Login ab. Dies wurde korrigiert.</li>
<li><strong>Microsoft Entra ID (Azure AD):</strong> Da Entra ID standardmäßig keinen email_verified-Claim mitsendet, schlug die Auto-Erstellung von Accounts fehl. PatchMon wertet nun das Microsoft-Signal xms_edov (Email Domain Owner Verified) aus, was das Setup ohne Sicherheitskompromisse ermöglicht.</li>
</ul>
<p dir="auto"><strong>2. Webhooks für Mattermost &amp; Rocket.Chat</strong></p>
<p dir="auto">Webhooks an Plattformen wie Mattermost oder Rocket.Chat quittierte der Server bisher mit einem HTTP 400 Error. PatchMon erkennt diese Endpunkte ab v2.1.3 automatisch anhand des /hooks/-Pfads in der URL und passt das Payload-Format an. Generische Webhooks wurden zudem um ein Top-Level-text-Feld ergänzt, um out-of-the-box mit Slack-kompatiblen Ingest-Servern zu harmonieren.</p>
<p dir="auto"><strong>3. Compliance-Fixes für Proxmox LXC</strong></p>
<p dir="auto">Bei Instanzen außerhalb des offiziellen Docker-Containers (insbesondere bei der Nutzung des populären Proxmox LXC-Installationsskripts) meldete die Plattform fälschlicherweise leere Verzeichnisse für Compliance-Regelwerke und antwortete mit einem HTTP 503. Ab v2.1.3 werden die Versionsdaten direkt aus den Datastreams gelesen, sodass die Auswertung auf LXC-Containern wieder reibungslos funktioniert.</p>
<p dir="auto"><strong>4. Beseitigung des „Stale“-Status bei Laptops</strong></p>
<p dir="auto">Clients, die in den Energiesparmodus versetzt wurden (z. B. Notebooks im Feierabend), wurden vom Server nach dem Aufwachen tagelang als inaktiv/veraltet („stale“) geführt. Der Server prüft nun beim Reconnect des Agents, ob das Update-Intervall überschritten wurde, und fordert im Bedarfsfall sofort einen frischen Statusbericht an.</p>
<p dir="auto"><strong>5. Wiederherstellung der Supply-Chain-Attestierung</strong></p>
<p dir="auto">Aufgrund eines Fehlers im Build-Prozess wurden die Releases v2.1.0, v2.1.1 und v2.1.2 ohne SHA256-Prüfsummen, SBOMs (Software Bill of Materials) und Provenance-Attestierungen ausgeliefert. Mit Version v2.1.3 sind sämtliche Signatur- und Lieferketten-Sicherheitsdateien wieder regulär in den GitHub-Downloads enthalten.</p>
<h3 dir="auto">Fazit &amp; Update-Empfehlung</h3>
<p dir="auto">Die Point-Releases v2.1.1 bis v2.1.3 unterstreichen das hohe Tempo, mit dem das PatchMon-Projekt Kinderkrankheiten nach großen Versionssprüngen behebt. Allen Betreibern von v2.1.0 wird ein zügiges Update auf v2.1.3 empfohlen, um von den SSO- und Alerting-Fixes zu profitieren.</p>
<p dir="auto"><strong>Offizielle Release-Übersicht:</strong> <a class="ng-star-inserted" style="font-size: 16px;" href="https://github.com/PatchMon/PatchMon/releases" target="_blank" rel="noopener" data-hveid="241">GitHub PatchMon Releases</a></p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/patchmon-updates-v2-1-1-v2-1-2-v2-1-3-bugfixes/">PatchMon v2.1.1 &#8211; v2.1.3: Fixes für SSO, Webhooks &#038; Compliance</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5617</post-id>	</item>
		<item>
		<title>PatchMon v2.1.0: Neues Release bringt massives Performance-Tuning</title>
		<link>https://ivanivanov.de/blog/patchmon-version-2-1-0-release-update/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Thu, 13 Aug 2026 18:56:43 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agent Traffic Reduktion 1KB]]></category>
		<category><![CDATA[Linux Server Patching Tool]]></category>
		<category><![CDATA[Open Source Patch Management]]></category>
		<category><![CDATA[Patch Run Stall Timeout]]></category>
		<category><![CDATA[PatchMon Agent Activity Timeline]]></category>
		<category><![CDATA[PatchMon Docker Compose Upgrade]]></category>
		<category><![CDATA[PatchMon v2.1.0 Release]]></category>
		<category><![CDATA[Self Hosted PatchMon Update]]></category>
		<category><![CDATA[Trusted Proxy Ranges PatchMon]]></category>
		<category><![CDATA[Windows Registry Null Byte PatchMon]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5613</guid>

					<description><![CDATA[<p>PatchMon v2.1.0 veröffentlicht: Performance-Explosion, neue Agent-Timeline und gehärtete Security Das Entwicklerteam hinter dem Open-Source-Patch-Management-Tool PatchMon hat die Version v2.1.0 freigegeben. Das Release legt den Fokus primär auf Skalierbarkeit, Zuverlässigkeit bei großen Serverflotten (1.000+ Hosts) und eine grundlegende Überarbeitung der Agent-Kommunikation sowie der Sicherheitsarchitektur. &#x1f6e0;&#xfe0f; Achtung beim Upgrade: Manuelle Anpassung der docker-compose.yml Da PatchMon die eigene [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/patchmon-version-2-1-0-release-update/">PatchMon v2.1.0: Neues Release bringt massives Performance-Tuning</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1 data-path-to-node="12">PatchMon v2.1.0 veröffentlicht: Performance-Explosion, neue Agent-Timeline und gehärtete Security</h1>
<p data-path-to-node="13">Das Entwicklerteam hinter dem Open-Source-Patch-Management-Tool <b data-path-to-node="13" data-index-in-node="64">PatchMon</b> hat die Version <b data-path-to-node="13" data-index-in-node="89">v2.1.0</b> freigegeben. Das Release legt den Fokus primär auf Skalierbarkeit, Zuverlässigkeit bei großen Serverflotten (1.000+ Hosts) und eine grundlegende Überarbeitung der Agent-Kommunikation sowie der Sicherheitsarchitektur.</p>
<h2 data-path-to-node="15"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Achtung beim Upgrade: Manuelle Anpassung der docker-compose.yml</h2>
<p data-path-to-node="16">Da PatchMon die eigene <code data-path-to-node="16" data-index-in-node="23">docker-compose.yml</code> nicht automatisch überschreibt, müssen Betreiber vor dem Ausführen von <code data-path-to-node="16" data-index-in-node="113">docker compose pull &amp;&amp; docker compose up -d</code> <b data-path-to-node="16" data-index-in-node="157">drei Zeilen manuell anpassen</b>:</p>
<ol start="1" data-path-to-node="17">
<li>
<p data-path-to-node="17,0,0"><b data-path-to-node="17,0,0" data-index-in-node="0">Server-Port-Mapping:</b> <code data-path-to-node="17,0,0" data-index-in-node="21">- "${PORT:-3000}:${PORT:-3000}"</code> (bisher: <code data-path-to-node="17,0,0" data-index-in-node="62">"3000:3000"</code>)</p>
</li>
<li>
<p data-path-to-node="17,1,0"><b data-path-to-node="17,1,0" data-index-in-node="0">Server-Hostname:</b> <code data-path-to-node="17,1,0" data-index-in-node="17">hostname: patchmon-server</code> (neu hinzufügen)</p>
</li>
<li>
<p data-path-to-node="17,2,0"><b data-path-to-node="17,2,0" data-index-in-node="0">Guacd-Image-Tag:</b> <code data-path-to-node="17,2,0" data-index-in-node="17">image: guacamole/guacd:1.6.0</code> (bisher: <code data-path-to-node="17,2,0" data-index-in-node="55">:latest</code>)</p>
</li>
</ol>
<blockquote data-path-to-node="18">
<p data-path-to-node="18,0"><b data-path-to-node="18,0" data-index-in-node="0">Hinweis zur Datenbank-Migration:</b> Beim ersten Start nach dem Update führen große Host-Flotten Index-Rebuilds durch. Auf langsamen Datenträgern kann der Bootvorgang einige Minuten dauern, in denen PatchMon keine Anfragen entgegennimmt.</p>
</blockquote>
<h2 data-path-to-node="20">Die wichtigsten Neuerungen in PatchMon v2.1.0</h2>
<h3 data-path-to-node="21">1. Extrem reduzierte Network-Payloads (2 MB ➔ 1 KB)</h3>
<p data-path-to-node="22">Bisher übermittelten Agents bei jedem Check-in den kompletten Inventarbestand. Ab v2.1.0 senden aktualisierte Agents nur noch deltabasierte Änderungen. Der Datenverkehr pro Routine-Check-in sinkt dadurch von <b data-path-to-node="22" data-index-in-node="208">2 MB auf ca. 1 KB</b>. Zur Nachverfolgung ersetzt die neue <b data-path-to-node="22" data-index-in-node="263">Agent Activity Timeline</b> die alten Tabs für Paketberichte und Warteschlangen.</p>
<h3 data-path-to-node="23">2. Präzisere Host-Zustände und Live-Uptime</h3>
<p data-path-to-node="24">Das Dashboard trennt den Systemstatus nun in vier eindeutige Indikatoren:</p>
<ul data-path-to-node="25">
<li>
<p data-path-to-node="25,0,0"><b data-path-to-node="25,0,0" data-index-in-node="0">Connection:</b> Verbindung zum Server (reagiert nun innerhalb von Sekunden via WSS).</p>
</li>
<li>
<p data-path-to-node="25,1,0"><b data-path-to-node="25,1,0" data-index-in-node="0">Reporting:</b> Frische der übermittelten Daten.</p>
</li>
<li>
<p data-path-to-node="25,2,0"><b data-path-to-node="25,2,0" data-index-in-node="0">Reboot Pending:</b> Ausstehender Systemneustart.</p>
</li>
<li>
<p data-path-to-node="25,3,0"><b data-path-to-node="25,3,0" data-index-in-node="0">Updates:</b> Ausstehende Sicherheitspatches oder normale Updates.</p>
</li>
</ul>
<p data-path-to-node="26">Zudem wurde der Zustand <i data-path-to-node="26" data-index-in-node="24">Awaiting Data</i> eingeführt: Hosts ohne Paketdaten verfälschen nicht mehr die Kategorie „Up to date“.</p>
<h3 data-path-to-node="27">3. Zuverlässige Patch-Ausführung (Keine Hänger mehr)</h3>
<p data-path-to-node="28">Stalled Patch-Runs gehören der Vergangenheit an. Über den neuen Umgebungsparameter <code data-path-to-node="28" data-index-in-node="83">PATCH_RUN_STALL_TIMEOUT_MIN</code> (Standard: 30 Minuten) werden blockierte Updates automatisch beendet. Der Button <b data-path-to-node="28" data-index-in-node="192">Stop Run</b> bricht den Prozess nun auch dann garantiert ab, wenn der Agent offline ist oder blockierte Child-Prozesse im Hintergrund hängen.</p>
<h3 data-path-to-node="29">4. Umfassende Fixes für Windows &amp; Linux-Paketmanager</h3>
<ul data-path-to-node="30">
<li>
<p data-path-to-node="30,0,0"><b data-path-to-node="30,0,0" data-index-in-node="0">Windows Registry-Fix:</b> Ein einziges Null-Byte-Zeichen in der Registrierung (oft erzeugt durch Drittanbieter-Agents wie MeshCentral) führte bisher dazu, dass der gesamte Bericht verworfen wurde. Dies wurde gefixt.</p>
</li>
<li>
<p data-path-to-node="30,1,0"><b data-path-to-node="30,1,0" data-index-in-node="0">Linux/BSD-Anpassungen:</b></p>
<ul data-path-to-node="30,1,1">
<li>
<p data-path-to-node="30,1,1,0,0"><b data-path-to-node="30,1,1,0,0" data-index-in-node="0">RHEL/Fedora/Rocky:</b> Korrekte Handling von DNF-Bannern, Erfassung von RLSA-Sicherheitsmeldungen.</p>
</li>
<li>
<p data-path-to-node="30,1,1,1,0"><b data-path-to-node="30,1,1,1,0" data-index-in-node="0">Debian/Ubuntu:</b> Volle Unterstützung für <code data-path-to-node="30,1,1,1,0" data-index-in-node="39">deb822</code>-Sources und korrekte Handhabung von Kernel-Meta-Paketen.</p>
</li>
<li>
<p data-path-to-node="30,1,1,2,0"><b data-path-to-node="30,1,1,2,0" data-index-in-node="0">Arch/Manjaro:</b> Funktionsfähig ohne installiertes <code data-path-to-node="30,1,1,2,0" data-index-in-node="48">pacman-contrib</code>.</p>
</li>
<li>
<p data-path-to-node="30,1,1,3,0"><b data-path-to-node="30,1,1,3,0" data-index-in-node="0">LXC-Container:</b> Uptime zeigt nun die echte Container-Laufzeit anstelle der Laufzeit des Proxmox-Hosts.</p>
</li>
</ul>
</li>
</ul>
<h3 data-path-to-node="31">5. Sicherheits-Härtung (Security &amp; SSO)</h3>
<ul data-path-to-node="32">
<li>
<p data-path-to-node="32,0,0"><b data-path-to-node="32,0,0" data-index-in-node="0">IP-Spoofing-Schutz:</b> Über <code data-path-to-node="32,0,0" data-index-in-node="25">TRUSTED_PROXY_RANGES</code> lässt sich festlegen, welchen Upstream-Reverse-Proxies (z. B. Cloudflare hinter Nginx Proxy Manager) vertraut wird, um echte Client-IPs für Rate-Limiting und Lockouts auszuwerten.</p>
</li>
<li>
<p data-path-to-node="32,1,0"><b data-path-to-node="32,1,0" data-index-in-node="0">Session-Binding &amp; Revocation:</b> Ausgestellte Tokens sind strikt an Sitzungen gebunden. Das Abmelden, Ändern von Passwörtern oder Deaktivieren von Konten greift ab sofort unverzüglich.</p>
</li>
<li>
<p data-path-to-node="32,2,0"><b data-path-to-node="32,2,0" data-index-in-node="0">E-Mail / SMTP:</b> Explizite Auswahlmöglichkeiten für TLS (STARTTLS, SSL/TLS, None, Auto) verhindern das ungesicherte Versenden von Benachrichtigungen über fehlerhafte Relays.</p>
</li>
</ul>
<h2 data-path-to-node="34">Neue Umgebungsvariablen (<code data-path-to-node="34" data-index-in-node="25">.env</code>)</h2>
<table data-path-to-node="35">
<thead>
<tr>
<td><strong>Variable</strong></td>
<td><strong>Standardwert</strong></td>
<td><strong>Zweck</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td><span data-path-to-node="35,1,0,0"><code data-path-to-node="35,1,0,0" data-index-in-node="0">TRUSTED_PROXY_RANGES</code></span></td>
<td><span data-path-to-node="35,1,1,0"><i data-path-to-node="35,1,1,0" data-index-in-node="0">(leer)</i></span></td>
<td><span data-path-to-node="35,1,2,0">CIDRs für verkettete Reverse Proxies zur echten IP-Ermittlung</span></td>
</tr>
<tr>
<td><span data-path-to-node="35,2,0,0"><code data-path-to-node="35,2,0,0" data-index-in-node="0">PATCH_RUN_STALL_TIMEOUT_MIN</code></span></td>
<td><span data-path-to-node="35,2,1,0"><code data-path-to-node="35,2,1,0" data-index-in-node="0">30</code></span></td>
<td><span data-path-to-node="35,2,2,0">Minuten bis ein hängender Patch-Run als abgebrochen markiert wird</span></td>
</tr>
<tr>
<td><span data-path-to-node="35,3,0,0"><code data-path-to-node="35,3,0,0" data-index-in-node="0">AGENT_REPORTS_RETENTION_DAYS</code></span></td>
<td><span data-path-to-node="35,3,1,0"><code data-path-to-node="35,3,1,0" data-index-in-node="0">30</code></span></td>
<td><span data-path-to-node="35,3,2,0">Aufbewahrungsdauer der Agent-Activity-Historie (7–365 Tage)</span></td>
</tr>
<tr>
<td><span data-path-to-node="35,4,0,0"><code data-path-to-node="35,4,0,0" data-index-in-node="0">SESSION_INACTIVITY_TIMEOUT_MINUTES</code></span></td>
<td><span data-path-to-node="35,4,1,0"><i data-path-to-node="35,4,1,0" data-index-in-node="0">(inaktiv)</i></span></td>
<td><span data-path-to-node="35,4,2,0">Automatischer Logout bei Inaktivität (0 = deaktiviert)</span></td>
</tr>
</tbody>
</table>
<h2 data-path-to-node="37">Fazit</h2>
<p data-path-to-node="38">Mit dem Update auf v2.1.0 beweist das PatchMon-Team rund um Lead-Entwickler Iby, dass die Software reif für den anspruchsvollen Enterprise-Einsatz ist. Wer eine performante On-Premise-Alternative zu kommerziellen Patch-Management-Lösungen sucht, sollte das Update zeitnah einspielen.</p>
<p data-path-to-node="39"><b data-path-to-node="39" data-index-in-node="0">Offizielle Release-Notes &amp; Discussion:</b> <a class="ng-star-inserted" href="https://github.com/PatchMon/PatchMon/releases/tag/v2.1.0" target="_blank" rel="noopener" data-hveid="0" data-ved="0CAAQ_4QMahgKEwi61KXMop6WAxUAAAAAHQAAAAAQ6QE">GitHub PatchMon Tag v2.1.0</a></p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/patchmon-version-2-1-0-release-update/">PatchMon v2.1.0: Neues Release bringt massives Performance-Tuning</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5613</post-id>	</item>
		<item>
		<title>CVE-2026-8933: Root-Lücke in Ubuntu durch snap-confine</title>
		<link>https://ivanivanov.de/blog/cve-2026-8933-ubuntu-snap-confine-privilege-escalation/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Fri, 24 Jul 2026 08:26:48 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[CVE-2026-8933 snap-confine Root]]></category>
		<category><![CDATA[Linux Kernel Mount Namespace]]></category>
		<category><![CDATA[Qualys Threat Research Linux]]></category>
		<category><![CDATA[Server IT Security Update]]></category>
		<category><![CDATA[Snap Sandbox Schwachstelle]]></category>
		<category><![CDATA[snapd Sicherheitslücke Patch]]></category>
		<category><![CDATA[SUID Rechteausweitung Ubuntu]]></category>
		<category><![CDATA[Ubuntu Local Privilege Escalation]]></category>
		<category><![CDATA[Ubuntu Root Exploit 2026]]></category>
		<category><![CDATA[Vulnerability Management Linux]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5605</guid>

					<description><![CDATA[<p>Local Privilege Escalation in Ubuntu: CVE-2026-8933 bedroht snap-confine Das Sicherheitsteam von Qualys hat eine weitere gravierende Schwachstelle in einer zentralen Komponente gängiger Linux-Distributionen analysiert. Unter der Kennung CVE-2026-8933 führt ein Logikfehler in snap-confine dem Unterbau des Paketmanagers Snap zu einer lokalen Rechteausweitung (Local Privilege Escalation, LPE). Da Snap auf modernen Ubuntu-Systemen standardmäßig installiert ist, ist das [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/cve-2026-8933-ubuntu-snap-confine-privilege-escalation/">CVE-2026-8933: Root-Lücke in Ubuntu durch snap-confine</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1 data-path-to-node="12">Local Privilege Escalation in Ubuntu: CVE-2026-8933 bedroht <code data-path-to-node="12" data-index-in-node="60">snap-confine</code></h1>
<p data-path-to-node="13">Das Sicherheitsteam von Qualys hat eine weitere gravierende Schwachstelle in einer zentralen Komponente gängiger Linux-Distributionen analysiert. Unter der Kennung <b data-path-to-node="13" data-index-in-node="164">CVE-2026-8933</b> führt ein Logikfehler in <code data-path-to-node="13" data-index-in-node="203">snap-confine</code> dem Unterbau des Paketmanagers Snap zu einer lokalen Rechteausweitung (Local Privilege Escalation, LPE). Da Snap auf modernen Ubuntu-Systemen standardmäßig installiert ist, ist das Schadpotenzial für Multi-User-Systeme und Cloud-Instanzen hoch.</p>
<h2 data-path-to-node="14">Wie die Schwachstelle in <code data-path-to-node="14" data-index-in-node="25">snap-confine</code> funktioniert</h2>
<p data-path-to-node="15"><code data-path-to-node="15" data-index-in-node="0">snap-confine</code> ist eine hochprivilegierte SUID-Binärdatei (<code data-path-to-node="15" data-index-in-node="57">root</code>), die beim Start eines Snap-Pakets aufgerufen wird. Seine Aufgabe ist es, eine isolierte Sicherheits-Sandbox (unter Nutzung von AppArmor, Cgroups und Mount-Namespaces) aufzubauen.</p>
<p data-path-to-node="16">Die Forschenden von Qualys entdeckten eine Schwachstelle bei der Abfolge, in der <code data-path-to-node="16" data-index-in-node="81">snap-confine</code> Dateisystem-Pfade prüft und Mounts innerhalb des temporären Namespaces durchführt. Durch gezieltes Timing und das Platzieren präparierter symbolischer Links (Symlinks) im Benutzerverzeichnis kann ein lokaler Angreifer die Sicherheitsprüfungen umgehen. Dies ermöglicht das Einschleusen und Ausführen von eigenem Code im Kontext des Root-Benutzers.</p>
<h3 data-path-to-node="17">Wer ist von CVE-2026-8933 betroffen?</h3>
<ul data-path-to-node="18">
<li>
<p data-path-to-node="18,0,0"><b data-path-to-node="18,0,0" data-index-in-node="0">Ubuntu Desktop &amp; Server:</b> Alle unterstützten Releases, bei denen das Paket <code data-path-to-node="18,0,0" data-index-in-node="74">snapd</code> nicht auf dem neuesten Stand ist.</p>
</li>
<li>
<p data-path-to-node="18,1,0"><b data-path-to-node="18,1,0" data-index-in-node="0">Derivate:</b> Linux-Distributionen, die <code data-path-to-node="18,1,0" data-index-in-node="36">snapd</code> aus den offiziellen Repositories verwenden und SUID-Rechte für <code data-path-to-node="18,1,0" data-index-in-node="105">snap-confine</code> vergeben.</p>
</li>
</ul>
<h2 data-path-to-node="19">Empfohlene Maßnahmen für Administratoren</h2>
<h3 data-path-to-node="20">1. Schnelles Update über den Paketmanager</h3>
<p data-path-to-node="21">Canonical hat das Problem analysiert und korrigierte Pakete für alle unterstützen Ubuntu-Versionen veröffentlicht. Das Update kann direkt über <code data-path-to-node="21" data-index-in-node="143">apt</code> eingespielt werden:</p>
<div class="code-block ng-tns-c1924320462-47 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjD1N-oy-mVAxUAAAAAHQAAAAAQuwI">
<div class="formatted-code-block-internal-container ng-tns-c1924320462-47">
<div class="animated-opacity ng-tns-c1924320462-47">
<div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1924320462-47 ng-star-inserted"><span class="ng-tns-c1924320462-47">Bash</span></p>
<div class="buttons ng-tns-c1924320462-47 ng-star-inserted"></div>
</div>
<pre class="ng-tns-c1924320462-47"><code class="code-container formatted ng-tns-c1924320462-47" role="text" data-test-id="code-content">sudo apt update
sudo apt install --only-upgrade snapd
</code></pre>
</div>
</div>
</div>
<p data-path-to-node="23">Anschließend lässt sich die installierte Version überprüfen, um sicherzustellen, dass die geflickte Variante von <code data-path-to-node="23" data-index-in-node="113">snapd</code> aktiv ist.</p>
<h3 data-path-to-node="24">2. Überwachung lokaler Benutzeraktivitäten</h3>
<p data-path-to-node="25">Da es sich um eine LPE-Lücke handelt, ist ein bereits vorhandener lokaler Systemzugriff Voraussetzung. Administratoren sollten Logfiles (wie <code data-path-to-node="25" data-index-in-node="141">/var/log/auth.log</code> oder Auditd-Protokolle) auf ungewöhnliche Aufrufe von <code data-path-to-node="25" data-index-in-node="213">snap-confine</code> oder verdächtige Manipulationen im Verzeichnis <code data-path-to-node="25" data-index-in-node="273">/tmp</code> prüfen.</p>
<h2 data-path-to-node="26">Bedeutung für die Praxis</h2>
<p data-path-to-node="27">Schwachstellen in SUID-Helferprogrammen wie <code data-path-to-node="27" data-index-in-node="44">snap-confine</code> zeigen erneut, wie komplex das Zusammenspiel von Sandbox-Infrastrukturen und Linux-Berechtigungen ist. Für IT-Abteilungen unterstreicht der Vorfall die Notwendigkeit von automatisierten Patch-Management-Prozessen auf allen Ebenen der Server-Infrastruktur.</p>
<p data-path-to-node="28"><b data-path-to-node="28" data-index-in-node="0">Quelle:</b> <a class="ng-star-inserted" href="https://blog.qualys.com/vulnerabilities-threat-research/2026/07/21/cve-2026-8933-snap-confine-local-privilege-escalation" target="_blank" rel="noopener" data-hveid="0" data-ved="0CAAQ_4QMahgKEwjD1N-oy-mVAxUAAAAAHQAAAAAQvAI">Qualys Threat Research Blog – CVE-2026-8933</a></p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/cve-2026-8933-ubuntu-snap-confine-privilege-escalation/">CVE-2026-8933: Root-Lücke in Ubuntu durch snap-confine</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5605</post-id>	</item>
		<item>
		<title>Cyberangriff auf Nextcloud: Technische Details &#038; PR-Kritik</title>
		<link>https://ivanivanov.de/blog/cyberangriff-auf-nextcloud-technische-details-pr-kritik/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Fri, 24 Jul 2026 07:04:30 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Cloud Infrastruktur Sicherheit]]></category>
		<category><![CDATA[Cyber Security Deutschland]]></category>
		<category><![CDATA[Heise Online Security News]]></category>
		<category><![CDATA[Incident Response Transparenz]]></category>
		<category><![CDATA[IT Krisenkommunikation]]></category>
		<category><![CDATA[Nextcloud Cyberangriff Kommunikation]]></category>
		<category><![CDATA[Nextcloud Entwickler Repository Hack]]></category>
		<category><![CDATA[Nextcloud Quellcode Integrität]]></category>
		<category><![CDATA[Nextcloud Sicherheitsvorfall]]></category>
		<category><![CDATA[Open Source Supply Chain Attacke]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5601</guid>

					<description><![CDATA[<p>Cyberangriff auf Nextcloud: Wie ungeschickte Kommunikation das Vertrauen gefährdet Der Open-Source-Cloud-Spezialist Nextcloud steht nach einem Sicherheitsvorfall in der Kritik. Obwohl der eigentliche Cyberangriff auf die Infrastruktur des Unternehmens glimpflich ausging und nach aktuellem Kenntnisstand weder Kundendaten noch der Kern-Quellcode der Software manipuliert wurden, sorgt das Krisenmanagement des Anbieters für erhebliche Unruhe in der IT-Community. Zugriff [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/cyberangriff-auf-nextcloud-technische-details-pr-kritik/">Cyberangriff auf Nextcloud: Technische Details &#038; PR-Kritik</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1 data-path-to-node="12">Cyberangriff auf Nextcloud: Wie ungeschickte Kommunikation das Vertrauen gefährdet</h1>
<p data-path-to-node="13">Der Open-Source-Cloud-Spezialist <b data-path-to-node="13" data-index-in-node="33">Nextcloud</b> steht nach einem Sicherheitsvorfall in der Kritik. Obwohl der eigentliche Cyberangriff auf die Infrastruktur des Unternehmens glimpflich ausging und nach aktuellem Kenntnisstand weder Kundendaten noch der Kern-Quellcode der Software manipuliert wurden, sorgt das Krisenmanagement des Anbieters für erhebliche Unruhe in der IT-Community.</p>
<h2 data-path-to-node="14">Zugriff auf private Entwickler-Infrastruktur</h2>
<p data-path-to-node="15">Der Angreifer nutzte kompromittierte Zugangsdaten, um Zugriff auf ein privates, internes Entwicklungs-Repository von Nextcloud zu erlangen. Das Unternehmen leitete nach dem Bemerken des unbefugten Zugriffs umgehend technische Gegenmaßnahmen ein: Die betroffenen Zugänge wurden gesperrt, Passwörter zurückgesetzt und die Server-Infrastruktur eingehend forensisch untersucht.</p>
<p data-path-to-node="16">Die wichtigste technische Entwarnung für Administratoren und Betreiber von Nextcloud-Instanzen:</p>
<ul data-path-to-node="17">
<li>
<p data-path-to-node="17,0,0">Der <b data-path-to-node="17,0,0" data-index-in-node="4">öffentliche Quellcode</b> von Nextcloud blieb unberührt.</p>
</li>
<li>
<p data-path-to-node="17,1,0">Es wurden <b data-path-to-node="17,1,0" data-index-in-node="10">keine Backdoors</b> oder schädliche Modifikationen in bestehende Releases eingeschleust.</p>
</li>
<li>
<p data-path-to-node="17,2,0">Ein Zugriff auf Daten von Endnutzern oder Cloud-Kunden fand nicht statt.</p>
</li>
</ul>
<h2 data-path-to-node="18">Das PR-Desaster nach dem Angriff</h2>
<p data-path-to-node="19">Während das technische Sicherheitsteam adäquat reagierte, leistete sich die PR-Abteilung von Nextcloud schwere Schnitzer. Auf erste Anfragen von IT-Sicherheitsforschern und Fachmedien wie <i data-path-to-node="19" data-index-in-node="188">heise online</i> reagierte das Unternehmen ausweichend und spielte das Ausmaß des Zugriffs herunter. In ersten Stellungnahmen war die Rede von bloßen „Auffälligkeiten“ oder internen Tests.</p>
<p data-path-to-node="20">Erst als unwiderlegbare Belege über den erfolgten Datenabfluss aus dem privaten Repository vorlagen, korrigierte Nextcloud seine Berichterstattung schrittweise und räumte den Vorfall transparent ein.</p>
<h2 data-path-to-node="21">Fazit: Transparenz als Pflicht in der Open-Source-Welt</h2>
<p data-path-to-node="22">Der Vorfall unterstreicht eine zentrale Lektion des modernen IT-Sicherheitsmanagements: Ein funktionierender <i data-path-to-node="22" data-index-in-node="109">Incident-Response-Plan</i> muss zwingend eine ehrliche und direkte Krisenkommunikation beinhalten. Insbesondere im Open-Source-Sektor, wo das Vertrauen der Anwender und Administratoren das Fundament des gesamten Ökosystems bildet, führt Taktieren bei Sicherheitsvorfällen zu unnötigem Reputationsschaden.</p>
<p data-path-to-node="23"><b data-path-to-node="23" data-index-in-node="0">Quelle: </b><a href="https://help.nextcloud.com/t/nextcloud-com-offline/247123/18" target="_blank" rel="noopener">https://help.nextcloud.com/t/nextcloud-com-offline/247123/18</a></p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/cyberangriff-auf-nextcloud-technische-details-pr-kritik/">Cyberangriff auf Nextcloud: Technische Details &#038; PR-Kritik</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5601</post-id>	</item>
		<item>
		<title>Tails 7.10: Anonymes Linux mit neuem Shutdown und Videoplayer</title>
		<link>https://ivanivanov.de/blog/tails-7-10-release-anonymisierendes-linux-shutdown/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 20:17:02 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Anonymisierendes Linux]]></category>
		<category><![CDATA[Cold Boot Attacken Schutz]]></category>
		<category><![CDATA[Isolierter Videoplayer Linux]]></category>
		<category><![CDATA[IT-Sicherheit Betriebssystem]]></category>
		<category><![CDATA[Live OS Anonymität]]></category>
		<category><![CDATA[Privacy Distribution 2026]]></category>
		<category><![CDATA[Tails 7.10 Release]]></category>
		<category><![CDATA[Tails Shutdown Security]]></category>
		<category><![CDATA[Tor Browser Update]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5596</guid>

					<description><![CDATA[<p>Tails 7.10 Release: Anonymisierendes Linux erhält neuen Shutdown und Videoplayer Für Nutzer mit extremen Anforderungen an die Privatsphäre und IT-Sicherheit ist Tails (The Amnesic Incognito Live System) seit Jahren der Goldstandard. Das System hinterlässt keine Spuren auf dem Host-Computer und leitet jeglichen Datenverkehr zwingend über das Tor-Netzwerk. Das aktuelle Release Tails 7.10 bringt zwei tiefgreifende [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/tails-7-10-release-anonymisierendes-linux-shutdown/">Tails 7.10: Anonymes Linux mit neuem Shutdown und Videoplayer</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1 data-path-to-node="12">Tails 7.10 Release: Anonymisierendes Linux erhält neuen Shutdown und Videoplayer</h1>
<p data-path-to-node="13">Für Nutzer mit extremen Anforderungen an die Privatsphäre und IT-Sicherheit ist <b data-path-to-node="13" data-index-in-node="80">Tails</b> (The Amnesic Incognito Live System) seit Jahren der Goldstandard. Das System hinterlässt keine Spuren auf dem Host-Computer und leitet jeglichen Datenverkehr zwingend über das Tor-Netzwerk. Das aktuelle Release <b data-path-to-node="13" data-index-in-node="332">Tails 7.10</b> bringt zwei tiefgreifende funktionale Änderungen mit sich, die den Schutz vor physischen und digitalen Angriffen noch einmal drastisch erhöhen.</p>
<h2 data-path-to-node="14">Der neue Shutdown-Prozess: Amnesia in Perfektion</h2>
<p data-path-to-node="15">Die wichtigste Eigenschaft von Tails ist seine &#8222;Amnesie&#8220;. Sobald das System heruntergefahren wird – oder der USB-Stick im Notfall einfach aus dem Rechner gezogen wird –, löscht Tails den gesamten Arbeitsspeicher (RAM). Dadurch wird sichergestellt, dass Angreifer keine kryptografischen Schlüssel oder Fragmente von Dokumenten durch sogenannte <i data-path-to-node="15" data-index-in-node="343">Cold Boot Attacks</i> rekonstruieren können.</p>
<p data-path-to-node="16">Mit Version 7.10 wurde dieser <b data-path-to-node="16" data-index-in-node="30">Shutdown-Prozess grundlegend neu geschrieben</b>. Das System geht nun wesentlich aggressiver und schneller beim Überschreiben des Arbeitsspeichers vor. Zudem wurden Kompatibilitätsprobleme mit modernen UEFI-Systemen und spezifischen RAM-Architekturen behoben, bei denen der Löschvorgang in der Vergangenheit ins Stocken geraten konnte. Ein schnellerer Shutdown bedeutet in kritischen Situationen schlichtweg mehr physische Sicherheit für den Anwender.</p>
<h2 data-path-to-node="17">Neuer Videoplayer schützt vor Media-Exploits</h2>
<p data-path-to-node="18">Eine oft unterschätzte Gefahr für die Anonymität stellen präparierte Mediendateien (wie MP4- oder MKV-Videos) dar. Angreifer verstecken regelmäßig Schadcode in Videos, der Pufferüberläufe in schlecht isolierten Playern provoziert.</p>
<p data-path-to-node="19">Tails 7.10 reagiert auf diese Bedrohungslage mit der <b data-path-to-node="19" data-index-in-node="53">Integration eines neuen Videoplayers</b>. Der Fokus liegt hierbei auf einer strengen Isolierung (Sandboxing) und der Reduzierung der Angriffsfläche. Der neue Player kann zwar problemlos offline Videos abspielen, wird aber durch strikte Systemrichtlinien daran gehindert, Netzwerkverbindungen aufzubauen. Selbst wenn ein Video einen Zero-Day-Exploit enthalten sollte, ist es dem Angreifer dadurch nahezu unmöglich, die echte IP-Adresse des Nutzers nach außen zu funken (IP Leak).</p>
<h2 data-path-to-node="20">Aktualisierte Kernkomponenten</h2>
<p data-path-to-node="21">Neben diesen funktionalen Meilensteinen enthält Tails 7.10 routinemäßige, aber essenzielle Security-Updates. Der integrierte <b data-path-to-node="21" data-index-in-node="125">Tor Browser</b> wurde auf die neueste Basis gehoben und auch der E-Mail-Client <b data-path-to-node="21" data-index-in-node="200">Thunderbird</b> profitierte von wichtigen Sicherheitspatches.</p>
<h2 data-path-to-node="22">Fazit: Pflicht-Update für sensible Einsätze</h2>
<p data-path-to-node="23">Das Tails 7.10 Update zeigt, dass die Entwickler nicht nur Software aktualisieren, sondern die konzeptionelle Sicherheit des Live-Systems konsequent weiterdenken. Wer auf Anonymität angewiesen ist, sollte seinen USB-Stick schnellstmöglich über die integrierte Update-Funktion auf den neuesten Stand bringen.</p>
<p data-path-to-node="23"><strong>Download</strong>: <a href="https://tails.net/install/download/index.en.html" target="_blank" rel="noopener">https://tails.net/install/download/index.en.html</a></p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/tails-7-10-release-anonymisierendes-linux-shutdown/">Tails 7.10: Anonymes Linux mit neuem Shutdown und Videoplayer</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5596</post-id>	</item>
		<item>
		<title>wp2shell: Kritische WordPress-Lücke erfordert sofortiges Update</title>
		<link>https://ivanivanov.de/blog/wp2shell-wordpress-kritische-sicherheitsluecke-rce-update/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 20:10:08 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Core Lücke Codeeinschleusung]]></category>
		<category><![CDATA[Critical WordPress RCE 2026]]></category>
		<category><![CDATA[REST API Batch Endpoint Vulnerability]]></category>
		<category><![CDATA[Web Application Firewall WordPress Schutz]]></category>
		<category><![CDATA[WordPress 7.0.2 Update]]></category>
		<category><![CDATA[WordPress Hack ohne Login]]></category>
		<category><![CDATA[WordPress Sicherheitslücke REST API]]></category>
		<category><![CDATA[wp2shell WordPress]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5590</guid>

					<description><![CDATA[<p>Kritische WordPress-Lücke „wp2shell“: Sofortiges Core-Update erforderlich! Sicherheitsvorfälle bei WordPress betreffen meist unzureichend gepflegte Plugins oder Themes. Das aktuell bekannt gewordene Sicherheitsrisiko wp2shell wiegt jedoch um ein Vielfaches schwerer: Die Schwachstelle befindet sich direkt im WordPress-Core und ermöglicht es unauthentifizierten Angreifern, aus der Ferne Schadcode auf dem zugrundeliegenden Webserver auszuführen (Unauthenticated Remote Code Execution). Was ist [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/wp2shell-wordpress-kritische-sicherheitsluecke-rce-update/">wp2shell: Kritische WordPress-Lücke erfordert sofortiges Update</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1 data-path-to-node="12">Kritische WordPress-Lücke „wp2shell“: Sofortiges Core-Update erforderlich!</h1>
<p data-path-to-node="13">Sicherheitsvorfälle bei WordPress betreffen meist unzureichend gepflegte Plugins oder Themes. Das aktuell bekannt gewordene Sicherheitsrisiko <b data-path-to-node="13" data-index-in-node="142">wp2shell</b> wiegt jedoch um ein Vielfaches schwerer: Die Schwachstelle befindet sich direkt im <b data-path-to-node="13" data-index-in-node="234">WordPress-Core</b> und ermöglicht es unauthentifizierten Angreifern, aus der Ferne Schadcode auf dem zugrundeliegenden Webserver auszuführen (Unauthenticated Remote Code Execution).</p>
<h2 data-path-to-node="14">Was ist wp2shell?</h2>
<p data-path-to-node="15">Unter dem Namen <b data-path-to-node="15" data-index-in-node="16">wp2shell</b> werden zwei verkettete Sicherheitslücken in der WordPress REST-API zusammengefasst. Konkret betrifft das Problem die Verarbeitung von Batch-Anfragen über den Endpoint <code data-path-to-node="15" data-index-in-node="192">/wp-json/batch/v1</code>.</p>
<p data-path-to-node="16">Da der REST-API-Endpunkt standardmäßig für jeden Internetnutzer erreichbar ist, benötigen Angreifer keinerlei Zugangsdaten oder Benutzerrechte auf der Ziel-Website. Über gezielt präparierte HTTP-Requests lässt sich die Eingabevalidierung umgehen und PHP-Code auf dem Server ausführen.</p>
<h3 data-path-to-node="17">Welche Versionen sind betroffen?</h3>
<p data-path-to-node="18">Die Schwachstelle zieht sich durch alle aktuellen Hauptzweige der letzten Monate:</p>
<ul data-path-to-node="19">
<li>
<p data-path-to-node="19,0,0"><b data-path-to-node="19,0,0" data-index-in-node="0">WordPress 6.8:</b> Betroffen sind die Versionen 6.8.0 bis 6.8.5 (Sicher ab <b data-path-to-node="19,0,0" data-index-in-node="71">6.8.6</b>).</p>
</li>
<li>
<p data-path-to-node="19,1,0"><b data-path-to-node="19,1,0" data-index-in-node="0">WordPress 6.9:</b> Betroffen sind die Versionen 6.9.0 bis 6.9.4 (Sicher ab <b data-path-to-node="19,1,0" data-index-in-node="71">6.9.5</b>).</p>
</li>
<li>
<p data-path-to-node="19,2,0"><b data-path-to-node="19,2,0" data-index-in-node="0">WordPress 7.0:</b> Betroffen sind die Versionen 7.0.0 bis 7.0.1 (Sicher ab <b data-path-to-node="19,2,0" data-index-in-node="71">7.0.2</b>).</p>
</li>
</ul>
<blockquote data-path-to-node="20">
<p data-path-to-node="20,0"><b data-path-to-node="20,0" data-index-in-node="0">Achtung:</b> Auch wenn das WordPress-Core-Team automatische Notfall-Updates (Auto-Updates) für betroffene Seiten angestoßen hat, schlagen diese auf vielen Servern aufgrund individueller Rechtevergaben, deaktivierter Cronjobs oder benutzerdefinierter Konfigurationen fehl. Eine manuelle Kontrolle ist zwingend erforderlich!</p>
</blockquote>
<h2 data-path-to-node="21">Handlungsanleitung für Website-Betreiber</h2>
<h3 data-path-to-node="22">1. Version kontrollieren &amp; Manuell aktualisieren</h3>
<p data-path-to-node="23">Meldet euch im Backend eurer WordPress-Installation an und navigiert zu <b data-path-to-node="23" data-index-in-node="72">Dashboard → Aktualisierungen</b>. Steht ein Core-Update auf Version 7.0.2 (oder die entsprechenden Wartungsreleases 6.9.5 / 6.8.6) bereit, führt dieses unverzüglich aus.</p>
<p data-path-to-node="23">Prüfung auch über <a href="https://wp2shell.com/" target="_blank" rel="noopener">https://wp2shell.com/</a> möglich.</p>
<h3 data-path-to-node="24">2. Notfall-Mitigation über die WAF (Falls kein Update möglich ist)</h3>
<p data-path-to-node="25">Sollte ein unmittelbares Update aus Kompatibilitätsgründen nicht möglich sein, muss der anfällige REST-API-Endpunkt auf Server- oder Firewall-Ebene (z. B. via Cloudflare oder Nginx/Apache-Regel) blockiert werden:</p>
<ul data-path-to-node="26">
<li>
<p data-path-to-node="26,0,0">Blockieren aller Anfragen an <code data-path-to-node="26,0,0" data-index-in-node="29">/wp-json/batch/v1</code>.</p>
</li>
</ul>
<h3 data-path-to-node="27">3. Indikatoren für eine Kompromittierung (IoCs) prüfen</h3>
<p data-path-to-node="28">Falls eure Seite auf einer ungepatchten Version lief, solltet ihr folgende Punkte kontrollieren:</p>
<ul data-path-to-node="29">
<li>
<p data-path-to-node="29,0,0">Unbekannte Administratoren in der Benutzerliste.</p>
</li>
<li>
<p data-path-to-node="29,1,0">Neuer, unautorisierter PHP-Code im Verzeichnis <code data-path-to-node="29,1,0" data-index-in-node="47">/wp-content/uploads/</code> oder in der <code data-path-to-node="29,1,0" data-index-in-node="80">index.php</code>.</p>
</li>
<li>
<p data-path-to-node="29,2,0">Unerwartete Modifikationen in der <code data-path-to-node="29,2,0" data-index-in-node="34">.htaccess</code>-Datei.</p>
</li>
</ul>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/wp2shell-wordpress-kritische-sicherheitsluecke-rce-update/">wp2shell: Kritische WordPress-Lücke erfordert sofortiges Update</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5590</post-id>	</item>
		<item>
		<title>FRANZFON v1.1.0: Selbstgehostete Personalakte &#038; VoIP-Fixes</title>
		<link>https://ivanivanov.de/blog/franzfon-version-1-1-0-release-personalverwaltung/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Fri, 17 Jul 2026 14:41:54 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Asterisk HD Sprachcodec]]></category>
		<category><![CDATA[Digitale Personalakte DSGVO]]></category>
		<category><![CDATA[FRANZFON v1.1.0 Update]]></category>
		<category><![CDATA[FRITZ!Box VoIP Verbindung reparieren]]></category>
		<category><![CDATA[IAP-IT Zülpich Release]]></category>
		<category><![CDATA[IT Infrastruktur Kleinunternehmen]]></category>
		<category><![CDATA[Proxmox VM Telefonanlage]]></category>
		<category><![CDATA[Selbst gehostete Personalverwaltung]]></category>
		<category><![CDATA[Yealink DECT Online Status]]></category>
		<category><![CDATA[Zeiterfassung Schichtplan Vorschau]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5587</guid>

					<description><![CDATA[<p>FRANZFON v1.1.0 veröffentlicht: Integrierte Personalverwaltung und selbstheilende VoIP-Leitungen Das deutsche Softwareprojekt FRANZFON hat am 17. Juli 2026 die Version 1.1.0 seiner selbst gehosteten Telefonanlage freigegeben. Während die Plattform bisher primär darauf spezialisiert war, die funktionalen Lücken der FRITZ!Box im geschäftlichen VoIP-Alltag zu schließen, markiert dieses Release einen echten Wendepunkt in der Produktstrategie. Mit der Einführung [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/franzfon-version-1-1-0-release-personalverwaltung/">FRANZFON v1.1.0: Selbstgehostete Personalakte &#038; VoIP-Fixes</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1 data-path-to-node="16">FRANZFON v1.1.0 veröffentlicht: Integrierte Personalverwaltung und selbstheilende VoIP-Leitungen</h1>
<p data-path-to-node="17">Das deutsche Softwareprojekt <b data-path-to-node="17" data-index-in-node="29">FRANZFON</b> hat am 17. Juli 2026 die Version <b data-path-to-node="17" data-index-in-node="71">1.1.0</b> seiner selbst gehosteten Telefonanlage freigegeben. Während die Plattform bisher primär darauf spezialisiert war, die funktionalen Lücken der FRITZ!Box im geschäftlichen VoIP-Alltag zu schließen, markiert dieses Release einen echten Wendepunkt in der Produktstrategie. Mit der Einführung digitaler Personalakten wächst FRANZFON über die Telekommunikation hinaus und mutiert zum ganzheitlichen Betriebswerkzeug für KMUs, Kanzleien und Praxen.</p>
<h2 data-path-to-node="18">Der neue Startbereich: Modularität zieht ein</h2>
<p data-path-to-node="19">Wer sich nach dem Update in der Weboberfläche anmeldet, landet nicht mehr standardmäßig im klassischen TK-Dashboard, sondern auf einem neu strukturierten Startbildschirm. Das System steuert die Ansicht intelligent über das zugewiesene Benutzermodell: Besitzt ein Mitarbeiter nur Zugriff auf ein einziges Modul, wird der Startbereich übersprungen. Administratoren und HR-Manager sehen hingegen eine Kachel-Übersicht, aufgeteilt in:</p>
<ul data-path-to-node="20">
<li>
<p data-path-to-node="20,0,0"><b data-path-to-node="20,0,0" data-index-in-node="0">Telefonanlage:</b> Die gewohnte, unveränderte Administration der Telefonie-Infrastruktur.</p>
</li>
<li>
<p data-path-to-node="20,1,0"><b data-path-to-node="20,1,0" data-index-in-node="0">Mein Bereich:</b> Der persönliche Workspace für Mitarbeiter (eingeführt im letzten Release).</p>
</li>
<li>
<p data-path-to-node="20,2,0"><b data-path-to-node="20,2,0" data-index-in-node="0">Personal:</b> Das Herzstück des neuen v1.1.0 Updates.</p>
</li>
</ul>
<p data-path-to-node="21">Ein Blick auf die inaktiven Kacheln verrät zudem die Roadmap der Entwickler: Die Module für <b data-path-to-node="21" data-index-in-node="92">Urlaub, Zeiterfassung und Schichtplan</b> sind bereits visuell implementiert und dienen als Vorschau auf kommende Funktionserweiterungen.</p>
<h2 data-path-to-node="22">Die digitale Personalakte auf dem eigenen Server</h2>
<p data-path-to-node="23">Mit der neuen Personalverwaltung können sensible Mitarbeiterdaten vollständig digitalisiert und lokal gespeichert werden – ein massiver Pluspunkt für die DSGVO-Konformität, da keine Drittanbieter-Cloud involviert ist. Eine Personalakte in FRANZFON v1.1.0 umfasst:</p>
<ul data-path-to-node="24">
<li>
<p data-path-to-node="24,0,0"><b data-path-to-node="24,0,0" data-index-in-node="0">Persönliche Daten:</b> Personalnummer, Geburtsdatum, Staatsangehörigkeit sowie private Notfallkontakte.</p>
</li>
<li>
<p data-path-to-node="24,1,0"><b data-path-to-node="24,1,0" data-index-in-node="0">Beschäftigungsverhältnis:</b> Position, Abteilung, zugewiesene Vorgesetzte, Ein- und Austrittsdaten sowie die wöchentliche Sollarbeitszeit.</p>
</li>
<li>
<p data-path-to-node="24,2,0"><b data-path-to-node="24,2,0" data-index-in-node="0">Lohn &amp; Steuer:</b> Hinterlegung von IBAN, Steuer-ID, Steuerklasse, Krankenkasse und Sozialversicherungsnummer.</p>
</li>
<li>
<p data-path-to-node="24,3,0"><b data-path-to-node="24,3,0" data-index-in-node="0">Schwerbehinderung:</b> Erfassung der rechtlich relevanten Mindestangaben zur korrekten Berechnung von Kündigungsschutz und Zusatzurlaub.</p>
</li>
</ul>
<p data-path-to-node="25"><b data-path-to-node="25" data-index-in-node="0">Sicherheit und Protokollierung:</b> Die Bearbeitung ist Administratoren oder Benutzern mit der Rolle „Personal“ vorbehalten. Mitarbeiter dürfen ihre eigene Akte jederzeit im Lesemodus einsehen. Zum Schutz vor unbefugten Zugriffen und zur Erfüllung von Compliance-Vorgaben wird jeder Lese- und Schreibzugriff im Hintergrund revisionssicher protokolliert. Ein automatischer Löschschutz markiert fällige Akten nach Ablauf von Fristen lediglich, anstatt Daten eigenmächtig zu vernichten.</p>
<h2 data-path-to-node="26">Technische Highlights: Das Ende &#8222;stummer&#8220; Leitungsausfälle</h2>
<p data-path-to-node="27">Ein gefürchtetes Szenario im VoIP-Alltag ist die verwaiste Verbindung: Die Telefonanlage signalisiert eine vermeintlich fehlerfreie, grüne Verbindung zur FRITZ!Box, im Hintergrund ist der SIP-Trunk jedoch abgebrochen. Eingehende Anrufe laufen ins Leere, ohne dass der Betrieb es merkt.</p>
<p data-path-to-node="28">FRANZFON v1.1.0 schafft hier Abhilfe durch eine <b data-path-to-node="28" data-index-in-node="48">selbstheilende Verbindungsprüfung</b>. Ein regelmäßiger, absolut stiller Selbsttest überprüft die Leitung im Hintergrund. Wird eine hängengebliebene Verbindung erkannt, baut die Anlage sie vollautomatisch und transparent wieder auf – ohne Einträge in der Anrufliste oder Signalgeräusche an den Endgeräten.</p>
<h2 data-path-to-node="29">Bugfixes und Optimierungen aus der Praxis</h2>
<h3 data-path-to-node="30">1. Voller DECT-Support</h3>
<p data-path-to-node="31">DECT-Mobilteile werden nun unter der Sektion „Telefone“ endlich als eigenständige Endgeräte mit dedizierter Durchwahl und exaktem Online-Status aufgeführt. Zudem wurde ein schwerwiegender Bug bei Yealink-Mobilteilen (z. B. an einer W70B-Basis) behoben, bei dem die Signalisierung des Klingelzeichens zu einem sofortigen Verbindungsabbruch führte.</p>
<h3 data-path-to-node="32">2. HD-Codec schlägt Hardware-Rauschen</h3>
<p data-path-to-node="33">Aufgrund eines Firmware-Fehlers neigten bestimmte Yealink-Tischtelefone beim Betrieb an Software-TK-Anlagen zu einem dauerhaften Hintergrundrauschen. FRANZFON erzwingt bei der provisionierten Einrichtung dieser Geräte nun den HD-Sprachcodec. Dies eliminiert das Rauschen vollständig und sorgt für eine verbesserte interne Sprachqualität.</p>
<h3 data-path-to-node="34">3. Klartext bei der FRITZ!Box-Benennung</h3>
<p data-path-to-node="35">Wird die Telefonanlage hinter einem kaskadierten Router-Setup betrieben und ein eigener Hostname statt der Standardadresse <code data-path-to-node="35" data-index-in-node="123">fritz.box</code> verwendet, quittierte das System Verbindungsfehler bisher mit einem kryptischen „Ursache unbekannt“. Die neue Version gibt nun eine präzise Fehlermeldung aus und schlägt die direkte IP-Eingabe vor.</p>
<h2 data-path-to-node="36">Update-Hinweise für Administratoren</h2>
<ul data-path-to-node="37">
<li>
<p data-path-to-node="37,0,0"><b data-path-to-node="37,0,0" data-index-in-node="0">Backup-Pflicht:</b> Vor dem Anstoßen des Updates in der Weboberfläche sollte die FRANZFON-VM zwingend gesichert werden (in <b data-path-to-node="37,0,0" data-index-in-node="119">Proxmox VE via Snapshot</b>, in Hyper-V via Prüfpunkt).</p>
</li>
<li>
<p data-path-to-node="37,1,0"><b data-path-to-node="37,1,0" data-index-in-node="0">Yealink-Telefone:</b> Damit die neue HD-Codec-Konfiguration gegen das Hardware-Rauschen wirksam wird, müssen betroffene Telefone nach dem Update einmal kurz stromlos gemacht werden.</p>
</li>
<li>
<p data-path-to-node="37,2,0"><b data-path-to-node="37,2,0" data-index-in-node="0">Fax-Erweiterung:</b> In der Anrufliste wird bei Telefaxen nun das Label „Fax“ inkl. vollständiger Absenderkennung mit Vorwahl angezeigt. Nach dem Update erscheint auf der Fax-Seite ein Hinweis zur einmaligen Eingabe der eigenen Ortsvorwahl, um die Formatierung der Kopfzeilen auf ausgehenden PDFs zu vervollständigen.</p>
</li>
</ul>
<p><strong>FRANZFON Webseite</strong>: <a href="https://franzfon.de/" target="_blank" rel="noopener">https://franzfon.de/</a></p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/franzfon-version-1-1-0-release-personalverwaltung/">FRANZFON v1.1.0: Selbstgehostete Personalakte &#038; VoIP-Fixes</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5587</post-id>	</item>
	</channel>
</rss>
