Туннел иштеп турат, сиз кошумча терминалды жабасыз, кардарда бир да баскыч басылбаса да VPN түшүп калат. Linux AnyConnect кардарында көрсөтүлгөн себеп маршруттоо эмес, сессия эсеби: кардар туннел көтөрүлгөндө кайсы логин сессиялары бар болгонун жазып алат жана алардын кайсынысы болбосун аякташын туннелди түшүрүү себеби деп эсептейт. Төмөнкү текшерүүлөр тартип менен жүрөт, ал эми биринчи ишке ашпаганы ушул жүрүм-турум экенин билдирет. Кардардын кадимки чыгышында терминал жөнүндө эч нерсе айтылбайт, ошондуктан концентраторду күнөөлөө адатта бекер аракет.

Системалык файлдарды оңдоодон баштабаңыз. Ар бир кадам үзүлүүнү түшүндүрөт же бир вариантты алып салат, ал эми арзан кадамдар мурун келет.

Сессия үзүлүүсүн негизги байланыш үзүлүүсүнөн айырмалаңыз

Үзүлгөндөн кийин дароо кайра туташыңыз. Ошол эле тармакта, жаңы эсептик маалыматтарсыз, бир нече секунд ичинде кайтып келген туннел өлгөн аплинктин, Wi-Fi роумингдин же концентратордогу бош туруу тайм-аутунун эмес, жабылган сессия сыяктуу жергиликтүү триггердин белгиси. Connecting боюнча илинип калган же тармакты алмаштырмайынча иштебеген туннел башка макала.

Туннел көтөрүлгөндө эмне ачык турганын жазып коюңуз: кардарды иштеткен терминал, экинчи шелл, графикалык логин жана башка машинадан келген SSH сессиясы. Бул тизме сизге жакында керек болот, ал эми кийинки үзүлүүдөн кийин аны эстен калыбына келтирүү ишенимсиз.

Кардар туташуу учурунда эмнени жазганын текшериңиз

Кардар процесстин ата-энесин же терминал ээлигин текшербейт. Ал туташуу учурунда болгон логин сессияларынын жыйындысын сүрөткө тартып алат да, кийин ошол жыйынды менен салыштырат; бир мүчө жоголсо, салыштыруу ишке ашпай, туннел да кетет. Ошондуктан туташкан терезени жабуу зыянсыз болушу мүмкүн, ал эми байланышсыз кошумча терминалды жабуу туташууну өлтүрөт: маанилүүсү ошол сессия баштапкы жыйындыда болгонбу. Бул сан эмес, жыйындыны салыштыруу, ошондуктан сессияны алмаштыруу да бирөөнү жоготуу сыяктуу өлүмтүк болушу мүмкүн.

Эч нерсени өзгөртүүдөн мурун кардар эмнени көрө алганын тизмелеңиз:

who
w
last -n 10
sudo ls -l /run/utmp

who дан келген ар бир сап utmp ичиндеги колдонуучу процессинин жазуусу. Эгер сессияңыз эки жолу көрүнсө, бир жолу графикалык логин үчүн жана бир жолу терминал үчүн, экөө тең туташуу учурунда болгон жана экөө тең талапкер.

utmp'тен өз жазууңузду гана алып салыңыз

Жарыяланган айла-амал сиз колдонмокчу болгон сессияны кардар башталганга чейин utmp ичинде көрүнбөй турган кылат. Кичинекей C программа getutent() боюнча жүрүп, ut_line стандарттык киргизүүнүн TTY'сине барабар жазууну табат, анан ошол жазууну кайра жазат. Тартип атайын: setutent(), жазууну окуу, анын ut_id көчүрүү, ut_type ти DEAD_PROCESS га коюу, колдонуучу жана сап талааларын тазалоо, pututline() менен кайра жазуу, анан endutent().

Аны компиляциялап, анан кардарды баштай турган шеллден root катары иштетиңиз:

sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.edu

Курал эч нерсе кылбайт деген баяндамалардын көбү эки ишке ашпоо режими менен түшүндүрүлөт. Ал стандарттык киргизүүгө тиркелген TTY'ге таасир этет, ошондуктан терминалы жок скрипттен же cron ишинен иштетсеңиз, дал келе турган эч нерсе калбайт. Жана /run/utmp жөнөкөй колдонуучулар үчүн жазылбайт, ошондуктан root эмес иштетүү чыгуу статусун текшербесеңиз үнсүз ишке ашпайт.

Туннел жабылууга туруштук берерин текшериңиз

Механизмди божомолдобой, сынап көрүңүз. Сактагыңыз келген сессиядан туташыңыз, экинчи терминал ачыңыз, экинчисин жабыңыз, анан vpn state жана интерфейстер тизмеси менен туннел дагы эле бар экенин ырастаңыз. Туннел сакталса, триггер бардык сессия эмес, белгилүү бир сессия түрү болгон жана ачык турушу керек болгон сессияны таптыңыз.

Дагы үзүлсө, көзөмөлдөнгөн сессия башка жерде болгон, көбүнчө терминалыңызды жараткан графикалык логин, жана бир TTY жазуусун алып салуу жардам бербейт. Кошумча операциялардын ордуна биринчи кадамдагы толук тизме менен байкоону кайталаңыз.

utmp'ти кайра жазуу туура эмес жооп болгон учур

utmp бул жалпы эсеп, жеке таблица эмес. Дагы тирүү турган сессиянын жазуусун кайра жазуу who, w жана айрым аудит куралдары аны аз көрсөтүшүнө алып келет, ал эми кийин ошол эле жазууну жапкан программа такыр иштебей калышы мүмкүн. Куралды өз сессияңыз менен чектеңиз, түпнуска файлдын көчүрмөсүн сактаңыз жана аны ар бир жазууну тазалаган жүктөө кызматына айландырбаңыз.

Эгер уюмуңуз талаптарга ылайык сессия эсебин чогултса, бул айла-амал ошол талапка каршы келет жана колдоого алынган жооп кардардын версиясы же башка кирүү ыкмасы, жамаланган utmp эмес. Көпчүлүк үчүн эң аз кийлигишүүчү чечим күн бою ачык тура турган сессиядан кардарды баштоо жана ошол терезени козгобоо.

Тикетти жапканга чейин туннел көтөрүлгөндө кардар кайсы сессияны көзөмөлдөп турганын жазыңыз. Ошол бир сап сырдуу үзүлүүнү машинадагы кийинки адам үчүн кайталануучу шартка айландырат.

Тектеш макалалар