OpenVPN lees jou wagwoord op die terminaal, nie op stdin nie
Waar OpenVPN werklik 'n wagwoord lees, waarom 'n lêer op stdin misluk, en die drie ondersteunde ingange vir geskripte aanmelding op Linux en macOS.
OpenVPN vra om 'n gebruikersnaam en wagwoord op die beherende terminaal, en 'n lêer wat na standaardinvoer herlei word, is nie daardie terminaal nie. Daardie een besonderheid verduidelik die skrip wat hang terwyl die wagwoord reg daar in die pyp sit. Die opdrag word deur die kliënt geteken en die lees kom van die terminaalapparaat, so die herleiding van stdin verander niks. Voer die kliënt deur een van sy gedokumenteerde invoeringange en dieselfde skrip verbind met die eerste poging.
Drie ingange dek byna elke geval, en elkeen faal op sy eie manier. Kies volgens die opdrag wat die kliënt werklik wys, nie volgens watter opsie die maklikste is om te skrip nie.
Die opdrag kom nie van stdin nie
Wanneer OpenVPN geloofsbriewe nodig het, maak dit die beherende terminaal oop en lees daar. Dit is waarom 'n interaktiewe toets goed lyk en dieselfde opdrag onder cron of 'n unit-lêer ledig sit met die opdrag in 'n log geskryf wat niemand dophou nie. 'n Paar weergawes val terug op standaardinvoer wanneer daar geen terminaal is nie, en daardie teenstrydigheid is erger as 'n harde mislukking, want dit verberg die probleem tot ontplooiing.
Kontroleer die omgewing voordat jy enige kode skryf: laat die kliënt loop onder dieselfde gebruiker, met dieselfde stdin, as wat die skeduleerder of diensbestuurder sal doen. As die opdrag nooit in die log verskyn nie en die proses vorder nie, wag iets op 'n terminaal wat nie bestaan nie.
Ingang een: 'n geloofsbrieflêer van twee reëls
Die verifikasie-opsie neem 'n pad, en die lêer bevat presies twee reëls, gebruikersnaam dan wagwoord, met niks anders daarin nie. Gee die pad eksplisiet eerder as om op 'n versteklêernaam te vertrou, want 'n rondloper-geloofsbrieflêer in die werkmap is hoe die verkeerde rekening in gebruik beland. Stel die modus op 0600 en gee eienaarskap aan die rekening wat die kliënt laat loop.
Die kliënt lees daardie lêer een keer by die opstart, so om die wagwoord te roteer beteken om die proses te herbegin. Dit is gewoonlik die gedrag wat jy wil hê, en dit hoort in die runbook langs die rotasieprosedure.
Ingang twee: askpass vir die sleutelfrase
'n Frasebeskermde privaatsleutel veroorsaak 'n tweede, ander opdrag, en dit het sy eie lêergebaseerde antwoord: die askpass-opsie lees die frase uit die eerste reël van 'n lêer. Vir SSH-gebaseerde tonnels is die ekwivalent 'n askpass-program wat die kliënt uitvoer, en waarvan standaarduitset die geheim word.
Geen van die twee vorme plaas die geheim in die argumentlys nie, en albei laat dit bestaan as 'n lêer of as 'n uitvoerbare program wat dit druk. Die beskerming is lêertoestemmings en proses-eienaarskap, nie verdoeseling nie. 'n Helper wat 'n hardgekodeerde string eggo, is 'n geheim met ekstra stappe.
Ingang drie: die portaal-kliënt se eie CLI
Ondernemingskliënte lewer gewoonlik 'n opdragreël-intreepunt wat aan 'n benoemde portaal koppel sonder dat 'n venster betrokke is, en dit is die ondersteunde pad. Op Linux stel die GlobalProtect-kliënt koppel- en sertifikaatinvoer-operasies deur sy CLI beskikbaar, en portale wat sertifikaatverifikasie gebruik, het die invoerstap nodig voordat 'n geoutomatiseerde koppeling kan werk. Verkies dit bo gesintetiseerde toetsaanslae: jy kry 'n werklike uitgangstatus, geen afhanklikheid van vensterfokus nie, en dit oorleef 'n gesperde skerm.
As die eerste koppeling nog 'n mens nodig het om 'n sertifikaat te aanvaar, is die outomatisering nie klaar nie. Doen die invoer tydens die opstelling en teken dit as 'n voorvereiste aan.
Wanneer die vloei 'n pseudo-terminaal nodig het
'n Reeks wat om 'n wagwoord en dan om 'n eenmalige kode vra, het geen enkele lêer om te lees nie. 'n Terminaaldrywer soos Expect is die regte gereedskap, want dit wag op elke patroon op sy beurt, en dit het die proses begin nodig voordat dit hoegenaamd iets kan pas.
Twee mislukkings oorheers. 'n Skrip wat op 'n opdrag wag sonder om die kliënt te begin, wag vir ewig, en Tcl is nie 'n skil nie, so skil-rekenkunde wat binne 'n expect-blok geskryf word, evalueer nie soos dit lees nie. Hou die ontfoutvlag aan terwyl jy die patrone bou, en skakel dit dan af.
Geheime wat lek, en waar hulle skuil
Enigiets wat as argument deurgegee word, is in die proseslys sigbaar, so geloofsbriewe hoort in 'n lêer of agter 'n helper, nooit op die opdragreël nie. Eenmalige kodes word ontwerpmatig verbruik en moet vir elke poging geproduseer word. Mislukkingslogboeke dra dikwels die gebruikersnaam en soms meer, so redigeer voordat jy dit enige plek heen stuur, en hou die geheim uit die profiel self, want 'n konfigurasielêer met 'n ingebedde wagwoord word in kaartjies en bewaarplekke geplak. Om die rekening dan te roteer beteken om elke kopie te jag, wat presies die koste is wat hierdie uitleg vermy.
Oudit die ingange wat jy gekies het, en koppel hulle dan aan die unit-lêer of skeduleerder wat die kliënt werklik sal laat loop. Die tonnel leef presies so lank as daardie proses.