Skript li jibda klijent VPN ta' fornitur jibqa' mdendel sakemm jiskadi l-ħin, u l-log juri li l-klijent qed jitlob kodiċi ta' verifika li ħadd ma daħħal. Il-password kienet fornuta, allura l-konklużjoni ovvja hija li l-password hija ħażina. Mhijiex. It-talba għall-kodiċi hija konverżazzjoni separata fuq kanal separat, u l-iskript tiegħek qatt ma fetħitha.

Agħmel il-ħames verifiki hawn taħt fl-ordni. Waqqaf fl-ewwel waħda li tfalli, għax kull pass ta' wara jassumi li dawk ta' qabel jgħoddu.

Verifika 1: il-klijent jaqra l-input standard xejn?

Ittestja qabel ma tikteb xi awtomatizzazzjoni: għaddi sigriet falz fil-klijent permezz ta' pajp u ara x'jiġri. Jekk jistampa t-talba tiegħu u mbagħad jistenna, mhuwiex jaqra l-pajp.

Ħafna klijenti jiftħu l-apparat tat-terminal direttament, jew jirrifjutaw li jieħdu sigriet minn fluss li mhuwiex terminal, sabiex pajp mitluf ma jistax inixxi password. OpenVPN hija l-eċċezzjoni dokumentata, għax --auth-user-pass jieħu mogħdija ta' fajl. Il-klijenti tal-fornituri li jitolbu kodiċi ta' darba normalment m'għandhomx għażla ekwivalenti, u t-talba tagħhom qed tistenna terminal li l-iskript tiegħek qatt ma pprovda.

Verifika 2: il-proċess iben għandu terminal?

pty jalloka terminal lit-tifel, li jibdel it-talbiet f'output li jista' jinqara u li tista' twieġeb fl-ordni.

import pexpect

child = pexpect.spawn("openconnect vpn.example.net", encoding="utf-8", timeout=30)
child.expect("GROUP:")
child.sendline("staff")
child.expect("USERNAME:")
child.sendline("alice")
child.expect("PASSWORD:")
child.sendline(PASSWORD)
child.expect("Connected as", timeout=60)

Il-kordi tat-talbiet hawn fuq huma illustrattivi; ikkopja t-test eżatt li jistampa l-klijent tiegħek, inkluż il-kbar u ż-żgħar u l-punteġġjatura. Kull aspettattiva ġġorr limitu ta' żmien, u tifel magħluq iqajjem eċċezzjoni minflok ma jirritorna status, allura dawwar is-sekwenza u ttratta t-tmiem tal-fajl bħala falliment. Innota x'ma jagħmilx dan il-blokk: it-tifel imut mal-iskript, għax pty mhuwiex mekkaniżmu ta' srar, u disown hija kmand inkorporat tal-qoxra li ma jistax jilħaq proċess li l-iskript tiegħek ħoloq.

Verifika 3: hemm input mhux interattiv appoġġjat?

L-iskrejping tal-iskrin jinkisser fl-aġġornamenti tal-klijent, allura fittex l-ewwel għażla dokumentata.

Iċċekkja l-output tal-għajnuna għal għażla ta' token jew kodiċi ta' darba, u ċċekkja jekk is-servizz jaċċettax il-kodiċi miżjud mal-qasam tal-password. Fejn il-klijent jaqra fajl ta' kredenzjali, agħtih il-fajl minflok talba:

openvpn --config office.ovpn --auth-user-pass <(printf "%s\n%s\n" "$USER_NAME" "$PASSWORD")

Is-sostituzzjoni tal-proċessi tagħti lill-klijent mogħdija li tinqara fuq sistemi li jipprovdu /dev/fd. Is-sigriet jibqa' sigriet mill-perspettiva tal-klijent, allura żommu 'l bogħod mill-logs, mill-istorja tal-qoxra u mill-listi tal-proċessi. Jekk il-klijent jirrifjuta /dev/fd jew jiftaħ il-mogħdija tal-kredenzjali aktar minn darba, ikteb fajl veru b'permessi stretti u ħassru fl-istess skript.

Verifika 4: it-tunnel se jgħix aktar mill-iskript?

Bħala default it-tunnel imut mal-ġenitur tiegħu, li huwa l-oppost ta' dak li jeħtieġ skript tal-bidu.

disown -h tgħin biss meta tniedi l-klijent bħala xogħol tal-qoxra, għax teditja t-tabella tax-xogħlijiet ta' dik il-qoxra u ma tistax tilħaq proċess li l-iskript tiegħek nieda permezz ta' pty. Maniġer tas-servizzi huwa dar aħjar għal kull ħaġa li trid terġa' tikkonnettja mingħajr sorveljanza, għax jerġa' jibda l-klijent u jirreġistra għaliex miet. Fi kwalunkwe każ, stenna kodiċi ġdid wara kull konnessjoni mill-ġdid: token ta' darba jiġi kkunsmat mill-ewwel awtentikazzjoni li tirnexxi.

Innota x'jagħmel sudo mas-sekwenza. It-talba tal-password ta' sudo mhijiex it-talba tal-VPN, u li twieġebha bil-password tal-VPN huwa l-aktar mod komuni li bih ordni ta' aspettattivi korretta xorta tfalli.

Verifika 5: il-kodiċi ta' persuna għandu jkun fi skript?

Din hija l-verifika li n-nies jaqbżu. Token jappartjeni lil persuna, filwaqt li tunnel li jrid jinżel skont skeda jappartjeni lill-magna.

Jekk xogħol irid jerġa' jikkonnettja mingħajr sorveljanza, staqsi jekk ċertifikat tal-magna jew kont tas-servizz jistax jieħu post id-dħul interattiv. L-awtomatizzazzjoni tal-kodiċi ta' darba ta' xi ħadd tibdel it-tieni fattur f'sigriet maħżun, li hija bidla fil-politika u mhux kumdità tal-iskripts. Fejn is-servizz jappoġġja t-tnejn, agħżel il-kredenzjali li taqbel ma' kif ix-xogħol fil-fatt jaħdem. Ikteb it-tweġiba, għax il-persuna li jmiss se tistaqsi għaliex l-iskript iżomm token.

Kif jidher skript li jaħdem

L-iskript jistampa l-pass li wasal għalih, qatt is-sigriet, u joħroġ b'kodiċi mhux żero fuq kull aspettattiva li tfalli.

Ittestjah billi tkissru apposta: password ħażina, grupp ħażin, token skadut. Kull falliment għandu jieqaf f'pass imsemmi minflok jibqa' mdendel. Imbagħad erġa' ħaddmu darba kontra s-servizz veru u iċċekkja t-tunnel minn barra l-iskript, mhux minn ġewwa.

Artikli relatati