Jo hawwe gjin tydlik bestân nedich om in OpenVPN-kaai te meitsjen
Kaaimateriaal yn it ûnthâld hâlde foarkomt in bestânslibbenssyklus, gjin lek. Hâld de útfier- en flaterstream apart, en behannelje de kaai dêrnei as geheim.
Kaaimaktyk hat gjin tydlik bestân nedich, en it oerslaan dêrfan reparearret minder as de measte hantliedings suggerearje. Wat it fuorthellet is in bestânslibbenssyklus en de opromjenreaasje dêromhinne. Wat it ûnoantaast lit is elke kâns om it geheim dêrnei te lekken. It korrektheitsprobleem yn dizze skripts sit meastentiids earne oars, om't diagnostyk en kaaimateriaal op ferskate streamen reizgje.
It bestân wie nea de bleatstelling dy't jo tochten
In tydlik bestân is in konkreet risiko as it foar elkenien lêsber is, as it in crash oerlibbet, of as in opromjestap nei in útsûndering oerslein wurdt. Dy binne echt, en it is de muoite wurdich se te reparearjen. Se binne ek lokaal, sichtber en maklik te testen. Neam elk ien yn jo eigen skript foardat jo konkludearje dat de feroaring kosmetysk wie.
De stiller risiko's sitte streamôf: de kaai dy't by debugging ôfdrukt wurdt, de útsûndering dy't it hiele resultaatobjekt serialisearret, de crash-handler dy't in kearndump skriuwt, de logaggregator dy't it bestânspaad en dêrnei de ynhâld krijt. In tydlik bestân foarkomme docht neat foar ien fan dy, en it oars leauwe is hoe't in goedbedoelde werskriuwing it geheim bleatsteller efterlit as earder. Behannelje de feroaring as ien ferbettering yn in rige, net as de oplossing.
Wat de klant skriuwt as gjin bestânsnamme jûn wurdt
Aktuele ferzjes fan de klant stjoere de oanmakke kaai nei standertútfier as it kaai-kommando sûnder útfierpaad jûn wurdt. Krekt dat dokumintearre gedrach makket de oanpak yn it ûnthâld libbensfetber, en it hellet de needsaak fuort foar de âldere trúk om it helpmiddel nei in apparaatpaad te rjochtsjen.
import subprocess
proc = subprocess.run(
["openvpn", "--genkey", "tls-crypt"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True,
)
key_material = proc.stdout
Jou it kommando as in list. Hjir is gjin shell-útwreiding needsaaklik, en in shell ynskeakelje soe de argumintgrins ôfhinklik meitsje fan oanheltekens dy't jo net kontrolearje. Brûk it bedoelde útfierbere bestân op in absolút paad as it skript mei in oar sykpaad rinne kin as jo ferwachtsje.
De weromkoade-kontrôle hâldt it súksespaad tsjin om troch te gean nei in mislearre oprop. Sûnder dy kin in leech bytestring fierder streame en pas folle letter mislearje, op it punt dêr't de kaai brûkt wurdt en de flatermelding hielendal gjin oanmeitsjen mear neamt.
Twa streamen, twa betsjuttingen
Standertútfier draacht de kaai. Standertflater draacht alles wat it helpmiddel jo sizze wol, ynklusyf warskôgings oer de konfiguraasje, de ferzje en it kaai-type. Beide nei ien buffer omliede is de flater dy't in leauweardich útsjende kaai produsearret mei in sin yn 'e midden ynnaaid.
Hâld ek it flaterpaad apart. As de oprop mislearret, meld dan it kommando dat mislearre en de útgeansstatus, en beslút dan bewust oft eat fan 'e standertflater feilich is om te sjen litten. It folsleine resultaatobjekt yn in log dumpe is de gebrûklike shortcut, en it kin de kaai mei drage.
Binaire feilich lêzen is wichtich as jo it materiaal letter hashje of ferlykje. Tekstmodus mei in ûnferwachte kodearring kin bytes feroarje dy't nea as tekst bedoeld wiene, en in feroare kaai is net te ûnderskieden fan in ferkearde oant in handshake mislearret.
As jo it dochs bewarje, doch it dan bewust
De measte ymplemintaasjes hawwe úteinlik de kaai op skiif nedich, op 'e gateway of yn in geheime opslach. Skriuw it ien kear, mei beheinende rjochten fan 'e oanmeitsjen ôf ynstee fan in lettere chmod, en meitsje it skriuwen atomêre sadat in partiel bestân nea dat wurde sil dat in tsjinst by it starten lêst. In omneamen fan in paad yn deselde map is dêrfoar meastentiids genôch. Ferwiderje it stagingpaad op 'e flatertûke, want it mislearre skriuwen is krekt de kopy dy't minsken ferjitte.
Set de bestânsmodus as it bestân oanmakke wurdt, en hâld ek de mapmodus beheinend. Foarkom elk paad ûnder in lokaasje dy't in backup-taak sûnder tinken opfaget, want in geheim yn in nachtlike backup is in geheim yn elke kopy fan dy backup. Deselde redenearring jildt foar in dield volume dat oare tsjinsten lêze kinne.
In dielde kaai is gjin identiteit
It oanmeitsjen fan dit materiaal jout gjin sertifikaat út, skriuwt gjin klant yn en stelt net fêst wa't ferbynt. De dielde kaai beskermet in kanaal tusken partijen dy't elkoar al fertrouwe; identiteit komt noch altyd fan it sertifikaat en fan hokker ferifikaasje dan ek dy't derfoar sit.
Ek de kaai-typen binne net útwikselber. In symmetryske kaai foar ien funksje is gjin direkt ferfanging foar in oare, en nijere ferzjes foegje har eigen farianten ta mei ferskate bestannen oan elk ein. Meitsje it type oan dat jo konfiguraasje wier neamt, en brûk it dan yn 'e rol dy't dat type definiearret.
Test it resultaat mei in echte ferbining ynstee fan troch de bestânsgrutte te besjen. As de handshake foltôget en de logs gjin kaaiwarskôgings toane, is it oanmaakpaad goed; as de kaai troch in gearfoege stream ôfkoarte wie, soe de ferbining mislearje op in wize dy't nei de tsjinpartij wiist ynstee fan it skript.