SELinux مخفف Security enhanced Linux یک مکانیزم امنیت اجباری است که روی هسته لینوکس اجرا می شود SELinux برای اولین بار درcentos4 معرفی شده و در بیشتر توزیع های centos بعدی نیز وجود دارد.
برخی از مشکلات :
به منظور درک بهتر این مورد که چرا SELinux مهم است و چه کاری می تواند برای شما انجام دهد بهتر است نمونه های زیر را مشاهد کنید. در صورتی که SELinux برروی سرور فعال نباشد جهت کنترل دسترسی به فایل ها باید ازروش های کنترل دستی سنتی (DAC) و یا روش کنترل دسترسی لیست (ACLS) استفاده نمایید.
کاربران و برنامه ها به طور یکسان، مجوز دسترسی به فایل ها را به صورت نا امن دارند و یا دسترسی به بخش های مختلف سیستم که نیازی به دسترسی به آن بخش ها ندارند. برای مثال:
Administrator ها هیچ راهی برای کنترل کاربران خود ندارند. شرایطی را متصور شوید که کاربران می توانند به فایل های حساس مانند کلید ssh و یا پوشه های حاوی آنها دسترسی خواندن همگانی بدهند. مثلا ~/.ssh/
پردازش ها می توانند ویژگی های امنیتی را تغییر دهند. برای مثال فایل های ایمیل یک کاربر فقط باید توسط او قابل خواندن باشد ولی نرم افزاری مانند mail client می تواند دسترسی خواندن را به همه کاربران بدهد.
پردازش ها می توانند سطح دسترسی کاربران اجرا کننده خود را داشته باشند برای مثال در صورتی که مرورگر فایرفاکس شما به تروجان آلوده شده باشد می تواند کلید محرمانه ssh کاربررا با اینکه نیاز به آن، ندارد را بخواند.
اساسا مدل DAC دو سطح امتیاز دارد، یکی کاربر و یکی root و هیچ راهی برای تعریف یک سطح با حداقل دسترسی وجود ندارد. بسیاری از پردازش های که توسط root راه اندازی می شوند با سطح دسترسی یک کاربر محدود اجرا خواهند شد و بسیاری از پردازش ها نیز ممکن است در یک chroot jail اجرا شوند. امام تمام این روش های امنیتی اختیاری هستند و ممکن است برروی سرور اعمال نشوند.
راه حل :
SELinux کمترین سطح دسترسی را در اختیارکاربران و پردازش ها قرار می دهد. به طور پیش فرض براساس یک سیاست سختگیرانه همه چیز را رد می کند. و فقط یکسری استثنا وجود دارد که فقط آن کاربران یا برنامه ها می توانند به یکسری از بخش ها دسترسی داشته باشند و درصورتی که کاربر یا برنامه ای که سطح دسترسی لازم را ندارد تلاش برای اعمال در خواست خود کند از اجرای فرایندهای آن جلوگیری خواهد شد و دسترسی آن ممنوع خواهد شد، همچنین گزارشات مربوطه در فایل های log ثبت خواهد شد.
مد های SELinux :
SELinux دارای سه مد اساسی است که بصورت پیش فرض برروی Enforcing تنظیم شده است. مدهای بعدی دارای سطح پایین تری از امنیت هستند.
مد اجرایی یا enforcing : این مد پیش فرض SELinux است در این مد سیاست های امنیتی SELinuix برروی سیستم اعمال می شود و دسترسی های غیر مجاز ممنون و فعالیت های افراد در قالب لاگ ثبت خواهد شد.
مد قابل قبول permissive:
در این مد، SELinux فعال است ولی سیاست های امنیتی را اجرا نخواهند کرد و تنها به اخطار دادن و ثبت ریز فعالیت ها می پردازد این مد بیشتر برای عیب یابی و یا بررسی رفتارSELinux مناسب است.
مد خاموش یا Disabled : این سطح به طور کامل SELinux را غیرفعال می کند. گزارش گیری و برچسب گذاری پرونده ها و پردازش ها هم متوقف می شود. استفاده از این مد برای مدت زمان طولانی، به هیچ عنوان پیشنهاد نمی شود.
جهت مشاهده وضعیت SELinux می توانید دستور زیر را اجرا کنید.
SEStatus
خروجی شبیه زیر مشاهده خواهید کرد:
SELinux status: enabled
SELinuxfs mount: /SELinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: ۲۱
Policy from config file: targeted
در صورتی که دستور بالا را به همراه کلید –v استفاده کنید اطلاعاتی بیشتری مانند زمینه های امنیتی مجموعه از فایل های موجود در /etc/sestatus.conf نیز در اختیار شما قرار داده می شود. و خروجی شبیه زیر دریافت خواهید کرد:
# sestatus -v
SELinux status: enabled
SELinuxfs mount: /SELinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: ۲۱
Policy from config file: targeted
Process contexts:
Current context: user_u:system_r:unconfined_t
Init context: system_u:system_r:init_t
/sbin/mingetty system_u:system_r:getty_t
/usr/sbin/sshd system_u:system_r:unconfined_t:s0-s0:c0.c1023
File contexts:
Controlling term: user_u:object_r:devpts_t
/etc/passwd system_u:object_r:etc_t
/etc/shadow system_u:object_r:shadow_t
/bin/bash system_u:object_r:shell_exec_t
/bin/login system_u:object_r:login_exec_t
/bin/sh system_u:object_r:bin_t -> system_u:object_r:shell_exec_t
/sbin/agetty system_u:object_r:getty_exec_t
/sbin/init system_u:object_r:init_exec_t
/sbin/mingetty system_u:object_r:getty_exec_t
/usr/sbin/sshd system_u:object_r:sshd_exec_t
/lib/libc.so.6 system_u:object_r:lib_t -> system_u:object_r:lib_t
/lib/ld-linux.so.2 system_u:object_r:lib_t -> system_u:object_r:ld_so_t
دستورselenForce به شما اجازه می دهد بین دو مد enforcing و permissive سویچ کنید ولی در صورتی که سیستم reboot شود این دستور دیگر اعمال نخواهد شد. برای اینکه پس از reboot سیستم نیز تنظیمات شما پابرجا باشد باید فایل etc/SELinux/config را باز کنید و خط زیر را تغییر دهید.
SELinux = “مد مورد نظر “
برای مثال جهت غیر فعال کردن SELinux می توانید این خط را به صورت زیر ویرایش کنید
SELinux = “Disabel”
نکته : توصیه می شود پس از هر تغییر در SELinux سیستم را مجددا راه اندازی کنید.
همانطور که قبلا گفته شد SELinux کمترین امتیاز را برای دسترسی به سرور های اختصاصی و سرور های مجازی تحت سیستم عامل لینوکس اعمال می کند و به طور پیش فرض تمام دسترسی ها بسته شده اند، مگر اینکه از طریق خط فرمان اجازه دسترسی به برنامه یا کاربری داده شود. این سیاست گذاری بهترین و دقیق ترین نوع سیاست گذاری برای حفاظت از امنیت است ولی این سطح از سختگیری می تواند مشکلاتی را برای مدیران سیستم ها و حتی کاربران نهایی در برداشته باشد و به همین علت است که بسیاری از مدیران سیستم ها بجایی حل مشکلات SELinux را غیر فعال می کنند و به این ترتیب امنیت ایجاد شده را از بین می برند.