OpenConnect csd-wrapper: kontrolli skripti enne sisselogimist
Käsitle --csd-wrapperit koodi täitmise piirina: kontrolli skripti, vali eraldiseisev csd-kasutaja ja veendu, mida lüüs tegelikult näeb.
--csd-wrapper profiilile lisamine annab kohaliku skripti deemonile, mis käivitab selle sisselogimise ajal, seega on sinu ees otsus koodi ülevaatus, mitte eelistuse lüliti. Valik on olemas selleks, et lüüsi hostikontrolli komponenti saaks asendada, ja see võtab vastu tee sinu antud skriptini. Kõik alljärgnev eeldab, et juurutuse omanik on juba öelnud, milline seisundi kontroll on nõutav; kui see osa on veel lahtine, lahenda see esimesena. Juhendis on neli sammu: leia ebaõnnestunud etapp, loe skripti, vali identiteet, mille all see töötab, ja tõesta tulemus.
Samm 1: Leia etapp, mis ebaõnnestus
Kliendi viimane teade puudutab tavaliselt küpsist, mis on ahela lõpp, mitte algus. HTTPS-sisselogimine, serveri sertifikaadi kontroll, autentimisvahetus ja seisundi komponent seisavad kõik selle teate ees.
Fikseeri kasutatav versioon ja sisselogimisaadress, seejärel korda katset, jättes üksikasjaliku väljundi oma terminali. Loe esimest viga, mis ei ole korduskatse, mitte transkripti viimast rida. Kui logi peatub enne, kui mõni hindamiskomponent on nimetatud, ei ole ümbris veel sinu probleem. Selle lisamine selles punktis ainult laiendab pinda, mida pead hiljem kaitsma.
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullHoia transkripti kohapeal, sest küpsised ja autentimisvastused on juurdepääsumaterjal. Vestlusse kleebitud jälg on mandaadi leke ka siis, kui hindamissamm tundub kahjutu. Jaga veateadet ja kohta voos, kus see ilmus, mitte kunagi kasulikku koormust.
Samm 2: Loe skripti enne, kui see profiili jõuab
Ümbris on täpselt nii usaldusväärne kui ülevaadatud redaktsioon, seega kinnita see redaktsioon ja hoia selle räsi kinnitusmärkme kõrval. Kaks allolevat käsku annavad sulle sõrmejälje ja odava süntaksikontrolli enne, kui loed ühtki rida. Need annavad ka järgmisele inimesele fikseeritud viite, mis loeb siis, kui fail elab väljaspool paketihaldust. Kumbki käsk ei ütle, mida skript teeb, seega käivita need ja jätka lugemist.
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shLoe kogu faili nelja küsimusega mõttes: kas see teeb väljuvaid HTTP-kõnesid, kas loeb mandaadifaile või keskkonnamuutujaid, kas kirjutab väljapoole ajutist kataloogi ja kas mõni haru teatab läbitud seisundist ilma midagi mõõtmata. Viimane muster on poliitika möödasõit, millele on lisatud logirida. Kopeeritud ümbrised sokutavad selle tavaliselt usutavana näiva kontrolli taha. Kui skript otsustab, et seade on korras, enne kui ta seadet vaatab, peatu seal.
Kontrolli ka pakitud koormusi, sest loetav päis ei tõesta midagi faili ülejäänu kohta. Skripti foorumiteemast allalaadimine ei muuda seda usaldusväärseks ainult seetõttu, et selle nimi kajab tõelist hostikontrolli komponenti. Pane kirja, kes selle paigaldas, kust see tuli ja kuidas seda uuendatakse.
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shSamm 3: Vali identiteet, mille all ümbris töötab
--csd-user langetab privileege, kui CSD, TNCC või HIP programm käivitub. See konto on osa kohalikust täitmiskorraldusest, mitte lüüsile esitatav kasutajanimi.
Anna ümbrisele eraldiseisev konto, millel pole interaktiivset shelli, sudo-õigusi ega grupiliikmeid, mida see ei vaja. Anna lugemisõigus skriptile ja konkreetsetele failidele, mida see kontrollib, seejärel testi õiguste langetamist enne, kui VPN-profiili puudutad. Probleemi leidmine siin on odavam kui selle leidmine kliendi sees.
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shPrivileegide langetamine piirab kahju, mida halb skript teha võib. See ei vaata koodi üle, ei muuda aruannet tõeseks ega tuvasta, et lüüsi administraator aktsepteerib seda lahendust seadme poliitika täitmisena.
Samm 4: Hoia muudatus tagasipööratav
Tee profiilist varukoopia enne selle muutmist ja hoia ümbrist versioonihalduses, et tagasipööramine taastaks teadaoleva räsi, mitte ei otsiks koopiat. Kirjuta skripti tee, räsi, täitmiskasutaja ja kinnitaja ühte kohta.
Tagasipööramiseks eemalda valik, taaskäivita klient ja kinnita, et algne viga naaseb. Kui lüüs keeldub pärast tagasipööramist endiselt sisselogimisest, on midagi muud ka muutunud, ja selle erinevuse leidmine käib enne ümbrise uut katset. Hoia eelmist koopiat kogu muudatusakna vältel, mis enamiku meeskondade jaoks tähendab kuni järgmise hooldusakna möödumiseni.
Pärast edukat juurutust kontrolli kahte asja, mitte ühte: tunnel tõuseb ja seade, mis peaks seisundikontrollis läbi kukkuma, lükatakse endiselt tagasi. Ühendus, mis töötab kõigile, ei ole tõestus, et hindamine sinu muudatuse üle elas.
Lühiteed, mis loovad teise probleemi
Ära lase abilisel teatada vastavast olekust ilma nõutud kontrolle käivitamata ja ära kirjuta platvormi identiteeti üle, et see teise operatsioonisüsteemiga sobiks. Teise platvormi väitmine ei ole tõestus, et tegelik seade poliitikat täidab. See jätab sind kliendiga, mis valetab igal tulevasel sisselogimisel.
Serveri kontrolli väljalülitamine, vana küpsise kordusesitamine ja ülevaatamata skriptide kuhjamine vahetavad kõik nähtava nurjumise nähtamatu vastu. Kui paigaldatud klient ei suuda toetatud voogu lõpetada, küsi kinnitatud alternatiivi, selle asemel et olemasolevat painutada.
OpenConnecti juhend kirjeldab --csd-wrapper ja --csd-user eraldi, ja see on vihje, mis loeb: skript ja identiteet on kaks otsust. Vaata need eraldi üle ja kirjuta mõlemad üles. Siis lakkab sisselogimisküsimus olemast mõistatus, mille lahendad koodi kleepimisega.