Za ustvarjanje ključa OpenVPN ne potrebujete začasne datoteke
Hramba ključnega gradiva v pomnilniku se izogne življenjskemu ciklu datoteke, ne uhajanju. Ločite izhodni tok in tok napak, nato pa ključ obravnavajte kot skrivnost.
Ustvarjanje ključa ne potrebuje začasne datoteke, in če jo izpustite, popravite manj, kot namiguje večina vodnikov. Odstrani življenjski cikel datoteke in tekmo s čiščenjem okoli nje. Pusti nedotaknjeno vsako priložnost, da skrivnost pozneje uide. Težava s pravilnostjo v teh skriptah običajno sedi drugje, ker diagnostika in ključno gradivo potujeta po različnih tokovih.
Datoteka nikoli ni bila tista izpostavljenost, ki ste si jo mislili
Začasna datoteka je konkreten tveganje, ko je berljiva vsem, ko preživi sesutje ali ko se po izjemi preskoči korak čiščenja. To je resnično in vredno popravka. So tudi lokalne, vidne in preproste za preizkus. Poimenujte vsako v svoji skripti, preden sklenete, da je bila sprememba kozmetična.
Tišja tveganja sedijo nižje po toku: ključ, izpisan med razhroščevanjem, izjema, ki serializira celoten objekt rezultata, obravnava sesutja, ki zapiše izpis pomnilnika, združevalnik dnevnikov, ki prejme pot do datoteke in nato vsebino. Izogibanje začasni datoteki ne naredi ničesar za nobeno od njih, in verjeti nasprotno je pot, po kateri dobronamerno prepisovanje pusti skrivnost bolj izpostavljeno kot prej. Spremembo obravnavajte kot eno izboljšavo v zaporedju, ne kot rešitev.
Kaj odjemalec zapiše, ko ni podano ime datoteke
Trenutne različice odjemalca pošljejo ustvarjeni ključ na standardni izhod, ko je ukaz za ključ podan brez izhodne poti. Prav to dokumentirano vedenje naredi pristop v pomnilniku izvedljiv in odpravi potrebo po starejšem triku usmerjanja orodja na pot naprave.
import subprocess
proc = subprocess.run(
["openvpn", "--genkey", "tls-crypt"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True,
)
key_material = proc.stdout
Ukaz podajte kot seznam. Tu ni potrebna razširitev lupine, in omogočanje lupine bi naredilo mejo argumentov odvisno od narekovajev, ki jih ne nadzorujete. Uporabite predvideno izvršljivo datoteko z absolutno potjo, če lahko skripta teče z drugačno iskalno potjo, kot pričakujete.
Preverjanje vračilne kode prepreči, da bi se pot uspeha nadaljevala po neuspešnem klicu. Brez tega lahko prazen bajtni niz teče naprej in odpove šele veliko pozneje, v točki, kjer se ključ uporablja in sporočilo o napaki sploh ne omenja več ustvarjanja.
Dva toka, dva pomena
Standardni izhod nosi ključ. Standardna napaka nosi vse, kar vam orodje želi povedati, vključno z opozorili o konfiguraciji, različici in vrsti ključa. Preusmeritev obeh v en medpomnilnik je napaka, ki ustvari verodostojno videti ključ z vstavljenim stavkom na sredini.
Ločeno imejte tudi pot neuspeha. Ko klic odpove, sporočite ukaz, ki ni uspel, in izhodni status, nato pa zavestno odločite, ali je kateri del standardne napake varen za prikaz. Stresanje celotnega objekta rezultata v dnevnik je običajna bližnjica in lahko odnese ključ s seboj.
Branje, varno za binarne podatke, je pomembno, če pozneje gradivo zgoščujete ali primerjate. Besedilni način z nepričakovano kodiranje lahko spremeni bajte, ki nikoli niso bili mišljeni kot besedilo, in spremenjenega ključa ni mogoče ločiti od napačnega, dokler ne odpove rokovanje.
Če ga vseeno shranite, storite to zavestno
Večina uvedb na koncu potrebuje ključ na disku, na prehodu ali v shrambi skrivnosti. Zapišite ga enkrat, z omejevalnimi dovoljenji od ustvarjanja, ne s poznejšim chmod, in zapis naredite atomski, da delna datoteka nikoli ne postane tista, ki jo storitev prebere ob zagonu. Preimenovanje s poti v isti mapi za to običajno zadostuje. Odstranite pripravljalno pot na veji neuspeha, ker je neuspešen zapis natanko tista kopija, ki jo ljudje pozabijo.
Nastavite način datoteke ob ustvarjanju in tudi način mape držite omejevalen. Izogibajte se vsaki poti pod mestom, ki ga opravilo varnostnega kopiranja pomete brez razmisleka, ker je skrivnost v nočni varnostni kopiji skrivnost v vsaki kopiji te kopije. Enako sklepanje velja za deljeni vsebnik, ki ga lahko berejo druge storitve.
Deljeni ključ ni identiteta
Ustvarjanje tega gradiva ne izda potrdila, ne vpiše odjemalca in ne ugotovi, kdo se povezuje. Deljeni ključ varuje kanal med stranmi, ki si že zaupajo; identiteta še vedno prihaja iz potrdila in iz kakršne koli avtentikacije pred njim.
Tudi vrste ključev niso zamenljive. Simetrični ključ za eno funkcijo ni neposredna zamenjava za drugo, in novejše izdaje dodajo svoje različice z različnimi datotekami na vsakem koncu. Ustvarite vrsto, ki jo vaša konfiguracija res imenuje, nato pa jo uporabite v vlogi, ki jo ta vrsta določa.
Rezultat preizkusite z resnično povezavo, ne z ogledovanjem velikosti datoteke. Če se rokovanje zaključi in dnevniki ne kažejo opozoril o ključu, je pot ustvarjanja prava; če bi bil ključ odrezan zaradi združenega toka, bi povezava spodletela tako, da bi kazala na nasprotno stran, ne na skripto.