امنیت شبکه, تعاریف شبکه, لینوکس

SELinux چیست؟ آشنایی با ماژول امنیتی SELinux

SELinux

SELinux مخفف Security-Enhanced Linux یک ماژول امنیتی کرنل لینوکس است که توسط آژانس امنیت ملی آمریکا در سال 2000 توسعه پیدا کرده و در این مقاله قصد داریم شما را با SELinux بیشتر آشنا کنیم، همراه داتیس نتورک باشید.

SELinux

SELinux یک ماژول امنیتی کرنل لینوکس است که یک مکانیسم برای پشتیبانی از سیاست های امنیتی کنترل دسترسی ، از جمله کنترل دسترسی اجباری فراهم می کند. SELinux مجموعه ای از تغییرات کرنل و ابزار های user-space است که به توزیع های مختلف لینوکس اضافه شده است.

Security-Enhanced Linux چیست؟

Selinux کوتاه شده عبارت Security-Enhanced Linux به معنی لینوکس با امنیت بهبود یافته است. این ماژول کرنل ( Kernel ) در 22 دسامبر سال 2000 توسط آژانس ملی امنیت آمریکا و تحت لایسنس GPL توسعه داده شد.

هدف Selinux بهبود امنیت کلی سیستم عامل لینوکس بود.

سیستم نظارتی selinux از نوع MAC می باشد که کوتاه شده عبارت mandatory access control ( کنترل دسترسی اجباری ) است.

در این سامانه ، سیستم عامل دسترسی های سیستمی را کنترل کرده و در مواردی که امنیت در خطر باشد ، محدودیت هایی را اعمال می کند.

Security Enhance Linux در حقیقت مکانیزمی است که یک لایه اضافی برای امنیت سیستم ایجاد میکند.

به طور کلی selinux به این سوال که :

آیا subject میتواند action را روی object ی انجام دهد؟ پاسخ میدهد.

به طور مثال : آیا یک وب سرور به دایرکتوری های Home کاربران دسترسی دارد؟

اصطلاح DAC که از این به بعد بیشتر آنرا به کار میبریم همان Discretionary Access Control میباشد و در حقیقت به سطوح دسترسی user, group و permission ها است که روی فایل ها،‌ فولدرها و … تعریف میکنیم،‌ که باعث میشود admin سیستم پالیسی های امنیتی جامعی را روی فایل ها و دایرکتوری ها لحاظ کند.

اصطلاح MAC یا Mandatory Access Control در حقیقت سطوح امنیتی هستند که مستقیما توسط kernel کنترل میشوند.

در کرنل ماژولی به نام LSM (مخفف Linux Security Module) داریم که میتواند علاوه بر DAC یک لایه امنیتی بیشتر به process ها و اپلیکیشن های سیستم اضافه کند.

در این ماژول میتوانیم از مکانیزم های متفاوتی استفاده کنیم یکی از این ها SELinux است.

غیر از SELinux مکانیزم های متفاوت دیگری مانند Tomoyo وجود دارند اما بین تمام اینها selinux از همه سخت تر،‌ مطمئن تر و پیشرفته تر است.

ماژول های دیگر مانند تومویو به صورت profile کار میکنند و احتمال خطر تا حدی وجود دارد زیرا مثلا با عوض شدن نام فایل میتوان profile را دور زد اما در selinux اینطور نیست.

از آنجایی که selinux در خود مفهومی به نام CONTEXT دارد. context در حقیقت مجوزیست که به یک فایل assign میشود و با تغییر نام فایل و یا حتی جابجا کردن آن کانتکست فایل هیچ تغییری نمیکند و عملا دور زدن پالیسی و پرمیژن فایل بسیار سخت تر میشود.

Mode های SELinux

این ماژول 3 حالت دارد :

  • Disable: حالتی که این ماژول بصورت کامل خاموش است و هیچگوه نظارتی بر روی اطلاعات ارسال شده به کرنل ندارد
  • Permissive: در این حالت سیاست های selinux فقط به کاربر اخطار داده می شود اما جلو دسترسی را نمیگیرد. یعنی اگر برنامه ای برای نصب نیاز به تغییرات در کرنل داشته باشه selinux اجازه تصب می دهد اما برای آگاهی به کاربر هشدار می دهد  و ان را در لاگ دخیره می کند
  • Enforcing: در این حالت تمامی سیاست های selinux پابرجاست و در صورت بروز هر مشکلی دسترسی را محدود می کند و اجازه نصب برنامه های که نیاز به تغییر کرنل دارند نمی دهد چون بر این باور است که شاید برنامه مخرب باشد.

مد Disabled که در حقیقت در این mode هیچ پالیسی اجرا نمیشود و selinux کلا غیرفعال است.

مد permissive در این مد سیستم به نحوی رفتار میکند که تمام lable ها روی process ها، file ها و … قرار دارند و به هنگام دسترسی های متفاوت عدم دسترسی ها و غیره در log فایل ذخیره میشود اما در حقیقت هیچ گونه عملیاتی متوقف نمیشود. همانند حالت disabled است با این تفاوت که تمام عدم دسترسی ها و تاییدیه دسترسی ها log میشود. این مد برای مانیتورینگ و توسعه پالسی های selinux ی بسیار مفید است.

مد پیش فرض selinux مد enforcing میباشد که در حقیقت در این مد است که selinux فعال است و کل سیستم تحت نظر پالسی های selinux کنترل میشود.

با ابزار setenforce میتوانیم بین این mode ها جابجا شویم.

تغییراتی که با استفاده از این دستور اعمال میکنیم با reboot سیستم از بین میرود. برای اینکه به مد enforcing برویم با یوزر root دستور setenforce 1 را اجرا میکنیم. برای تغییر به مد permissive دستور setenforce 0 را وارد میکنیم.

برای اینکه بدانیم در چه مدی از لینوکس هستیم دستور getenforce را اجرا میکنیم.

کد PHP:

~]# getenforce
Enforcing

~]# setenforce 0

~]# getenforce
Permissive

~]# setenforce 1

~]# getenforce
Enforcing

منبع :

  1. wikipedia

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *