Заданне запускаецца пры ўваходзе, журнал паказвае запуск кліента, а тунель так і не ўзнімаецца. Або ўзнімаецца і знікае праз некалькі секунд. У абодвух выпадках спіс уласцівасцяў, хутчэй за ўсё, быў у парадку. launchd даў два абяцанні, калі прыняў заданне: ён будзе кіраваць працэсам, і гэты працэс будзе працягваць працаваць. VPN патрэбныя абодва, а правільны XML-файл не дае ні аднаго.

Сапраўдны спіс уласцівасцяў не азначае працуючую службу

plutil -lint правярае структуру. Ён не можа сказаць, ці існуе бінарны файл, ці падтрымліваюцца аргументы гэтай версіяй кліента, ці запускаецца заданне ў кантэксце, дзе даступныя ўліковыя даныя. Гэта семантычныя пытанні, і яны тлумачаць большасць збояў, якія выглядаюць як праблемы launchd.

plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn

Чытайце вывад другой каманды, а не мяркуйце, што заданне загружана. Ён паведамляе апошні статус выхаду і ці працуе служба, што адрознівае “ніколі не запускалася” ад “запусцілася і памерла” перш чым вы дакранецеся да профілю.

Агенты атрымліваюць сесію карыстальніка, дэманы не

Дакументацыя Apple пра launchd аддзяляе агентаў кожнага карыстальніка ад сістэмных дэманаў. Агент працуе ў кантэксце ўвайшоўшага карыстальніка, з яго звязкай ключоў і асяроддзем. Дэман працуе без гэтай сесіі, і перанос задання ў сістэмны каталог не аднаўляе інтэрактыўныя ўліковыя даныя карыстальніка.

Гэтае адрозненне вызначае дызайн. Калі злучэнне патрабуе, каб чалавек увайшоў або пацвердзіў запыт MFA, падтрыманая схема — заданне ў сесіі карыстальніка, якое запускаецца пасля ўваходу. Калі яно павінна працаваць без нікога, хто ўвайшоў, кліенту патрэбна зацверджаная аўтаномная ідэнтычнасць з уласным працэсам абнаўлення і адклікання. Выбар няправільнага радка дае заданне, якое чыста стартуе і зрываецца на першым кроку аўтэнтыфікацыі.

Не замазвайце розніцу паролем у масіве аргументаў або адключэннем праверкі сертыфікатаў. І тое, і другое робіць патрабаванне аўтэнтыфікацыі пастаянным сакрэтам у чытэльным файле, а другое азначае, што тунель аўтэнтыфікуе ўсё, што адказвае.

Кіраванне працуе, толькі калі працэс застаецца наперадзе

Кліент, які сам ператвараецца ў дэман, адразу вяртае кіраванне launchd, і назіральнік потым сочыць за працэсам, які ўжо выйшаў. Тунель можа быць узняты, але launchd лічыць, што заданне зламалася, і яго палітыка перазапуску зробіць тое, чаго вы не мелі на ўвазе.

Выкарыстоўвайце дакументаваны рэжым пярэдняга плана або службы, які падтрымлівае кліент. Калі ў прадукту ёсць уласная падтрыманая функцыя запуску, яна ўжо ведае, як заставацца на пярэднім плане і як перадаваць кіраванне сеткаваму стэку; уласнае заданне — гэта асобны дызайн, а не яго паляпшэнне.

Дайце заданню ўнікальную метку, патрэбны выканальны файл і прадуманы масіў аргументаў. Масіў — гэта не камандны радок shell, таму канвееры і перанакіраванні там не працуюць, а лапкі паводзяць сябе інакш. Каманда, якая паспяхова выконваецца ў тэрмінале адміністратара, у лепшым выпадку — папярэдняя праверка.

Уліковыя даныя павінны працаваць без запыту

Аўтаномная праца пераносіць праблему ўліковых даных, а не выдаляе яе. Нехта павінен валодаць ідэнтычнасцю, вырашыць, колькі яна жыве, і задакументаваць, як яна замяняецца. Сертыфікат без кантролю тэрміну дзеяння ператвараецца ў збой з датай у календары.

Трымайце сакрэты па-за аргументамі і па-за стандартным вывадам задання. Калі кліент падтрымлівае чытанне ўліковых даных з абароненага сховішча, выкарыстоўвайце гэты шлях і праверце, што кантэкст выканання задання можа дабрацца да сховішча. Дэман, які працуе як root, звычайна не можа прачытаць элемент звязкі ключоў уваходу, і гэта якраз тая дэталь, якая ўсплывае толькі ў сістэмным кантэксце.

Вызначце, што значыць гатоўнасць, і праверце яе там

Паспяховы запуск даказвае, што працэс пачаўся. Ён не даказвае, што сетка працуе, што шлюз прыняў ідэнтычнасць або што прыватная праграма дасягальная. Калі нешта іншае залежыць ад тунеля, яму патрэбны сігнал гатоўнасці, які адлюстроўвае злучэнне, а не час запуску задання.

Паўторы павінны быць абмежаваныя і адрозніваць адсутную сетку ад адхіленых уліковых даных. Перазапуск пры кожнай няўдачы не можа адрамантаваць пратэрмінаваны сертыфікат і стварае журнал, поўны аднолькавых спроб, якія хаваюць сапраўдную.

Прымайце заданне ў тым кантэксце, у якім яно будзе працаваць: без сеткі пры загрузцы, пры звычайным уваходзе, пры абуджэнні ад сну і пры кіраваным спыненні. Затым запішыце метку задання, версію кліента і рэвізію профілю разам, каб наступны чалавек атрымаў у спадчыну асобу, якую можна аднесці да пэўнага стану, а не файл, які некалі працаваў.

Падобныя артыкулы