اطلاعیه

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

selinux چیست ؟ (بخش اول)

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    selinux چیست ؟ (بخش اول)

    SELinux یا 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 میشود و با تغییر نام فایل و یا حتی جابجا کردن آن کانتکست فایل هیچ تغییری نمیکند و عملا دور زدن پالیسی و پرمیژن فایل بسیار سخت تر میشود.


    و اما CONTEXT در SELinux چیست ؟

    یک کانتکست selinux که گاها از آن با عنوان برچسب selinux (یا SELinux Lable)‌ یاد میشود در حقیقت مشخصه ایست که روی ویژگی های امنیتی و پالیسی یک عنصر (process ها،‌ file ها ...) تمرکز میکند. در حقیقت کانتکست ها مجوز های امنیتی هستند که یک شیوه دائمی برای دسترسی به هدف ها را در selinux فراهم میکند.

    پالیسی های selinux این کانتکست ها را در یک سری قوانین استفاده میکند که چگونگی تعامل پروسس ها با یکدیگر و با ریسورس های گوناگون سیستم را تعریف میکند. پالیسی پیش فرض به این صورت است که هیچ گونه دسترسی و تعاملی وجود ندارد مگر اینکه یک role دسترسی تعریف شده باشد.

    نکته : زمانیکه یک process اجرا میشود در حقیقت یکسری system call به سمت kernel فرستاده میشود (در حقیقت سیستم کرنل را صدا میزند) و یک سری error check ها در کرنل صورت میگیرد. اگر error ی وجود داشته باشد خطا برگردانده میشود،‌ در غیر اینصورت مفهوم DAC بررسی میشود اگر DAC اوکی بدهد این بار نوبت بررسی LSM یعنی همان SELinux مان میباشد. دقت کنید در صورتیکه DAC خطای Access Denied بدهد دیگر selinux بررسی نمیشود،‌ در نتیجه همیشه بررسی رول های DAC بر پالیسی های selinux اولویت دارد.


    و اما CONTEXT :

    کانتکست شامل فیلدهای زیر میباشد :
    • User
    • Role
    • Type
    • Level

    اطلاعات بالا در حقیقت مهم ترین نکاتی هستند که در پالیسی های selinux مورد استفاده قرار میگیرند. یک یوزر (User) یک رول (Role) به خودش اختصاص میدهد که با توجه به آن رول باید یک تیپ (Type) کارهای خاصی را انجام بدهد. مثلا mohammad یوزری است که role آن در حقیقت مدیریت یک انجمن است و type کارهایی که انجام میدهد مدیریت کاربران، برقراری امنیت سایت و سرور، به روز رسانی اپلیکیشن ها و ... میباشد. در کانتکست User را برای این تعریف میکنیم که یک Role به آن اختصاص بدهیم و با استفاده از آن Role یکسری Type کارهای خاصی را به آن اختصاص دهیم.

    در context عبارتی که با _u تمام شود در حقیقت مشخص کننده User میباشد،‌ عبارتی که با _r تمام شود مشخص کننده Role میباشد همچنین عبارتی که با _t تمام شود مشخص کننده Type میباشد. مثلا type name مربوط به وب سرور httpd_t میباشد همچنین نام type مربوط به فایل ها و دایرکتوری های موجود در /var/www/html/ در حقیقت httpd_sys_content_t میباشد. نام type مربوط به فایل ها و دایرکتوری هایی که در پوشه /tmp/ هستند tmp_t میباشد. همچنین نام type در کانتکست مروبوط به پورت های وب سرور http_port_t میباشد.

    به طور مثال یک پالیسی وجود دارد که به آپاچی (که type آن در کانتکست httpd_t میباشد) اجازه دسترسی به فایل ها و دایرکتوری های موجود در /var/www/html/ (که type آنها در کانتکست httpd_sys_content_t) را میدهد. هیچ گونه پالیسی برای فایل های موجود در /tmp/ و /var/tmp/ وجود ندارد در نتیجه وب سرور امکان دسترسی به فایل های موجود در این پوشه ها را نخواهد داشت.
    برای دیدن سایز بزرگ روی عکس کلیک کنید  نام: selinux.png مشاهده: 0 حجم: 28.0 کیلو بایت


    در تصویر بالا، MariaDB (که type آن در کانتکست mysqld_t میباشد) اجازه دسترسی به فایل ها و دایرکتوری های موجود در /data/mysl (که type آنها در کانتکست mysqld_db_t میباشد) را میدهد. همچنین آپاچی (که type آن در کانتکست httpd_t میباشد) اجازه دسترسی به فایل ها و دایرکتوری های موجود در /var/www/html/ (که type آنها در کانتکست httpd_sys_content_t) را دارد اما هیچ گونه پالیسی برای دسترسی آپاچی به فایل های موجود در data/mysl وجود ندارد همچنین سرویس mariadb امکان دسترسی به فایل های موجود در /var/www/html را نیز ندارد.


    Mode های SELinux

    SELinux را در 3 مد (mode) میتوان اجرا کرد :
    • disabled
    • permissive
    • enforcing

    مد 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 
    امیدوارم تا اینجای کار مفید واقع شده باشه. این پارت اول مقاله بود که در روزهای آینده پارت های بعدی به اشتراک خواهیم گذاشت.

    موفق باشید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-24-2019, 06:23 PM.

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی
در حال انجام ...
X