کلودلینوکس (CloudLinux OS) یک توزیع تجاری لینوکس سازگار با RHEL است که با کرنل اختصاصی خود، منابع و فایلسیستم هر حساب کاربری روی سرور را از بقیه جدا میکند؛ در نتیجه یک سایت پرمصرف یا یک اسکریپت معیوب نمیتواند کل سرور را از دسترس خارج کند. سه ستون اصلی آن LVE برای محدودسازی منابع، CageFS برای ایزولهسازی فایلسیستم و PHP Selector برای انتخاب نسخه PHP توسط خود کاربر است.
مشکلی که CloudLinux برای حل آن ساخته شد
روی یک سرور هاست اشتراکی معمولی، همه اکانتها از یک مخزن مشترک CPU، حافظه و I/O استفاده میکنند. کافی است یک سایت زیر بار ناگهانی برود، یک کوئری بدنوشته دیسک را اشباع کند یا یک افزونه دچار حلقه بیپایان شود تا زمان پاسخ بقیه سایتهای همان سرور بالا برود. راهکار سنتی، پیدا کردن دستی اکانت مقصر و تعلیق آن بود؛ روشی که هم دیر عمل میکند و هم تجربه بدی برای مشتری میسازد.
کلودلینوکس که از سال ۲۰۱۰ عرضه شد، همین موضوع را به سطح کرنل منتقل کرد. بهجای خاموش کردن اکانت، آن را «کند» میکند: مصرف بیش از حد فقط روی خود آن اکانت اثر میگذارد و بقیه سرور بدون تغییر به کار ادامه میدهد.
LVE؛ محدودسازی منابع در سطح کرنل
LVE مخفف Lightweight Virtual Environment است؛ یک محیط سبک که کرنل برای هر کاربر میسازد و مصرف او را داخل آن نگه میدارد. پارامترهایی که معمولاً قابل تنظیم هستند عبارتاند از:
- SPEED — سهم CPU اکانت (بر حسب درصد یک هسته یا تعداد هسته).
- PMEM و VMEM — سقف حافظه فیزیکی و مجازی.
- IO و IOPS — پهنای باند دیسک و تعداد عملیات ورودی/خروجی در ثانیه.
- NPROC — حداکثر تعداد پروسه همزمان.
- EP — تعداد «entry process» یا درخواستهای همزمانی که به وبسرور وارد میشوند.
رفتار سیستم هنگام رسیدن به سقف یکسان نیست. عبور از سقف CPU یا I/O باعث throttle شدن پروسهها میشود (کند شدن، نه قطع شدن)، اما رسیدن به سقف EP یا NPROC باعث میشود درخواستهای بعدی با خطای «۵۰۸ Resource Limit Is Reached» رد شوند. همین تفکیک، تشخیص علت را برای مدیر سیستم ساده میکند.
برای دیدن وضعیت فعلی و تاریخچه برخورد اکانتها با محدودیتها، این دو دستور نقطه شروع خوبی هستند:
lvectl list— نمایش محدودیتهای تنظیمشده برای همه LVEها.lveinfo --period=1d— گزارش اینکه در ۲۴ ساعت گذشته کدام کاربر به کدام سقف خورده است.
CageFS؛ هر کاربر در فایلسیستم خودش
CageFS یک فایلسیستم مجازیشده برای هر کاربر است. وقتی فعال باشد، کاربر فقط فایلهای خودش، مجموعهای امن از باینریها و کتابخانههای سیستمی، و دایرکتوریهای موقت اختصاصی خودش را میبیند. نتیجه عملی این است که:
- دایرکتوری خانگی سایر کاربران و فایلهای پیکربندی آنها اصلاً در دید نیست.
- محتوای
/etc/passwdبرای هر کاربر بازنویسی میشود و فهرست کاربران سرور فاش نمیشود. - دسترسی به ProcFS محدود میشود، بنابراین پروسههای در حال اجرای دیگران قابل مشاهده نیست.
- حملات symlink — که در آن کاربر یک لینک نمادین به فایل کاربر دیگر میسازد تا وبسرور محتوای آن را برایش بخواند — دیگر کارساز نیست.
مدیریت CageFS با ابزار cagefsctl انجام میشود؛ برای نمونه cagefsctl --enable-all آن را برای همه کاربران فعال میکند و cagefsctl --update پس از نصب بستههای جدید، اسکلت فایلسیستم را بهروز میکند. توجه کنید که cagefsctl --remove-all ایزولهسازی را برای همه حسابها برمیدارد و نباید سرسری اجرا شود.
PHP Selector و انتخاب نسخه توسط کاربر
در حالت معمول، نسخه PHP روی سرور اشتراکی یک تصمیم سراسری است و تغییر آن یعنی درگیر شدن با همه مشتریان. PHP Selector این تصمیم را به خود کاربر میسپارد: هر اکانت میتواند نسخه PHP و حتی مجموعه اکستنشنهای فعال خود را از کنترل پنل خود — برای نمونه cPanel — انتخاب کند، بدون آنکه روی بقیه اثر بگذارد. این قابلیت به CageFS وابسته است و برای اکانتی که CageFS آن غیرفعال باشد کار نمیکند. ابزار خط فرمان آن selectorctl است؛ selectorctl --list نسخههای در دسترس را نشان میدهد.
ابزارهای تکمیلی
بسته به نسخه و بستهای که تهیه میکنید، اجزای دیگری هم در دسترس قرار میگیرد: MySQL Governor که مصرف CPU و I/O هر کاربر را روی دیتابیس پایش و محدود میکند، نسخههای امنشده PHP برای کسانی که هنوز روی نسخههای قدیمی ماندهاند، و انتخابگرهای مشابهی برای Python و Node.js. ترکیب دقیق امکانات بین بستههای مختلف CloudLinux فرق میکند و بهتر است پیش از خرید، فهرست نسخه روز را بررسی کنید.
پیشنیازها و نکات نصب
مهمترین نکته این است که CloudLinux کرنل خودش را میآورد. بنابراین باید روی سروری نصب شود که کنترل کرنل در اختیار شماست: یک سرور فیزیکی یا یک ماشین مجازی با مجازیسازی کامل مانند KVM. روی VPSهای مبتنی بر کانتینر که کرنل را با هاست به اشتراک میگذارند، امکان نصب وجود ندارد.
نصب معمولاً روی یک سیستم سازگار با RHEL و از طریق اسکریپت cldeploy با کلید فعالسازی انجام میشود و در پایان نیاز به ریبوت دارد. چون کرنل عوض میشود، این کار را در بازه کمترافیک و با بکاپ کامل انجام دهید. کلودلینوکس با cPanel، دایرکتادمین و Plesk سازگار است و ماژول مدیریتی آن داخل همان کنترل پنل ظاهر میشود.
برای استفاده تجاری هم به لایسنس معتبر نیاز دارید. لایسنس CloudLinux آنلاین سرور بهصورت اصل ارائه میشود و نصب و پیکربندی اولیه آن رایگان انجام میگیرد.
چه چیزی را حل نمیکند
کلودلینوکس یک لایه ایزولهسازی است، نه یک راهکار امنیتی کامل. کد آسیبپذیر داخل یک اکانت همچنان آسیبپذیر است؛ CageFS فقط جلوی سرایت آن به بقیه سرور را میگیرد. همچنین اگر محدودیتها را بیش از حد سختگیرانه تنظیم کنید، کاربران بهجای کندی موردی، با خطای ۵۰۸ مکرر روبهرو میشوند. تنظیم درست LVE کاری تدریجی است: از مقادیر منطقی شروع کنید و با نگاه کردن به خروجی lveinfo آنها را اصلاح کنید.
جمعبندی
اگر روی یک سرور چند مشتری میزبانی میکنید، CloudLinux پایداری را از یک کار دستی و واکنشی به یک قاعده خودکار در سطح کرنل تبدیل میکند. LVE مصرف را مهار میکند، CageFS دید کاربران به یکدیگر را میبندد و PHP Selector بار پشتیبانی مربوط به نسخههای PHP را کم میکند. برای سروری که فقط سایتهای خودتان روی آن است، این پیچیدگی احتمالاً لازم نیست؛ اما برای هاست اشتراکی و ریسلر، یکی از استانداردهای رایج صنعت است.
