Ne nalagajte utrjevanja systemd na spust user v OpenVPN
Dva recepta z najmanjšimi pravicami skupaj nista strožja. Izberite, kdo izvede menjavo identitete, nato preslikajte pooblastila skozi celoten življenjski cikel.
Dva zlepljena recepta z najmanjšimi pravicami ne dajeta strožje namestitve. Eden model pusti demonu, da se zažene s pravicami in po inicializaciji preide na račun brez pravic; drugi pusti upravitelju storitev, da ga zažene z omejeno identiteto že od prvega ukaza. Vsak deluje sam, kombinacija pa pogosto ustvari storitev, ki ne more čisto opraviti nobene od dveh nalog. Preostanek pregleda odločitev po vrsti.
Dva modela, en lastnik preklopa
Prvi model pripada demonu. Možnosti OpenVPN v skupnostni različici user in group spremenita identiteto po tem, ko sta tunel in ključi nastavljeni, persist-key skupaj z persist-tun pa ohranjata te vire uporabne tudi pozneje.
Drugi model pripada upravitelju storitev. Nastavitev systemd User= ali Group= določi identiteto, pod katero se proces zažene, direktive zmogljivosti pa določijo, kaj sme zadržati. Izbira med modeloma je vprašanje pakiranja, preden postane vprašanje varnosti, in skrbnik paketa je nanj že odgovoril. Vaša naloga je najti ta odgovor, ne pa izmisliti tretjo možnost.
Oba sta legitimna. Napaka je obravnavati ju kot plasti ene zasnove, ker lahko drugi model spremembo identitete prvega spremeni v operacijo, ki je proces ne sme več izvesti.
Odločite, kje se identiteta spremeni
Če se enota že zažene kot namenski račun, dodajanje demonovega ukaza, naj postane drug račun, zahteva prehod setuid, ki ga utrjena storitev nikoli ne bi smela izvesti. Napaka se pokaže kot napaka dovoljenj ob zagonu, ne kot jasno sporočilo politike. To se bere kot manjkajoča zmogljivost, kar ljudi usmeri k širšemu naboru omejitev namesto k vprašanju identitete.
Preberite, kaj nameščeni paket dejansko prinaša, preden karkoli uredite, vključno z njegovo mapo drop-in. Nekatere enote namerno izpustijo demonov lastni spust, ker upravitelj to že ureja, druge pa se za preklop po inicializaciji zanašajo na te možnosti. Odstranitev katere koli od njiju brez vednosti, kateri model ste podedovali, je pot, po kateri delujoča storitev preneha se zaganjati.
Izbrani model zapišite v eno vrstico: v lasti upravitelja ali v lasti demona. Vsaka poznejša direktiva mora biti skladna s tem stavkom, mešano enoto pa je treba obravnavati kot napako in ne kot kompromis.
Zmogljivosti so meje, ne darila
Nabor omejitev zmogljivosti pove, kaj sme proces največ zadržati. To je zgornja meja, in naštevanje zmogljivosti tam samo po sebi ničesar ne da, zato lahko enota z velikodušnim naborom omejitev vseeno ne uspe ustvariti tunela.
Kar dejansko postavi zmogljivost v ambientni nabor storitve, je AmbientCapabilities=. Referenca za izvajanje systemd dokumentira obe direktivi ločeno, in ta razlika pojasnjuje večino zmedenih nasvetov o zmogljivostih na spletu.
Zmogljivost dodajte šele potem, ko jo operacija, ki odpove, prepozna. Širši nabor omejitev skrije pravi vzrok in pusti storitev z več pravicami, kot je načrtovala zasnova. Tudi oteži pregled enote, ker zgornja meja ne opisuje več dela. Odstranite dodatno zmogljivost, ko je prava napaka odpravljena.
Preslikajte pooblastila skozi življenjski cikel
Naštejte, kaj mora proces narediti v vsaki fazi: zagon, stabilno stanje, ponovna avtentikacija in razgradnja. Ustvarjanje vmesnika, spremembe poti, branje zaščitenega ključa in klic pomočnika se ne zgodijo vsi v istem trenutku ali pod enakimi zahtevami. Razvrstite seznam po fazi, preden ga razvrstite po zmogljivosti.
Možnosti obstojnosti ohranjajo vire med ponovnimi pogajanji in ne dajejo dovoljenj, ki jih nikoli ni bilo. Ključ, ki ga proces ob zagonu ne more prebrati, bo tudi pozneje neberljiv, kar koli pravijo zastavice obstojnosti. Zastavice ohranjajo tisto, kar je že delovalo.
Uporabite namenski račun, ne skupnega. Razvijalci OpenVPN opozarjajo pred navado uporabljati nobody kot splošen primer, ker druge storitve na gostitelju morda že tečejo pod tem računom in izolacije, za katero mislite, da jo imate, ni tam.
Funkcije, ki spremenijo lokalno obremenitev, kot je razbremenitev podatkovnega kanala ali gradnja z drugačnim povezovanjem, lahko premaknejo, katere operacije so potrebne. Preglejte zemljevid, ko se paket spremeni, ne le ko se kaj pokvari.
Zapišite načrt in ohranite dostop za obnovitev
Zapis o namestitvi naj navaja upravitelja, identiteto ob zagonu, predvideno stabilno identiteto in vsako dovoljenje skupaj z operacijo, ki ga zahteva. Prav ta zapis naredi naslednjo spremembo pregledno in ne poskusno.
Med urejanjem ohranite dostop do konzole, ker je enoto, ki ob zagonu odpove, težko popraviti na daljavo. Preizkusite ponovni zagon in popoln ponovni zagon, preden spremembo razglasite za končano. Enota, ki preživi ponovni zagon, lahko vseeno odpove, preden je omrežje pripravljeno.
Uspeh je razumljen življenjski cikel z najmanjšimi pooblastili, ne proces, ki slučajno teče pod imenom, ki ni root.