AnyConnect katkeb terminali sulgemisel: sessioonikontrollid
Linuxi AnyConnecti klient jätab meelde ühendamise hetkel avatud sisselogimissessioonid ja katkestab tunneli, kui mõni neist suletakse. Kontrollige järjekorda enne utmp ümberkirjutamist.
Tunnel töötab, te sulgete varuterminali ja VPN kukub ilma ühegi klahvivajutuseta kliendis. Linuxi AnyConnecti kliendis on teatatud põhjus sessioonide arvestus, mitte marsruutimine: klient registreerib, millised sisselogimissessioonid tunnelit üles tõstes olemas olid, ja käsitleb nende mis tahes lõppu põhjusena see maha lammutada. Allpool olevad kontrollid käivad järjekorras ja esimene ebaõnnestuv ütleb, kas vaatlete üldse seda käitumist. Kliendi tavaväljundis ei mainita terminali, mistõttu esimene tung, süüdistada kontsentraatorit, on tavaliselt raisatud vaev.
Ärge alustage süsteemifailide muutmisest. Iga samm kas selgitab kukkumist või kõrvaldab kandidaadi, ja odavad sammud tulevad esimesena.
Eristage sessiooni kukkumine alusvõrgu kukkumisest
Ühenduge uuesti kohe pärast katkestust. Tunnel, mis tuleb tagasi sekundite jooksul, samas võrgus, ilma uute volitusteta, viitab kohalikule päästikule nagu suletud sessioon, mitte surnud ülesvooluühendusele, Wi-Fi-rändlusele või jõudetu ajalõpule kontsentraatoril. Tunnel, mis jääb rippuma Connecting juures või ebaõnnestub, kuni võrku vahetate, on teine artikkel.
Kirjutage üles, mis oli avatud, kui tunnel üles tõsteti: terminal, millest klienti käivitasite, mis tahes teine shell, graafiline sisselogimine ja mis tahes SSH-sessioon teisest masinast. Seda nimekirja läheb kohe vaja, ja selle mälust taastamine pärast järgmist kukkumist on ebausaldusväärne.
Kontrollige, mida klient ühendamise hetkel registreeris
Klient ei uuri protsesside vanemaid ega terminali omandit. Ta teeb hetktõmmise ühendamise hetkel olevatest sisselogimissessioonidest ja võrdleb seda hulka hiljem; kui liige kaob, ebaõnnestub võrdlus ja tunnel läheb koos sellega. Seetõttu võib akna sulgemine, millest ühendusite, olla kahjutu, samas kui kõrvalise varuterminali sulgemine tapab ühenduse: oluline on, kas see sessioon oli algses hulgas. Kontroll on hulkade võrdlemine, mitte loendamine, mistõttu sessiooni asendamine võib olla sama saatuslik kui selle kaotamine.
Loetlege, mida klient nägi, enne kui midagi muudate:
who
w
last -n 10
sudo ls -l /run/utmpIga rida käsust who on kasutajaprotsessi kirje failis utmp. Kui teie sessioon ilmub kaks korda, üks kord graafilise sisselogimise ja üks kord terminali jaoks, siis mõlemad kirjed olid ühendamise hetkel olemas ja mõlemad on kandidaadid.
Eemaldage utmp-st ainult oma kirje
Avaldatud lahendus muudab sessiooni, mida kavatsete kasutada, failis utmp nähtamatuks enne kliendi käivitumist. Väike C-programm käib läbi getutent(), leiab kirje, mille ut_line võrdub standardesisendi TTY-ga, ja kirjutab selle kirje seejärel ümber. Järjekord on tahtlik: setutent(), lugege kirje, kopeerige selle ut_id, seadke ut_type väärtusele DEAD_PROCESS, tühjendage kasutaja ja rea väljad, kirjutage see tagasi funktsiooniga pututline() ja seejärel endutent().
Kompileerige see ja käivitage siis rootina shellist, mis kliendi käivitab:
sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.eduKaks tõrkeviisi seletavad enamikku teateid, et tööriist ei tee midagi. See mõjutab standardesisendiga seotud TTY-d, seega skriptist või cron-tööst ilma terminalita käivitamine ei jäta sellele midagi sobitada. Ja /run/utmp ei ole tavalistele kasutajatele kirjutatav, seega ilma rootita käivitamine ebaõnnestub vaikselt, kui te väljumisolekut ei kontrolli.
Veenduge, et tunnel sulgemise üle elab
Testige mehhanismi, selle asemel et seda eeldada. Ühenduge sessioonist, mille kavatsete hoida, avage teine terminal, sulgege teine ja kinnitage seejärel vpn state abil ja liideste loendile pilku heites, et tunnel on endiselt üleval. Kui tunnel elab üle, oli päästikuks konkreetne sessioonitüüp, mitte iga sessioon, ja olete leidnud sessiooni, mis peab lahti jääma.
Kui see ikka kukub, oli jälgitud sessioon mujal, enamasti graafiline sisselogimine, mis teie terminali tekitas, ja ühe TTY-kirje eemaldamine ei aita. Korrake vaatlust esimese sammu täieliku loendiga, selle asemel et lisada rohkem kirurgiat.
Millal on utmp ümberkirjutamine vale vastus
utmp on jagatud arvestus, mitte privaatne tabel. Elusa sessiooni kirje ümberkirjutamine paneb who, w ja mõned auditeerimisvahendid seda alatähtsustama, ja programm, mis sama kirje hiljem sulgeb, võib täielikult ebaõnnestuda. Hoidke tööriist piiratud oma sessiooniga, hoidke originaalfailist koopiat ja ärge muutke seda alglaadimisteenuseks, mis eemaldab iga kirje.
Kui teie asutus kogub vastavuse huvides sessioonide arvestust, on lahendus selle nõudega vastuolus ja toetatud vastus on teine kliendiversioon või muu juurdepääsumeetod, mitte paigatud utmp. Enamiku inimeste jaoks on kõige vähem sekkuv parandus lihtsalt käivitada klient sessioonist, mis jääb terveks päevaks lahti, ja jätta see aken rahule.
Enne pileti sulgemist kirjutage üles, millist sessiooni klient jälgis, kui tunnel üles tõsteti. Just see üks rida muudab salapärase katkestuse masina juures järgmise inimese jaoks korratavaks tingimuseks.