Kako: zahtevati drugi dejavnik
Kontekst
Večina wikija je običajna vsebina, en imenski prostor pa ne: kadrovski podatki, dostopna sredstva, gradiva sej. Drugi dejavnik avtentikacije (2FA) naj bo pogoj za dostop tja, ne da bi morala vsaka prijava v wiki skozi dodatno vprašanje.
Pregled rešitve
Gre za pravilnik, ne za zahtevo ob prijavi. Razlika odloči o izidu:
| Zahteva ob prijavi | Pravilnik | |
|---|---|---|
| Nastavitev | enforce_login | datoteka pravilnika |
| Velja za | vsak račun, ki dejavnik že ima vpisan, ob prijavi | vsakogar, ki hoče do vsebine |
| Kaj se zgodi z drugimi | nič; računi brez dejavnika se prijavijo kot prej | dostop jim je zavrnjen |
| Kje se preveri | pri prijavi | pri pravicah |
Pravilnik se ovrednoti med preverjanjem pravic, ki ga opravi DokuWiki sam. Zato drži na vsaki poti do vsebine – pri ogledu strani, zadetku iskanja, izvozu in vključitvi iz drugega paketa – in ne le tam, kjer se je kdo spomnil vgraditi zaporo.
enforce_login nikogar ne zaveže. Deluje le pri računih, ki dejavnik že imajo vpisan. Kdor ga ni nikoli vpisal, se tudi ob vklopljeni nastavitvi prijavi z golim geslom. Za sveže povabljen račun torej ne stori ničesar.
Izvedba
Za imenski prostor odprite Skrbništvo → Drugi dejavnik (do=admin&page=wkidentity) in zavihek Namespaces. V vsako vrstico vpišite eno predpono. Zajame oznako samo in vse pod njo; prazna vrstica ne pomeni celotnega wikija.
Za skupino ali posamezen račun teh vnosov skrbniški zaslon ne zapisuje. Vpišite jih v conf/wkidentity-policy.json pod ključ required_scopes:
{ "required_scopes": [ { "type": "group", "id": "uredniki", "requirement": "MFA_ANY" }, { "type": "user", "id": "mmustermann", "requirement": "TOTP" }, { "type": "namespace", "id": "interno:kadri", "requirement": "MFA_ANY" } ] }
Dovoljene stopnje so MFA_ANY (kateri koli vpisan dejavnik), TOTP, MAIL_OTP in AUTHENTICATED. V isti datoteki stojijo tudi seznami skrbniškega zaslona; pred vsakim prepisom nastane varnostna kopija.
Kadar se ujame več vnosov, obveljajo po vrsti imenski prostor, skupine in nazadnje račun – ožji obseg prevlada. Če dva vnosa zahtevata dva različna dejavnika, obvelja ožji, nasprotje pa se zabeleži.
Zavrnjeni bralec ne obtiči. Namesto gole zavrnitve dobi enega od dveh odgovorov:
- dejavnika nima vpisanega – povezavo na vpis v profilu;
- dejavnik ima, a ga v tej seji ni potrdil – povezavo na ponovno potrditev, ki ga po pravilni kodi vrne na začetno stran.
Opombe
- Najprej pustite vpisati, šele nato zahtevajte. Pravilnik nad imenskim prostorom, kjer uporabniki dejavnika še nimajo, jih takoj zapre ven. Najavite, počakajte na vpise, nato vklopite.
- Sveže povabljen račun je izjema tega pravila. Pred vnovčenjem ne obstaja, zato se prej ne more vpisati. Če naj brez dejavnika ne pride nikamor, vežite obveznost na njegovo skupino: obseg group se preveri pri vsaki pravici, ne glede na imenski prostor. Prva stran po prijavi je tedaj zavrnitev s povezavo na vpis.
- Potrditev zapade. Nastavitev
assurance_ttl(privzeto 3600 sekund) pove, kako dolgo velja opravljena ponovna potrditev ali dejavnik, potrjen ob prijavi. Nato seja pade nazaj med navadne prijavljene; sama prijava ostane. - Pravilnik in zahteva ob prijavi delujeta neodvisno. Obveznost za račun ali skupino velja tudi, kadar je
enforce_loginizklopljen. Tako lahko dejavnik zahtevate od nekaj računov, ne da bi spremenili prijavo vsem. - Pustite si pot nazaj. Pravilnik, ki pokrije imenski prostor z vašimi zapiski za obnovitev, je past.
- To ni šifriranje. Drugi dejavnik ureja dostop skozi wiki. Datotek na disku, v varnostni kopiji ali v iskalnem kazalu ne zaščiti.
- Ne skrivajte napotka. Zavrnitev brez poti do vpisa je slepa ulica; razlog in opozorilni pas sta tam prav zato.