SELinux چیست

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:                 21

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:                 21

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 را غیر فعال می کنند و به این ترتیب امنیت ایجاد شده را از بین می برند.

 

مطالب مرتبط

۱ دیدگاه

  1. ليلا اورنگي گفت:

    عالي بود مثل هميشه

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

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