diff --git a/server-internal/waechter.mjs b/server-internal/waechter.mjs index 0427ef64..e25ca3a5 100644 --- a/server-internal/waechter.mjs +++ b/server-internal/waechter.mjs @@ -37,7 +37,7 @@ ===================================================================== */ import { execFileSync } from "node:child_process"; -import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs"; +import { readFileSync, writeFileSync, mkdirSync, existsSync, chmodSync } from "node:fs"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; import tls from "node:tls"; @@ -303,8 +303,33 @@ async function meldung(titel, text) { Adressen und ihres Zustands -- fuer jemanden, der einen Angriff vorbereitet, eine bequeme Landkarte. Sie kostet nichts, also gibt es auch keinen Grund, sie herzugeben. */ +/* ⚠️ mode: 0o700 beim Anlegen REICHT NICHT (nachgemessen 26.08.2026). + + Zwei Gruende, und beide sind still: + + 1. "mode" gilt nur, wenn das Verzeichnis dabei NEU entsteht. Existiert + es schon -- und beim zweiten Lauf existiert es immer --, laesst + mkdirSync die Rechte unberuehrt. Das Verzeichnis war beim allerersten + Lauf entstanden, bevor diese Zeile ueberhaupt eingebaut war, und + blieb deshalb auf 755. + + 2. Selbst beim Neuanlegen zieht die umask des Prozesses noch Bits ab. + + Gemessen: /var/backups/dogfather steht auf 700, weil dort ein + ausdrueckliches chmod im Skript steht. /var/lib/dogfather-waechter + stand auf 755 -- weltweit lesbar, mit einer vollstaendigen Liste + aller Dienste, Adressen und ihres Zustands darin. + + Die Absicht stand also im Code, die Wirkung fehlte. Deshalb jetzt + ausdruecklich chmod, bei jedem Lauf, fuer Verzeichnis UND Datei. */ function verzeichnisSichern(pfad) { - mkdirSync(dirname(pfad), { recursive: true, mode: 0o700 }); + const ordner = dirname(pfad); + mkdirSync(ordner, { recursive: true, mode: 0o700 }); + try { chmodSync(ordner, 0o700); } catch { /* nicht Eigentuemer: dann eben nicht */ } +} + +function dateiSichern(pfad) { + try { chmodSync(pfad, 0o600); } catch { /* Datei noch nicht da */ } } function protokoll(text) { @@ -327,6 +352,7 @@ function zustandLesen() { function zustandSchreiben(z) { verzeichnisSichern(ZUSTAND_DATEI); writeFileSync(ZUSTAND_DATEI, JSON.stringify(z, null, 1), { encoding: "utf8", mode: 0o600 }); + dateiSichern(ZUSTAND_DATEI); } /* ---------------------------------------------------------------------