← FAQ
FAQ

Server Admin

FAQ › EUZOS Server › Server Admin · English

Wat is het?

Server Admin (srvadmin) is de app waarmee een beheerder EUZOS-servers beheert vanaf een EUZOS-pc (EUZOS Desktop). Het is een ondertekend native EUZOS-programma uit de appcatalogus, geïnstalleerd in apps/, en het enige programma dat het recht server_admin krijgt. De app zelf ziet geen sleutel en geen token: hij geeft de kernel een verzoek, en de kernel doet de cryptografie en het netwerk. Hij praat met de server via het beheerprotocol: HTTPS (TLS 1.3, gepinde sleutel) op TCP-poort 8446, los van de cachepoort 8445, zodat de firewall ze apart kan openen.

Een EUZOS Server in productie wordt alleen zo beheerd: hij heeft geen SSH, en zijn eigen console kan de firewall alleen bekijken.

Hoe doe ik…?

Hoe installeer en start ik Server Admin?

Op een EUZOS-pc, ingelogd met een account met beheerrechten:

apps install srvadmin
serveradmin

Zonder inloggen: "log in first (an account with admin rights)". Als de app ontbreekt: "(to install: apps install srvadmin)". Server Admin draait alleen op x86-64.

Na apps install srvadmin staat Server Admin ook in het menu (kolom APPS) als grafische app: zie hieronder.

Hoe gebruik ik de grafische app Server Admin?

Open Server Admin in het menu. De app staat er alleen in als de ondertekende app srvadmin geïnstalleerd is (alleen beheerders krijgen een downloadtoken) en je bent ingelogd; anders toont het venster "Alleen voor beheerders". Beheren kan alleen vanaf een EUZOS-pc: er is geen webbeheer en geen ander besturingssysteem.

  • Servers: de servers van je organisatie (van de profielserver): naam, online of offline, adres, extern adres, ID, versie, geïnstalleerd op en door, en de pakketten aan of uit. Klik (of pijltjes en Enter) op een server.
  • Een server, met tabbladen: Status (versie, draait sinds, schijf, LAN, aanmelding, verkeer; Nu aanmelden en controleren, Server herstarten; de publieke sleutels), Pakketten (een schakelaar per pakket), Firewall (regels met Sluiten, voorstellen van pakketten met Openen, een regel openen), Netwerk (adapters met DHCP gebruiken, een vast adres, het externe adres), Poorten (een schakelaar per netwerkadapter, USB-poort en USB-klasse; Poorten), Back-up (stand, bewaartermijn, quotum, gebruik per account en apparaat), Bestandsserver (gedeelde mappen, rechten, groepen, quotum, prullenbak), Webserver (sites, certificaten met ACME-status en verloopdatum, proxyregels, uploaden uit Mijn bestanden, logboek), Pakketcache (inhoud, gebruik, legen, welke apps), Logboek, Terminal (één consolecommando tegelijk, standaard uit) en Updates (gepland, UPDATES.md).
  • Elke wijziging vraagt eerst om bevestiging, met de precieze opdracht (bijvoorbeeld pakket-uit web bevestig); Esc of Annuleren doet niets. De uitkomst komt als groene of rode kaart boven in het tabblad, met de redencode uitgelegd (bijvoorbeeld "dit heeft Werkplekbeheer nodig op deze server").
  • Toetsenbord: pijl links/rechts wisselt van tabblad, Tab gaat naar het eerste veld (en verder), Enter voert het veld uit, Esc verlaat het veld of gaat terug naar de servers. Het schermtoetsenbord komt bij een veld. Licht en donker thema en alle 34 talen.

De app gebruikt dezelfde beheeracties als serveradmin (het tabblad Terminal gebruikt console, console-set en console-check): elke opdracht krijgt een beheerbewijs van de profielserver en wordt ondertekend met de apparaatsleutel. Een beheerbewijs wordt 5 minuten hergebruikt (het is 10 minuten geldig en alleen bruikbaar met een verse uitdaging en de apparaatsleutel van deze pc); bij uitloggen wordt het gewist. Het logboek van de pc krijgt alleen de actienaam, nooit argumenten, antwoorden, tokens of sleutels; de registratiecode van de installer wordt niet getoond.

Hoe gebruik ik het tabblad Terminal (een opdracht op een server uitvoeren)?

Server Admin heeft per server een tabblad Terminal. Het is geen SSH en geen nieuwe poort: elke opdracht is één ondertekend verzoek met zijn antwoord over het bestaande beheerprotocol (poort 8446), met jouw beheerbewijs en de sleutel van deze pc. Er is geen interactieve sessie en er blijft geen proces aan hangen.

  • Standaard uit. Een server accepteert niets totdat een beheerder de terminal aanzet: Aanzetten in het tabblad (met bevestiging), of serveradmin <id> console-set on confirm. Uitzetten (of console-set off) stopt het weer. De instelling is het bestand \EOS\FW\CONSOLE.TXT op de server; een ontbrekend of vreemd bestand betekent uit.
  • Typ een opdracht en druk op Enter of Uitvoeren. De server zegt eerst hoe hij de opdracht indeelt (console-check):
    • alleen lezen (op de lijst van de server: help, pci, usb, ports, disks, sysinfo, ps, mem, ip, network, packages, log [n], audit [n] en nog enkele): wordt meteen uitgevoerd;
    • al het andere (verandert iets, herstart, of staat niet op de lijst): de app vraagt eerst en toont de precieze opdracht; pas na Uitvoeren gaat hij weg. Dit is de standaard voor elke onbekende opdracht;
    • geweigerd: draait nooit, ook niet bevestigd (reden command_denied).
  • De weigerlijst: niets dat geheimen of sleutels toont of verandert (pckey, sign, hostkey, wifi, vpn, vault, tpm, profile, workplace, smb, sshd, bootvar en andere), niets dat bestanden leest of schrijft (cat, type, get, put, read, dump, copy), en elke opdracht die een sleutelbestand of geheim noemt (PCKEY, HOSTKEY, WPKEY, AUDKEY, *KEY.TXT, *TLS.TXT, secret, token, password, seed). De precieze lijsten zijn DENIED, SECRET_WORDS en READ_ONLY in libs/workplace/src/console.rs. Alleen consolecommando's die de server al heeft kunnen draaien, en alleen die zijn eigen consoleregels toestaan (een productieserver heeft een korte lijst).
  • Het antwoord is beperkt tot 48 KiB en eindigt met [... output truncated after 48 KiB] als het is afgekapt. De app bewaart de laatste 8 uitvoeren (300 regels elk).
  • Geschiedenis: omhoog en omlaag in het opdrachtveld loopt door eerder getypte opdrachten (de laatste 50).
  • Elke opdracht staat in het auditlogboek (Auditlogboek) met jouw account en deze pc; van een geweigerde opdracht alleen het eerste woord (er kan een geheim in staan). Geweigerde pogingen (terminal uit, geweigerd) staan er ook in.
  • Selecteren en kopiëren: Server Admin heeft nog geen tekstselectie, dus de uitvoer kan niet uit het venster worden geselecteerd of gekopieerd.
  • Redenen staan zoals in de andere tabbladen: console_off ("de terminal staat uit op deze server"), command_denied, confirmation_needed.

Wat heeft de pc nodig?

  • een apparaatsleutel: pckey create schrijft \EOS\FW\PCKEY.TXT (op de ESP van de interne schijf); pckey toont de publieke sleutel en de vingerafdruk;
  • de pc geregistreerd bij de organisatie op de profielserver (pc-register '<naam>' <sleutel> <organisatie>, zie CLI);
  • een account dat beheerder is van de organisatie waar de server bij hoort.

Hoe zie ik welke servers ik mag beheren?

serveradmin (of serveradmin list). Per server: id (16 hex), naam, LAN-adres, stand, en (nieuwere servers) wie hem installeerde, wanneer, en het externe adres.

Hoe geef ik een server een opdracht?

serveradmin <server-id> <actie> [arg], bijvoorbeeld serveradmin <id> status of serveradmin <id> firewall-open allow tcp 8445 lan. Alle acties staan in de tabel hieronder.

Waarom werd mijn opdracht geweigerd?

Server Admin toont "refused or failed:" met een uitleg van de redencode, bijvoorbeeld: niet ingelogd, geen beheerrechten voor deze organisatie, geen apparaatsleutel, pc niet geregistreerd of ingetrokken, pc/server/beheerder niet in dezelfde organisatie, onbekende of ingetrokken werkplekserver, server zonder organisatie, het beheerbewijs is verlopen (klok?), de uitdaging klopte niet, of de server heeft zich nog niet aangemeld bij de profielserver.

Details

Een opdracht gaat in vier stappen (crate::server_admin::execute_with):

  1. Beheerbewijs: de kernel vraagt de profielserver, met het pc-token van de ingelogde gebruiker, om een beheerbewijs (POST …/admin-proof, inhoud werkplek=<id>, pcsleutel=<apparaatsleutel>). Het antwoord bevat ok, lan= (de LAN-URL van de server), tls= (zijn TLS-pin) en het bewijsdocument EUZOS-werkplek-beheerbewijs-v1, ondertekend door de profielserver en 10 minuten geldig.
  2. Uitdaging: POST /beheer/v1/uitdaging op poort 8446 van de server (valt bij oudere servers terug op de poort van de LAN-URL), met de TLS-sleutel gepind. Antwoord: ok, uitdaging=<32 hex> (eenmalig, 60 s geldig).
  3. Opdracht: de kernel maakt EUZOS-werkplek-opdracht-v1 en ondertekent die met de apparaatsleutel van de pc (crate::device_key::sign_command).
  4. Versturen: POST /beheer/v1/opdracht met het bewijs gevolgd door de opdracht. De server controleert (euzos_workplace::admin::check): de sleutel van de profielserver (uit PROFILE.TXT), omgeving en server, zijn eigen id en organisatie, de tijd, de pc-handtekening (dezelfde pc-sleutel als in het bewijs) en de uitdaging. Daarna voert hij de actie uit en schrijft in het logboek wie wat deed vanaf welke pc.

Dreigingsmodel in het kort

Alleen op een EUZOS-pc (de systeemaanroep bestaat elders niet en de sleutels zitten in de kernel); alleen door een beheerder van de organisatie van de server (het bewijs); alleen vanaf een geregistreerde pc (de apparaatsleutel); vers (uitdaging, korte geldigheid).

Naslag

Consoleopdrachten

OpdrachtArgumentenWat het doet
serveradmin– of list (oud lijst)de servers die je mag beheren (alleen bureaublad)
serveradmin<server-id> <actie> [arg]een actie sturen; de rest van de regel is het argument
pckey[create] (oud maak)de apparaatsleutel van de pc tonen of maken (alleen bureaublad)
apps install srvadmin–Server Admin uit de catalogus installeren

Acties van Server Admin

Het opdrachtwoord is Engels; het oude Nederlandse woord (de draadnaam) wordt op de opdrachtregel nog geaccepteerd. Op de draad wordt de Nederlandse naam gebruikt en ondertekend.

OpdrachtwoordDraadnaamArgumentWijzigt?Wat het doet
statusstatus–neeversie, draait sinds (uptime, met de seconden tussen haakjes), schijf, aanmelden, organisatie, adres, pin, verkeer
cachecache–neeapps en versies in de cache
fillvul–janu aanmelden en de cache controleren
appsapps<a,b> (≤ 4)jawelke apps de cache bewaart (schrijft apps= in WORKPLC.TXT)
networknetwerk–neeLAN-URL, adapters, stand van SSH en het overzicht van network
network-setnetwerk-zet<adapter> dhcp | <adapter> statisch <ip>/<prefix> <gateway|-> <dns1> [<dns2>] | extern <adres>|geenjahet netwerkbestand wijzigen en toepassen
loglogboek–neede laatste 100 regels van het logboek van de server
auditaudit[n]neehet blijvende auditlogboek, gecontroleerd (hashketen en MAC's), daarna de nieuwste n records (Auditlogboek)
rebootherstart–jaherstart over 2 s
revokeintrekken–jade sleutels en WORKPLC.TXT wissen: na een herstart een gewone pc; trek hem ook in op de profielserver
resetopnieuw–janieuwe sleutels; opnieuw registreren en herstarten
firewallfirewall–neeregels, voorstellen van pakketten, aantal geblokkeerd
firewall-openfirewall-open<regel>jaeen regel vooraan toevoegen
firewall-closefirewall-sluit<regel>japrecies die regel verwijderen
firewall-setfirewall-zet<regel>; <regel>; …jaalle regels vervangen (het beheerprotocol moet toegelaten blijven)
packagespakketten–neehet scherm Pakketten
package-onpakket-aan<id>jaeen pakket aanzetten
package-offpakket-uit<id> [confirm]jazonder confirm alleen tonen wat er gebeurt; confirm (oud/draad bevestig) doet het
cache-clearcache-clear[confirm]jade pakketcache legen (Pakketcache); zonder confirm alleen tonen wat er gebeurt
filesfiles[<subopdracht>]jade Bestandsserver: shares, quotum, rechten, groepen, gebruik (Bestandsserver)
webweb<subopdracht>hangt afhet pakket Webserver: sites, proxyregels, certificaten, logboek, uploads (zie Webserver)
backupbackup–neehet pakket Back-up: toestand, bewaarbeleid, quotum, gebruik per account en apparaat (Back-up)
backup-setbackup-setdaily=<n> weekly=<n> monthly=<n> quota-account-gib=<n> quota-device-gib=<n>jabewaarbeleid en quotum van Back-up (naar BACKUP.TXT; de opruimtaak draait kort daarna)
portsports–neenetwerkadapters, USB-poorten en USB-klassen met hun stand (Poorten)
ports-setports-setnet <adapter> on|off [confirm], usb <positie> on|off [confirm], usb-class <klasse> on|off [confirm]jaéén aan- of uitzetten (naar PORTS.TXT); nooit de adapter van de beheerverbinding of de poort van de opstartstick; de laatste adapter en het enige toetsenbord vragen confirm
console-checkconsole-check[<opdracht>]neede stand van de terminal (console=on|off) en, bij een opdracht, zijn klasse (read, confirm, denied)
console-setconsole-seton confirm | offjade terminal aanzetten (vraagt confirm) of uitzetten; geschreven naar CONSOLE.TXT; standaard uit
consoleconsole[confirm] <opdracht>jaéén consolecommando uitvoeren en de uitvoer teruggeven (≤ 48 KiB); alleen als de terminal aan staat, nooit een geweigerde opdracht, en een opdracht die niet alleen-lezen is alleen met confirm

Regelsyntaxis: allow|deny tcp|udp|icmp <poort|van-tot|-> lan|anywhere|<ip>[/<prefix>] (oud: toestaan|weigeren, overal) (zie Netwerk en firewall).

Functies en modules

OnderdeelRol
user/srvadmin (main.rs)de app: leest de opdrachtregel, toont antwoorden, legt redencodes uit
systeemaanroep 0x100a (crate::server_admin::syscall)verzoek van de app aan de kernel; alleen met PERM_SERVER_ADMIN
crate::server_admin::execute, execute_withbewijs, uitdaging, ondertekenen, versturen
crate::server_admin::commandde consoleopdracht serveradmin (start de app)
crate::device_key::{public_key, sign_command, command}de apparaatsleutel van de pc (PCKEY.TXT)
crate::workplace::admin, executede serverkant: uitdaging en opdracht afhandelen, de acties
euzos_workplace::admin::{Proof, Command, Action, check, CONFIRM}de documentformaten en de controle
crate::app_store::SERVER_ADMINde appnaam srvadmin
euzos_ui::apps::server_adminde grafische app: toestand, opmaak (een plan van wat waar staat), tekenen, klikken, toetsen
euzos_ui::apps::server_admin_datade antwoorden lezen: serverlijst, regels, pakketten, firewall, netwerk, redencodes
crate::server_admin_appkernelkant van de app: alleen met srvadmin geïnstalleerd, verzoeken in een eigen thread via crate::server_admin::execute
euzos_workplace::console (libs/workplace/src/console.rs)het beleid van de terminal: standaard uit, weigerlijst, indeling, groottegrens (op de host getest)
crate::server_console (kernel/src/server/console.rs)de serverkant van de terminal: de instelling CONSOLE.TXT, de opdracht uitvoeren met opgevangen uitvoer
crate::server_admin::forgetbij uitloggen: de hergebruikte beheerbewijzen weg
euzos-ui-preview serverbeheer <map>renders van alle schermen (nl/en, 1366×768 en 1920×1080; make ui → build/ui/serverbeheer)

Configuratiebestanden

BestandWaarBetekenis
\EOS\FW\PCKEY.TXTde pcde seed van de apparaatsleutel (64 hex, geheim)
\EOS\FW\WPKEY.TXT, WPTLS.TXTde serverde sleutels van de server (geheim)
\EOS\FW\PROFILE.TXTde serverde profielserver en zijn publieke sleutel, om het bewijs te controleren

API-eindpunten

Op de profielserver (aangeroepen door de kernel van de pc met het pc-token; de kernel gebruikt de oude paden):

MethodeEngels padOud padDoel
GET/api/workplace/v1/admin-list?token=/api/werkplek/v1/beheerlijstde servers die deze beheerder mag beheren
POST/api/workplace/v1/admin-proof?token=/api/werkplek/v1/beheerbewijseen beheerbewijs voor één server; met een limiet

Op de server, poort 8446 (HTTPS, gepinde TLS-sleutel; alleen POST):

MethodePadInhoudAntwoord
POST/beheer/v1/uitdagingleegok\nuitdaging=<32 hex>\n
POST/beheer/v1/opdrachtbewijsdocument + opdrachtdocumentok\n<tekst> of fout\nreden=<code>\n

De beheerpaden antwoorden alleen op 8446 en de cachepaden alleen op de cachepoort; anders 404 pad.

Protocolberichten en formaten

Verzoek app ↔ kernel (systeemaanroep 0x100a, ≤ 1024 bytes):

actie=lijst
werkplek=<16 hex>
actie=<draadactie>
arg=<tekst>

Beheerbewijs (ondertekend door de profielserver):

EUZOS-werkplek-beheerbewijs-v1
omgeving=<omgeving>
server=<profielserver>
werkplek=<id>
organisatie=<organisatie>
pcsleutel=<64 hex>
account=<e-mailadres van de beheerder>
beheer=werkplek
uitgegeven=<unix-tijd>
geldig-tot=<unix-tijd>
sleutel-id=<16 hex>
handtekening=<128 hex>

Opdracht (ondertekend met de apparaatsleutel van de pc):

EUZOS-werkplek-opdracht-v1
werkplek=<id>
pcsleutel=<64 hex>
uitdaging=<32 hex>
actie=<draadactie>
arg=<tekst, ≤ 256>
handtekening=<128 hex>

De handtekening is Ed25519 over <soort>\0 + alle bytes tot en met de \n vóór handtekening=. Een document is hoogstens 4096 bytes; elke sleutel hoogstens één keer. Een bewijs is hoogstens 10 minuten geldig (+120 s klokspeling).

Redencodes (draadwaarden): van de controle van de server ongeldig, bewijs_handtekening, pc_handtekening, actie_onbekend, omgeving_onjuist, andere_werkplek, andere_organisatie, bewijs_verlopen, andere_pc, uitdaging_onjuist; van de beheerpoort geen_willekeur, te_vaak, geen_serversleutel, niet_aangemeld, klok, pad; van de acties geen_rol, pakket_onbekend, pakket_binnenkort, confirmation_needed, package_not_installed, console_off, command_denied; van de kernel van de pc niet_ingelogd, geen_apparaatsleutel, werkplek_zonder_adres, werkplek_geen_uitdaging; van de profielserver onder andere geen_beheerder, pc_onbekend, pc_ingetrokken, werkplek_onbekend, werkplek_ingetrokken, werkplek_zonder_organisatie, te_vaak.

Lijstregel (actie=lijst): werkplek=<id>\t<naam>\t<lan>\t<actief|niet actief>\t<geïnstalleerd door>\t<datum>\t<extern adres>.

Zie ook