Mac VPN-ը գործարկման պահին. launchd-ը վերահսկում է առաջադրանքը, ոչ թե թունելը
Մաքուր plist-ը ոչինչ չի ապացուցում հավատարմագրերի կամ պատրաստվածության մասին: Համապատասխանեցրեք առաջադրանքը իր սեսիային, պահեք հաճախորդին առաջին պլանում և փորձարկեք այդ համատեքստում:
Առաջադրանքը գործարկվում է մուտքի պահին, մատյանը ցույց է տալիս հաճախորդի մեկնարկը, իսկ թունելը երբեք չի բարձրանում: Կամ բարձրանում է և անհետանում մի քանի վայրկյան անց: Երկու դեպքում էլ հատկությունների ցանկը հավանաբար կարգին էր: 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-ով աշխատող դեմոնը սովորաբար չի կարող կարդալ մուտքի բանալիների շարքի տարրը, և դա այն մանրուքն է, որը երևում է միայն համակարգային համատեքստում:
Սահմանեք, թե ինչ է նշանակում պատրաստ լինելը, ապա փորձարկեք այն այնտեղ
Հաջող մեկնարկը ապացուցում է, որ գործընթացը սկսվել է: Այն չի ապացուցում, որ ցանցը բարձրացած է, դարպասը ընդունել է ինքնությունը, կամ մասնավոր հավելվածը հասանելի է: Եթե այլ բան կախված է թունելից, նրան պետք է պատրաստվածության ազդանշան, որն արտացոլում է կապը, ոչ թե առաջադրանքի մեկնարկի ժամը:
Կրկնափորձերը պետք է սահմանափակ լինեն և տարբերեն բացակայող ցանցը մերժված հավատարմագրից: Ամեն ձախողման դեպքում վերսկսելը չի կարող վերանորոգել ժամկետանց վկայագիրը և ստեղծում է նույնական փորձերով լի մատյան, որը թաքցնում է իրականը:
Ընդունեք առաջադրանքը այն համատեքստում, որտեղ այն իրոք կգործի. ցանց չկա գործարկման պահին, նորմալ մուտք, արթնացում քնից և վերահսկվող կանգ: Այնուհետև գրանցեք միասին առաջադրանքի պիտակը, հաճախորդի տարբերակը և պրոֆիլի վերանայումը, որպեսզի հաջորդ մարդը ժառանգի վերագրելի ծառայություն՝ փոխարենը մի ժամանակ աշխատած ֆայլի: