تأمین یک کلاینت OpenVPN با مراحلی که در خطا متوقف میشوند
پنج مرحله مانع میشوند که اسکریپت تأمین، نصبی نیمهکاره بر جای بگذارد: ورودیها را بررسی کن، مجموعه را آماده کن، بهصورت اتمی جابهجا کن، یک مالک را فعال کن، بازنشستگی را برنامهریزی کن.
اسکریپتهای تأمین که خطا را گزارش میکنند و ادامه میدهند از اسکریپتهایی که هرگز اجرا نمیشوند بدترند. راهاندازی کلاینت به کلیدهای محافظتشده، هویتی در دروازه و سرویسی دست میزند که شاید از قبل ترافیک را سرویس میدهد. هر یک از اینها به شرط توقف نیاز دارد و اسکریپت باید بداند هنگام توقف به کدام مرحله رسیده است.
کل ماجرا را معاملهای با پنج نقطه بررسی بدان و بگذار هر نقطه بررسی خودبهخود از ادامه سر باز زند.
پیش از دست زدن به سیستم فایل، ورودیها را درست کن
با قراردادی صریح شروع کن: یک هویت، یک منبع پروفایل، یک مالک سرویس مورد نظر. بررسی کن که پروفایل وجود دارد، که گواهی و کلیدی که به آنها ارجاع میدهد خوانا هستند و پوشه هدف متعلق به بسته مورد انتظار است. مسیری که حل میشود شاهد آن نیست که مواد پشت آن کامل است.
متغیرهای خالی را زود رد کن. $DEVICE تنظیمنشدهای که به هیچ چیز گسترش نمییابد install -m 400 $KEY /etc/openvpn/client/ را به کپیای بدل میکند که به یک پوشه نشانه رفته است، و شکست بعداً بهصورت سرویسی میرسد که نمیتواند کلیدش را بخواند.
مجموعه پروفایل را در پوشه آمادهسازی بچین
ابتدا مجموعه کامل را در جایی خصوصی بساز: پروفایل، CA، گواهی کلاینت، کلید و هر کمکی که پروفایل فراخوانی میکند. با install -m 400 -o root -g root کپی کن تا اجازهها هنگام ساخت تنظیم شوند نه بعد از آن. سپس ارجاعهای داخل پروفایل را بررسی کن، چون خط نسبی ca یا key بهمحض شروع سرویس نسبت به پوشه کاری واحد حل میشود. تا زمانی که کل مجموعه اعتبارسنجی نشود چیزی نباید در پوشه فعال نوشته شود.
اثر انگشت غیرمحرمانهای از آنچه این اجرا تولید کرده ثبت کن، مثلاً sha256sum office.conf که کنار نشانگر نسخه ذخیره شده است. همین یک مقدار است که به اجرای دوباره اجازه میدهد بهروزرسانی را از بیکاری تشخیص دهد.
اتمی جابهجا کن و مجموعه قبلی را نگه دار
مجموعه آماده را در جایی که سیستم فایل اجازه میدهد با یک عملیات به جایش منتقل کن و مجموعه قبلی بازبینیشده را زیر نامی با مهر زمان نگه دار. کپی ناقصی که پروفایل تازهای کنار کلید کهنه بر جای میگذارد سرویسی میسازد که با هویت اشتباه احراز هویت میکند و هیچ چیز سودمندی درباره دلیل ثبت نمیکند. اگر جابهجایی نمیتواند اتمی باشد، ترتیب انتقالها را طوری بچین که پروفایل آخر از همه برسد.
وقتی مقصد از قبل وجود دارد، صریح تصمیم بگیر که این اجرا بهروزرسانی است، اجرای دوباره یکسان، یا تعارض با پروفایل دستگاه دیگری. بازنویسی خاموش پروفایلی که به هویت دیگری تعلق دارد همان راهی است که دو ماشین در نهایت یک گواهی را شریک میشوند. در عوض اجرا را رد کن و مالک متعارض را نام ببر.
یک مالک را فعال کن و آن را اثبات کن
یک مسیر فعالسازی انتخاب کن، یا نمونه systemd یا NetworkManager، و آن را پیوسته به کار ببر. راهاندازی فرایند openvpn مدیریتنشده در کنار واحدی فعال دو تونل، بهروزرسانیهای رقیب DNS و پاسخی روشن به این که فرمان توقف کدام را هدف میگیرد به بار نمیآورد. پس از فعالسازی systemctl is-active openvpn-client@office را بررسی کن، سپس مسیر به پیشوند دوردست، سپس resolvectl status را برای حلکنندهای که تونل نصب کرده است. با رسیدن به یک منبع که تونل برایش وجود دارد کار را تمام کن.
فرایند در حال اجرا و نماد سبز سینی دو واقعیت درباره فرایند هستند، نه شاهدی بر این که هویت و سیاست ترافیک از تحویل جان سالم به در بردهاند.
اجرای دوباره و بازنشستگی دو گردش کار جدا هستند
اجرای دوم باید به همان فایلهای بازبینیشده و همان مالک همگرا شود، نه این که حساب دومی یا دیمن دومی بسازد. بازنشستگی رویه خودش را دارد: مالک دقیق را متوقف کن، پروفایل محلی را بر اساس سیاست بایگانی یا حذف کن و هویت را در دروازه باطل کن. حذف یک فایل کلید محلی نسخهای را که از پیش ماشین را ترک کرده باطل نمیکند.
مسیر بازیابیای نگه دار که به تونل وابسته نباشد، مثل دسترسی کنسول یا مسیر مدیریت دوم. تغییری در تأمین که تو را بیرون جعبه قفل کند تغییری شکستخورده است، حتی وقتی هر مرحله موفقیت را گزارش کرده باشد.
اسکریپتی که ارزش نگه داشتن دارد معاملهای پیرامون مالکیت و شواهد است. فهرست کوتاهی از فرمانهای کپی ممتاز همان چیز نیست.