سیستم عامل سودار و سرور به روز رسانی

مقدمه

سیستم عامل به عنوان بستر اجرایی تمامی سرویس ها و برنامه ها نقش به سزایی در امنیت و پایداری محصولات ایفا می کند. از سوی دیگر نبود سیستم به روز رسانی برخط، منجر به مشکلات فراوانی در توسعه و نگهداری شبکه می گردد. وجود یک سرور به روز رسانی برخط باعث می شود که به سرعت مسائل امنیتی بوجود آمده را در شبکه برطرف نماییم یا اینکه بتوانیم امکانات جدید را به آسانی در شبکه خود مهیا نماییم. البته مسائل امنیتی و قابلیت اعتماد فرایند به روز رسانی بسیار مهم است.

ساختار اصلی

تمامی مکالمات بین نودها و سرور به روز رسانی با HTTPS صورت می پذیرد و Auth  نودها صورت می پذیرد. که در قسمت امنیت به آنها پرداخته ایم.

فرایند به روز رسانی

به ازای هر به روز رسانی یک فایل مخصوص تولید می شود که به امضای سیستم به روز رسانی رسیده است. این تصویر سپس به صورت آفلاین به سرور به روز رسانی منتقل می گردد و در آنجا به عنوان یک نسخه جدید ثبت می گردد. سپس بر اساس برنامه ریزی مورد نظر به روز رسانی شروع می شود هر بار می توان چند نود را به روز رسانی کرد یا تمامی نودها را یکجا به روز رسانی نمود. این فرایند در شکل زیر آمده است.

پایه سیستم عامل

در این محصول از yocto برای ایجاد سیستم عامل اختصاصی استفاده می شود. بر این اساس تمامی قسمتهای سیستم عامل به صورت اختصاصی بر روی هم گذاشته میشود تا امن ترین و کاراترین سیستم عامل را داشته باشیم. بنابراین برای هر سخت افزار مجزا ما یک سیستم عامل اختصاصی آن سخت افزار ارائه می کنیم و تمامی خصوصیات سخت افزاری را در زمان ساخت سیستم عامل مدنظر می گیریم.

Yocto یک بستر سازنده سیستم عامل است که شما با استفاده از آن می توانید سیستم عامل اختصاصی خودتان را بسازید. این محصول یک اکوسیستم انعطاف پذیر را برای توسعه دهندگان سیستم های  embedded ایجاد کرده است تا بتوانند سیستم عاملهای سفارشی شده بر اساس لینوکس  ایجاد کنند.

بر اساس این بستر آخرین نسخه های تمامی نرم افزارهای سازنده سیستم عامل در زمان ایجاد، داونلود میشود و بر اساس تنظیماتی که از قبل مشخص کرده ایم کامپایل می شوند و در نهایت ما تصویر قابل نصب سیستم عامل رو به عنوان خروجی داریم تا برای نصب نهایی بر روی نودها استفاده شود.

سیستم عامل نهایی دارای فایل سیستم فقط خواندنی در ریشه خود می باشد و مواردی که باید در طول زمان تغییر کنند در پارتیشن های دیگری نصب می گردد. مواردی مانند تنظیمات و log ها. فایل سیستم فقط خواندنی هم امنیت سیستم را افزایش می دهد هم برای به روز رسانی روش A/B مورد نیاز است.

فرآیندهای امنیتی

در اینجا به فرآیندهای امنیتی درون سیستم پرداخته می شود. قبلا در قسمت ساختار اصلی به برخی مسائل امنیتی پرداخته شده است و ما در اینجا مسائل باقیمانده را مطرح می کنیم.

امنیت فایلهای به روز رسانی

در این ساختار باید فرآیند به روزرسانی به صورت ایمن صورت پذیرد. بخش مهمی از امنیت به روز رسانی مربوط به تایید فایلهای نهایی است که قرار است بر روی نود نصب شود. بنابراین نودها باید قادر باشند منبع تهیه این فایلها را تایید نمایند و مطمئن شوند که از یک منبع  قابل اعتماد  صادر گردیده است.

یکی از راه های دستیابی به این هدف ، امضای فایلهای به روز رسانی  با استفاده از یک کلید خصوصی محافظت شده است. در هر نود ما کلید عمومی مربوط به سیستم تولید کننده فایلهای به روز رسانی را نگهداری می کنیم و به محض دریافت فایل مربوطه امضای آن را بررسی نموده و  از صحت آن مطمئن می شویم. اگر امضا تایید شد، به روزرسانی از یک منبع قابل اعتماد صورت گرفته است. نمودار زیر جریان سطح بالایی از ایجاد و مدیریت کلیدها و امضاها را نشان می دهد که بخش اساسی فرآیند امضا و تایید فایلهای به روز رسانی است.

Mender signature management flow

در طی مراحل نصب به روزرسانی ، دستگاه با استفاده از کلید عمومی ذخیره شده در دستگاه فایلهای به روز رسانی را تایید می کند. این به روز رسانی تنها در صورت موفقیت آمیز بودن این فرایند انجام می شود. اگر این فایلها امضا نشده بود  یا تأیید انجام نشود، روند بروزرسانی قطع می شود و دستگاه خطایی را به سرور به روز رسانی گزارش می دهد.

الگوریتم های امضای پشتیبانی شده به صورت زیر است:

  • RSA with recommended key length of at least 3072 bits

  • ECDSA with curve P-256

فرایند تایید دستگاهها و اعتبار سنجی آنها

یک دستگاه یا یک سخت افزار مشخص دارای یک مشخصه منحصر به فرد است که آن را از دیگر سخت افزارها مجزا می سازد. این شناسه منحصر به فرد توسط مجموعه ای از خصوصیات هویتی (آدرس های MAC ، UID های تعریف شده توسط کاربر و غیره) مشخص می شود. برای به دست آوردن یک توکن اعتبار سنجی، دستگاه درخواست احراز هویت را که حاوی خصوصیات هویتی خود و کلید عمومی فعلی آن است، ارسال می کند. این درخواست با کلید خصوصی نود مربوطه امضا شده است ( این کلید در دستگاه مخفی نگه داشته می شود) و سرور از کلید عمومی نود برای تأیید امضا استفاده می کند.

ممکن است یک دستگاه واحد به مرور زمان کلیدهای مختلفی را ارائه دهد، و مهم است که آن ها را نگهداری کرده و مدیر شبکه باید این اجازه اتصال  را بپذیرد.

به روز رسانی هر دستگاه را به عنوان یک موجود در دنیای واقعی  نگهداری کرده و همچنین مجموعه های تایید هویت متعدد آن (رابطه یک به چند) را نیز نگه می دارد.

دو جریان مجوز دهی به نود ها وجود دارد  که هر دو روش نیازمند رضایت صریح مدیر شبکه می باشد. در زیر شرح مفصلی از هر یک از آنها آورده شده است.

تایید از قبل نودها

در این روش قبل از اینکه نود برای اولین بار به سرور وصل شود، اجازه آن صادر می گردد. این مدل مشابه ایجاد حساب قبل از ورود به یک سرویس آنلاین است.

روال پیش تایید می تواند حتی قبل از استقرار نود انجام شود. کافی است کاربر یک مجموعه احراز هویت از پیش تعیین شده را در سرور وارد نماید. حالا هر زمانی که یک دستگاه با خصوصیات هویتی و کلید عمومی از قبل تایید شده درخواست تأیید اعتبار کرد بلافاصله و بدون مداخله مدیر شبکه، تایید می گردد. این حالت برای حالتی که تعداد دستگاهها زیاد است می تواند بسیار مفید باشد.

  • هویت/کلیدهای دستگاه از قبل تعیین شده و در خارج از سرور به روز رسانی  مدیریت می شوند

  • از یک برنامه می توان برای افزودن اطلاعات هویتی و کلید عمومی این دستگاهها به سرور به روز رسانی استفاده نمود

  • در زمان تولید نود می توان فایلهای هویتی و کلید های عمومی و خصوصی آن را به دستگاه منتقل نمود. این کار می تواند توسط توکن سخت افزاری صورت پذیرد.

  • پس از اولین درخواست تأیید اعتبار ، هر دستگاه احراز هویت می شود و می تواند از سرور به روز رسانی استفاده نماید.

Preauthorization flow

در تصویر بالا این روال را مشاهده می کنید.

پس از اخذ مجوز توسط دستگاه، درخواست Auth بعدی آن منجر به دریافت یک توکن احراز هویت می شود. این توکن توسط کلاینت یا همان نود ذخیره شده و آن را در هر اتصال به سرور به روز رسانی در هدر Authorization در درخواست HTTP قرار می دهد.

هر توکن دارای یک تاریخ انقضا (یک دوره یک هفته ای) است ، اما دستگاه پس از این دوره به صورت خودکار یک توکن جدید دریافت می کند. این روند بدون دخالت مدیر شبکه صورت می پذیرد.

تایید پس از اتصال نود

در این حالت نودها بعد از اتصال به سرور به روز رسانی در لیست انتظار برای تایید قرار می گیرند. سپس مدیر با کنسول وب به این دستگاهها اجازه اتصال می دهد. از این پس این دستگاهها قادر خواهند بود از سرور به روز رسانی استفاده نمایند.

Accept-on-request flow

سیستم به روز رسانی

به روز رسانی در این سیستم عامل بر پایه نرم افزار Mender صورت می پذیرد که در قسمتهای مختلف آن تغییرات مورد نظر اعمال شده است. یکی از نیازهای اصلی بروزرسانی این است که این به روز رسانی باید به صورت مطمئن صورت پذیرد. اگر به هر دلیلی از جمله قطعی برق یا قطعی اتصال شبکه این به روز رسانی ناتمام بماند سیستم قابل بازیابی باشد و به حالت قبلی خودش برگردد.

بدین منظور از یک سیستم به روز رسانی دوگانه استفاده می گردد که برای سیستم عامل همزمان دو پارتیشن مورد استفاده قرار می گیرد که در زمان نصب هر دو پارتیشن یکسان بوده و دارای یک نسخه از سیستم عامل می باشد. و در ابتدا از یک پارتیشن استفاده می شود و یک پارتیشن دیگر برای به روز رسانی نگهداری می شود. به بخشی که در حال استفاده است پارتیشن فعال گفته می شود و نسخه پشتیبان آن پارتیشن غیرفعال نامیده می شود. هنگامی که سیستم عامل بوت می شود ، توسط بوت لودر از پارتیشن فعال استفاده می کند.

Partition A active

وقتی قرار است سیستم به روز رسانی شود بدون اینکه اختلالی در کار نود ایجاد شود پارتیشن غیر فعال به روز رسانی می شود و پس از اتمام  به روز رسانی به این پارتیشن ریبوت می شود. اگر بعد از بوت شدن از پارتیشن جدید همه چیز به خوبی پیش رفت این پارتیشن به عنوان پارتیشن فعال در نظر گرفته میشود و پارتیشن فعال قبلی به صورت پشتیبان در می آید و اگر مشکلی پیش آمد مجددا به پارتیشن فعال قبلی برمی گردد و به روز رسانی ناموفق اعلام میگردد.  همچنین اگر چیزی باعث شود که دستگاه قبل از انجام بروزرسانی مجدداً reboot مجدد شود ، bootloader می داند که اشتباهی رخ داده است ، و با چرخاندن دوباره پارتیشن های فعال و غیرفعال دوباره به نسخه قبلی برمی گردد.

Partition B active

بروزرسانی تمام فایلهای موجود در سیستم عامل را با نسخه های جدید جایگزین می کند، بنابراین فایل سیستم ریشه  در سیستم عامل به صورت غیر قابل نوشتن است.

نمودار زیر نمای کلی از جریان داده ها در به روز رسانی نرم افزار را نشان می دهد.

Top level components

این فرآیند با تولید نسخه جدید سیستم عامل توسط Yocto برای یک دستگاه آغاز می شود. خروجی به روز رسانی به صورت یک فایل در قالب مورد نیاز دستگاه هدف ایجاد می گردد. برای هر نوع دستگاه مدیریت شده ، فایل به روز رسانی مجزا تولید می گردد. این فایلها امضای الکترونیکی میگردد و قابلیت تغییر ندارد. و در صورت خرابی یا تغییر در آن توسط نودهای نهایی نصب نمی گردد.

امکانات سرور به روز رسانی

تمامی نودها بعد از تنظیم جهت دریافت به روز رسانی های خود به سرور متصل شده و اطلاعات کلی خود را ارائه می کنند

اطلاعاتی از قبیل مدل پردازنده و ویرایش سیستم عامل موجود بر روی آن نود به سرور به روز رسانی ارسال می گردد.

در سرور مدیر می تواند این دستگاه را بررسی نموده و پس از تایید مشخصات آن را به عنوان دستگاه قابل اعتماد قبول نماید. از این پس این دستگاه می تواند در لیست دستگاهها برای دریافت ویرایش های جدید قرار گیرد.

هر به روز رسانی جدید می تواند بر روی گروه خاصی از نودها فعال گردد بدین صورت که شما می توانید ابتدا یک نود کم اهمیت تر را به روز رسانی نمایید و در صورت تست و عدم وجود مشکل آن را به چند نود دیگر اعمال نمایید و در نهایت در زمان مناسب به روز رسانی را در نودهای اصلی انجام داد.

در نهایت مدیر می تواند وضعیت نودهای به روز شده را مشاهده نماید و لیستی از به روز رسانی های موفق و ناموفق را داشته باشد. همچنین علت عدم موفقیت را می تواند دریافت نماید.

به روز رسانی برخط

در این روش یک سرور به روز رسانی برای هر شبکه ارائه می گردد که در سمت شبکه خصوصی قرار می گیرد. این سرور بر پایه نرم افزار Mender میباشد. در این روش فایلهای  به روز رسانی به سرور مدیریت به روز رسانی ها منتقل می شود‍، که نقطه اصلی برای به روزرسانی برای دستگاه های مختلف است. سرور Mender نرم افزار فعلی که بر روی هر دستگاه نصب شده است را پایش می کند و لیست نسخه های جدید را می توان برای گروههای مختلف از نوده برنامه ریزی نمود.

هر نود در یک بازه زمانی به سرور به روزرسانی سرکشی میکند و اطلاعات کلی از خودش ارایه می کند و همچنین از سرور میخواهد که در صورت وجود به روز رسانی جدید اعلام نماید.

البته این سرکشی می تواند با فرمان مدیر از طریق manager صورت پذیرد. یعنی نودها به صورت غیر فعال کار می کنند و زمانی که مدیر به یک نود دستور داد که به روز رسانی شود این کار را انجام می دهد.


**