← FAQ
FAQ

Beheerpagina (admin.euzos.eu)

FAQ › Profielserver › Beheerpagina · English

Wat is het?

De beheerpagina is het webbeheer van de profielserver, naast de CLI. Ze staat op een eigen domein: https://admin.euzos.eu voor productie (de sandbox heeft een eigen beheerdomein); / stuurt door naar /beheer. Alleen accounts met de rol beheerder kunnen inloggen, met e-mailadres en wachtwoord, bevestigd in de EUZOS-app op een telefoon die aan dat beheerdersaccount gekoppeld is (geen TOTP of externe authenticator-app). Het is eigen code (server/profile/src/admin_page/), werkt zonder JavaScript, en is alleen bereikbaar vanaf de IP-whitelist.

Hoe doe ik…?

Hoe maak ik iemand beheerder?

Op de VPS: euzos-profielserver admin-create <email> (een bestaand, actief account). admins toont de beheerders en hoeveel telefoons elk gekoppeld heeft; admin-delete <email> haalt de rol weg. De beheerder koppelt een telefoon in de EUZOS-app zoals elke gebruiker.

Hoe log ik in?

  1. Open https://admin.euzos.eu/ (vanaf een adres op de whitelist), vul e-mailadres en wachtwoord in (POST /beheer/inloggen).
  2. De pagina toont een QR-code met https://admin.euzos.eu/b/<id> en een koppelcode van 6 cijfers, en ververst zich elke 2 s.
  3. Scan hem met de EUZOS-app op je gekoppelde telefoon; de app toont "Inloggen op beheer vanaf <IP>" met dezelfde code. Bevestig met Face ID / vingerafdruk.
  4. De volgende verversing van dezelfde browser logt je in.

Zonder gekoppelde telefoon kun je niet inloggen (de pagina zegt dat na het juiste wachtwoord). Annuleren op de pagina (POST /beheer/annuleer) of Weigeren in de app breekt af.

Hoe log ik uit?

Met de knop Uitloggen (POST /beheer/uit). Een sessie eindigt ook na 15 minuten zonder klik, na 4 uur hoe dan ook, na een herstart van de server, of als het account geen actieve beheerder meer is.

Wat kan ik op de beheerpagina?

Pagina (pad onder /beheer/)WatTegenhanger in de CLI
Dashboard (/beheer)aantallen: accounts per status, beheerders, telefoons, pc-sessies, apps, beheerlogboek in 24 uurusers, devices, pc-sessions, apps
Accounts (accounts, accounts?q=)zoeken, maken (accounts/nieuw)users, user-create
Account (accounts/<id>)gegevens; blokkeren/deblokkeren, wachtwoord (optioneel telefoons intrekken), adres wijzigen, het beheerbeleid beheer= zetten/weghalen, telefoons intrekken, pc's afmelden, kluisinformatie en kluislogboek, wissen (AVG, twee stappen)user-block, user-unblock, password, user-email, admin-policy, vault, user-delete
Pc-sessies (pcsessies)alle ingelogde pc's, afmelden (pcsessies/afmelden)pc-sessions
Telefoons (telefoons)alle gekoppelde telefoons, intrekken (telefoons/intrek)devices, device-revoke
Appcatalogus (apps)tonen, zetten (apps/zet), wissen (apps/wis)apps, app-set, app-delete
Downloadtokens (downloadtokens)een verzoek tot intrekken vastleggen (downloadtokens/intrek); tokens en intrekkingen uit het beheerlogboekdownload-token
Beheerlogboek (log)de laatste 500 regels, met wie het deedadmin-log
Serverstatus (status)omgeving, domein, versie, schema, ondertekensleutel, kluis, mail, schakelaars, sessieskey

Waarom kan ik mijn eigen account niet blokkeren of wissen?

Op zijn eigen account kan een beheerder niet blokkeren, deblokkeren, het wachtwoord of het adres wijzigen, of wissen. Zo sluit niemand zichzelf per ongeluk buiten; gebruik de CLI of een andere beheerder.

Hoe wis ik een account (AVG) op de pagina?

Op de accountpagina: typ het adres opnieuw, en daarna op een aparte pagina "Ja, definitief wissen" (een eenmalig token, 5 minuten geldig). Dan gebeurt precies wat user-delete doet.

Hoe trek ik een downloadtoken in vanaf de pagina?

De pagina legt het verzoek vast in het beheerlogboek (downloadtoken-intrek …) en toont de opdracht voor de pakketserver: sudo euzos-download revoke <jti> [opmerking]. De zwarte lijst staat op de pakketserver, niet op de profielserver. (Een direct eindpunt om in te trekken op de pakketserver is een voorstel voor later, gepland.)

Waarom krijg ik 404 op het beheerdomein?

Je staat niet op de whitelist (Caddy antwoordt van buiten de lijst 404 voor het hele beheerdomein, behalve de twee bestanden voor app-links), of admin_page = no (de standaard in productie tot hij aangezet wordt), of admin_domain is niet ingesteld.

Details

Regels bij inloggen: één foutmelding voor alles (geen opsomming); afremmen op 10 pogingen per netwerk (IPv6 per /64 en /48) en 5 per account per kwartier; Argon2 via dezelfde poort als de rest van de server. Het wachtende verzoek is hoogstens 2 minuten geldig, eenmalig, gebonden aan de browser (cookie __Host-euzos_beheer_wacht, alleen de hash op de server) en het IP-adres. Alleen telefoons van datzelfde account tellen; een andere telefoon krijgt 410. Het ondertekende bericht is EUZOS-beheer-v1, zodat een handtekening voor een pc-login nooit telt voor beheer en omgekeerd.

Sessie: token van 256 bits in de cookie __Host-euzos_beheer (Secure, HttpOnly, SameSite=Strict), alleen de hash in het geheugen, gebonden aan het IP; hoogstens 64 sessies tegelijk.

CSRF: elke POST onder /beheer/ heeft Sec-Fetch-Site: same-origin of een Origin van het beheerdomein nodig, en het CSRF-token van de sessie in het formulier. Het inlogformulier gebruikt een double-submit-cookie (__Host-euzos_beheer_inlog). Doorsturen gaat alleen naar paden onder /beheer. Strikte CSP (script-src 'none').

Domeinen: op het beheerdomein antwoorden alleen /beheer…, /b/<id> en de twee bestanden onder /.well-known/; op het profieldomein geeft GET /beheer… een 308 naar het beheerdomein (tot 26-10-2027, daarna 404). De app-API om te bevestigen (/api/app/v2/admin/…) blijft op het profieldomein, omdat de app alleen met zijn eigen vastgepinde server praat.

Beheerlogboek: elke actie komt in de tabel admin_log met dezelfde (Nederlandse) actienamen als de CLI (gebruiker-blokkeer, wachtwoord, app-zet, …), plus beheer-inloggen, beheer-inloggen mislukt, beheer-uitloggen, pc-afmelden <ref>, apparaat-intrek <id>, downloadtoken-intrek …. De kolom admin_id is het account-id van de beheerder (NULL = de CLI).

Gepland (plan B): een aparte beheer-VPS voor admin.euzos.eu die een afgeschermde beheer-API op de profielserver aanroept (docs/ADMIN-PAGE.md, "Plan B").

Naslag

CLI-opdrachten

OpdrachtArgumentenWat het doet
admin-create<email>een actief account de rol beheerder geven
admin-delete<email>de rol weghalen
admins—accounts met de rol, en hun aantal gekoppelde telefoons
admin-log—wat de beheeropdrachten en de beheerpagina veranderden

Oude namen: beheerder-maak, beheerder-wis, beheerders, beheerlog.

Functies en modules

Functie / moduleRol
euzos_profileserver::admin_page::router, gateroutes en de domeinpoort (admin_domain)
euzos_profileserver::admin_page::login (login, cancel, link_page)wachtwoordstap, wachtend verzoek, de pagina /b/<id>
euzos_profileserver::admin_page::pages (show, action)de GET-pagina's en POST-acties
euzos_profileserver::admin_page::app (request, confirm, reject)de app-API om te bevestigen
euzos_profileserver::admin_page::db (role, set_role, admin_log_by, admin_log_last, search_accounts, counts, schema; ADMIN_ROLE)databasehulpfuncties
libs/qrde QR-code (eigen encoder, als SVG)

Configuratiebestanden

Sleutel (serverconfiguratie)StandaardBetekenis
admin_page (oud beheerpagina)aan in lokaal en sandbox, uit in productiede beheerpagina aan- of uitzetten
admin_domain (oud beheer_domein)—het beheerdomein; zonder nergens een beheerpagina
apple_app_id, android_package—nodig om de app-linkbestanden met /b/* te leveren

Op de VPS: de whitelist voor het beheerdomein wordt door euzos-whitelist in een Caddy-fragment geschreven; zie Omgevingen en uitrol.

Configuratiesleutels op schijf en getypte bevestigingswoorden zijn sinds 27-10-2026 Engels (bijvoorbeeld WIS-… → WIPE-…, omgeving= → environment=; docs/ENGLISH.md); de Nederlandse namen blijven geaccepteerd. De draadformaten van de profielserver (pc-regelprotocol, ondertekend profiel, ondertekende telefoonberichten, instellingssleutels) blijven Nederlands.

API-eindpunten

MethodePadOud Nederlands padDoel
GET/beheer, /beheer/<pagina>— (zichtbare paden)de pagina's
POST/beheer/inloggen, /beheer/annuleer, /beheer/uit, /beheer/<actie>—inloggen, annuleren, uitloggen, acties
GET/b/<id>—het doel van de QR-link (uitleg zonder de app)
GET/api/app/v2/admin/<id>/api/app/v1/beheer/<id>de app haalt het verzoek op
POST/api/app/v2/admin/<id>/confirm/api/app/v1/beheer/<id>/bevestigbevestigen ({time, signature})
POST/api/app/v2/admin/<id>/reject/api/app/v1/beheer/<id>/weigerweigeren

Protocolberichten en formaten

GET /api/app/v2/admin/<id> → {kind: "beheer", session, environment, server, user, admin_ip, phone_ip, same_network, text, code, created, expires, challenge, device}; fouten 401 niet_aangemeld, 410 verlopen, 429, 404 (beheerpagina uit).

Ondertekend met de chipsleutel (ECDSA P-256, SHA-256, DER, base64); de sleutels blijven Nederlands:

EUZOS-beheer-v1
omgeving=<omgeving>
server=<server>
sessie=<id>
beheerip=<admin_ip>
gebruiker=<gebruiker>
tijd=<Unix-tijd van de telefoon>
uitdaging=<uitdaging>
apparaat=<apparaat>

Bevestigen → 200 {ok: true, admin_ip}; 401 (handtekening), 409 (eerst ophalen), 400 (klok wijkt meer dan 2 minuten af), 410, 429.

Zie ook