VPN مک هنگام بوت: launchd بر کار نظارت میکند، نه بر تونل
یک plist تمیز هیچ چیز را درباره اعتبارنامهها یا آمادگی اثبات نمیکند. کار را با نشستش هماهنگ کنید، کلاینت را در پیشزمینه نگه دارید و در همان بافت آزمایش کنید.
کار هنگام ورود اجرا میشود، گزارش نشان میدهد کلاینت شروع میشود، و تونل هرگز بالا نمیآید. یا بالا میآید و چند ثانیه بعد ناپدید میشود. در هر دو حالت فهرست ویژگیها احتمالاً سالم بود. launchd وقتی کار را پذیرفت دو وعده داد: بر یک فرایند نظارت خواهد کرد، و آن فرایند به کار خود ادامه خواهد داد. VPN به هر دو نیاز دارد، و یک فایل XML درست هیچکدام را فراهم نمیکند.
فهرست ویژگیهای معتبر یک سرویس فعال نیست
plutil -lint ساختار را بررسی میکند. نمیتواند بگوید فایل دودویی وجود دارد یا نه، آیا آرگومانها با این نسخه کلاینت پشتیبانی میشوند، یا آیا کار در بافتی آغاز میشود که اعتبارنامهها در آن موجودند. اینها پرسشهای معناییاند و بیشتر خرابیهایی را توضیح میدهند که شبیه مشکلات launchd به نظر میرسند.
plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn
خروجی فرمان دوم را بخوانید، بهجای آنکه فرض کنید کار بارگذاری شده است. آخرین وضعیت خروج و اینکه سرویس در حال اجراست را گزارش میکند، و همین پیش از دست زدن به پروفایل، میان «هرگز شروع نشد» و «شروع شد و مرد» تمایز میگذارد.
عاملها نشست کاربر را به ارث میبرند، شبحها نه
مستندات launchd اپل عاملهای هر کاربر را از شبحهای سیستم جدا میکند. یک عامل در بافت کاربر واردشده، با جاکلیدی و محیط او اجرا میشود. یک شبح بدون آن نشست اجرا میشود، و انتقال کار به پوشهای سیستمی اعتبارنامههای تعاملی کاربر را بازسازی نمیکند.
همین تمایز طرح را تعیین میکند. اگر اتصال نیازمند آن باشد که شخصی وارد شود یا درخواست MFA را تأیید کند، ترتیب پشتیبانیشده این است: کاری در نشست کاربر که پس از ورود اجرا میشود. اگر باید بدون هیچ کاربر واردشده کار کند، کلاینت به هویتی تأییدشده و بدون نظارت با فرایند نوسازی و لغو خودش نیاز دارد. انتخاب سطر اشتباه کاری میسازد که پاک شروع میشود و در نخستین گام احراز هویت شکست میخورد.
تفاوت را با گذرواژهای در آرایه آرگومانها یا با خاموش کردن بررسیهای گواهی نپوشانید. هر دو نیاز احراز هویت را به رازی دائمی در فایلی خواندنی تبدیل میکنند، و دومی یعنی تونل هر چیزی را که پاسخ بدهد احراز هویت میکند.
نظارت تنها وقتی کار میکند که فرایند در جلو بماند
کلاینتی که خود را به شبح تبدیل میکند کنترل را بیدرنگ به launchd بازمیگرداند، و ناظر آنگاه فرایندی را میبیند که پیشتر خارج شده است. ممکن است تونل بالا باشد، اما launchd گمان میکند کار شکست خورده و سیاست راهاندازی دوبارهاش کاری میکند که در نظر نداشتید.
از حالت پیشزمینه یا سرویس مستند کلاینت استفاده کنید. اگر محصول ویژگی راهاندازی پشتیبانیشده خود را دارد، آن ویژگی از پیش میداند چگونه در پیشزمینه بماند و چگونه به پشته شبکه تحویل دهد؛ کار سفارشی طرحی جداگانه است، نه بهبودی بر آن.
به کار برچسبی یکتا، فایل اجرایی موردنظر و آرایه آرگومانهاي اندیشیده بدهید. آرایه یک خط فرمان shell نیست، پس لولهها و تغییرمسیرها در آن کار نمیکنند و رفتار گیومهها متفاوت است. فرمانی که در ترمینال مدیر موفق میشود، در بهترین حالت یک بررسی مقدماتی است.
اعتبارنامهها باید بدون پرسش کار کنند
کارکرد بدون نظارت مسئله اعتبارنامه را جابهجا میکند، نه حذف. کسی باید مالک هویت باشد، تصمیم بگیرد چه مدت زنده میماند و مستند کند چگونه جایگزین میشود. گواهی بدون پایش انقضا به قطعیای با یک تاریخ در تقویم تبدیل میشود.
رازها را از آرگومانها و از خروجی استاندارد کار بیرون نگه دارید. اگر کلاینت خواندن اعتبارنامه از انبار محافظتشده را پشتیبانی میکند، از آن مسیر استفاده کنید و بررسی کنید که بافت اجرای کار به انبار میرسد. شبحی که با root اجرا میشود معمولاً نمیتواند عضوی از جاکلیدی ورود را بخواند، و این همان جزئیاتی است که فقط در بافت سیستم دیده میشود.
تعریف کنید آمادگی چه معنایی دارد، سپس همانجا آزمایشش کنید
یک راهاندازی موفق ثابت میکند فرایند آغاز شده است. ثابت نمیکند شبکه بالاست، دروازه هویت را پذیرفته یا برنامه خصوصی در دسترس است. اگر چیز دیگری به تونل وابسته است، به نشانه آمادگیای نیاز دارد که اتصال را بازتاب دهد، نه زمان آغاز کار را.
تلاشهای دوباره باید محدود باشند و شبکه غایب را از اعتبارنامه ردشده تشخیص دهند. راهاندازی دوباره در هر شکست نمیتواند گواهی منقضی را تعمیر کند و گزارشی پر از تلاشهای یکسان میسازد که تلاش واقعی را پنهان میکند.
کار را در بافتی بپذیرید که واقعاً در آن اجرا خواهد شد: بیشبکه هنگام بوت، ورود عادی، بیداری از خواب و توقف کنترلشده. سپس برچسب کار، نسخه کلاینت و بازبینی پروفایل را با هم ثبت کنید تا نفر بعدی بهجای فایلی که زمانی کار میکرد، سرویسی قابل انتساب را به ارث ببرد.