OpenConnect csd-wrapper: проверете скрипта преди влизането
Отнасяйте се към --csd-wrapper като към граница за изпълнение на код: проверете скрипта, изберете отделен csd потребител и потвърдете какво всъщност вижда шлюзът.
Добавянето на --csd-wrapper към профил предава локален скрипт на демон, който го изпълнява при влизане, така че решението пред вас е преглед на код, а не превключвател на предпочитание. Опцията съществува, за да може компонентът за проверка на хоста на шлюза да бъде заменен, и приема път до скрипт, който вие предоставяте. Всичко по-долу предполага, че собственикът на внедряването вече е казал коя проверка на състоянието се изисква; ако тази част е още отворена, решете я първо. Инструкцията има четири стъпки: намерете неуспешния етап, прочетете скрипта, изберете идентичността, под която работи, и докажете резултата.
Стъпка 1: Намерете етапа, който се провали
Последното съобщение на клиента обикновено е за бисквитка, което е краят на верига, а не началото ѝ. HTTPS вход, проверка на сертификата на сървъра, обмен на удостоверяване и компонент за състояние стоят всички пред това съобщение.
Запишете версията и адреса за вход, които се използват, след което повторете опита с подробен изход, запазен на вашия терминал. Прочетете първата грешка, която не е повторение, а не последния ред от записа. Ако журналът спре преди да е посочен който и да е компонент за оценка, обвивката още не е вашият проблем. Добавянето ѝ в този момент само разширява повърхността, която трябва да защитавате по-късно.
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullПазете записа локално, защото бисквитките и отговорите за удостоверяване са материал за достъп. Следа, поставена в чат, е изтичане на идентификационни данни, дори когато стъпката за оценка изглежда безобидна. Споделяйте текста на грешката и точката в потока, където се е появила, но никога полезния товар.
Стъпка 2: Прочетете скрипта, преди да влезе в профил
Обвивката е толкова надеждна, колкото ревизията, която сте прегледали, затова фиксирайте тази ревизия и запазете хеша ѝ до бележката за одобрение. Двете команди по-долу ви дават отпечатък и евтина проверка на синтаксиса, преди да прочетете дори един ред. Те дават и на следващия човек фиксирана референция, което има значение, когато файлът живее извън управлението на пакети. Нито една от командите не казва какво прави скриптът, затова ги изпълнете и продължете да четете.
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shПрочетете целия файл с четири въпроса в ума: прави ли изходящи HTTP заявки, чете ли файлове с идентификационни данни или променливи на средата, пише ли извън временна директория и отчита ли някой клон успешно състояние, без да измерва нищо. Последният модел е заобикаляне на политиката с прикачен ред в журнала. Копираните обвивки обикновено го промъкват зад правдоподобна проверка. Ако скриптът реши, че устройството е наред, преди да погледне устройството, спрете там.
Проверете и за пакетирани полезни товари, защото четим заглавен блок не доказва нищо за останалата част от файла. Изтеглянето на скрипт от тема във форум не го прави надежден само защото името му повтаря реален компонент за проверка на хоста. Запишете кой го е инсталирал, откъде идва и как ще се обновява.
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shСтъпка 3: Изберете идентичността, под която работи обвивката
--csd-user понижава привилегиите, докато се изпълнява програмата CSD, TNCC или HIP. Този акаунт е част от локалната схема за изпълнение, а не потребителското име, подадено към шлюза.
Дайте на обвивката отделен акаунт без интерактивна обвивка, без права за sudo и без членства в групи, които не са ѝ нужни. Дайте достъп за четене до скрипта и до конкретните файлове, които той проверява, след което тествайте понижаването, преди да пипнете VPN профила. Намирането на проблема тук е по-евтино от намирането му вътре в клиента.
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shПонижаването на привилегиите ограничава щетата, която лош скрипт може да нанесе. То не преглежда кода, не прави отчета истинен и не установява, че администраторът на шлюза приема тази реализация като съответстваща на политиката за устройства.
Стъпка 4: Пазете промяната обратима
Направете резервно копие на профила преди редактиране и пазете обвивката под контрол на версиите, така че връщането назад да възстанови известен хеш, вместо да търси копие. Запишете пътя до скрипта, хеша, потребителя за изпълнение и одобряващия на едно място.
За да върнете назад, премахнете опцията, рестартирайте клиента и потвърдете, че първоначалната грешка се връща. Ако шлюзът продължава да отхвърля влизането след връщането, значи нещо друго също се е променило, а намирането на тази разлика идва преди повторния опит с обвивката. Пазете предишното копие за целия период на промяната, което за повечето екипи означава до преминаването на следващия прозорец за поддръжка.
След успешно внедряване проверете две неща, а не едно: тунелът се вдига и устройство, което трябва да се провали на проверката за състояние, все още се отказва. Връзка, която работи за всички, не е доказателство, че оценката е преживяла промяната ви.
Преки пътища, които създават втори проблем
Не карайте помощника да отчита съответстващо състояние, без да изпълни изискваните проверки, и не подменяйте идентичността на платформата, за да съвпадне с друга операционна система. Твърдението за друга платформа не е доказателство, че реалното устройство отговаря на политиката. Това ви оставя с клиент, който лъже при всяко бъдещо влизане.
Изключването на проверката на сървъра, повторното пускане на остаряла бисквитка и натрупването на непрегледани скриптове — всичко това заменя видим провал с невидим. Ако инсталираният клиент не може да завърши поддържания поток, поискайте одобрена алтернатива, вместо да огъвате наличната.
Ръководството на OpenConnect описва --csd-wrapper и --csd-user поотделно и това е подсказката, която има значение: скриптът и идентичността са две решения. Прегледайте ги отделно и запишете и двете. Тогава подканата за вход спира да бъде загадка, която решавате чрез поставяне на код.