Gendannelsesberedskab
Libre WebUI tilbyder en skrivskyddad återstællningsinventering som første sækerhetsgrind. Kørningen recovery-check rapporterer kænt tilstand og blokerende vilkår men låser, kopierer, krypterer, indlæser upp, sletter, reparerer eller gendanner ingenting.
libre-webui recovery-check --json > recovery-inventory.json
Fra kildekode kør du npm run build:backend en gang og erstatter libre-webui recovery-check med npm run recovery:check --. npx og Homebrew inspicerer normalt ~/.libre-webui; DATA_DIR og eksplicitte stier øverstyr.
Status 0 betyder ingen blokeringer, 1 en fuldstændig rapport med blokeringer og 2 ugyldige argumenter eller en uventet indsamlingsfejl. Brug --data-dir PATH via --data-dir eller --database PATH via --database til en anden placering. Standardinventeringen accepterer kun DATA_DIR/data.sqlite og afviser hårdt linkede, symlinkede eller ikke-regulære database/WAL/SHM-filer. En eksplicit database må ligge uden for DATA_DIR, men skal være en regulær fil uden symlinks; dens overordnede mappe bliver dataroden, hvis ingen datamappe angives.
Runtime læser også historiska pluginsdefinitioner i backendpaketets plugins og den ældre backendrelativa platsen for relativ PLUGINS_DIR. Anpassade definitioner hvor blokerer en volumenbackup. Paketerade installationer kan angiv flere --legacy-plugins-dir PATH.
For privat Compose kør du kontrollen i den driftsatta containern:
docker exec libre-webui \
libre-webui recovery-check --json --data-dir /app/backend/data
Hvad inventeringen kontrollerer
Den versionsstyrede JSON-rapporten registrerer:
- app-, Node.js-, operativsystems- og arkitekturversion;
- SQLite/WAL/SHM-størrelsear,
quick_check, fræmmande nøgler, schemafingeravtryck, user version, manglende tabeller og no-follow-validering; - datakatalogens læs-/skrivbarhet, fil- og byteantal;
- valgte krypteringsnøgelkilde og oåterkalleligt 16-teckensfingeravtryck samt sikker
.encryption_key; - tilpassede plugin, lokale krypterede blobbar, media, røstreferenser, dokumenttext og legacy-/plattformvektorer med ACL;
- full, begrænset autentificering af kanoniska blobbar, vektorenvelopes og chunk/checksum med tilgængelige nøgler;
- autentificering af genkendelige legacy AES-GCM-felter i chats, noter, dokument, preferenser, pluginshemligheter, media, e-post og AAD-bundna røstfælt;
- Work-opgaver, kørsler, førhandsvisningar og forventede Docker-diskenheder, Kubernetes-PVC:er eller hashbaserede værdsøkvægar med korrekt etiketter og ejer;
- mediejobb, vedvarende jobs/forsøg, hændelsestrømmar og global cursor;
- autentificering af krypterede jobb-/hændelsepayloads og syntaxkontroll af begrænsede ogenomskinliga referenser; samt
- eksplicitte blokeringer, advarsler og data uden for appens datakatalog.
Rapporten indeholder aldrig nøgler, JWT-/sessionshemligheter, udbyderlegitimationsoplysninger, pluginsinnehåll, anvændarinnehåll eller bokstavliga værdsøkvægar. En skrivskyddad datamontering giver en varning men blokerer ikke inspektion; start aldrig appen mot backupens skrivebeskyttede kopia.
Blockerare
Hver blokeringer betyder mislykket grind. Typiske årsager er manglende/beskadiget databas, ufuldstændigt schema, manglende eller modstridende nøgle, beskadiget/ikke-autentificeret chiffertext, overskredne verifieringsgrænser, ulæselig mappe, linket SQLite-kilde, aktive Work-/media-/vedvarende jobs, manglende eller fejlmærket arbejdsområde, event-head-afvigelse eller sekvenshul, eksterne plugin eller en kontrolplan som ikke kan verificer eksterne arbejdsområder. Stoppa arbejde og løs afhængigheder; redigere ikke rapporten for at skjule blockering.
Krypterede jobbpayloads autentificeras mot jobb-/hændelseidentitet og kanonisk begrænset JSON. Ogenomskinliga referenser kan kun størrelses- og syntaxkontrolleras fordi ingen auktoritativ referensdatabas findes. referenceTargetsVerified bliver false og en varning vises uden payloadværden.
Ældre textfælt mangler obligatorisk envelope-markør, så faktisk legacy-klartekst forbliver læsbar og ræknas ikke som autentificeret chiffertext. Kanoniska envelopes autentificeras altid; felaktiga tre-delte værdier med envelopebred IV/tagg lukkes sikkert. Røstfælt har entydig binær envelope og binds til profil, ejer og felter. encryption.legacyCiphertext viser antal og byte uden klartekst.
Med schema v4 og users.email_lookup autentificeras hver e-post og dens domænseparerade nøglebaserede lookup-token ræknas hvis. Saknad, forkert eller token på null blokerer; ældre databaser uden kolumnen understøttes.
Nuværende backupgræns
Hjælpeværktøjet til privat implementering stopper appen ved behov og opretter et integreret soloarkiv fra den præcise image, diskenhed og det præcise miljø. Manifestet signeres med Ed25519, og hele payloaden krypteres med operatørens AES-256-GCM-nøgle. SQLite, lokale blobs, indlejrede vektorer, runtimevalg og beskyttet konfiguration indgår. Signatur, checksum for chiffertekst og dekrypteret payload verificeres før udgivelse. libre-webui-restore accepterer kun en ny Docker-diskenhed og skriver den gendannede konfiguration som private filer i en ny mappe.
Skyddad konfiguration omfatter PostgreSQL-pool- og timeoutværden, Redis-timeout, blobkvoter, plattformsval og S3-prefix/adresseringslæge. Den ligger i signerad krypteret payload og återpubliceras med læge 0600.
Soloarkivet omfatter ikke Docker Work-diskenheder, Kubernetes-PVC:er, værtsbundne kataloger, Ollama-modeller eller ekstern udbydersstatus. Sikkerhedskopiér dem separat. Teamflødet forsegler en PostgreSQL-export, præcis versionsstyrede S3-chifferobjekt, PGVector-inventering, runtimekonfiguration og nøgelidentitet og verificerer mot rena mål. Redis-cache, presence, wake-ups og leases byggs hvis fra SQL.
Team-backup autentificerer alle begrænsede krypterede jobb-/eventpayloads i den exporterade snapshotten. Hver event stream skal indeholde 1..last_sequence, og global cursor får ikke ligge efter største gemte cursor. Gendannelse sammenlign hele resultatet mot signerad kællinventering. Huller mellem globale cursorværden er tilladte fordi PostgreSQL identity-allokering ikke er transaktionell; per-stream-sekvensen er kontraktet.
Om PLUGINS_DIR ligger uden for DATA_DIR markeres mappen som udelukket og definitioner blokerer volumenbackup indtil en matchende snapshot arrangeres. Symlinket, uregelmæssig eller ulæselig JSON er altid blokerende. Vedvarende jobs/events er aktive i begge profiler; gendannelse blokerer aktive forsøg og Work, verificerer payloads og sekvenser og bevarer SQL. Solo har indlejret worker, team ekstern worker og Redis kun for vækning/fan-out.
Til produktion skal krypterings- og JWT-hemmeligheder gemmes i en beskyttet secret manager, backup-arkiver skal opbevares krypteret uden for værten, og gendannelser skal testes i et rent kompatibelt miljø. Inventaret er en preflight-snapshot, ikke en vedligeholdelseslås eller et uafhængigt bevis for, at alle eksterne ressourcer kan gendannes.
Signerade og krypterede backupkommandon
Brug installeret libre-webui; ersætt libre-webui backup med npx --yes libre-webui@latest uden global installation eller npm run recovery:backup -- efter kællbygge. Produktionsimagen har /usr/local/bin/libre-webui. Team kræver PostgreSQL 16 pg_dump/pg_restore.
Opret nøgler privat og flytta private nøgler til beskyttet ekstern lagring:
install -d -m 0700 /absolute/private/libre-backup-keys
libre-webui backup keygen \
--directory /absolute/private/libre-backup-keys
Opret og verificer et stilla soloarkiv:
libre-webui backup create \
--offline \
--data-dir /absolute/path/to/libre-data \
--output /absolute/backups/libre-solo.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-private-key /absolute/private/libre-backup-keys/backup-signing-private.pem
libre-webui backup verify \
--archive /absolute/backups/libre-solo.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem
Kør preflight og tillæmpa kun på ny tom mappe:
libre-webui backup restore-preflight \
--archive /absolute/backups/libre-solo.lwbackup \
--target /absolute/restore/libre-data \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem
libre-webui backup restore-apply \
--archive /absolute/backups/libre-solo.lwbackup \
--target /absolute/restore/libre-data \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem
libre-webui backup restore-verify \
--target /absolute/restore/libre-data
Stoppa alle teamreplicas og workers og opret koordineret arkiv:
libre-webui backup create-team \
--offline \
--output /absolute/backups/libre-team.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-private-key /absolute/private/libre-backup-keys/backup-signing-private.pem
Indlæs miljøvariabler for en separat tom PostgreSQL-database og en tom versionsstyret S3-bucket. Preflight beviser, at målene er tomme uden at udgive data; apply gendanner og verificerer skemaet, de præcise S3-objekter og PGVector og skriver beskyttet konfiguration:
libre-webui backup restore-team-preflight \
--archive /absolute/backups/libre-team.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem
libre-webui backup restore-team-apply \
--archive /absolute/backups/libre-team.lwbackup \
--configuration-output /absolute/restore/libre-team-config \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem
Gendan aldrig til kildedatabasen, kilde-bucketen eller en eksisterende data- eller konfigurationsmappe. Den offentlige signeringsnøgle er ikke nok til at dekryptere payloaden. Hvis rollback i teamtilstand er ufuldstændig, skal begge mål betragtes som urene: ryd PostgreSQL og alle S3-versioner/delete markers under det præcise prefix, og kør restore-team-preflight igen før et nyt forsøg.
Schemalagda verificerede återstællningsøvningar
En backup som aldrig återstællts er hopp, ikke gendannelse. En øvning:
- Tar en stilla kopia af SQLite via online-backup-API og kopierer blobbar/filer; den afviser mens et vedvarende jobb kør.
- Skapar signeret AES-256-GCM-arkiv med tillfælliga nøgler og full inventering.
- Verifierar, gendanner isolerat og verificerer igen.
- Registrerar återstællningstid som demonstrerad RTO og avstånd mellem lyckade øvningar som møjlig RPO, og sletter derefter alle artifacts og nøgler.
Aktivera med RECOVERY_DRILL_INTERVAL_HOURS (eksempelvis 24). En coordinator lease forhindrer dubbelkørning. System viser historik og “Run drill now” via GET /api/recovery/drills og POST /api/recovery/drills/run. Oøvervakade fejl aviserar alle administratorer; RECOVERY_DRILL_HISTORY begrænser historikken (standard 60).
Øvningar gælder solo/SQLite. Team bruger fortsatt backup create-team og operatørens återstællningsrepetition.