Hitelesítés és biztonság
A Libre WebUI helyi felhasználói fiókokat használ JWT-munkamenetekkel. Egy új telepítés mindig engedélyezi egy helyi rendszergazda kezdeti létrehozását. Minden későbbi helyi vagy OAuth-fiók nyilvános regisztrációja alapértelmezés szerint zárva van.
Első beállítás
Ha az adatbázisban nincs felhasználó:
- A Libre WebUI megjeleníti az első beállítási folyamatot.
- A felhasználó létrehozza az első helyi fiókot.
- A fiók az
adminszerepkört kapja. - Minden későbbi nyilvános regisztráció zárva marad, hacsak nincs kifejezetten engedélyezve.
A meglévő adatbázisok megtartják jelenlegi felhasználóikat és szerepköreiket.
Helyi fiókok
A helyi regisztrációhoz szükséges:
- Felhasználónév
- 12 karakter és 72 UTF-8 bájt közötti jelszó nagybetűvel, kisbetűvel és számmal
- Opcionális e-mail-cím
A jelszavak tárolás előtt bcrypttel hashelődnek. A bejelentkezési és regisztrációs útvonalak sebességkorlátozottak.
Regisztráció jóváhagyása
A nyilvános regisztráció önmagában nem biztosít hozzáférést. A nyilvános regisztrációs űrlapon vagy OAuth-szolgáltatón keresztül létrehozott minden fiók pending állapotban indul, és bejelentkezés előtt rendszergazdai jóváhagyást igényel.
Az egyetlen kivétel a kezdeti létrehozás: az üres adatbázis első valódi fiókja atomi módon active állapotban, admin szerepkörrel jön létre, így az új telepítés működő rendszergazdát eredményez. Minden későbbi regisztráció felülvizsgálatra vár.
Amit a függő felhasználó lát:
- A regisztráció sikeres, de nem ad vissza munkamenettokent. Az API
202választ adapprovalRequired: trueértékkel, a felület pedig jelzi, hogy rendszergazdának kell jóváhagynia a fiókot. - A helyes hitelesítő adatokkal végzett jelszavas bejelentkezés
403ésACCOUNT_PENDINGkóddal ("Your account is waiting for administrator approval") elutasításra kerül. Az OAuth-bejelentkezés?approval=pendingparaméterrel visszairányít a bejelentkezési oldalra. - A fiókállapot minden hitelesített kérésnél újra beolvasódik az adatbázisból, így a munkamenet soha nem élhet tovább a fiók
activeállapotánál.
Amit a rendszergazda lát:
- A Felhasználókezelés Függő jóváhagyások kártyája felsorolja a várakozó fiókokat, mindegyiknél Fiók aktiválása és elutasítás művelettel. Az elutasítás törlést jelent; nincs külön felfüggesztett állapot.
- A bejelentkezett rendszergazdák értesítést kapnak az alkalmazásban: jelvény jelenik meg a Felhasználók bejegyzésnél, új regisztrációnál pedig felugró értesítés látható. A függő jóváhagyások összesítése körülbelül percenként lekérdeződik (
GET /api/users/pending-approvals, csak rendszergazdák). - A jóváhagyás (
PATCH /api/users/:id/approve, csak rendszergazdák) rögzíti, hogy melyik rendszergazda és mikor hagyta jóvá a fiókot. A szerepkört nem módosítja: a jóváhagyott fiókokuserszerepkörűek maradnak, amíg egy rendszergazda elő nem lépteti őket. A jóváhagyás a felhasználó következő bejelentkezési kísérleténél lép életbe; semmit nem kell újra létrehozni.
A frissítés nem érinti a meglévő fiókokat: csak a funkció kiadása után nyilvánosan regisztrált fiókok indulnak függő állapotban. A Felhasználókezelésben rendszergazda által létrehozott fiókok azonnal aktívak.
Nyilvános regisztráció szándékos engedélyezése
A regisztráció alapértelmezés szerint le van tiltva. Az alábbi backend környezeti változót csak addig állítsa be, amíg új helyi vagy OAuth-fiókokat kell elfogadni:
ENABLE_SIGNUP=true
A tervezett regisztrációs időszak után állítsa vissza false értékre. A meglévő helyi és OAuth-felhasználók továbbra is bejelentkezhetnek, a rendszergazdák pedig zárt nyilvános regisztráció mellett is létrehozhatnak fiókokat a Felhasználókezelésből.
Az üres adatbázis mindig engedélyez egy helyi rendszergazdát, még ENABLE_SIGNUP=false mellett is; az OAuth nem foglalhatja el ezt a kezdeti helyet. Privát távoli telepítésnél az alkalmazás indítása előtt helyezze a gazdagépnevet identitási engedélyezési lista, például Cloudflare Access mögé, majd a védett útvonalon hozza létre a kezdeti rendszergazdát.
Szerepkörök
| Szerepkör | Cél |
|---|---|
admin | Példányadminisztráció, felhasználókezelés, rendszerbeállítások és megbízható Work-runtime-kezelés |
user | Normál csevegési, modell-, perszóna-, dokumentum- és beállítási munkafolyamatok |
A modellek telepítése, törlése, másolása, feltöltése és kirakodása rendszergazdákra korlátozott, mert ezek a műveletek módosítják a gazdagép erőforrásait.
Work-hozzáférés
A Work alapértelmezés szerint rendszergazdákra korlátozott, mert lehetővé teszi a kiválasztott modellnek tetszőleges parancsok végrehajtását kezelt konténerben. A rendszergazda a Beállítások Felhasználókezelés lapján minden aktív felhasználó számára megnyithatja a Worköt; a beállítás újraindítás után is megmarad, és azonnal érvénybe lép, a nyitott terminálmunkamenetekre is. A gazdagép-mappás munkaterületek minden módban csak rendszergazdák számára érhetők el, mert szerverútvonalakat csatolnak. A Work-hozzáféréssel rendelkezőket megbízható runtime-kezelőként, ne csupán WebUI-felhasználóként kezelje.
A rendszergazdai engedélyezés az adatbázis aktuális szerepkörét ellenőrzi, nem csupán a meglévő JWT-ben gyorsítótárazott szerepet. A rendszergazda visszaminősítése ezért azonnal visszavonja a Work-hozzáférést. Ezután a backend megpróbálja megszakítani az aktív futásokat, és leállítani a felhasználó Work-konténereit és előnézeteit, miközben megőrzi a feladatrekordokat és az elnevezett köteteket. Ha a Docker-tisztítás sikertelen, a hozzáférés visszavonva marad, a szerepkörmódosítás jelzi a tisztítási hibát, a kezelőnek pedig helyre kell állítania a Docker-hozzáférést és újra kell próbálnia a tisztítást.
A felhasználó törlése megsemmisíti a felhasználó Work-adatait. A Libre WebUI először leállítja a kezelt konténereket és eltávolítja a Work-köteteket, majd törli a fiókot és az adatbázisrekordokat. Ha a Docker nem tudja igazolni a sikeres tisztítást, a fióktörlés meghiúsul, hogy a rendszergazda kijavíthassa a runtime problémáját és újrapróbálhassa.
Csoportok és erőforrás-jogosultságok
A rendszergazdák csoportokat hozhatnak létre és tagságokat kezelhetnek a Beállítások Felhasználókezelés lapján. A csoportok erőforrás-jogosultsági alanyok: egy csevegés, jegyzet, dokumentum, tudásgyűjtemény, mappa, perszóna, prompt, készség vagy naptár tulajdonosa az access API-n keresztül read, write vagy admin hozzáférést adhat felhasználónak vagy csoportnak — minden megosztható felület ugyanazt a megosztási párbeszédablakot használja (lásd: Megosztás) —, a rendszergazdák pedig ugyanígy korlátozhatják a regisztrált eszközszervereket felhasználókra vagy csoportokra. Az erőforrások alapértelmezés szerint privátak maradnak — a globális admin szerepkör nem ad hozzáférést más felhasználók tartalmához. A tagság a kérés idején értékelődik ki, így egy tag eltávolítása azonnal visszavonja a csoporton keresztül kapott hozzáférést. A Beállítások Felhasználókezelés lapjának „tényleges hozzáférés” nézete a „miért fér hozzá ez a felhasználó?” kérdésre a szerepkör, a csoportok, a funkcióhozzáférés és az összes rá vonatkozó jogosultság felsorolásával válaszol.
Biztonsági auditnapló
A biztonságérzékeny műveletek — bejelentkezések és hibák, kijelentkezések, munkamenet- és tokenvisszavonások, felhasználó-, csoport-, jogosultság- és tokenmódosítások — csak hozzáfűzhető auditnaplóban rögzítődnek, a használati elemzésektől elkülönítve. A részletek tárolás előtt kitakarásra kerülnek: a titkosnak tűnő kulcsok kimaradnak, az adattartalom mérete korlátozott, így jelszavak, tokenek és prompttartalom soha nem kerül a naplóba. A csoport- és jogosultságmódosítások ugyanabban az adatbázis-tranzakcióban írják az auditeseményt, így módosítás nem létezhet nyom nélkül. A rendszergazdák a Beállítások Felhasználókezelés lapján kérdezhetik le a naplót; az alapértelmezett megőrzés 180 nap (AUDIT_RETENTION_DAYS).
Munkamenetek
A backend a JWT_SECRET segítségével írja alá a JWT-ket. Éles környezetben állítson be stabil titkos értéket:
JWT_SECRET=replace-with-a-long-random-secret
A JWT_SECRET módosítása érvényteleníti a meglévő munkameneteket. A helyi és OAuth-bejelentkezési tokenek a JWT_EXPIRES_IN értéket használják, amely alapértelmezés szerint 7d; módosítása az új munkameneteket érinti. A WebSocket-kapcsolatok a tartós tokent rövid élettartamú, egyszer használatos jegyre cserélik, és az alapul szolgáló munkamenet lejártakor bezáródnak.
Minden bejelentkezés szerveroldali munkamenetrekordot is létrehoz, amely a JWT-hez kötődik. A Beállítások → Munkamenetek minden eszközt felsorol a bejelentkezési móddal, az első és utolsó aktivitással, valamint a lejárattal. Egy munkamenet visszavonása (vagy a „Kijelentkezés a többi munkamenetből”) azonnal érvényteleníti a tokent minden replikán, és bezárja az aktív WebSocket-kapcsolatokat; a kijelentkezés ugyanígy visszavonja az aktuális munkamenetet. A funkció előtt kiadott tokenek nem tartalmaznak munkamenet-ID-t, és lejáratig érvényesek maradnak, kivéve ha egy új bejelentkezésből végzett „kijelentkezés a többi munkamenetből” fiókonkénti határidőt is beállít, amely elutasítja őket.
Kétfaktoros hitelesítés és passkeyek
A Beállítások → Munkamenetek kezeli a második faktorokat és a jelszó nélküli bejelentkezést:
- Hitelesítő alkalmazás (TOTP). A regisztráció base32 titkot és
otpauth://hivatkozást jelenít meg bármely hitelesítő alkalmazáshoz; az első hatjegyű kód megerősítése aktiválja, és tíz egyszer használatos helyreállítási kódot mutat. Ezután a jelszavas bejelentkezés munkamenet helyett rövid élettartamú kihívást ad vissza, aPOST /api/auth/mfa/verifypedig TOTP- vagy helyreállítási kóddal fejezi be a bejelentkezést. Minden elfogadott kód időlépése rögzítődik, így az elfogott kód nem játszható vissza; a helyreállítási kódok csak kulcsolt, egyirányú keresési tokenként tárolódnak, és mindegyik pontosan egyszer működik. A helyreállítási kódok letiltásához vagy újragenerálásához újra igazolni kell egy faktort. - Passkeyek (WebAuthn). A „Bejelentkezés passkeyjel” jelszó nélküli bejelentkezést végez felderíthető hitelesítő adattal; a felhasználó ellenőrzése (képernyőzár, biometria vagy PIN) a regisztrációnál és bejelentkezésnél is szükséges. Az attesztáció
noneértékkel elfogadott, az ES256 és EdDSA hitelesítő adatok támogatottak, a hitelesítő anyag nyugalmi állapotban titkosított, az ID pedig kulcsolt keresési tokenként marad meg. A kihívások egyszer használatosak és öt perc után lejárnak; a nem nulla, de nem növekvő aláírásszámláló klónozási jelként elutasításra kerül. A passkeyek biztonságos (HTTPS) eredetet, fejlesztésnél pediglocalhostcímet igényelnek; több gazdagépnéven elérhető példánynál állítsa be aWEBAUTHN_RP_IDértékét.
A helyes jelszó után kiadott MFA-kihívástoken a JWT_SECRET értékből származtatott, de attól különböző titokkal van aláírva: soha nem hitelesíthet API-kérést, egy fiókhoz és egy célhoz kötődik, siker esetén pedig felhasználódik.
A rendszergazdák minden fióknál megkövetelhetik a második faktort (Felhasználók → kétfaktoros szabályzatkártya, vagy rögzítés MFA_REQUIRED_MODE=required értékkel). A második faktorral nem rendelkező felhasználókat a következő bejelentkezésnél, a munkamenet kiadása előtt végigvezeti a regisztráció. A rendszergazdák fiókhelyreállításhoz a felhasználólistából visszaállíthatják a felhasználó TOTP-regisztrációját; a passkeyek megmaradnak, mert azokat a felhasználó kezeli a beállításokban. A regisztráció, aktiválás, ellenőrzési hibák, letiltás, szabályzatmódosítások, passkey-regisztráció/-eltávolítás és rendszergazdai visszaállítások mind bekerülnek a biztonsági auditnaplóba.
Az MFA a jelszavas bejelentkezésekre vonatkozik. Az OAuth- és OIDC-bejelentkezések az identitásszolgáltató saját második faktorára támaszkodnak, és nem kapnak újabb kihívást. Az API-tokeneket ez nem érinti: soha nem használják a munkamenet-hitelesítést.
API-tokenek
A Beállítások → API-kulcsok személyes hozzáférési tokeneket (előtag: lwk_) hoz létre programozott használathoz. A titok egyszer jelenik meg, és csak hashként tárolódik. Minden token kifejezett hatókörlistát tartalmaz (chat, models, documents, notes, personas, media, work, admin); a backend minden útvonalcsaládot szükséges hatókörhöz rendel, így a csak jegyzetekhez tartozó token nem fér hozzá a csevegésekhez vagy adminisztrációhoz, a munkamenetkezelés pedig tokennel soha nem érhető el. A tokenek opcionális lejáratot támogatnak, nyomon követik az utolsó használatot, bármikor visszavonhatók, és replikák között tokenenként sebességkorlátozottak. Adminhatókörű tokent csak rendszergazdák hozhatnak létre, és használatkor továbbra is szükséges a fiók admin szerepköre. A chat hatókörű token az OpenAI-kompatibilis nyilvános /v1 API kulcsa is.
Cloudflare Turnstile
A Turnstile akkor védi a jelszavas bejelentkezést és regisztrációt, ha mindkét kulcs be van állítva:
TURNSTILE_SITE_KEY=...
TURNSTILE_SECRET_KEY=...
TURNSTILE_EXPECTED_HOSTNAME=chat.example.com
A frontend külön login és signup műveletet rendel. A backend a Cloudflare segítségével ellenőrzi a tokent, és elutasítja azt a választ, amelynek gazdagépneve vagy művelete nem egyezik a kéréssel. Ha a TURNSTILE_EXPECTED_HOSTNAME nincs kifejezetten beállítva, a BASE_URL adja a várt gazdagépnevet.
Ha bármelyik kulcs hiányzik, a Turnstile le van tiltva.
GitHub OAuth
Beállítás:
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
GITHUB_CALLBACK_URL=https://your-domain.example/api/auth/oauth/github/callback
A GitHub OAuth-folyamat gh_ előtagú felhasználónévvel hoz létre helyi felhasználókat, és alapértelmezés szerint user szerepkört ad nekik.
Hugging Face OAuth
Beállítás:
HUGGINGFACE_CLIENT_ID=...
HUGGINGFACE_CLIENT_SECRET=...
HUGGINGFACE_CALLBACK_URL=https://your-domain.example/api/auth/oauth/huggingface/callback
A Hugging Face OAuth-folyamat hf_ előtagú felhasználónévvel hoz létre helyi felhasználókat, és alapértelmezés szerint user szerepkört ad nekik.
Mindkét OAuth-szolgáltató kriptográfiailag véletlen state értéket használ, amely rövid élettartamú HttpOnly, SameSite cookie-hoz kötődik. A callback elutasítja a hiányzó vagy nem egyező state értéket. Sikeres callback után a JWT egy 60 másodperces HttpOnly cookie-ban jut vissza a frontendhez, amely azonnal kicserélődik és törlődik; bearer tokenek soha nem kerülnek callback URL-ekbe, böngészőelőzményekbe vagy referrer fejlécekbe.
Átirányítások és CORS
Állítsa be a BASE_URL értékét a callback alapértékeihez, a CORS_ORIGIN értékét pedig a böngészőhozzáféréshez:
BASE_URL=https://your-domain.example
CORS_ORIGIN=https://your-domain.example
Helyi fejlesztéshez adja meg a Vite fejlesztési eredetét:
CORS_ORIGIN=http://localhost:5173,http://127.0.0.1:5173
Bemutató mód
A bemutató mód frontend-előnézeti mód. Előre kitölti a letiltott bemutató hitelesítő adatokat, és szimulált API-válaszokat használ. Nem éles hitelesítési mód.
Biztonsági ellenőrzőlista
- Állítson be erős
JWT_SECRETértéket. - A
DATA_DIRkönyvtárat tartós, hozzáférés-vezérelt tárolón tartsa. - Az
ENCRYPTION_KEYértékéről az adatbázissal együtt készítsen biztonsági mentést. - Nyilvános regisztrációhoz állítsa be a Turnstile-t.
- Nyilvános telepítéseknél használjon HTTPS-t.
- A szolgáltatói API-kulcsokat a szükséges legkisebb hatókörre korlátozza.
- Az OAuth callback URL-eket pontosan tartsa.
- Work-hozzáférést (rendszergazdai fiókok vagy minden felhasználónak nyitott mód) csak a backend konténer-runtime-jának kezelésére megbízhatónak tekintett személyeknek adjon.