Waechter: Rechte wurden gesetzt, aber wirkten nicht

Nachgemessen: /var/lib/dogfather-waechter stand auf 755 -- weltweit
lesbar, mit einer vollstaendigen Liste aller Dienste, Adressen und
ihres Zustands darin. Also genau das, was der Commit von heute
Nachmittag verhindern sollte.

Die Absicht stand im Code, die Wirkung fehlte. Zwei Gruende, beide
still:

1. "mode" bei mkdirSync gilt nur, wenn das Verzeichnis dabei NEU
   entsteht. Beim zweiten Lauf existiert es immer -- dann laesst
   mkdirSync die Rechte unberuehrt. Hier war es sogar schon vor dem
   Einbau der Zeile angelegt worden.
2. Selbst beim Neuanlegen zieht die umask des Prozesses Bits ab.

Der Unterschied zur Sicherung ist lehrreich: /var/backups/dogfather
steht korrekt auf 700, weil dort ein ausdrueckliches chmod im Skript
steht. Dieselbe Ueberlegung, einmal umgesetzt und einmal nur gemeint.

Jetzt chmod bei jedem Lauf, fuer Verzeichnis UND Dateien.

Aufgefallen ist es nur, weil die Rechte nachgesehen wurden statt
angenommen -- der Code sah richtig aus.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-26 19:37:45 +02:00
co-authored by Claude Opus 5
parent 6077c1700f
commit ac1d5c9916
+28 -2
View File
@@ -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);
}
/* ---------------------------------------------------------------------