AnyConnect nutrūksta uždarant terminalą: sesijų patikros
Linux AnyConnect klientas prisimena prisijungimo metu atidarytas sesijas ir nutraukia tunelį, kai viena jų uždaroma. Prieš perrašydami utmp patikrinkite tvarką.
Tunelis veikia, jūs uždarote atsarginį terminalą, ir VPN nukrenta nė karto nepaspaudus klavišo kliente. Linux AnyConnect kliente nurodyta priežastis yra sesijų apskaita, o ne maršrutizavimas: klientas užrašo, kurios prisijungimo sesijos egzistavo tuneliui pakilus, ir bet kurios jų pabaigą laiko priežastimi jį numesti. Toliau pateiktos patikros atliekamos eilės tvarka, o pirmoji nepavykusi parodo, ar apskritai susiduriate su šiuo elgesiu. Įprastoje kliento išvestyje terminalas neminimas, todėl pirmoji intuicija kaltinti koncentratorių dažniausiai yra bergždžias darbas.
Nepradėkite nuo sisteminių failų redagavimo. Kiekvienas žingsnis arba paaiškina nutrūkimą, arba pašalina kandidatą, o pigūs žingsniai eina pirmiausia.
Atskirkite sesijos nutrūkimą nuo pagrindinio ryšio nutrūkimo
Iškart po atsijungimo prisijunkite iš naujo. Tunelis, kuris grįžta per kelias sekundes, tame pačiame tinkle ir be naujų prisijungimo duomenų, rodo vietinį veiksnį, pavyzdžiui, uždarytą sesiją, o ne negyvą uplink, Wi-Fi roaming ar koncentratoriaus neveiklumo skirtąjį laiką. Tunelis, kuris stringa ties Connecting arba nepavyksta, kol nepakeisite tinklo, yra kitas straipsnis.
Užsirašykite, kas buvo atidaryta tuneliui pakilus: terminalas, iš kurio paleidote klientą, bet kokia antroji shell, grafinis prisijungimas ir bet kokia SSH sesija iš kitos mašinos. Šio sąrašo netrukus prireiks, o atkurti jį iš atminties po kito nutrūkimo nepatikima.
Patikrinkite, ką klientas užrašė prisijungimo metu
Klientas netikrina procesų tėvų ar terminalo nuosavybės. Jis užfiksuoja prisijungimo metu buvusių sesijų aibę ir vėliau ją palygina; kai narys išnyksta, palyginimas nepavyksta ir tunelis nukrenta kartu. Štai kodėl uždaryti langą, iš kurio prisijungėte, gali būti nekenksminga, o uždaryti nesusijusį atsarginį terminalą nutraukia ryšį: svarbu, ar ta sesija buvo pradinėje aibėje. Tai aibės palyginimas, o ne skaičiavimas, todėl sesijos pakeitimas gali būti toks pat pražūtingas kaip jos netekimas.
Išvardykite, ką klientas galėjo matyti, prieš ką nors keisdami:
who
w
last -n 10
sudo ls -l /run/utmpKiekviena who eilutė yra naudotojo proceso įrašas utmp faile. Jei jūsų sesija rodoma du kartus, vieną kartą grafiniu prisijungimu ir vieną kartą terminalu, abu įrašai egzistavo prisijungimo metu ir abu yra kandidatai.
Pašalinkite iš utmp tik savo įrašą
Paskelbtas apėjimo būdas padaro sesiją, kurią ketinate naudoti, nematoma utmp faile prieš paleidžiant klientą. Maža C programa eina per getutent(), suranda įrašą, kurio ut_line lygus standartinės įvesties TTY, ir perrašo tą įrašą. Tvarka sąmoninga: setutent(), įrašo nuskaitymas, jo ut_id nukopijavimas, ut_type nustatymas į DEAD_PROCESS, naudotojo ir eilutės laukų išvalymas, perrašymas su pututline() ir galiausiai endutent().
Sukompiliuokite jį, tada paleiskite kaip root iš shell, kuri paleis klientą:
sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.eduDu gedimo būdai paaiškina daugumą pranešimų, kad įrankis nieko nedaro. Jis veikia su TTY, prijungtu prie standartinės įvesties, todėl paleidus jį iš scenarijaus ar cron užduoties be terminalo, jam nelieka ką atitikti. O /run/utmp paprasti naudotojai negali rašyti, todėl paleidimas be root tyliai nepavyksta, nebent patikrinsite išėjimo būseną.
Patikrinkite, ar tunelis atlaiko uždarymą
Išbandykite mechanizmą, o ne darykite prielaidą. Prisijunkite iš sesijos, kurią ketinate išlaikyti, atidarykite antrą terminalą, uždarykite antrąjį, tada patvirtinkite, kad tunelis vis dar veikia, naudodami vpn state ir pažvelgdami į sąsajų sąrašą. Jei tunelis išlieka, veiksnys buvo konkretus sesijos tipas, o ne kiekviena sesija, ir radote sesiją, kuri turi likti atidaryta.
Jei jis vis tiek nukrenta, stebima sesija buvo kitur, dažniausiai grafinis prisijungimas, sukūręs jūsų terminalą, ir vieno TTY įrašo pašalinimas nepadės. Pakartokite stebėjimą su visu pirmo žingsnio sąrašu, o ne atlikite daugiau operacijų.
Kai utmp perrašymas yra netinkamas atsakymas
utmp yra bendra apskaita, o ne privati lentelė. Dar gyvos sesijos įrašo perrašymas lemia, kad who, w ir kai kurie audito įrankiai parodys ją mažiau, o programa, kuri vėliau uždarys tą patį įrašą, gali tiesiog sugesti. Ribokite įrankį savo sesija, laikykite originalaus failo kopiją ir neverskite jo įkrovos paslauga, kuri išbraukia kiekvieną įrašą.
Jei jūsų organizacija renka sesijų apskaitą atitikčiai, šis apėjimas prieštarauja tam reikalavimui, o palaikomas atsakymas yra kliento versija ar kitas prieigos būdas, o ne pataisytas utmp. Daugumai žmonių mažiausiai invazyvus sprendimas yra tiesiog paleisti klientą iš sesijos, kuri liks atidaryta visą dieną, ir neliesti to lango.
Prieš uždarydami bilietą, užrašykite, kurią sesiją klientas stebėjo, kai tunelis pakilo. Ta viena eilutė paslaptingą atsijungimą paverčia atkuriama sąlyga kitam žmogui prie mašinos.