٪80 تخفیف

دانلود کتاب آموزشی پیشرفته نصب و پیکربندی سرویس امنیتی SELinux (Security-Enhanced Linux) جلد اول

دسته‌بندی: برچسب: تاریخ به روز رسانی: 6 دی 1404 تعداد بازدید: 377 بازدید
ویژگی های محصول: پشتیبانی واتساپ

قیمت اصلی: ۲,۰۰۰,۰۰۰ تومان بود.قیمت فعلی: ۴۰۰,۰۰۰ تومان.

torobpay
هر قسط با ترب‌پی: ۱۰۰,۰۰۰ تومان
۴ قسط ماهانه. بدون سود، چک و ضامن.

نصب و پیکربندی سرویس امنیتی SELinux (Security-Enhanced Linux)


بخش 1. مقدمه و مبانی SELinux

 

فصل 1. آشنایی با SELinux

  • تاریخچه SELinux و شروع پروژه
  • هدف طراحی و فلسفه امنیتی SELinux
  • نقش SELinux در سیستم‌های لینوکسی
  • تفاوت‌های اصلی SELinux با دیگر سیستم‌های امنیتی

فصل 2. ساختار و معماری SELinux

  • تعریف سیاست‌های امنیتی (Security Policies)
  • اجزای اصلی SELinux: Contexts، Labels، Types
  • نحوه عملکرد SELinux در کنترل دسترسی‌ها

فصل 3. انواع سطوح امنیتی (Contexts)

  • تعریف Context و نقش آن در امنیت سیستم
  • انواع مختلف Context در SELinux
  • نحوه ارتباط Context‌ها با پروسه‌ها و فایل‌ها

فصل 4. Security Labels و Types

  • تعریف و اهمیت Security Labels در SELinux
  • تفاوت‌های Types و Labels در SELinux
  • نحوه تخصیص و استفاده از Labels در اشیاء سیستم

فصل 5. نقش‌های SELinux (Roles)

  • تعریف نقش‌ها (Roles) و ارتباط آن‌ها با کاربران
  • نحوه تخصیص نقش‌ها به کاربران و پروسه‌ها
  • معرفی نقش‌های مختلف پیش‌فرض در SELinux

فصل 6. مزایای استفاده از SELinux

  • افزایش امنیت سیستم در برابر تهدیدات داخلی و خارجی
  • کاهش آسیب‌پذیری‌های ناشی از خطاهای انسانی و نرم‌افزاری
  • کنترل دقیق دسترسی‌ها و محدود کردن آسیب‌های ناشی از برنامه‌ها
  • قابلیت اعمال سیاست‌های امنیتی پیچیده و مقیاس‌پذیر

فصل 7. تفاوت SELinux با سیستم‌های امنیتی دیگر

  • مقایسه SELinux با AppArmor و سایر روش‌های MAC
  • نحوه اجرای سیاست‌های امنیتی در SELinux و تفاوت آن با DAC (Discretionary Access Control)
  • مزایای استفاده از SELinux نسبت به فایروال‌ها و ابزارهای دیگر

بخش 2. نصب و پیکربندی اولیه SELinux

 

فصل 1. پیش‌نیازها و الزامات SELinux

  • بررسی نسخه لینوکس و بسته‌های مورد نیاز
  • نصب بسته‌های SELinux در توزیع‌های مختلف لینوکس
    • نصب در CentOS/RHEL/Fedora
  • بررسی پیش‌نیازهای امنیتی (فایروال و پیکربندی شبکه)

فصل 2. فعال‌سازی و غیرفعال‌سازی SELinux

  • فعال‌سازی SELinux در سیستم
    • روش‌های فعال‌سازی از طریق فایل‌های پیکربندی
    • استفاده از دستور setenforce
  • غیرفعال‌سازی SELinux
    • دستورالعمل برای غیرفعال کردن SELinux در حالات مختلف
  • بررسی تأثیرات فعال‌سازی و غیرفعال‌سازی SELinux بر امنیت

فصل 3. بررسی وضعیت SELinux

  • استفاده از دستور sestatus برای بررسی وضعیت SELinux
  • تحلیل خروجی دستور sestatus و توضیحات آن
  • بررسی فایل پیکربندی /etc/selinux/config
    • حالت‌های مختلف SELinux در این فایل (Enforcing، Permissive، Disabled)
    • نحوه تغییر تنظیمات در فایل پیکربندی برای حالت‌های مختلف

فصل 4. پیکربندی SELinux برای عملکرد مناسب

  • پیکربندی SELinux بر اساس نیازهای امنیتی
  • ایجاد تغییرات در سیاست‌های پیش‌فرض SELinux
  • پیکربندی SELinux برای سرویس‌ها و برنامه‌های خاص
    • مثال‌هایی از پیکربندی برای سرویس‌هایی مانند Apache، Nginx و MySQL
  • آشنایی با سیاست‌های targeted و mls

فصل 5. تست و ارزیابی SELinux پس از پیکربندی

  • استفاده از ابزارهای تست برای ارزیابی کارکرد SELinux
  • شبیه‌سازی سناریوهای امنیتی برای اطمینان از عملکرد صحیح SELinux
  • استفاده از دستور getenforce برای بررسی وضعیت SELinux پس از تغییرات
  • روش‌های بررسی فایل‌های لاگ SELinux و تحلیل آن‌ها برای ارزیابی پیکربندی

بخش 3. مفاهیم و سیاست‌های SELinux

 

فصل 1. تعریف سیاست‌ها (Policies) در SELinux

  • مفهوم سیاست‌های امنیتی در SELinux
  • انواع سیاست‌ها (Targeted, MLS, MCS)
  • نحوه تنظیم و تغییر سیاست‌های پیش‌فرض

فصل 2. نقش‌ها (Roles) در SELinux

  • تعریف نقش‌ها و وظایف آن‌ها در SELinux
  • لیست نقش‌های پیش‌فرض در SELinux (مثل system_r, user_r)
  • نحوه اختصاص نقش‌ها به کاربران و فرآیندها

فصل 3. نوع‌ها (Types) در SELinux

  • مفهوم Type Enforcement (TE) در SELinux
  • تفاوت انواع مختلف اشیاء (فایل‌ها، پورت‌ها، فرآیندها)
  • نحوه تخصیص نوع‌ها به فایل‌ها و دایرکتوری‌ها

فصل 4. حالت‌های SELinux

  • حالت Enforcing: بررسی چگونگی اعمال محدودیت‌ها و مجازات‌ها
  • حالت Permissive: بررسی نحوه ثبت هشدارها بدون اعمال محدودیت
  • حالت Disabled: غیرفعال کردن SELinux و چگونگی آن

فصل 5. Security Labels و Types

  • مفهوم Security Labels در SELinux
  • انواع Labels و نحوه استفاده از آن‌ها برای طبقه‌بندی اشیاء
  • بررسی روابط بین Labels و Types در سیاست‌ها

فصل 6. تخصیص سیاست‌ها در SELinux

  • تخصیص سیاست‌های پیش‌فرض برای سرویس‌ها (مثل Apache، Nginx)
  • نحوه تغییر سیاست‌ها برای سرویس‌های خاص و برنامه‌های شخص ثالث
  • استفاده از ابزارهای semanage و seinfo برای مدیریت سیاست‌ها

فصل 7. کنترل دسترسی با MAC (Mandatory Access Control)

  • توضیح در مورد MAC و نقش آن در SELinux
  • چگونگی اعمال کنترل دسترسی اجباری برای فرآیندها و منابع
  • مقایسه MAC در SELinux با سایر روش‌های کنترل دسترسی

فصل 8. مدیریت سیاست‌های امنیتی سفارشی

  • نحوه ایجاد و تعریف سیاست‌های امنیتی سفارشی برای نیازهای خاص
  • نحوه ایجاد قوانین جدید برای سرویس‌ها و برنامه‌های خاص
  • ابزارهای مورد استفاده برای ایجاد و تست سیاست‌های سفارشی (مثل audit2allow, semodule)

فصل 9. بررسی سیاست‌های امنیتی از طریق فایل‌های پیکربندی

  • پیکربندی SELinux در فایل‌های /etc/selinux/config
  • بررسی و تغییر سیاست‌ها در فایل‌های پیکربندی مربوطه
  • تفاوت سیاست‌های targeted و minimum در فایل پیکربندی

فصل 10. ارزیابی و عیب‌یابی سیاست‌ها در SELinux

  • نحوه ارزیابی سیاست‌های فعال در SELinux و کاربرد ابزار seinfo و sesearch
  • بررسی مشکلات ناشی از سیاست‌های نادرست و اصلاح آنها
  • راهکارهایی برای تست و ارزیابی اثرات سیاست‌های جدید

بخش 4. تحلیل و مدیریت قوانین SELinux

 

فصل 1. فهم پیام‌های Log در SELinux

  • تحلیل لاگ‌ها با استفاده از ابزار audit2allow
  • بررسی هشدارها و خطاهای SELinux در فایل‌های لاگ
  • نحوه استخراج پیام‌های avc (Access Vector Cache)

فصل 2. مدیریت تداخلات SELinux با برنامه‌ها

  • شناسایی مشکلات ناشی از SELinux در برنامه‌ها
  • استفاده از ابزار sealert برای نمایش هشدارها و خطاهای SELinux
  • بررسی و حل مشکلات سرویس‌های رایج مانند Apache، Nginx و MySQL

فصل 3. مجاز کردن دسترسی‌های محدود شده

  • استفاده از ابزار audit2allow برای ایجاد قوانین جدید
  • تجزیه و تحلیل پیام‌های avc (Access Vector Cache)
  • اضافه کردن دسترسی‌های مورد نیاز به سیاست‌های SELinux

فصل 4. استفاده از ابزارهای SELinux برای عیب‌یابی

  • ابزار seinfo برای نمایش اطلاعات SELinux
  • ابزار sesearch برای جستجو در سیاست‌های SELinux
  • استفاده از ابزار semanage برای مدیریت تنظیمات SELinux

فصل 5. حل مشکلات رایج SELinux

  • حل مشکلات دسترسی در برنامه‌های third-party
  • شناسایی و رفع مشکلات خاص در فایروال‌ها و سرویس‌های شبکه‌ای
  • عیب‌یابی مشکلات مربوط به فایل‌های سیستمی و دایرکتوری‌ها

فصل 6. پیکربندی قوانین امنیتی جدید

  • نحوه نوشتن و اعمال سیاست‌های امنیتی جدید با استفاده از فایل‌های پیکربندی SELinux
  • استفاده از دستور semanage برای ایجاد و مدیریت قوانین جدید
  • تعریف و تنظیم محدودیت‌های جدید برای برنامه‌ها و سرویس‌ها

فصل 7. استفاده از SELinux در محیط‌های توسعه و آزمایش

  • استفاده از SELinux در تست‌های محیط‌های توسعه‌ای (مثل Docker و Kubernetes)
  • شبیه‌سازی مشکلات SELinux در محیط‌های تست و رفع آن‌ها
  • راهکارهایی برای کاهش خطاهای SELinux در محیط‌های آزمایشی

بخش 5. مدیریت و تنظیمات پیشرفته SELinux

 

فصل 1. تعریف سیاست‌های امنیتی سفارشی:

  • ایجاد و تنظیم سیاست‌های امنیتی اختصاصی برای سرویس‌ها و برنامه‌های خاص
  • تعریف انواع (Types) و نقش‌ها (Roles) در سیاست‌های سفارشی
  • استفاده از ابزار semanage برای مدیریت سیاست‌ها و تنظیمات پیشرفته

فصل 2. تغییر نوع‌ها و دسترسی‌ها در سیاست‌های جدید:

  • تغییر نوع‌ها و دسترسی‌ها برای برنامه‌ها و فایل‌ها
  • استفاده از دستور chcon برای تغییر نوع‌ها در فایل‌ها و دایرکتوری‌ها
  • بررسی امنیت فایل‌ها با دستور semanage fcontext و semanage برای تنظیمات پیشرفته

فصل 3. استفاده از فایل‌های پیکربندی برای بهینه‌سازی SELinux:

  • ویرایش فایل‌های پیکربندی مانند /etc/selinux/config و /etc/selinux/targeted/contexts برای تغییر تنظیمات پایه
  • تنظیمات امنیتی در فایل /etc/selinux/targeted/contexts برای بهینه‌سازی و افزایش امنیت

فصل 4. تنظیمات مدیریت ماژول‌های SELinux:

  • بارگذاری و مدیریت ماژول‌های SELinux با دستور semodule
  • نصب و به‌روزرسانی ماژول‌های SELinux
  • استفاده از دستور semodule -l برای نمایش ماژول‌های نصب شده
  • نحوه غیرفعال کردن یا حذف ماژول‌ها با استفاده از دستور semodule -r

فصل 5. تنظیمات دسترسی‌های فایل‌ها و دایرکتوری‌ها:

  • تغییر نوع‌ها و دایرکتوری‌ها با استفاده از دستور chcon برای تغییر ویژگی‌های امنیتی
  • تنظیمات پیشرفته و بهینه‌سازی امنیت فایل‌ها با دستور semanage fcontext
  • بررسی و تنظیمات امنیتی برای فایل‌های خاص با استفاده از دستور seinfo

فصل 6. مدیریت قوانین SELinux با استفاده از ابزارهای تجزیه و تحلیل:

  • استفاده از audit2allow برای ایجاد قوانین جدید و مجاز کردن دسترسی‌های محدود شده
  • تجزیه و تحلیل پیام‌های avc (Access Vector Cache) برای بررسی مشکلات دسترسی و قوانین امنیتی
  • استفاده از seinfo و sesearch برای بررسی قوانین و وضعیت SELinux

فصل 7. مدیریت دسترسی به شبکه و پورت‌ها با SELinux:

  • تنظیمات دسترسی به پورت‌ها و پروتکل‌های خاص با استفاده از SELinux
  • مدیریت دسترسی به شبکه‌ها و پورت‌ها از طریق سیاست‌های SELinux
  • ایجاد سیاست‌های خاص برای سرویس‌های شبکه‌ای مانند SSH، FTP و HTTP

فصل 8. پیکربندی SELinux برای Docker و Kubernetes:

  • استفاده از SELinux در محیط‌های containerized مانند Docker
  • تنظیمات امنیتی SELinux برای Kubernetes و برنامه‌های containerized
  • نحوه مدیریت دسترسی‌ها و سیاست‌های SELinux در محیط‌های ابری و توزیع‌شده

فصل 9. استفاده از SELinux در سیستم‌های احراز هویت و کنترل دسترسی:

  • ترکیب SELinux با سیستم‌های LDAP و Kerberos برای کنترل دسترسی‌های مبتنی بر هویت
  • تنظیمات امنیتی SELinux برای دسترسی‌های مبتنی بر هویت در شبکه‌های سازمانی

فصل 10. بهینه‌سازی عملکرد SELinux:

  • روش‌های کاهش بار سیستم ناشی از اجرای SELinux
  • بهینه‌سازی استفاده از منابع سیستم هنگام اعمال سیاست‌های امنیتی

فصل 11. حفظ امنیت و پایداری سیستم‌ها با SELinux:

  • بهترین شیوه‌ها برای پیاده‌سازی SELinux در سازمان‌ها
  • محافظت از سیستم در برابر تهدیدات و حملات با استفاده از SELinux
  • پیگیری و مانیتورینگ سیاست‌های SELinux برای اطمینان از عملکرد صحیح آن
[cdb_course_lessons title=”بخش 1. مقدمه و مبانی SELinux”][cdb_course_lesson title=”فصل 1. آشنایی با SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تاریخچه SELinux و شروع پروژه” subtitle=”توضیحات کامل”]پروژه SELinux (Security-Enhanced Linux) به‌عنوان یک راهکار امنیتی پیشرفته برای سیستم‌های لینوکسی توسعه یافت تا کنترل دقیقی بر دسترسی‌های کاربران و پردازش‌ها به منابع سیستم اعمال کند. این پروژه در ابتدا توسط آژانس امنیت ملی ایالات متحده (NSA) آغاز شد و سپس با همکاری جامعه متن‌باز گسترش یافت.

آغاز پروژه

در اواخر دهه ۱۹۹۰، نیاز به یک سیستم امنیتی قوی‌تر در محیط‌های چندکاربره و حساس امنیتی احساس شد. سیستم‌های سنتی لینوکس از مدل امنیتی DAC (Discretionary Access Control) استفاده می‌کردند که به کاربران و پردازش‌ها اجازه می‌داد بر اساس مالکیت فایل‌ها، مجوزهای خواندن، نوشتن و اجرا را تغییر دهند. این مدل، اگرچه در بسیاری از موارد کافی بود، اما در محیط‌های پرمخاطره دچار نقاط ضعف امنیتی شدیدی بود.

NSA در سال ۱۹۹۸ یک نمونه اولیه از MAC (Mandatory Access Control) را برای لینوکس توسعه داد. این نمونه اولیه، پایه‌گذار پروژه SELinux شد که امنیت را با اعمال سیاست‌های دقیق و جلوگیری از اجرای غیرمجاز پردازش‌ها و کاربران تقویت می‌کرد.

انتشار اولیه و همکاری با جامعه متن‌باز

در سال ۲۰۰۰، NSA برای افزایش امنیت در سیستم‌های لینوکسی، کدهای اولیه SELinux را به‌صورت متن‌باز منتشر کرد. این اقدام باعث شد توسعه‌دهندگان جامعه لینوکس و شرکت‌هایی مانند Red Hat و Debian نیز در بهبود و یکپارچه‌سازی آن مشارکت کنند. در نهایت، این پروژه به بخشی از کرنل اصلی لینوکس تبدیل شد و از نسخه ۲.۶ کرنل لینوکس (۲۰۰۳) به‌عنوان یک ماژول امنیتی استاندارد در توزیع‌های مختلف لینوکس در دسترس قرار گرفت.

هدف اصلی SELinux

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

ویژگی‌های کلیدی SELinux در نسخه‌های اولیه

  • معرفی MAC (کنترل دسترسی اجباری) برای جلوگیری از سوءاستفاده از مجوزهای استاندارد DAC
  • امکان تعیین سیاست‌های امنیتی دقیق برای هر پردازش و فایل
  • جلوگیری از اجرای کدهای غیرمجاز در سطح کرنل و کاربر
  • محدودسازی دسترسی پردازش‌ها به منابع سیستم حتی در صورت نفوذ مهاجم

جمع‌بندی

SELinux به‌عنوان یکی از مهم‌ترین پیشرفت‌های امنیتی در دنیای لینوکس شناخته می‌شود. این پروژه که در ابتدا توسط NSA توسعه یافت، امروزه با مشارکت جامعه متن‌باز به بخشی اساسی از سیستم‌های لینوکسی تبدیل شده است. با ورود به کرنل لینوکس از نسخه ۲.۶، این فناوری توانست امنیت سیستم‌های لینوکسی را به سطحی بالاتر ببرد و کنترل دقیقی بر اجرای پردازش‌ها و دسترسی به منابع سیستم فراهم کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”هدف طراحی و فلسفه امنیتی SELinux” subtitle=”توضیحات کامل”]SELinux (Security-Enhanced Linux) با هدف افزایش امنیت سیستم‌های لینوکسی از طریق کنترل دقیق دسترسی‌ها و محدودسازی رفتار پردازش‌ها طراحی شد. این سیستم امنیتی که توسط NSA توسعه یافت، از یک مدل امنیتی اجباری (MAC – Mandatory Access Control) استفاده می‌کند که برخلاف مدل‌های سنتی DAC (Discretionary Access Control)، حتی در صورت سوءاستفاده کاربران یا نفوذ مهاجمان، سطح دسترسی آن‌ها را به‌شدت محدود می‌کند.

هدف اصلی طراحی SELinux

SELinux برای مقابله با تهدیدهای امنیتی در سیستم‌های چندکاربره و محیط‌های حساس امنیتی طراحی شد. در مدل‌های امنیتی سنتی DAC، هر کاربر یا پردازش مالک فایل‌های خود است و می‌تواند مجوزهای آن‌ها را تغییر دهد. این ساختار در برابر حملات بدافزارها، بهره‌برداری از آسیب‌پذیری‌ها، و حملات افزایش سطح دسترسی بسیار آسیب‌پذیر است. SELinux با اعمال سیاست‌های امنیتی سخت‌گیرانه و غیرقابل تغییر توسط کاربران عادی، این نقاط ضعف را برطرف می‌کند.

فلسفه امنیتی SELinux

SELinux بر اساس اصول زیر طراحی شده است:

  1. اصل حداقل دسترسی (Least Privilege)
    • هر پردازش فقط به منابعی که واقعاً به آن نیاز دارد دسترسی دارد و هیچ پردازشی اجازه دسترسی گسترده یا غیرضروری ندارد.
    • حتی اگر یک پردازش به خطر بیفتد، نمی‌تواند از طریق دسترسی‌های اضافی باعث آسیب گسترده در سیستم شود.
  2. کنترل دسترسی اجباری (Mandatory Access Control – MAC)
    • در مدل DAC، کاربران می‌توانند مجوزهای فایل‌ها و پردازش‌ها را تغییر دهند، اما در MAC، سیاست‌های امنیتی توسط مدیر سیستم تنظیم می‌شوند و کاربران عادی نمی‌توانند آن‌ها را تغییر دهند.
    • SELinux تصمیم می‌گیرد که آیا یک پردازش مجاز به دسترسی به یک فایل، اجرا شدن، یا برقراری ارتباط با سایر پردازش‌ها است یا نه.
  3. مدل امنیتی مبتنی بر سیاست (Policy-Based Security Model)
    • SELinux از سیاست‌های امنیتی (Security Policies) استفاده می‌کند که به‌دقت تعیین می‌کنند هر پردازش و کاربر به چه منابعی می‌تواند دسترسی داشته باشد.
    • این سیاست‌ها توسط مدیر سیستم قابل پیکربندی و به‌روزرسانی هستند.
  4. حفاظت در برابر حملات اجرای کد مخرب
    • حتی اگر یک مهاجم بتواند از طریق یک آسیب‌پذیری نرم‌افزاری وارد سیستم شود، SELinux با محدود کردن اجرای کدها، از بهره‌برداری بیشتر جلوگیری می‌کند.
    • حفاظت در برابر حملات باینری، اجرای کد از مناطق غیرمجاز حافظه و حملات تزریق کد از جمله قابلیت‌های SELinux است.
  5. ایزوله‌سازی پردازش‌ها (Process Isolation)
    • پردازش‌ها در محیط‌های جداگانه اجرا می‌شوند و نمی‌توانند بدون مجوز مشخص‌شده در سیاست‌های امنیتی با یکدیگر ارتباط برقرار کنند.
    • این ویژگی از حملات Privilege Escalation (افزایش سطح دسترسی) جلوگیری می‌کند.
  6. مبتنی بر سیاست‌های امنیتی پویا و قابل تنظیم
    • مدیران سیستم می‌توانند سیاست‌های امنیتی SELinux را بر اساس نیازهای سازمانی تغییر، اصلاح و به‌روزرسانی کنند.
    • سه حالت اصلی SELinux شامل Enforcing (فعال و سخت‌گیرانه)، Permissive (ثبت وقایع بدون اجرا)، و Disabled (غیرفعال) امکان کنترل دقیق سطح امنیتی سیستم را فراهم می‌کند.

جمع‌بندی

SELinux با هدف تقویت امنیت در سیستم‌های لینوکسی طراحی شد و از مدل کنترل دسترسی اجباری (MAC) برای محدودسازی دسترسی‌ها، جلوگیری از اجرای کدهای مخرب، و ایزوله‌سازی پردازش‌ها استفاده می‌کند. این سیستم از یک مدل امنیتی مبتنی بر سیاست پیروی می‌کند که به مدیران اجازه می‌دهد دسترسی‌های کاربران و پردازش‌ها را به‌صورت دقیق کنترل کنند. در نتیجه، حتی در صورت وجود آسیب‌پذیری‌های نرم‌افزاری، مهاجمان نمی‌توانند کنترل کاملی بر سیستم به دست آورند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نقش SELinux در سیستم‌های لینوکسی” subtitle=”توضیحات کامل”]SELinux (Security-Enhanced Linux) یک لایه امنیتی پیشرفته در سیستم‌های لینوکسی است که با کنترل دقیق دسترسی‌ها و اجرای سیاست‌های امنیتی سخت‌گیرانه، سطح ایمنی سیستم را افزایش می‌دهد. این سیستم از مدل کنترل دسترسی اجباری (MAC – Mandatory Access Control) استفاده می‌کند و برخلاف مدل سنتی DAC (Discretionary Access Control)، کنترل دسترسی‌ها را از اختیار کاربران خارج کرده و توسط سیاست‌های امنیتی مدیر سیستم تعیین می‌شود.

وظایف و نقش SELinux در سیستم‌های لینوکسی

  1. کنترل سطح دسترسی پردازش‌ها به منابع سیستم
    • هر پردازش فقط می‌تواند به فایل‌ها، پورت‌ها، و منابعی که مجاز شده است دسترسی داشته باشد.
    • اگر یک پردازش مخرب یا دارای آسیب‌پذیری امنیتی باشد، SELinux از دسترسی غیرمجاز آن به سایر بخش‌های سیستم جلوگیری می‌کند.
  2. محافظت در برابر حملات افزایش سطح دسترسی (Privilege Escalation)
    • در سیستم‌های بدون SELinux، اگر یک کاربر عادی یا یک پردازش موفق به اجرای یک کد مخرب شود، ممکن است بتواند سطح دسترسی خود را افزایش دهد.
    • SELinux این حملات را با ایزوله‌سازی پردازش‌ها و محدود کردن دسترسی‌ها خنثی می‌کند.
  3. حفاظت از سرویس‌های شبکه و نرم‌افزارهای حساس
    • در سرورهای لینوکسی، سرویس‌هایی مانند Apache, Nginx, MySQL, SSH در معرض حملات هکرها قرار دارند.
    • SELinux اطمینان حاصل می‌کند که این سرویس‌ها فقط مجاز به استفاده از پورت‌ها، فایل‌ها، و منابع مشخص‌شده در سیاست‌های امنیتی هستند و در صورت تلاش برای اجرای عملیات غیرمجاز، دسترسی آن‌ها را مسدود می‌کند.
  4. ایزوله‌سازی پردازش‌ها برای جلوگیری از گسترش بدافزارها
    • در صورت نفوذ یک بدافزار یا سوءاستفاده از آسیب‌پذیری یک نرم‌افزار، SELinux اجازه نمی‌دهد که این بدافزار به سایر پردازش‌ها یا فایل‌های مهم سیستم دسترسی داشته باشد یا اجرا شود.
    • این ویژگی باعث جلوگیری از انتشار بدافزارها و تهدیدهای امنیتی در سطح سیستم می‌شود.
  5. کنترل دقیق بر نحوه اجرای برنامه‌ها و اجرای کدهای ناشناخته
    • SELinux به کمک سیاست‌های امنیتی (Security Policies) تعیین می‌کند که هر برنامه در چه سطحی اجرا شود و به چه منابعی دسترسی داشته باشد.
    • حتی اگر یک کاربر با دسترسی بالا (مثلاً root) بخواهد یک برنامه مخرب اجرا کند، SELinux می‌تواند آن را مسدود کند.
  6. نظارت و ثبت رویدادهای امنیتی
    • SELinux تمامی تلاش‌های موفق و ناموفق برای دسترسی به منابع ممنوعه را ثبت می‌کند.
    • این اطلاعات در لاگ‌های سیستم ذخیره شده و مدیر سیستم می‌تواند با تحلیل آن‌ها، تهدیدات امنیتی احتمالی را شناسایی و اقدامات لازم را انجام دهد.
  7. افزایش امنیت در محیط‌های چندکاربره و سرورهای حساس
    • در محیط‌هایی که چندین کاربر به‌طور همزمان از سیستم استفاده می‌کنند، SELinux مانع از دسترسی کاربران به داده‌های یکدیگر می‌شود.
    • در سرورهای سازمانی، این ویژگی از نشت اطلاعات و حملات داخلی جلوگیری می‌کند.

مثال‌هایی از نقش SELinux در سیستم‌های لینوکسی

  1. محافظت از وب‌سرور Apache
    • در صورت نفوذ یک هکر به وب‌سرور Apache، SELinux اجازه نمی‌دهد که این پردازش به سایر فایل‌های سیستم یا منابع حیاتی دسترسی پیدا کند.
    • مسیر پیکربندی مرتبط در SELinux:
      /etc/selinux/targeted/contexts/files/file_contexts
      
  2. محدود کردن دسترسی سرویس MySQL
    • پایگاه داده MySQL تحت SELinux فقط مجاز به خواندن و نوشتن در مسیرهای مشخص‌شده است و نمی‌تواند به سایر قسمت‌های سیستم دسترسی داشته باشد.
    • برای مشاهده سطح دسترسی‌های SELinux به MySQL:
      sudo ls -Z /var/lib/mysql
      
  3. کنترل دسترسی به پورت‌های شبکه
    • اگر یک برنامه بدون مجوز بخواهد روی یک پورت شبکه حساس اجرا شود، SELinux آن را مسدود می‌کند.
    • برای مشاهده مجوزهای پورت‌های شبکه در SELinux:
      sudo semanage port -l
      

جمع‌بندی

SELinux نقش کلیدی در افزایش امنیت سیستم‌های لینوکسی ایفا می‌کند. این سیستم با مدل کنترل دسترسی اجباری (MAC)، پردازش‌ها را ایزوله کرده و دسترسی‌های غیرمجاز را مسدود می‌کند. از مهم‌ترین وظایف SELinux می‌توان به کنترل سطح دسترسی پردازش‌ها، محافظت از سرویس‌های حیاتی، جلوگیری از گسترش بدافزارها و نظارت بر رویدادهای امنیتی اشاره کرد. در سرورهای سازمانی و محیط‌های چندکاربره، SELinux به‌عنوان یک ابزار حیاتی برای جلوگیری از حملات و حفظ امنیت داده‌ها شناخته می‌شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تفاوت‌های اصلی SELinux با دیگر سیستم‌های امنیتی” subtitle=”توضیحات کامل”]SELinux یکی از پیشرفته‌ترین سیستم‌های امنیتی در دنیای لینوکس است که بر اساس مدل کنترل دسترسی اجباری (MAC – Mandatory Access Control) طراحی شده است. این سیستم با سایر مکانیزم‌های امنیتی موجود مانند DAC (Discretionary Access Control)، AppArmor، Grsecurity و SMACK تفاوت‌های اساسی دارد. در این بخش، مهم‌ترین تفاوت‌های SELinux با دیگر سیستم‌های امنیتی بررسی می‌شود.

۱. تفاوت SELinux با کنترل دسترسی اختیاری (DAC)

مدل DAC (که در اکثر توزیع‌های لینوکسی به‌صورت پیش‌فرض فعال است) به کاربران اجازه می‌دهد که مالک فایل‌های خود باشند و مجوزهای دسترسی را تغییر دهند. این مدل دارای ضعف‌های امنیتی مختلفی است که SELinux آن‌ها را برطرف می‌کند:

ویژگی DAC (مدل پیش‌فرض لینوکس) SELinux
مدل دسترسی اختیاری (مالک فایل می‌تواند مجوزها را تغییر دهد) اجباری (دسترسی‌ها توسط سیاست‌های امنیتی تعیین می‌شوند)
کنترل فرآیندها هر فرآیند می‌تواند سایر فرآیندهای متعلق به همان کاربر را کنترل کند هر فرآیند فقط بر اساس سیاست‌های امنیتی مجاز به اجرا است
حفاظت از سرویس‌ها فرآیندهای سیستمی ممکن است به داده‌های حساس دسترسی داشته باشند سیاست‌های SELinux دسترسی به منابع را حتی برای root محدود می‌کند
مقابله با بدافزارها یک بدافزار با مجوزهای کاربر ممکن است در کل سیستم گسترش یابد SELinux اجازه نمی‌دهد بدافزار از محدوده تعیین‌شده خود فراتر برود

به همین دلیل، SELinux یک لایه امنیتی اضافه در بالای DAC ایجاد می‌کند که از تغییرات ناخواسته در سطح دسترسی‌ها جلوگیری کرده و امنیت سیستم را افزایش می‌دهد.

۲. تفاوت SELinux با AppArmor

AppArmor یکی دیگر از سیستم‌های امنیتی در لینوکس است که مانند SELinux مبتنی بر کنترل دسترسی اجباری (MAC) است، اما از روشی متفاوت استفاده می‌کند:

ویژگی SELinux AppArmor
نوع کنترل دسترسی مبتنی بر Labeling (برچسب‌گذاری روی فایل‌ها و فرآیندها) مبتنی بر Profile (پروفایل‌های امنیتی برای برنامه‌ها)
پیچیدگی سیاست‌های امنیتی بسیار دقیق و پیچیده، انعطاف‌پذیر ولی سخت برای پیکربندی ساده‌تر، مناسب برای کاربران معمولی
کنترل فایل‌ها و پردازش‌ها اعمال سیاست‌های امنیتی بر اساس برچسب‌های امنیتی محدود کردن برنامه‌ها بر اساس مسیر فایل‌های اجرایی
مدیریت تنظیمات سخت‌تر، اما کنترل امنیتی دقیق‌تر آسان‌تر، اما انعطاف‌پذیری کمتر

به دلیل انعطاف‌پذیری و دقت بیشتر SELinux، این سیستم امنیتی بیشتر در سرورهای سازمانی و محیط‌های حساس استفاده می‌شود، در حالی که AppArmor برای سیستم‌های دسکتاپ و کاربران عادی مناسب‌تر است.

۳. تفاوت SELinux با Grsecurity

Grsecurity یک پچ امنیتی برای هسته لینوکس (Kernel Patch) است که چندین ویژگی امنیتی مهم را ارائه می‌دهد. تفاوت‌های اصلی بین این دو سیستم عبارت‌اند از:

ویژگی SELinux Grsecurity
سطح پیاده‌سازی در سطح کاربر و کرنل پیاده‌سازی شده و در توزیع‌های لینوکسی به‌صورت پیش‌فرض موجود است نیاز به پچ کردن کرنل دارد
کنترل دسترسی‌ها بر اساس سیاست‌های MAC و برچسب‌گذاری امنیتی دارای حفاظت‌های سخت‌افزاری و تصادفی‌سازی آدرس حافظه (ASLR)
استفاده در توزیع‌های لینوکسی به‌صورت پیش‌فرض در توزیع‌های Red Hat, CentOS, Fedora, Debian فعال است به‌طور رسمی در هیچ توزیعی گنجانده نشده و نیاز به نصب دستی دارد

Grsecurity بیشتر روی امنیت کرنل تمرکز دارد و در سیستم‌های حیاتی و سخت‌افزارهای خاص مورد استفاده قرار می‌گیرد، در حالی که SELinux امنیت کل سیستم را مدیریت می‌کند.

۴. تفاوت SELinux با SMACK

SMACK (Simplified Mandatory Access Control Kernel) یک سیستم امنیتی مشابه SELinux است که در برخی از دستگاه‌های IoT و سیستم‌های جاسازی‌شده (Embedded Systems) استفاده می‌شود. تفاوت‌های اصلی آن با SELinux عبارت‌اند از:

ویژگی SELinux SMACK
پیچیدگی پیاده‌سازی پیچیده و نیازمند دانش فنی بالا ساده‌تر از SELinux
استفاده در سیستم‌های IoT به دلیل پیچیدگی کمتر مورد استفاده قرار نمی‌گیرد به‌طور گسترده در سیستم‌های جاسازی‌شده و IoT استفاده می‌شود
مدیریت سیاست‌های امنیتی انعطاف‌پذیر ولی نیازمند تنظیمات دقیق ساده و آسان برای مدیریت

SELinux بیشتر در سرورها و سیستم‌های سازمانی استفاده می‌شود، اما SMACK به دلیل سبک‌تر بودن، در دستگاه‌های IoT و سیستم‌های جاسازی‌شده کاربرد دارد.

جمع‌بندی

SELinux یک لایه امنیتی پیشرفته و اجباری در سیستم‌های لینوکسی است که با محدود کردن سطح دسترسی پردازش‌ها و کاربران، امنیت سیستم را افزایش می‌دهد. این سیستم در مقایسه با DAC، AppArmor، Grsecurity و SMACK، مزایا و معایب خاص خود را دارد:

  • در مقایسه با DAC: امنیت بسیار بالاتر، اما نیازمند مدیریت پیچیده‌تر است.
  • در مقایسه با AppArmor: کنترل دقیق‌تر ولی سخت‌تر برای پیکربندی.
  • در مقایسه با Grsecurity: بر روی کل سیستم متمرکز است، نه فقط کرنل.
  • در مقایسه با SMACK: مناسب‌تر برای سرورهای سازمانی ولی سنگین‌تر برای سیستم‌های جاسازی‌شده.

به همین دلیل، SELinux بیشتر در سرورهای سازمانی، محیط‌های ابری و سیستم‌هایی که نیاز به امنیت بالا دارند استفاده می‌شود.[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. ساختار و معماری SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تعریف سیاست‌های امنیتی (Security Policies)” subtitle=”توضیحات کامل”]سیاست‌های امنیتی (Security Policies) در SELinux مجموعه‌ای از قوانین و محدودیت‌ها هستند که تعیین می‌کنند کدام فرآیندها و کاربران می‌توانند به چه منابعی در سیستم دسترسی داشته باشند. این سیاست‌ها بر اساس مدل کنترل دسترسی اجباری (MAC – Mandatory Access Control) کار می‌کنند و بر دسترسی به فایل‌ها، پورت‌ها، سوکت‌ها، پردازش‌ها و سایر منابع سیستمی نظارت می‌کنند.

۱. ساختار سیاست‌های امنیتی در SELinux

سیاست‌های امنیتی در SELinux به چندین بخش اصلی تقسیم می‌شوند:

الف) قوانین (Rules)

قوانینی که تعیین می‌کنند کدام فرآیندها و کاربران می‌توانند چه عملیاتی را روی چه منابعی انجام دهند.

ب) دامنه‌ها (Domains)

هر فرآیند در SELinux داخل یک دامنه امنیتی (Domain) اجرا می‌شود که سطح دسترسی آن را مشخص می‌کند.

ج) نوع‌ها (Types)

به هر فایل یا شیء سیستم‌عامل یک برچسب امنیتی (Security Context) اختصاص داده می‌شود که مشخص می‌کند چه سیاست‌هایی روی آن اعمال می‌شوند.

د) نقش‌ها (Roles)

SELinux از مدل کنترل دسترسی مبتنی بر نقش (RBAC – Role-Based Access Control) استفاده می‌کند. کاربران می‌توانند فقط در نقش‌هایی فعالیت کنند که به آن‌ها اجازه داده شده است.

هـ) کاربران SELinux (SELinux Users)

کاربران در SELinux با کاربران معمولی لینوکس تفاوت دارند. به هر کاربر SELinux یک نقش امنیتی و مجموعه‌ای از مجوزها اختصاص داده می‌شود.

۲. نحوه اعمال سیاست‌های امنیتی در SELinux

سیاست‌های SELinux در قالب برچسب‌های امنیتی (Security Contexts) به فایل‌ها، پردازش‌ها و منابع مختلف سیستم تخصیص داده می‌شوند. یک برچسب امنیتی شامل سه بخش اصلی است:

system_u:object_r:httpd_t:s0

هر بخش در این برچسب مفهوم خاصی دارد:

  • system_u → کاربر SELinux
  • object_r → نقش (Role)
  • httpd_t → نوع (Type)، که معمولاً نشان‌دهنده سرویس یا فرآیند خاصی است
  • s0 → سطح امنیتی (Sensitivity Level)

۳. انواع سیاست‌های امنیتی در SELinux

۱) سیاست‌های هدفمند (Targeted Policy)

این نوع سیاست‌ها برای محدود کردن سرویس‌های خاصی در سیستم طراحی شده‌اند و پرکاربردترین نوع سیاست SELinux محسوب می‌شوند.

۲) سیاست‌های حداقلی (MLS – Multi-Level Security)

این نوع سیاست‌ها در سیستم‌هایی که نیاز به طبقه‌بندی و سطح‌بندی اطلاعات دارند، استفاده می‌شوند (مانند سیستم‌های دولتی و نظامی).

۳) سیاست‌های مشروط (Conditional Policies)

این سیاست‌ها اجازه می‌دهند که برخی قوانین امنیتی در شرایط خاصی فعال یا غیرفعال شوند.

۴. بررسی سیاست‌های امنیتی فعال در سیستم

برای مشاهده سیاست‌های فعال در سیستم، از دستور زیر استفاده می‌شود:

sestatus

برای مشاهده نوع امنیتی فایل‌ها و فرآیندها:

ls -Z /var/www/html
ps -eZ | grep httpd

جمع‌بندی

سیاست‌های امنیتی در SELinux مجموعه‌ای از قوانین دقیق و کنترل‌شده هستند که تعیین می‌کنند چه چیزی می‌تواند در سیستم اجرا شود و چگونه منابع مورد استفاده قرار گیرند. این سیاست‌ها از طریق برچسب‌های امنیتی (Security Contexts) روی فایل‌ها، پردازش‌ها و کاربران اعمال می‌شوند و نقش بسیار مهمی در افزایش امنیت سیستم‌های لینوکسی دارند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”اجزای اصلی SELinux: Contexts، Labels، Types” subtitle=”توضیحات کامل”]SELinux برای مدیریت امنیت سیستم از سه مفهوم کلیدی استفاده می‌کند: Contexts (متن‌های امنیتی)، Labels (برچسب‌ها) و Types (انواع). این اجزا تعیین می‌کنند که کدام فرآیندها و کاربران می‌توانند به چه منابعی دسترسی داشته باشند و چه عملیاتی را روی آن‌ها انجام دهند.

۱. Contexts (متن‌های امنیتی) در SELinux

هر فایل، پردازش، پورت، دستگاه و سایر اشیای سیستم در SELinux دارای یک متن امنیتی (Security Context) است. این متن امنیتی شامل چهار بخش اصلی است:

system_u:object_r:httpd_t:s0
اجزای متن امنیتی:
  • system_u → کاربر SELinux (User)
  • object_r → نقش (Role)
  • httpd_t → نوع (Type)، که سطح دسترسی را تعیین می‌کند
  • s0 → سطح حساسیت (Sensitivity Level)

متن‌های امنیتی برای تعیین مجوزهای دسترسی فرآیندها و اشیا در SELinux به‌کار می‌روند. برای مشاهده متن امنیتی یک فایل یا دایرکتوری از دستور زیر استفاده کنید:

ls -Z /var/www/html/index.html

خروجی نمونه:

-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html

۲. Labels (برچسب‌های امنیتی) در SELinux

برچسب‌های امنیتی، اطلاعات متنی امنیتی را به اشیا و منابع سیستم اختصاص می‌دهند. این برچسب‌ها مشخص می‌کنند که یک فایل، پردازش، پورت یا دستگاه چگونه دسته‌بندی شده و چه سیاست‌هایی روی آن اعمال می‌شود.

مثال‌هایی از برچسب‌های امنیتی:
فایل یا فرآیند برچسب امنیتی توضیح
/etc/passwd system_u:object_r:passwd_file_t:s0 فایل اطلاعات کاربران
/var/www/html/index.html system_u:object_r:httpd_sys_content_t:s0 فایل محتوای وب سرور Apache
sshd process system_u:system_r:sshd_t:s0 فرآیند سرویس SSH
دستور مشاهده برچسب‌های امنیتی:

برای مشاهده برچسب‌های امنیتی در کل فایل‌سیستم:

ls -Z /

برای مشاهده برچسب یک فرآیند:

ps -eZ | grep httpd

۳. Types (نوع‌ها) در SELinux

Type (نوع امنیتی) مهم‌ترین بخش از متن امنیتی است و مشخص می‌کند که چه سیاستی روی فایل یا فرآیند اعمال می‌شود. سیستم SELinux از این بخش برای اعمال سیاست‌های امنیتی و کنترل دسترسی اجباری (MAC) استفاده می‌کند.

مثال‌هایی از Type در SELinux:
نوع (Type) کاربرد
httpd_t مربوط به فرآیند Apache
httpd_sys_content_t فایل‌های محتوای وب در دایرکتوری /var/www/html/
passwd_file_t فایل‌های حساس مانند /etc/passwd
sshd_t فرآیند سرویس SSH
دستور تغییر Type یک فایل در SELinux:
chcon -t httpd_sys_content_t /var/www/html/index.html

جمع‌بندی

SELinux از متن‌های امنیتی (Contexts) برای برچسب‌گذاری (Labels) منابع سیستم و تعیین نوع‌های امنیتی (Types) استفاده می‌کند. این سیستم کنترل امنیتی به جلوگیری از دسترسی‌های غیرمجاز و حملات امنیتی کمک می‌کند. با استفاده از دستورات ls -Z و ps -eZ می‌توان برچسب‌ها و نوع‌های امنیتی را مشاهده و بررسی کرد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نحوه عملکرد SELinux در کنترل دسترسی‌ها” subtitle=”توضیحات کامل”]SELinux از یک مدل کنترل دسترسی اجباری (MAC – Mandatory Access Control) استفاده می‌کند که بر خلاف کنترل دسترسی اختیاری (DAC – Discretionary Access Control)، سطح امنیتی بسیار بالاتری را فراهم می‌کند. در این بخش، نحوه عملکرد SELinux در کنترل دسترسی‌ها را بررسی می‌کنیم.

۱. مدل کنترل دسترسی SELinux

SELinux دسترسی‌ها را بر اساس سیاست‌های امنیتی از پیش تعیین‌شده کنترل می‌کند. این سیاست‌ها تعیین می‌کنند که کدام فرآیندها، کاربران و اشیای سیستم می‌توانند به چه منابعی دسترسی داشته باشند.

مقایسه DAC و MAC:
نوع کنترل نحوه عملکرد
DAC (کنترل دسترسی اختیاری) کاربر مالک می‌تواند دسترسی‌ها را تغییر دهد.
MAC (کنترل دسترسی اجباری) حتی کاربر ریشه (root) نمی‌تواند سیاست‌های امنیتی را دور بزند.

۲. بررسی دسترسی‌ها با avc: denied

هنگامی که SELinux یک دسترسی را مسدود می‌کند، یک پیام avc: denied در audit.log ثبت می‌شود. این پیام نشان می‌دهد که یک فرآیند سعی کرده است عملی را انجام دهد که مطابق سیاست‌های امنیتی SELinux مجاز نیست.

مشاهده لاگ‌های SELinux:
sudo cat /var/log/audit/audit.log | grep AVC
نمونه لاگ avc: denied
type=AVC msg=audit(1710028476.091:236): avc: denied { write } for pid=2394 comm="httpd" name="index.html" dev="sda1" ino=1298476 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file
توضیح لاگ:
  • avc: denied { write } → عملیات نوشتن روی فایل مسدود شده است.
  • pid=2394 comm="httpd" → فرآیند httpd (Apache) این درخواست را ارسال کرده است.
  • scontext=system_u:system_r:httpd_t:s0 → متن امنیتی مربوط به فرآیند httpd.
  • tcontext=unconfined_u:object_r:user_home_t:s0 → متن امنیتی مربوط به فایل /home/user/index.html.
  • tclass=file → نوع منبع: فایل.

۳. چگونه SELinux دسترسی‌ها را کنترل می‌کند؟

SELinux بر اساس سه مکانیزم اصلی دسترسی‌ها را مدیریت می‌کند:

۱. کنترل بر اساس سیاست‌های امنیتی (Security Policies)

تمامی دسترسی‌ها به منابع سیستم توسط سیاست‌های امنیتی تنظیم می‌شود. اگر سیاست امنیتی دسترسی خاصی را تعریف نکرده باشد، به‌صورت پیش‌فرض محدود خواهد شد.

۲. استفاده از برچسب‌های امنیتی (Security Labels)

SELinux به هر فایل، فرآیند، پورت و دستگاه یک برچسب امنیتی (Security Label) اختصاص می‌دهد. این برچسب‌ها مشخص می‌کنند که چه نوع دسترسی‌هایی مجاز هستند.

۳. بررسی دسترسی‌ها با قانون TE (Type Enforcement)

سیستم Type Enforcement (اجرای نوع‌ها) تعیین می‌کند که کدام فرآیندها (Types) به کدام منابع دسترسی دارند. این قوانین در فایل‌های سیاست SELinux تعریف شده‌اند.

۴. بررسی و تغییر دسترسی‌ها در SELinux

مشاهده نوع امنیتی (Type) یک فایل:
ls -Z /var/www/html/index.html
تغییر نوع امنیتی (Type) یک فایل:
chcon -t httpd_sys_content_t /var/www/html/index.html
تغییرات دائمی با restorecon:
restorecon -Rv /var/www/html/
مشاهده سیاست‌های SELinux برای یک فرآیند:
semanage fcontext -l | grep httpd

جمع‌بندی

SELinux با استفاده از سیاست‌های امنیتی (Policies)، برچسب‌های امنیتی (Labels) و اجرای نوع‌ها (Type Enforcement – TE) دسترسی‌ها را به‌صورت اجباری و بدون امکان تغییر توسط کاربران عادی یا حتی root کنترل می‌کند. در صورت مسدود شدن یک دسترسی، می‌توان از لاگ‌های avc: denied برای بررسی مشکل و اعمال تغییرات مناسب در سیاست‌های امنیتی استفاده کرد.[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. انواع سطوح امنیتی (Contexts)”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تعریف Context و نقش آن در امنیت سیستم” subtitle=”توضیحات کامل”]SELinux برای کنترل دقیق دسترسی‌ها از یک سیستم برچسب‌گذاری امنیتی استفاده می‌کند که Context نامیده می‌شود. Security Context اطلاعاتی را درباره هویت کاربر، نقش، نوع شیء و سطح امنیتی آن ارائه می‌دهد. این Contextها بر روی فایل‌ها، فرآیندها، پورت‌ها و سایر اشیای سیستم اعمال می‌شوند و مشخص می‌کنند که کدام فرآیندها یا کاربران می‌توانند به این اشیا دسترسی داشته باشند.

۱. ساختار Security Context در SELinux

هر فایل، دایرکتوری، پورت، فرآیند یا دستگاه دارای یک برچسب امنیتی (Security Label) است که شامل چند بخش می‌شود. برای مشاهده این اطلاعات می‌توان از دستور زیر استفاده کرد:

ls -Z /var/www/html/index.html
نمونه خروجی دستور ls -Z
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
توضیح بخش‌های مختلف Security Context:
بخش توضیح
system_u کاربر امنیتی (SELinux User) که این فایل را مدیریت می‌کند.
object_r نقش امنیتی (Role) که نشان‌دهنده شیء (Object) است.
httpd_sys_content_t نوع (Type) که برای کنترل دسترسی استفاده می‌شود (در این مثال، httpd_sys_content_t یعنی محتوای وب‌سرور).
s0 سطح حساسیت (Sensitivity Level) که در سیستم‌های دارای MLS – Multi-Level Security کاربرد دارد.

۲. نقش Context در امنیت سیستم

Security Context در SELinux نقش کلیدی در کنترل دسترسی‌های اجباری (MAC) دارد. این برچسب‌های امنیتی تعیین می‌کنند که یک فرآیند خاص به چه نوع داده‌هایی می‌تواند دسترسی داشته باشد. اگر یک فرآیند یا کاربر بخواهد به یک فایل یا منبع دیگر دسترسی داشته باشد، SELinux بررسی می‌کند که آیا Security Context آن فرآیند با Context آن فایل مطابقت دارد یا نه.

مثال:

اگر یک وب‌سرور (httpd) بخواهد به یک فایل در /home/user/ دسترسی پیدا کند، ولی فایل دارای برچسب امنیتی نامناسب باشد (user_home_t به‌جای httpd_sys_content_t)، SELinux این درخواست را رد می‌کند.

type=AVC msg=audit(1710028476.091:236): avc: denied { read } for pid=2394 comm="httpd" name="index.html" dev="sda1" ino=1298476 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file

۳. تغییر Context یک فایل یا فرآیند

گاهی اوقات لازم است Security Context یک فایل یا فرآیند را تغییر دهیم تا دسترسی‌های مناسب داده شود.

مشاهده Security Context یک فرآیند:
ps -eZ | grep httpd
تغییر Context یک فایل (موقت):
chcon -t httpd_sys_content_t /var/www/html/index.html
بازگرداندن Context استاندارد (دائمی):
restorecon -Rv /var/www/html/
تعریف دائمی Context برای یک مسیر خاص:
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html/

جمع‌بندی

Security Context در SELinux یکی از مهم‌ترین اجزای کنترل دسترسی است که از طریق برچسب‌گذاری امنیتی روی فایل‌ها، فرآیندها، پورت‌ها و سایر منابع سیستم اعمال می‌شود. این Contextها مشخص می‌کنند که چه نوع دسترسی‌هایی برای چه فرآیندهایی مجاز است. در صورت بروز مشکل در دسترسی‌ها، می‌توان از دستورات ls -Z، ps -eZ و restorecon برای بررسی و اصلاح Security Contextها استفاده کرد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”انواع مختلف Context در SELinux” subtitle=”توضیحات کامل”]Security Context در SELinux، به اشیای مختلف سیستم (فایل‌ها، فرآیندها، پورت‌ها، دستگاه‌ها و غیره) نسبت داده می‌شود تا کنترل دسترسی‌های اجباری (MAC – Mandatory Access Control) به درستی اعمال شود. این Contextها معمولاً شامل چهار بخش اصلی هستند:

<SELinux_User>:<Role>:<Type>:<Sensitivity>

هر یک از این بخش‌ها کاربرد خاصی دارد و در کنترل دسترسی نقش ایفا می‌کند. در ادامه، انواع مختلف Context در SELinux بررسی می‌شوند.

۱. File Context (برچسب امنیتی فایل‌ها و دایرکتوری‌ها)

هر فایل و دایرکتوری در لینوکس دارای Security Context خاصی است که تعیین می‌کند چه نوع فرآیندهایی اجازه خواندن، نوشتن یا اجرا روی آن را دارند. برای مشاهده این اطلاعات از دستور ls -Z استفاده می‌شود:

ls -Z /var/www/html/index.html

نمونه خروجی:

-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
اجزای File Context:
بخش توضیح
system_u کاربر SELinux (SELinux User) که مالک این فایل است.
object_r نقش (Role) که معمولاً برای فایل‌ها مقدار object_r است.
httpd_sys_content_t نوع (Type) که تعیین می‌کند کدام فرآیندها اجازه دسترسی دارند.
s0 سطح حساسیت (Sensitivity Level) که در سیستم‌های MLS (Multi-Level Security) کاربرد دارد.
تغییر File Context یک فایل یا دایرکتوری:
chcon -t httpd_sys_content_t /var/www/html/index.html
بازگردانی Context استاندارد:
restorecon -Rv /var/www/html/
تعریف دائمی File Context:
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html/

۲. Process Context (برچسب امنیتی فرآیندها)

هر فرآیند در لینوکس نیز دارای Security Context است که تعیین می‌کند چه نوع عملیاتی را می‌تواند انجام دهد. برای مشاهده Context مربوط به یک فرآیند می‌توان از دستور زیر استفاده کرد:

ps -eZ | grep httpd

نمونه خروجی:

system_u:system_r:httpd_t:s0     2394 ?        00:00:12 httpd
اجزای Process Context:
بخش توضیح
system_u کاربر SELinux که این فرآیند را اجرا کرده است.
system_r نقش (Role) که سطح دسترسی فرآیند را مشخص می‌کند.
httpd_t نوع (Type) که تعیین می‌کند این فرآیند در چه سطحی اجرا می‌شود.
s0 سطح حساسیت فرآیند.
تغییر Context یک فرآیند (موقتی):
runcon -t unconfined_t /bin/bash

۳. Port Context (برچسب امنیتی پورت‌ها)

SELinux همچنین می‌تواند بر روی پورت‌های شبکه محدودیت‌هایی اعمال کند. برای مشاهده Security Context پورت‌ها از دستور زیر استفاده می‌شود:

semanage port -l | grep http

نمونه خروجی:

http_port_t                 tcp      80, 443
تغییر Port Context برای یک پورت جدید:

مثلاً اضافه کردن پورت 8080 برای وب‌سرور:

semanage port -a -t http_port_t -p tcp 8080
حذف یک Port Context:
semanage port -d -t http_port_t -p tcp 8080

۴. Device Context (برچسب امنیتی دستگاه‌ها)

تمامی دستگاه‌های سخت‌افزاری در /dev/ نیز دارای Security Context هستند. برای مشاهده آن‌ها می‌توان از دستور ls -Z استفاده کرد:

ls -Z /dev/sda

نمونه خروجی:

system_u:object_r:fixed_disk_device_t:s0 /dev/sda
تغییر Device Context:
chcon -t removable_device_t /dev/sdb

۵. User Context (برچسب امنیتی کاربران)

SELinux کاربران سیستم را در سطوح امنیتی مختلفی دسته‌بندی می‌کند. برای مشاهده این دسته‌بندی‌ها از دستور زیر استفاده می‌شود:

semanage login -l

نمونه خروجی:

Login Name           SELinux User    MLS/MCS Range
---------------------------------------------------
root                unconfined_u     s0-s0:c0.c1023
user1               user_u           s0
ایجاد یک کاربر جدید و تنظیم User Context:
semanage user -a -R user_r -L s0 user_u
semanage login -a -s user_u user1
حذف یک کاربر از SELinux:
semanage login -d user1

جمع‌بندی

در SELinux، Security Context روی فایل‌ها، فرآیندها، پورت‌ها، دستگاه‌ها و کاربران اعمال می‌شود تا کنترل دقیق و اجباری دسترسی‌ها انجام شود. انواع مختلف Context شامل موارد زیر هستند:

  • File Context: کنترل دسترسی به فایل‌ها و دایرکتوری‌ها
  • Process Context: کنترل مجوزهای فرآیندها
  • Port Context: مدیریت امنیتی روی پورت‌های شبکه
  • Device Context: اعمال محدودیت روی سخت‌افزارها
  • User Context: تعیین سطح امنیتی کاربران

برای مدیریت این Contextها، دستورات مهم ls -Z، ps -eZ، semanage، chcon و restorecon استفاده می‌شوند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نحوه ارتباط Context‌ها با پروسه‌ها و فایل‌ها” subtitle=”توضیحات کامل”]SELinux (Security-Enhanced Linux) یک مدل کنترل دسترسی اجباری (MAC – Mandatory Access Control) را پیاده‌سازی می‌کند که بر اساس Security Context کار می‌کند. در این بخش، نحوه ارتباط Context با پروسه‌ها و فایل‌ها بررسی می‌شود.


۱. ساختار Context در SELinux

Security Context در SELinux شامل چهار بخش اصلی است:

<SELinux_User>:<Role>:<Type>:<Sensitivity>

نمونه Security Context برای یک فایل:

system_u:object_r:httpd_sys_content_t:s0

نمونه Security Context برای یک پروسه:

system_u:system_r:httpd_t:s0

۲. ارتباط بین Context‌ها در SELinux

در SELinux، تعامل بین پروسه‌ها و فایل‌ها بر اساس Type Enforcement (TE) کنترل می‌شود. این مکانیزم به این صورت کار می‌کند که:

  • پروسه‌ها (Processes) یک نوع مشخص دارند (مثلاً httpd_t).
  • فایل‌ها (Files) نیز یک نوع مشخص دارند (مثلاً httpd_sys_content_t).
  • Policy Rules (قوانین امنیتی) تعیین می‌کنند که چه پروسه‌هایی می‌توانند به چه فایل‌هایی دسترسی داشته باشند.
مثال عملی: ارتباط بین یک وب‌سرور و فایل‌های آن

در سرور Apache، فرآیند httpd باید به فایل‌های وب‌سایت دسترسی داشته باشد.

  • پروسه وب‌سرور دارای Security Context زیر است:
    system_u:system_r:httpd_t:s0
    
  • فایل‌های HTML در مسیر /var/www/html/ دارای Security Context زیر هستند:
    system_u:object_r:httpd_sys_content_t:s0
    
نحوه کنترل دسترسی:
  • اگر Policy مربوطه اجازه دسترسی از httpd_t به httpd_sys_content_t را بدهد، وب‌سرور می‌تواند فایل‌ها را بخواند.
  • اگر Policy این دسترسی را مسدود کند، درخواست‌های HTTP به وب‌سایت با خطای 403 Forbidden مواجه خواهند شد.
بررسی دسترسی‌ها با ابزار sesearch

برای بررسی اینکه آیا یک پروسه مجاز به خواندن فایل‌های وب‌سرور است، از دستور زیر استفاده می‌شود:

sesearch -A -s httpd_t -t httpd_sys_content_t -c file -p read

اگر این دستور خروجی نداشت، یعنی وب‌سرور اجازه خواندن فایل‌ها را ندارد و باید Policy تغییر داده شود.

اضافه کردن یک قانون دسترسی جدید:
allow httpd_t httpd_sys_content_t:file { read getattr open };

۳. مدیریت Context فایل‌ها

بررسی Security Context فایل‌ها:
ls -Z /var/www/html/index.html
تغییر موقتی Context یک فایل:
chcon -t httpd_sys_content_t /var/www/html/index.html
بازگردانی Context استاندارد:
restorecon -Rv /var/www/html/
تعریف دائمی File Context:
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html/

۴. مدیریت Context پروسه‌ها

بررسی Security Context پروسه‌ها:
ps -eZ | grep httpd
تغییر موقتی Context یک پروسه:
runcon -t unconfined_t /bin/bash
اجبار مجدد SELinux برای بارگذاری Policy:
setenforce 1

جمع‌بندی

  • Security Context شامل چهار بخش اصلی است و بر روی فایل‌ها و پروسه‌ها اعمال می‌شود.
  • پروسه‌ها (Processes) دارای یک Type خاص هستند که سطح دسترسی آن‌ها را تعیین می‌کند.
  • فایل‌ها (Files) نیز یک Type خاص دارند که مشخص می‌کند چه پروسه‌هایی می‌توانند به آن‌ها دسترسی داشته باشند.
  • Policy Rules کنترل می‌کنند که آیا یک پروسه می‌تواند به یک فایل دسترسی داشته باشد یا خیر.
  • برای بررسی یا تغییر Security Context از دستورات ls -Z، ps -eZ، chcon، restorecon و semanage استفاده می‌شود.

[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. Security Labels و Types”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تعریف و اهمیت Security Labels در SELinux” subtitle=”توضیحات کامل”]

۱. تعریف Security Labels در SELinux

Security Labels یکی از اجزای کلیدی SELinux هستند که برای کنترل دقیق دسترسی‌ها به منابع مختلف در سیستم لینوکسی استفاده می‌شوند. هر فایل، دایرکتوری، پروسه، پورت شبکه و حتی سوکت‌های ارتباطی در SELinux دارای یک Security Label است که Security Context نامیده می‌شود.

فرمت کلی Security Label:

<SELinux_User>:<Role>:<Type>:<Sensitivity>

مثال برای یک فایل:

system_u:object_r:httpd_sys_content_t:s0

مثال برای یک پروسه:

system_u:system_r:httpd_t:s0

۲. اهمیت Security Labels در SELinux

Security Labels نقش اساسی در کنترل دسترسی اجباری (MAC – Mandatory Access Control) دارند. برخی از مهم‌ترین مزایای استفاده از Security Labels عبارتند از:

الف) تفکیک دقیق دسترسی‌ها

بر خلاف مدل‌های سنتی DAC (Discretionary Access Control) که بر اساس مالکیت فایل‌ها کار می‌کنند، SELinux از Security Labels برای کنترل دقیق‌تر دسترسی‌ها استفاده می‌کند.

مثلاً در SELinux:

  • یک کاربر عادی ممکن است مالک یک فایل باشد، اما اگر پروسه‌ای که اجرا می‌کند Security Label نامناسبی داشته باشد، نمی‌تواند به آن فایل دسترسی پیدا کند.
ب) جلوگیری از اجرای کدهای مخرب

اگر یک بدافزار روی سیستم قرار بگیرد، حتی اگر به عنوان root اجرا شود، در صورتی که Security Label مناسب نداشته باشد، نمی‌تواند به فایل‌های مهم دسترسی پیدا کند.

ج) افزایش امنیت سرویس‌ها و اپلیکیشن‌ها

مثلاً در یک وب‌سرور:

  • Apache (httpd) فقط می‌تواند به فایل‌هایی که دارای Label خاص httpd_sys_content_t هستند، دسترسی داشته باشد.
  • اگر فایلی دارای Label دیگری باشد، حتی اگر دسترسی‌های معمولی (chmod 777) هم داشته باشد، باز هم Apache نمی‌تواند آن را بخواند.
د) اعمال سیاست‌های امنیتی پیشرفته

Security Labels به مدیر سیستم این امکان را می‌دهند که سیاست‌های امنیتی دقیق‌تری را تعریف کند.

مثال:

  • کاربر john می‌تواند یک فایل متنی را بخواند، اما اجازه اجرای اسکریپت‌های اجرایی را ندارد، حتی اگر مالک آن فایل باشد.

۳. انواع Security Labels در SELinux

Security Labels در SELinux معمولاً به سه دسته اصلی تقسیم می‌شوند:

الف) File Labels (برچسب‌های امنیتی برای فایل‌ها و دایرکتوری‌ها)

هر فایل و دایرکتوری در سیستم دارای یک Security Label است که تعیین می‌کند کدام پروسه‌ها می‌توانند به آن دسترسی داشته باشند.

بررسی Security Label یک فایل:

ls -Z /var/www/html/index.html

تغییر Security Label یک فایل به صورت موقتی:

chcon -t httpd_sys_content_t /var/www/html/index.html

تغییر Security Label یک فایل به صورت دائمی:

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html/
ب) Process Labels (برچسب‌های امنیتی برای پروسه‌ها)

هر پروسه‌ای که در لینوکس اجرا می‌شود، دارای یک Security Label است.

بررسی Security Label پروسه‌ها:

ps -eZ | grep httpd

اجرای یک پروسه با Security Label خاص:

runcon -t unconfined_t /bin/bash
ج) Network Labels (برچسب‌های امنیتی برای پورت‌ها و سوکت‌ها)

SELinux می‌تواند روی پورت‌ها و سوکت‌های شبکه نیز Security Labels اعمال کند.

بررسی Security Label یک پورت خاص:

semanage port -l | grep http

تخصیص Security Label به یک پورت:

semanage port -a -t http_port_t -p tcp 8080

۴. بررسی و مدیریت Security Labels در SELinux

بررسی Security Labels فایل‌ها
ls -Z /path/to/file
بررسی Security Labels پروسه‌ها
ps -eZ
بررسی Security Labels پورت‌های شبکه
semanage port -l
بازگردانی Security Labels به مقادیر پیش‌فرض
restorecon -Rv /var/www/html/
تغییر Security Label یک فایل یا دایرکتوری
chcon -t samba_share_t /srv/samba/
تعریف Security Label دائمی برای یک مسیر خاص
semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?"
restorecon -Rv /srv/samba/

جمع‌بندی

  • Security Labels در SELinux برای اعمال کنترل دسترسی اجباری (MAC) استفاده می‌شوند.
  • هر فایل، پروسه، پورت و ارتباط شبکه‌ای دارای یک Security Label منحصر‌به‌فرد است.
  • Security Labels جلوگیری از حملات و کنترل دقیق‌تر دسترسی‌ها را ممکن می‌سازند.
  • ابزارهایی مانند ls -Z، ps -eZ، semanage و restorecon برای مدیریت Security Labels استفاده می‌شوند.
  • تغییر Security Label به صورت موقتی با chcon و به صورت دائمی با semanage fcontext انجام می‌شود.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تفاوت‌های Types و Labels در SELinux” subtitle=”توضیحات کامل”]

۱. تعریف Security Labels در SELinux

Security Labels یکی از مفاهیم کلیدی در SELinux هستند که برای کنترل دسترسی‌ها به منابع مختلف سیستم استفاده می‌شوند. هر فایل، پروسه، پورت شبکه و سوکت ارتباطی دارای یک Security Label است که Security Context نامیده می‌شود.

فرمت کلی Security Label:

<SELinux_User>:<Role>:<Type>:<Sensitivity>

مثال برای یک فایل:

system_u:object_r:httpd_sys_content_t:s0

مثال برای یک پروسه:

system_u:system_r:httpd_t:s0

Security Labels به چندین مؤلفه تقسیم می‌شوند که مهم‌ترین آنها Types است.


۲. تعریف Type در SELinux

Type بخشی از Security Label است که دسترسی یک موجودیت (مانند فایل، پروسه، پورت) را مشخص می‌کند. SELinux بر اساس Type Enforcement (TE) کار می‌کند، که سیاست‌های دسترسی بر اساس Type را اجرا می‌کند.

مثال‌هایی از Type در SELinux:
  • برای فایل‌های وب‌سرور: httpd_sys_content_t
  • برای پروسه‌های وب‌سرور: httpd_t
  • برای فایل‌های مربوط به SSH: ssh_home_t
  • برای پروسه‌های مربوط به SSH: sshd_t

Type مشخص می‌کند که کدام پروسه‌ها اجازه دارند به کدام فایل‌ها دسترسی داشته باشند.


۳. تفاوت‌های اصلی بین Types و Labels در SELinux

ویژگی Security Labels Types
تعریف Security Label یک برچسب امنیتی کلی برای یک فایل، پروسه یا پورت است. Type یک بخش خاص از Security Label است که نقش اصلی را در کنترل دسترسی‌ها ایفا می‌کند.
فرمت شامل ۴ بخش (User:Role:Type:Sensitivity) است. فقط بخش Type از Security Label را مشخص می‌کند.
کنترل دسترسی Security Label به عنوان یک مجموعه اطلاعاتی کامل برای کنترل دسترسی استفاده می‌شود. Type اصلی‌ترین مؤلفه برای کنترل دسترسی بین پروسه‌ها و منابع است.
مثال system_u:object_r:httpd_sys_content_t:s0 httpd_sys_content_t (برای فایل‌ها) یا httpd_t (برای پروسه‌ها)
نحوه مدیریت با دستورات ls -Z، ps -eZ، semanage fcontext بررسی می‌شود. با تنظیمات semanage fcontext و restorecon مدیریت می‌شود.

۴. بررسی Security Labels و Types در سیستم

بررسی Security Label یک فایل
ls -Z /var/www/html/index.html

خروجی نمونه:

-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html

در اینجا Type مقدار httpd_sys_content_t است که مشخص می‌کند این فایل متعلق به وب‌سرور Apache است.

بررسی Security Label یک پروسه
ps -eZ | grep httpd

خروجی نمونه:

system_u:system_r:httpd_t:s0  1234 ?  00:00:00 httpd

در اینجا Type مقدار httpd_t است که مشخص می‌کند این پروسه مربوط به Apache است.


۵. تغییر Type در SELinux

تغییر موقتی Type یک فایل
chcon -t httpd_sys_content_t /var/www/html/index.html
تغییر دائمی Type یک فایل
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html/
تغییر Type یک پورت
semanage port -a -t http_port_t -p tcp 8080

جمع‌بندی

  • Security Labels مجموعه‌ای از اطلاعات امنیتی در SELinux هستند که شامل User، Role، Type و Sensitivity می‌شوند.
  • Type مهم‌ترین بخش Security Label است که دسترسی به منابع را کنترل می‌کند.
  • SELinux بر اساس Type Enforcement (TE) کار می‌کند و اجازه می‌دهد که فقط پروسه‌های مشخصی به فایل‌های مشخصی دسترسی داشته باشند.
  • تفاوت اصلی: Security Labels شامل همه اطلاعات امنیتی هستند، در حالی که Type بخش خاصی از Security Label است که کنترل دسترسی را اعمال می‌کند.
  • مدیریت Type و Security Labels با ابزارهایی مانند ls -Z، ps -eZ، chcon و semanage انجام می‌شود.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نحوه تخصیص و استفاده از Labels در اشیاء سیستم” subtitle=”توضیحات کامل”]

مقدمه‌ای بر Security Labels در SELinux

در SELinux، تمامی اشیاء سیستم مانند فایل‌ها، دایرکتوری‌ها، پورت‌ها، سوکت‌ها و پروسه‌ها دارای Security Label هستند. این Labelها مشخص می‌کنند که کدام فرآیندها اجازه دسترسی به کدام منابع را دارند.

Security Label شامل چهار بخش اصلی است:

<SELinux_User>:<Role>:<Type>:<Sensitivity>

برای مثال، Security Label مربوط به یک فایل در سرور Apache ممکن است به شکل زیر باشد:

system_u:object_r:httpd_sys_content_t:s0

در اینجا:

  • system_u نشان‌دهنده کاربر SELinux است.
  • object_r مشخص‌کننده نقش (Role) است.
  • httpd_sys_content_t مقدار Type است که سطح دسترسی را تعیین می‌کند.
  • s0 نشان‌دهنده سطح حساسیت (Sensitivity Level) است.

بررسی Security Label اشیاء مختلف در سیستم

بررسی Security Label فایل‌ها و دایرکتوری‌ها

برای مشاهده Label یک فایل یا دایرکتوری از دستور ls -Z استفاده می‌شود:

ls -Z /var/www/html/index.html

خروجی نمونه:

-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html
بررسی Security Label پروسه‌ها
ps -eZ | grep httpd

خروجی نمونه:

system_u:system_r:httpd_t:s0  1234 ?  00:00:00 httpd
بررسی Security Label برای سوکت‌ها و پورت‌ها
netstat -Ztulnp

یا برای بررسی پورت خاص:

semanage port -l | grep http

نحوه تخصیص و تغییر Security Labels

تخصیص موقت Label به یک فایل یا دایرکتوری

با استفاده از chcon می‌توان Label یک فایل را تغییر داد:

chcon -t httpd_sys_content_t /var/www/html/index.html

اما این تغییر موقتی است و پس از ری‌استارت یا اجرای restorecon از بین می‌رود.

تخصیص دائمی Label به یک فایل یا دایرکتوری

برای تخصیص دائمی باید از semanage fcontext استفاده شود:

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html/
تخصیص Label به یک پورت شبکه

مثلاً اگر بخواهیم پورت 8080 برای وب‌سرور استفاده شود:

semanage port -a -t http_port_t -p tcp 8080

نحوه استفاده از Labels در کنترل دسترسی‌ها

SELinux از Type Enforcement (TE) برای کنترل دسترسی‌ها استفاده می‌کند. به این معنا که هر پروسه فقط می‌تواند به فایل‌ها، دایرکتوری‌ها و منابعی که Type آنها در سیاست‌های SELinux تعریف شده است، دسترسی داشته باشد.

مثلاً:

  • پروسه‌هایی با Label httpd_t می‌توانند به فایل‌هایی با httpd_sys_content_t دسترسی داشته باشند.
  • پروسه‌هایی با Label sshd_t نمی‌توانند به فایل‌های Apache دسترسی داشته باشند مگر اینکه به‌صورت مشخص در سیاست‌های SELinux تعریف شده باشد.

جمع‌بندی

Security Labels در SELinux نقش کلیدی در کنترل دسترسی‌های امنیتی دارند و بر روی تمام اشیاء سیستم اعمال می‌شوند. این Labels شامل User، Role، Type و Sensitivity هستند. مهم‌ترین بخش آن Type است که سطح دسترسی را مشخص می‌کند.

  • برای مشاهده Labels از ls -Z و ps -eZ استفاده می‌شود.
  • برای تغییر موقتی Labels از chcon استفاده می‌شود.
  • برای تغییر دائمی باید از semanage fcontext همراه با restorecon استفاده کرد.
  • برای تخصیص Label به پورت‌ها از semanage port استفاده می‌شود.
  • SELinux از Type Enforcement (TE) برای کنترل دسترسی‌ها بر اساس Labels استفاده می‌کند.

[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. نقش‌های SELinux (Roles)”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تعریف نقش‌ها (Roles) و ارتباط آن‌ها با کاربران” subtitle=”توضیحات کامل”]در SELinux، نقش‌ها (Roles) یکی از مفاهیم اساسی در مدل کنترل دسترسی مبتنی بر نقش (RBAC – Role-Based Access Control) هستند. نقش‌ها مشخص می‌کنند که کدام کاربران (SELinux Users) می‌توانند به کدام Type‌ها دسترسی داشته باشند و چه عملیاتی را می‌توانند انجام دهند.

این ساختار باعث می‌شود که هر کاربر نتواند مستقیماً به Typeها و منابع دسترسی پیدا کند، بلکه باید از طریق یک Role مجاز این کار را انجام دهد. این مکانیزم باعث افزایش امنیت سیستم و جلوگیری از حملات احتمالی می‌شود.


ساختار نقش‌ها در SELinux

در SELinux، هر کاربر (User) به یک یا چند نقش (Role) اختصاص داده می‌شود و هر نقش می‌تواند مجوز استفاده از Type‌های خاصی را داشته باشد. به این ترتیب، فقط نقش‌های مجاز می‌توانند به منابع مشخص‌شده دسترسی داشته باشند.

ساختار کلی یک Security Context در SELinux به این صورت است:

<SELinux_User>:<Role>:<Type>:<Sensitivity>

مثلاً:

staff_u:staff_r:staff_t:s0
  • staff_u → کاربر SELinux
  • staff_r → نقش اختصاص داده‌شده به کاربر
  • staff_t → نوع منبعی که کاربر از طریق این نقش می‌تواند به آن دسترسی داشته باشد
  • s0 → سطح حساسیت امنیتی

انواع نقش‌ها در SELinux

SELinux دارای نقش‌های مختلفی است که برخی از مهم‌ترین آن‌ها عبارت‌اند از:

۱. نقش کاربر معمولی (user_r)

این نقش برای کاربران معمولی در سیستم در نظر گرفته شده و دارای کمترین سطح دسترسی است. این نقش معمولاً با user_t مرتبط است.

۲. نقش مدیریت (sysadm_r)

این نقش برای مدیر سیستم (root) تعریف شده و دارای سطح دسترسی گسترده‌ای به منابع سیستم است. این نقش به کاربران معمولی اختصاص داده نمی‌شود.

۳. نقش کاربر استاف (staff_r)

این نقش برای کاربران با دسترسی محدودتر از مدیر اما بالاتر از کاربر عادی استفاده می‌شود. کاربران staff_u معمولاً از این نقش استفاده می‌کنند.

۴. نقش سرویس‌ها (system_r)

این نقش معمولاً به سرویس‌های سیستم مانند httpd، sshd و سایر پردازش‌های سیستمی اختصاص داده می‌شود.

۵. نقش غیرمجاز (unconfined_r)

این نقش به کاربرانی اختصاص داده می‌شود که محدودیت‌های امنیتی SELinux برای آن‌ها غیرفعال شده است. این نقش معمولاً برای اشکال‌زدایی و تست استفاده می‌شود.


بررسی نقش‌های موجود در سیستم

برای مشاهده نقش‌هایی که به کاربر جاری اختصاص داده شده‌اند، می‌توان از دستور زیر استفاده کرد:

id -Z

خروجی نمونه:

staff_u:staff_r:staff_t:s0

برای مشاهده تمامی نقش‌های تعریف‌شده در SELinux از دستور زیر استفاده کنید:

semanage role -l

خروجی نمونه:

Role           Dominated Roles
================================
auditadm_r     sysadm_r
object_r       -
staff_r        user_r
sysadm_r       staff_r user_r
system_r       object_r
user_r         -

مدیریت نقش‌ها در SELinux

۱. تغییر نقش کاربر جاری

اگر یک کاربر دارای چندین نقش باشد، می‌تواند نقش خود را تغییر دهد. برای مشاهده نقش‌های مجاز کاربر جاری، از دستور زیر استفاده می‌شود:

sesearch --allow -s $(id -Z | cut -d: -f2)

برای تغییر نقش، از newrole استفاده کنید:

newrole -r sysadm_r
۲. اختصاص یک نقش جدید به یک کاربر SELinux

برای اختصاص یک نقش جدید به یک کاربر، از دستور semanage استفاده می‌شود. برای مثال، اختصاص نقش sysadm_r به staff_u:

semanage user -m -R "staff_r sysadm_r" staff_u
۳. ایجاد یک نقش جدید در SELinux

اگر بخواهیم یک نقش جدید ایجاد کنیم، از semanage role استفاده می‌کنیم:

semanage role -a custom_r
۴. حذف یک نقش از SELinux
semanage role -d custom_r

مثال عملی از نقش‌ها در SELinux

در این مثال، کاربری ایجاد می‌کنیم که فقط بتواند وب‌سرور Apache را مدیریت کند:

۱. ایجاد یک کاربر SELinux مخصوص Apache
semanage user -a -R "webadmin_r" webadmin_u
۲. ایجاد نقش جدید webadmin_r
semanage role -a webadmin_r
۳. اختصاص این نقش به webadmin_u
semanage user -m -R "webadmin_r" webadmin_u
۴. اختصاص Typeهای موردنیاز به این نقش
semanage rule -a webadmin_r httpd_t

اکنون، کاربری که webadmin_u دارد، فقط از طریق نقش webadmin_r قادر به مدیریت وب‌سرور خواهد بود و به سایر بخش‌های سیستم دسترسی نخواهد داشت.


جمع‌بندی

  • نقش‌ها (Roles) در SELinux برای کنترل دسترسی کاربران به منابع سیستم استفاده می‌شوند.
  • هر کاربر SELinux (User) یک یا چند نقش (Role) دارد، و هر Role مشخص می‌کند که چه Typeهایی مجاز هستند.
  • انواع نقش‌ها شامل user_r، sysadm_r، staff_r، system_r و unconfined_r هستند.
  • برای تغییر نقش از newrole -r و برای مشاهده نقش‌ها از semanage role -l استفاده می‌شود.
  • با semanage user می‌توان نقش‌های کاربران را مدیریت کرد.
  • مدل RBAC در SELinux باعث افزایش امنیت شده و از اجرای غیرمجاز کدها جلوگیری می‌کند.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نحوه تخصیص نقش‌ها به کاربران و پروسه‌ها” subtitle=”توضیحات کامل”]در SELinux، تخصیص نقش‌ها به کاربران و پروسه‌ها یک فرآیند حیاتی است که موجب می‌شود هر کاربر یا پروسه فقط به منابع و امکاناتی دسترسی داشته باشد که برای انجام وظایف خود نیاز دارند. این مکانیزم، به‌ویژه در محیط‌هایی که نیاز به کنترل دقیق دسترسی دارند، امنیت سیستم را تقویت می‌کند.

در SELinux، تخصیص نقش‌ها به کاربران و پروسه‌ها از طریق مدل RBAC (Role-Based Access Control) انجام می‌شود. در این مدل، نقش‌ها، حدود دسترسی را مشخص کرده و با استفاده از آن‌ها می‌توان به کاربر و پروسه مجوزهای خاصی داد تا تنها منابع و داده‌هایی که مجاز هستند را دسترسی داشته باشند.


تخصیص نقش به کاربران SELinux

هر کاربر در SELinux دارای یک یا چند نقش است. این نقش‌ها در واقع سطح دسترسی کاربر به منابع مختلف سیستم را تعیین می‌کنند. برای تخصیص نقش‌ها به کاربران SELinux، می‌توان از ابزار semanage استفاده کرد.

۱. نمایش نقش‌های موجود برای یک کاربر SELinux

برای نمایش نقش‌های مجاز برای یک کاربر، دستور زیر را وارد کنید:

semanage user -l

خروجی این دستور فهرستی از کاربران SELinux و نقش‌های مربوط به آن‌ها را نشان می‌دهد.

۲. اختصاص نقش به کاربر SELinux

برای تخصیص یک نقش خاص به یک کاربر SELinux، از دستور semanage user استفاده می‌شود. به‌طور مثال، برای اختصاص نقش sysadm_r به کاربر staff_u، دستور زیر را وارد کنید:

semanage user -m -R "sysadm_r" staff_u

این دستور به کاربر staff_u اجازه می‌دهد که نقش sysadm_r را بپذیرد و دسترسی‌های مرتبط با آن را داشته باشد.

۳. حذف نقش از کاربر SELinux

برای حذف یک نقش از یک کاربر SELinux، از دستور زیر استفاده کنید:

semanage user -m -R "" staff_u

در اینجا، نقش‌های مربوط به کاربر staff_u حذف می‌شود.


تخصیص نقش به پروسه‌ها در SELinux

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

۱. تخصیص نقش به پروسه‌ها

برای تخصیص نقش به یک پروسه، معمولاً از دستورات خاصی استفاده نمی‌شود، زیرا SELinux به‌طور خودکار از نقش‌هایی که در زمان اجرای پروسه‌ها به آن‌ها اختصاص داده شده‌اند، استفاده می‌کند. با این حال، می‌توان نقش‌های پروسه‌ها را از طریق دستور newrole تغییر داد.

برای تغییر نقش پروسه فعلی (مثلاً پروسه‌ای که توسط کاربر در حال اجراست)، می‌توان از دستور زیر استفاده کرد:

newrole -r sysadm_r

این دستور نقش پروسه جاری را به sysadm_r تغییر می‌دهد.

۲. مشاهده نقش پروسه‌ها

برای مشاهده نقش پروسه‌ها، می‌توان از دستور ps به همراه گزینه‌های خاص استفاده کرد. به‌طور مثال:

ps -eZ

این دستور فهرستی از پروسه‌ها همراه با اطلاعات مربوط به Context آن‌ها را نشان می‌دهد.


مدیریت نقش‌ها و پروسه‌ها با استفاده از semanage

ابزار semanage علاوه بر مدیریت کاربران، نقش‌ها را نیز برای پروسه‌ها و سایر منابع SELinux مدیریت می‌کند. با استفاده از این ابزار، می‌توانید نقش‌های مختلف را برای پروسه‌ها تعریف کرده و تخصیص‌های جدید را به آن‌ها اضافه کنید.

۱. اضافه کردن نقش جدید به پروسه‌ها

برای افزودن نقش جدید به یک پروسه یا منبع خاص، می‌توانید از دستور semanage استفاده کنید. برای مثال:

semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'

این دستور به SELinux می‌گوید که منابع در /var/www/html و زیرمجموعه‌های آن باید با نوع httpd_sys_content_t و نقش مرتبط با آن تحت کنترل قرار گیرند.

۲. تغییر نوع یا نقش پروسه‌ها

برای تغییر نوع یا نقش یک پروسه خاص در SELinux، ابتدا باید مطمئن شوید که پروسه‌ای که قصد تغییر نقش آن را دارید، دسترسی‌های موردنیاز را داراست. سپس می‌توانید از دستور semanage برای اختصاص نوع جدید استفاده کنید.


مثال عملی از تخصیص نقش‌ها به کاربران و پروسه‌ها

فرض کنید یک سیستم مدیریت وب داریم که می‌خواهیم نقش‌های خاصی برای کاربران و پروسه‌ها تعریف کنیم تا هر کاربر فقط بتواند عملیات خاصی انجام دهد و دسترسی‌های آن‌ها محدود به نیازهای کاری باشد.

۱. تخصیص نقش به کاربر admin_u

در ابتدا، یک کاربر admin_u داریم که باید دسترسی‌های مدیریتی به سیستم داشته باشد. برای اختصاص نقش مدیریتی به این کاربر، از دستور زیر استفاده می‌کنیم:

semanage user -m -R "sysadm_r" admin_u
۲. تخصیص نقش به پروسه‌ها

در ادامه، می‌خواهیم پروسه‌های مربوط به وب‌سرور (مثل Apache) را به یک نقش محدود کنیم تا تنها دسترسی به منابع خاصی داشته باشند. برای این کار، ابتدا باید نوع جدیدی برای پروسه‌ها تعریف کنیم و سپس آن را به یک نقش اختصاص دهیم.

semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'

این دستور باعث می‌شود که فقط پروسه‌هایی با نوع httpd_sys_content_t قادر به دسترسی به دایرکتوری /var/www/html باشند.


جمع‌بندی

  • تخصیص نقش‌ها به کاربران SELinux باعث می‌شود که دسترسی‌های آن‌ها به منابع و پروسه‌ها محدود شود.
  • برای تخصیص نقش به کاربر، از دستور semanage user -m -R استفاده می‌شود.
  • برای تخصیص نقش به پروسه‌ها، می‌توان از دستورات خاص مانند newrole و semanage fcontext بهره برد.
  • با این روش‌ها می‌توان دسترسی‌ها را به‌طور دقیق مدیریت کرده و امنیت سیستم را به‌طور مؤثری افزایش داد.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”معرفی نقش‌های مختلف پیش‌فرض در SELinux” subtitle=”توضیحات کامل”]در SELinux، نقش‌ها (Roles) به‌عنوان بخشی از مدل دسترسی مبتنی بر نقش (RBAC) طراحی شده‌اند. هر کاربر و پروسه در SELinux به یک یا چند نقش اختصاص داده می‌شود. این نقش‌ها نقش کلیدی در تعیین دسترسی‌ها به منابع سیستم دارند و باعث می‌شوند که کاربران یا پروسه‌ها تنها به منابعی که برای انجام وظایف خود به آن‌ها نیاز دارند، دسترسی داشته باشند.

نقش‌های پیش‌فرض در SELinux تعیین می‌کنند که هر کاربر یا پروسه چه نوع دسترسی‌هایی به منابع مختلف سیستم، مانند فایل‌ها، دایرکتوری‌ها، پروسه‌ها و دستگاه‌ها، دارد. این نقش‌ها به‌طور دقیق برای افزایش امنیت طراحی شده‌اند تا دسترسی به منابع سیستمی را محدود کنند و از انجام عملیات خطرناک جلوگیری کنند.


نقش‌های پیش‌فرض اصلی در SELinux

در SELinux چندین نقش پیش‌فرض وجود دارد که هرکدام به گروه‌های مختلف کاربران و پروسه‌ها اختصاص داده می‌شود. در زیر، نقش‌های پیش‌فرض و توضیحات مربوط به آن‌ها آورده شده است:

1. system_r

این نقش به کاربران و پروسه‌های سیستم اختصاص داده می‌شود. معمولاً به سرویس‌ها و فرآیندهایی که نیاز به دسترسی‌های سطح سیستم دارند، مانند مدیران سیستم و برنامه‌های سطح پایین، اختصاص می‌یابد.

  • دسترسی‌ها: دسترسی به اکثر منابع سیستم، اما با محدودیت‌هایی در عملیات‌های خاص.
  • مناسب برای: مدیران سیستم، سرویس‌های سیستمی، برنامه‌های سطح پایین.
2. staff_r

این نقش معمولاً به کاربرانی اختصاص داده می‌شود که مسئولیت‌های مدیریتی معمولی‌تری دارند و نیاز به دسترسی‌های گسترده‌تری در سیستم دارند، اما نه به اندازه یک کاربر با نقش sysadm_r.

  • دسترسی‌ها: دسترسی به فایل‌ها و پروسه‌های بسیاری از سیستم، اما محدود به نیازهای عمومی‌تر.
  • مناسب برای: کاربران عادی با دسترسی‌های مدیریت سیستم، کارمندان IT.
3. sysadm_r

این نقش به کاربرانی اختصاص داده می‌شود که نیاز به دسترسی‌های مدیریتی کامل‌تری نسبت به سایر نقش‌ها دارند. معمولاً برای مدیران سیستم که نیاز به انجام فعالیت‌های مدیریتی گسترده دارند، مورد استفاده قرار می‌گیرد.

  • دسترسی‌ها: دسترسی کامل به تمامی منابع سیستم و قابلیت انجام اکثر عملیات‌ها.
  • مناسب برای: مدیران سیستم و کاربران سطح بالای مدیریتی.
4. user_r

این نقش به کاربران عادی اختصاص داده می‌شود. این نوع از نقش‌ها به کاربران امکان انجام کارهای روزمره و عادی سیستم را می‌دهند، اما محدودیت‌هایی برای جلوگیری از انجام عملیات حساس دارند.

  • دسترسی‌ها: دسترسی به منابع پایه‌ای سیستم مانند فایل‌ها و پروسه‌های شخصی.
  • مناسب برای: کاربران عادی که نیاز به دسترسی‌های محدود به سیستم دارند.
5. unconfined_r

نقش unconfined_r به پروسه‌هایی اختصاص داده می‌شود که محدودیت‌های SELinux بر آن‌ها اعمال نمی‌شود. این پروسه‌ها می‌توانند به منابع سیستمی دسترسی داشته باشند بدون اینکه محدودیت‌های سخت‌گیرانه SELinux اعمال شود.

  • دسترسی‌ها: دسترسی کامل به منابع سیستم بدون هیچ‌گونه محدودیتی.
  • مناسب برای: پروسه‌های خاص که به‌طور کامل از نظر SELinux آزاد هستند.
6. guest_r

این نقش به کاربران مهمان یا افراد با دسترسی‌های بسیار محدود اختصاص داده می‌شود. این کاربران تنها به منابع و خدماتی که برای مهمان‌ها ضروری است دسترسی دارند.

  • دسترسی‌ها: دسترسی محدود به منابع عمومی سیستم.
  • مناسب برای: مهمانان و کاربران با دسترسی‌های بسیار محدود.
7. object_r

این نقش معمولاً برای اشیاء سیستمی استفاده می‌شود و به‌طور خودکار به فرآیندهایی که به منابع خاص (مانند فایل‌ها، دایرکتوری‌ها یا دستگاه‌ها) دسترسی دارند، اختصاص می‌یابد.

  • دسترسی‌ها: دسترسی به منابع خاص با توجه به نوع آن‌ها.
  • مناسب برای: فرآیندهایی که دسترسی به منابع خاص دارند.

جمع‌بندی

نقش‌های پیش‌فرض در SELinux به کاربران و پروسه‌ها دسترسی‌های متفاوتی می‌دهند که باعث می‌شود بتوان کنترل دقیقی بر روی منابع سیستم داشت. این نقش‌ها به‌طور کلی از ساده‌ترین نقش‌ها مانند user_r برای کاربران عادی تا پیچیده‌ترین نقش‌ها مانند sysadm_r برای مدیران سیستم را شامل می‌شوند. استفاده صحیح از این نقش‌ها باعث افزایش امنیت سیستم و کاهش ریسک دسترسی‌های غیرمجاز می‌شود.

  • نقش‌های اصلی شامل: system_r, staff_r, sysadm_r, user_r, unconfined_r, guest_r, object_r.
  • این نقش‌ها تعیین می‌کنند که کاربران و پروسه‌ها به چه منابعی دسترسی داشته باشند و چه سطحی از کنترل را بر روی آن‌ها داشته باشند.

[/cdb_course_lesson][cdb_course_lesson title=”فصل 6. مزایای استفاده از SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”بررسی مزایای استفاده از SELinux” subtitle=”توضیحات کامل”]

افزایش امنیت سیستم در برابر تهدیدات داخلی و خارجی

یکی از اصلی‌ترین مزایای استفاده از SELinux، تقویت امنیت سیستم در برابر تهدیدات داخلی و خارجی است. SELinux با اعمال سیاست‌های امنیتی دقیق و محدود کردن دسترسی‌ها، امکان نفوذ به سیستم را کاهش می‌دهد. این ویژگی به‌ویژه در برابر حملات ناشی از برنامه‌های آسیب‌پذیر یا کاربران داخلی خطرناک بسیار مؤثر است.

  • مثال عملی: اگر یک مهاجم موفق شود به سیستم نفوذ کند، با فعال بودن SELinux، حتی اگر دسترسی به سیستم پیدا کند، دسترسی او به منابع حساس مانند فایل‌های سیستمی یا پایگاه‌های داده محدود می‌شود.

کاهش آسیب‌پذیری‌های ناشی از خطاهای انسانی و نرم‌افزاری

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

  • مثال عملی: اگر یک کاربر به‌طور تصادفی دستوری برای اجرای یک برنامه خاص ارسال کند که به فایل‌های حساس دسترسی دارد، SELinux دسترسی آن برنامه به این فایل‌ها را مسدود می‌کند.

کنترل دقیق دسترسی‌ها و محدود کردن آسیب‌های ناشی از برنامه‌ها

SELinux به مدیران سیستم این امکان را می‌دهد که دسترسی‌های کاربران و برنامه‌ها را دقیقاً کنترل کنند. این ویژگی باعث می‌شود که حتی اگر یک برنامه به‌طور ناخواسته یا عمدی دچار مشکل شود، آسیب‌های وارد شده به سیستم به حداقل برسد. دسترسی‌ها تنها به آن دسته از منابعی که برای عملکرد صحیح برنامه ضروری هستند، محدود می‌شود.

  • مثال عملی: یک برنامه وب ممکن است نیاز داشته باشد که به پایگاه داده دسترسی داشته باشد، اما SELinux می‌تواند دسترسی آن برنامه را محدود کند تا از ارتباطات غیرضروری با دیگر فایل‌ها یا پروسه‌ها جلوگیری کند.

قابلیت اعمال سیاست‌های امنیتی پیچیده و مقیاس‌پذیر

SELinux به مدیران سیستم این امکان را می‌دهد که سیاست‌های امنیتی پیچیده و مقیاس‌پذیر را در سیستم اعمال کنند. این سیاست‌ها می‌توانند برای هر کاربر، پروسه یا فایل به‌صورت جداگانه تعریف شوند. این ویژگی به‌ویژه در سیستم‌های بزرگ و پیچیده که نیاز به کنترل دقیق دارند، بسیار مفید است.

  • مثال عملی: در یک سازمان بزرگ، SELinux می‌تواند به مدیران این امکان را بدهد که برای هر بخش، مانند منابع مالی، پرسنلی و فناوری اطلاعات، سیاست‌های امنیتی خاص خود را تنظیم کنند.

جمع‌بندی

استفاده از SELinux در سیستم‌های لینوکسی مزایای زیادی دارد که می‌تواند امنیت را به‌طور قابل توجهی افزایش دهد. از جمله این مزایا می‌توان به افزایش امنیت در برابر تهدیدات داخلی و خارجی، کاهش آسیب‌پذیری‌های ناشی از خطاهای انسانی و نرم‌افزاری، کنترل دقیق دسترسی‌ها و محدود کردن آسیب‌های ناشی از برنامه‌ها، و قابلیت اعمال سیاست‌های امنیتی پیچیده و مقیاس‌پذیر اشاره کرد. این ویژگی‌ها باعث می‌شوند که SELinux یکی از ابزارهای مؤثر در مدیریت امنیت سیستم‌های لینوکسی باشد.[/cdb_course_lesson][cdb_course_lesson title=”فصل 7. تفاوت SELinux با سیستم‌های امنیتی دیگر”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”مقایسه SELinux با AppArmor و سایر روش‌های MAC” subtitle=”توضیحات کامل”]SELinux و AppArmor: مقایسه در عملکرد و کاربرد

SELinux و AppArmor هر دو سیستم‌های کنترل دسترسی بر اساس سیاست‌های امنیتی هستند که به‌منظور تأمین امنیت سیستم‌های لینوکسی طراحی شده‌اند. این سیستم‌ها از مدل‌های امنیتی MAC (Mandatory Access Control) استفاده می‌کنند، ولی در نحوه پیاده‌سازی، پیکربندی و کاربرد تفاوت‌هایی دارند.


1. نحوه پیاده‌سازی و معماری

  • SELinux: SELinux به‌صورت پیش‌فرض از یک سیستم پیچیده مبتنی بر سیاست‌های امنیتی دقیق برای تعریف نحوه دسترسی پروسه‌ها به منابع مختلف استفاده می‌کند. SELinux از برچسب‌های امنیتی (Labels) برای فایل‌ها، پروسه‌ها و سایر منابع سیستم استفاده می‌کند و سیاست‌ها را به‌صورت مرکزی برای هر نوع دسترسی تعریف می‌کند. این سیستم نیاز به پیکربندی پیچیده‌ای دارد و سیاست‌ها به‌طور مفصل برای هر کاربر و هر برنامه باید نوشته شوند.
  • AppArmor: AppArmor از یک رویکرد ساده‌تر و متمرکزتر استفاده می‌کند. در AppArmor، سیاست‌های امنیتی به‌صورت پروفایل‌هایی برای برنامه‌ها تعریف می‌شوند. هر برنامه در سیستم یک پروفایل دارد که دسترسی‌های آن را مشخص می‌کند. این روش در مقایسه با SELinux ساده‌تر است و تنظیمات و پیکربندی‌های آن نسبت به SELinux بسیار راحت‌تر است.

2. پیاده‌سازی سیاست‌ها

  • SELinux: سیاست‌های SELinux پیچیده و انعطاف‌پذیر هستند و می‌توانند بسیار دقیق و جزئی باشند. این سیاست‌ها در سطح سیستم، کاربران، پروسه‌ها و فایل‌ها تعریف می‌شوند و می‌توانند بسیار مقیاس‌پذیر و سفارشی‌سازی شوند. این پیچیدگی به‌طور کلی SELinux را به‌عنوان یک گزینه مناسب برای سازمان‌های بزرگ با نیازهای پیچیده امنیتی تبدیل می‌کند.
  • AppArmor: سیاست‌های AppArmor نسبتاً ساده‌تر از SELinux هستند. این سیاست‌ها مستقیماً برای برنامه‌ها نوشته می‌شوند و بیشتر محدود به مجوزهای ساده برای دسترسی به منابع مانند فایل‌ها، شبکه و دیگر منابع هستند. این رویکرد باعث می‌شود AppArmor گزینه‌ای مناسب برای کاربران و سازمان‌هایی باشد که نیاز به یک سیستم امنیتی کمتر پیچیده دارند.

3. انعطاف‌پذیری و پیچیدگی

  • SELinux: SELinux انعطاف‌پذیرتر از AppArmor است، زیرا امکان تنظیم سیاست‌های پیچیده‌تری را برای کنترل دقیق‌تر دسترسی‌ها فراهم می‌کند. به‌عنوان مثال، شما می‌توانید برای هر فایل یا پروسه، سیاست‌های مختلفی اعمال کنید. این ویژگی باعث می‌شود که SELinux در محیط‌های پیچیده و سازمان‌های بزرگ بسیار مفید باشد.
  • AppArmor: برخلاف SELinux، AppArmor به‌دلیل سادگی در استفاده و تنظیمات، انعطاف‌پذیری کمتری دارد. اگرچه می‌توان سیاست‌ها را برای هر برنامه سفارشی کرد، اما تنظیمات آن نسبت به SELinux محدودتر است. بنابراین، این سیستم در محیط‌های پیچیده‌تر و سیستم‌هایی که نیاز به کنترل دقیق دسترسی دارند، ممکن است کارایی کمتری داشته باشد.

4. کاربری و پیکربندی

  • SELinux: به دلیل پیچیدگی و نیاز به پیکربندی دقیق، SELinux برای کاربران تازه‌کار یا حتی مدیران سیستم با تجربه می‌تواند چالش‌برانگیز باشد. لازم است که سیاست‌ها به‌دقت و به‌طور مداوم بررسی شوند، که ممکن است زمان‌بر و پرهزینه باشد.
  • AppArmor: AppArmor دارای پیکربندی ساده‌تری است و می‌تواند به‌سرعت برای کاربران مبتدی قابل استفاده باشد. بیشتر تنظیمات AppArmor به‌صورت پیش‌فرض در سیستم‌ها قرار دارد و امکان ایجاد پروفایل‌های امنیتی برای برنامه‌ها به‌راحتی در دسترس است.

5. پشتیبانی و جامعیت

  • SELinux: SELinux از سوی بیشتر توزیع‌های لینوکسی پشتیبانی می‌شود، از جمله Red Hat، CentOS و Fedora. همچنین بسیاری از پروژه‌های امنیتی، سازمان‌های دولتی و صنایع حساس، SELinux را به‌عنوان راه‌حل امنیتی پیش‌فرض خود انتخاب کرده‌اند.
  • AppArmor: AppArmor به‌طور گسترده در توزیع‌های دیگر لینوکس مانند Ubuntu و Debian پشتیبانی می‌شود. با این حال، نسبت به SELinux در توزیع‌های مختلف کمتر مورد استفاده قرار می‌گیرد.

6. تفاوت‌ها در کنترل دسترسی

  • SELinux: SELinux به‌طور پیش‌فرض از مدل کنترل دسترسی بر اساس سیاست‌های دقیق (Discretionary Access Control – DAC) و کنترل دسترسی اجباری (Mandatory Access Control – MAC) استفاده می‌کند. در این مدل، SELinux می‌تواند دسترسی‌ها را در سطح سیستم به‌طور جامع کنترل کند و علاوه بر آن از سیاست‌های متنی (Context-based policies) استفاده کند تا دسترسی‌ها به منابع مختلف محدود شود.
  • AppArmor: AppArmor به‌جای استفاده از مدل کامل MAC، از سیاست‌های مبتنی بر پروفایل استفاده می‌کند که دسترسی برنامه‌ها به منابع مختلف را تعریف می‌کند. این سیستم بیشتر به‌عنوان یک راه‌حل آسان و سبک‌تر برای کنترل دسترسی استفاده می‌شود، اما نسبت به SELinux امکانات کمتری برای کنترل دقیق دسترسی‌ها در سطح سیستم فراهم می‌کند.

جمع‌بندی

هر دو SELinux و AppArmor از مدل‌های MAC برای تأمین امنیت سیستم‌های لینوکسی استفاده می‌کنند، اما در نحوه پیاده‌سازی، پیچیدگی و کاربرد با یکدیگر تفاوت دارند. SELinux به‌دلیل پیچیدگی و انعطاف‌پذیری بالاتر، برای محیط‌های سازمانی بزرگ و پیچیده‌تر مناسب‌تر است. از طرف دیگر، AppArmor برای کاربران مبتدی و سیستم‌هایی که نیاز به پیکربندی ساده‌تری دارند، گزینه مناسب‌تری است. در نهایت، انتخاب بین SELinux و AppArmor بستگی به نیازهای خاص هر سیستم و سازمان دارد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نحوه اجرای سیاست‌های امنیتی در SELinux و تفاوت آن با DAC (Discretionary Access Control)” subtitle=”توضیحات کامل”]در سیستم‌های لینوکسی، SELinux و DAC دو مدل مختلف برای کنترل دسترسی به منابع سیستم هستند. در این بخش، به بررسی نحوه اجرای سیاست‌های امنیتی در SELinux و تفاوت‌های آن با مدل DAC خواهیم پرداخت.


1. نحوه اجرای سیاست‌های امنیتی در SELinux

SELinux از مدل کنترل دسترسی اجباری (MAC) استفاده می‌کند. در این مدل، سیاست‌ها به‌طور مرکزی تعریف می‌شوند و دسترسی به منابع سیستم تنها بر اساس سیاست‌های از پیش تعریف‌شده انجام می‌شود، نه انتخاب و تصمیم‌گیری‌های فردی کاربر یا برنامه.

در SELinux، سیاست‌ها برای هر منبع (مانند فایل‌ها، پروسه‌ها، دستگاه‌ها و شبکه‌ها) به‌طور دقیق مشخص می‌شوند. هر شیء سیستم (مانند فایل، پروسه یا سوکت شبکه) یک برچسب امنیتی (Security Label) به نام Context دارد که شامل سه بخش اصلی است:

  • User: تعیین‌کننده هویت کاربری که به منبع دسترسی دارد.
  • Role: نقش کاربر یا برنامه در سیستم.
  • Type: نوع دسترسی که به منبع اجازه داده می‌شود.

سیاست‌های SELinux، که به‌طور معمول به صورت نوعی (Type Enforcement یا TE) تعریف می‌شوند، به‌طور خاص تعیین می‌کنند که چه پروسه‌هایی می‌توانند به کدام منابع دسترسی داشته باشند.

برخی از مهم‌ترین ویژگی‌های سیاست‌های SELinux عبارتند از:

  • Type Enforcement (TE): محدودیت‌های دقیق دسترسی به منابع بر اساس نوع منابع و پروسه‌ها.
  • Role-Based Access Control (RBAC): تخصیص نقش‌ها به کاربران و پروسه‌ها برای محدود کردن دسترسی‌هایشان.
  • Multi-Level Security (MLS): تخصیص سطوح مختلف امنیتی به داده‌ها و منابع سیستم.

به‌طور کلی، SELinux اجازه می‌دهد تا دستورات دقیق و به‌طور پیش‌فرض محدود به سیاست‌ها برای کنترل کامل دسترسی‌ها اعمال شوند، حتی اگر کاربری بخواهد منابع سیستم را در وضعیت پیش‌فرض به‌طور آزادانه استفاده کند.


2. تفاوت SELinux با DAC (Discretionary Access Control)

DAC (کنترل دسترسی اختیاری) مدل دیگری از کنترل دسترسی است که در سیستم‌های لینوکسی به‌طور پیش‌فرض اعمال می‌شود و در آن، مالک منابع (فایل‌ها، دایرکتوری‌ها و سایر منابع) تصمیم می‌گیرد که چه کسانی به منابع او دسترسی داشته باشند. این مدل بسیار ساده‌تر و کمتر سخت‌گیر است و به کاربر امکان می‌دهد تا دسترسی‌های خود را به‌طور دلخواه و با تعیین مجوزهای خاص برای فایل‌ها و پوشه‌ها مدیریت کند.

در مدل DAC، دسترسی به منابع از طریق مجوزهای دسترسی فایل‌ها و دایرکتوری‌ها که به‌طور پیش‌فرض تنظیم شده‌اند، کنترل می‌شود. این مجوزها می‌توانند در سطح مالک، گروه و دیگر کاربران قرار گیرند.

مهم‌ترین تفاوت‌های SELinux با DAC به شرح زیر هستند:


3. تفاوت‌ها در مدیریت دسترسی

  • SELinux (MAC):
    • دسترسی‌ها به‌طور اجباری بر اساس سیاست‌های امنیتی از پیش تعریف‌شده تعیین می‌شوند.
    • هیچ‌گونه دسترسی بدون تأسیس مجوزهای اجباری نمی‌تواند به منابع داده‌ها اعطا شود.
    • حتی اگر مالک منابع (کاربر یا برنامه) بخواهد، نمی‌تواند به منابع بدون تأسیس سیاست‌های خاص دسترسی دهد.
  • DAC:
    • دسترسی‌ها به منابع به اختیار مالک سیستم یا منابع انجام می‌شود.
    • مالک منابع می‌تواند دسترسی به فایل‌ها و منابع را برای سایر کاربران یا گروه‌ها به دلخواه تعیین کند.
    • کاربران می‌توانند دسترسی‌های خود را به منابع تعیین کنند و تغییر دهند.

4. پیچیدگی و کنترل

  • SELinux (MAC):
    • نیاز به پیکربندی پیچیده‌تر و نوشتن سیاست‌های دقیق دارد.
    • قابلیت‌های بیشتری برای کنترل دقیق دسترسی‌ها فراهم می‌کند.
    • سیاست‌ها به‌طور مرکزی و برای تمام کاربران و برنامه‌ها در سیستم اعمال می‌شوند.
  • DAC:
    • پیکربندی ساده‌تری دارد و برای کاربران راحت‌تر است.
    • میزان کنترل کمتری نسبت به SELinux برای جلوگیری از دسترسی‌های غیرمجاز فراهم می‌کند.
    • دسترسی‌ها فقط به‌صورت مستقیم و بر اساس مجوزهای فایل‌ها و دایرکتوری‌ها تعیین می‌شوند.

5. حفاظت از منابع سیستم

  • SELinux (MAC):
    • به‌طور دقیق‌تری منابع سیستم را از تهدیدات داخلی و خارجی محافظت می‌کند.
    • سیستم را از اشتباهات انسانی و دسترسی‌های ناخواسته محافظت می‌کند.
    • حتی اگر یک برنامه آسیب‌دیده از مجوزهایی برخوردار باشد، SELinux اجازه نمی‌دهد که این برنامه به منابع حساس دسترسی پیدا کند.
  • DAC:
    • ممکن است از اشتباهات انسانی یا پیکربندی‌های نادرست بیشتر آسیب ببیند.
    • دسترسی‌های غیرمجاز می‌توانند به دلیل خطاهای پیکربندی یا اشتباهات در تنظیم مجوزهای فایل‌ها به منابع حساس رخ دهند.

جمع‌بندی

در نهایت، تفاوت اصلی بین SELinux و DAC در نحوه مدیریت و اعمال سیاست‌های دسترسی است. SELinux از یک مدل کنترل دسترسی اجباری (MAC) استفاده می‌کند که سیاست‌ها به‌طور مرکزی و با دقت بیشتر تعریف می‌شوند، در حالی که DAC به مالک منابع اجازه می‌دهد که دسترسی‌ها را به‌طور دلخواه و بدون محدودیت‌های اجباری مدیریت کند. در نتیجه، SELinux امنیت بیشتری را فراهم می‌کند، به‌ویژه در محیط‌های حساس که نیاز به کنترل دقیق دسترسی دارند، در حالی که DAC برای محیط‌های ساده‌تر و با نیازهای امنیتی کمتر مناسب‌تر است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”مزایای استفاده از SELinux نسبت به فایروال‌ها و ابزارهای دیگر” subtitle=”توضیحات کامل”]در دنیای امنیت سیستم‌ها، ابزارهای مختلفی برای محافظت از داده‌ها و منابع سیستم وجود دارد که هر کدام عملکرد خاص خود را دارند. در این بخش، به بررسی مزایای استفاده از SELinux نسبت به فایروال‌ها و دیگر ابزارهای امنیتی خواهیم پرداخت.


1. امنیت دقیق و مبتنی بر سیاست

یکی از بزرگ‌ترین مزایای SELinux این است که به‌طور دقیق و مبتنی بر سیاست‌های از پیش تعریف‌شده دسترسی‌ها را کنترل می‌کند. SELinux از مدل کنترل دسترسی اجباری (MAC) استفاده می‌کند که به هیچ‌کس اجازه نمی‌دهد به منابع سیستم بدون تأسیس سیاست‌های خاص دسترسی داشته باشد. این در حالی است که فایروال‌ها بیشتر به‌طور عمومی و در سطح شبکه فعالیت می‌کنند.

در SELinux:

  • هر منبع سیستم (فایل‌ها، پروسه‌ها، شبکه‌ها و دستگاه‌ها) یک برچسب امنیتی (Security Label) خاص دارد.
  • سیاست‌های SELinux به‌طور دقیق و برای هر نوع منبع تعیین می‌کنند که چه کاربر یا پروسه‌ای می‌تواند به چه منابعی دسترسی داشته باشد.

در مقابل، فایروال‌ها بیشتر به کنترل ترافیک شبکه و محافظت در برابر حملات از طریق پورت‌ها و پروتکل‌ها متمرکز هستند و نمی‌توانند به‌طور دقیق دسترسی‌های داخل سیستم را کنترل کنند.


2. کاهش اثرات حملات داخلی و تهدیدات داخلی

یکی از مزایای بزرگ SELinux این است که می‌تواند از تهدیدات داخلی جلوگیری کند. فایروال‌ها بیشتر از تهدیدات خارجی محافظت می‌کنند و تنها می‌توانند ترافیک شبکه را کنترل کنند. در حالی که در SELinux، حتی اگر یک مهاجم از داخل سیستم به آن نفوذ کند، می‌تواند تنها به منابع خاصی دسترسی داشته باشد که سیاست‌های SELinux اجازه داده‌اند.

SELinux می‌تواند محیط‌های جداگانه ایجاد کند تا حملات از یک بخش سیستم به بخش دیگر سرایت نکند، که در فایروال‌ها قابل انجام نیست.


3. جلوگیری از خطاهای انسانی و سوءاستفاده‌های برنامه‌ها

SELinux با اعمال سیاست‌های امنیتی به‌صورت اجباری، امکان دسترسی‌های ناخواسته را محدود می‌کند. برای مثال، حتی اگر یک برنامه آسیب‌دیده از مجوزهایی برخوردار باشد، SELinux اجازه نمی‌دهد که این برنامه به منابع حساس دسترسی پیدا کند.

فایروال‌ها نمی‌توانند این‌گونه خطاهای داخلی و سوءاستفاده‌های برنامه‌ها را شناسایی و محدود کنند، زیرا آن‌ها بیشتر بر ترافیک ورودی و خروجی شبکه تمرکز دارند و نه رفتار داخلی سیستم.


4. اعمال سیاست‌های پیچیده و مقیاس‌پذیر

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

فایروال‌ها به‌طور معمول محدود به تعریف قوانین برای ترافیک ورودی و خروجی هستند و از انعطاف‌پذیری کمتری برخوردارند.


5. امنیت شبکه و سیستم به‌طور هم‌زمان

در حالی که فایروال‌ها معمولاً بر ترافیک شبکه و ارتباطات بین سیستم‌ها تمرکز دارند، SELinux می‌تواند علاوه بر کنترل دسترسی‌های شبکه، دسترسی‌های داخلی به فایل‌ها، برنامه‌ها و پروسه‌ها را نیز مدیریت کند. این دو لایه امنیتی کاملاً متفاوت هستند که در کنار هم می‌توانند امنیت سیستم را به‌طور جامع‌تری تأمین کنند.

SELinux به شما این امکان را می‌دهد که نه تنها از تهدیدات شبکه محافظت کنید، بلکه از تهدیدات داخلی نیز جلوگیری کرده و به‌طور کلی سیستم را از حملات متعدد ایمن نگه دارید.


6. مدیریت دسترسی دقیق‌تر به منابع سیستم

با استفاده از SELinux، شما می‌توانید دسترس‌پذیری و محدودیت‌های دسترسی به منابع سیستم را به‌صورت دقیق و بر اساس سیاست‌ها تعریف کنید. این ابزار از طریق Context‌ها، Labels، و Types، مشخص می‌کند که چه پروسه‌هایی می‌توانند به چه فایل‌ها یا منابع دیگر دسترسی داشته باشند.

در مقابل، فایروال‌ها قادر به کنترل این نوع دسترسی‌ها نیستند و بیشتر بر ترافیک شبکه و فیلتر کردن پورت‌ها تمرکز دارند.


7. نظارت و گزارش‌دهی دقیق‌تر

SELinux دارای ابزارهایی است که به شما امکان می‌دهد که به‌طور دقیق‌تر و در زمان واقعی، دسترسی‌ها و فعالیت‌های سیستم را ردیابی کنید. auditd یکی از این ابزارهاست که به شما امکان می‌دهد که تمام فعالیت‌ها و درخواست‌های دسترسی به منابع سیستم را ثبت و بررسی کنید.

در حالی که برخی فایروال‌ها می‌توانند ترافیک شبکه را ردیابی کنند، SELinux این کار را در سطح سیستم و به‌طور دقیق‌تری انجام می‌دهد، که می‌تواند به شناسایی حملات داخلی یا سوءاستفاده‌های برنامه‌ها کمک کند.


جمع‌بندی

در نهایت، SELinux به‌عنوان یک ابزار امنیتی مبتنی بر مدل کنترل دسترسی اجباری (MAC)، قادر به اعمال سیاست‌های امنیتی دقیق و پیچیده برای کنترل دسترسی‌ها در داخل سیستم است. در مقابل، فایروال‌ها بیشتر بر محافظت از سیستم در برابر تهدیدات خارجی و کنترل ترافیک شبکه تمرکز دارند. بنابراین، SELinux می‌تواند به‌طور مکمل و در کنار فایروال‌ها امنیت بیشتری را برای سیستم‌ها فراهم کند، به‌ویژه در برابر تهدیدات داخلی و حملات ناشی از سوءاستفاده از برنامه‌ها و اشتباهات انسانی.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”بخش 2. نصب و پیکربندی اولیه SELinux”][cdb_course_lesson title=”فصل 1. پیش‌نیازها و الزامات SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”بررسی نسخه لینوکس و بسته‌های مورد نیاز” subtitle=”توضیحات کامل”]برای اجرای و پیکربندی SELinux به‌طور صحیح در سیستم‌های لینوکسی، ابتدا باید مطمئن شویم که نسخه لینوکس و بسته‌های مورد نیاز به‌روز و مناسب هستند. این مرحله یک گام اساسی در تنظیمات صحیح SELinux است.

بررسی نسخه لینوکس

برای بررسی نسخه لینوکس خود می‌توانید از دستورات زیر استفاده کنید. این دستورات به شما اطلاعات دقیق از سیستم‌عامل فعلی را خواهند داد.

  1. بررسی نسخه سیستم‌عامل لینوکسدستور زیر نسخه توزیع لینوکس شما را نشان می‌دهد:
    cat /etc/os-release
    

    این دستور اطلاعاتی مانند نام توزیع، نسخه، و اطلاعات دیگر را در اختیار شما قرار می‌دهد.

  2. بررسی کرنل لینوکسبرای مشاهده اطلاعات دقیق درباره کرنل لینوکس، از دستور زیر استفاده کنید:
    uname -r
    

    این دستور نسخه کرنل فعال در سیستم شما را نمایش می‌دهد.

  3. بررسی نسخه SELinuxبرای بررسی اینکه SELinux بر روی سیستم شما نصب است و نسخه آن چیست، دستور زیر را وارد کنید:
    sestatus
    

    اگر SELinux نصب شده باشد، این دستور اطلاعاتی مانند وضعیت فعال بودن آن، نوع سیاست‌ها و نسخه SELinux را نمایش خواهد داد.

بررسی بسته‌های مورد نیاز

برای استفاده از SELinux، بسته‌های خاصی باید بر روی سیستم شما نصب شده باشد. در اینجا، بسته‌های مورد نیاز و نحوه نصب آن‌ها آورده شده است.

  1. نصب بسته‌های SELinuxبسته‌های SELinux در بسیاری از توزیع‌ها به‌طور پیش‌فرض نصب نمی‌شوند و نیاز به نصب دستی دارند. در زیر روش نصب بسته‌های ضروری آورده شده است.
    • برای توزیع‌های مبتنی بر Debian/Ubuntu:
      sudo apt-get update
      sudo apt-get install selinux-utils selinux-policy-default
      
    • برای توزیع‌های مبتنی بر Red Hat/CentOS:
      sudo yum install policycoreutils selinux-policy-targeted
      
    • برای توزیع‌های مبتنی بر Fedora:
      sudo dnf install policycoreutils selinux-policy-targeted
      
  2. نصب ابزارهای مدیریت SELinuxبرای مدیریت SELinux، ابزارهای خاصی نیز مورد نیاز هستند. این ابزارها به شما امکان می‌دهند سیاست‌ها را تنظیم و وضعیت SELinux را بررسی کنید.
    • برای توزیع‌های مبتنی بر Debian/Ubuntu:
      sudo apt-get install policycoreutils
      
    • برای توزیع‌های مبتنی بر Red Hat/CentOS:
      sudo yum install policycoreutils
      
  3. نصب ابزارهای اضافی SELinuxبرخی از ابزارهای اضافی ممکن است برای مدیریت دقیق‌تر SELinux مورد نیاز باشند. این ابزارها به شما امکان مشاهده و ویرایش سیاست‌ها، و گزارش‌دهی بهتر را می‌دهند.
    • برای توزیع‌های مبتنی بر Debian/Ubuntu:
      sudo apt-get install auditd
      
    • برای توزیع‌های مبتنی بر Red Hat/CentOS:
      sudo yum install audit
      
پیکربندی و استفاده از SELinux

بعد از نصب تمامی بسته‌ها و ابزارهای لازم، شما می‌توانید SELinux را پیکربندی کنید. این پیکربندی می‌تواند از طریق فایل‌های پیکربندی موجود در سیستم یا ابزارهای خط فرمان انجام شود.

  1. تغییر وضعیت SELinuxوضعیت SELinux می‌تواند به سه حالت مختلف تنظیم شود:
    • Enforcing: سیاست‌های SELinux به‌طور کامل اجرا می‌شوند.
    • Permissive: SELinux فعالیت‌ها را ثبت می‌کند، اما هیچ‌کدام از سیاست‌ها را به‌طور واقعی اعمال نمی‌کند.
    • Disabled: SELinux غیرفعال است.

    برای تغییر وضعیت SELinux، فایل پیکربندی زیر را ویرایش کنید:

    sudo vi /etc/selinux/config
    

    سپس مقدار SELINUX را به یکی از مقادیر زیر تغییر دهید:

    SELINUX=enforcing   # برای فعال کردن سیاست‌ها
    SELINUX=permissive  # برای ثبت رویدادها بدون اعمال سیاست‌ها
    SELINUX=disabled    # برای غیرفعال کردن SELinux
    
  2. اعمال تغییرات SELinuxپس از اعمال تغییرات در فایل پیکربندی، باید سیستم را مجدداً راه‌اندازی کنید تا تغییرات اعمال شوند:
    sudo reboot
    
  3. بررسی وضعیت SELinux پس از پیکربندیبرای اطمینان از اینکه SELinux به درستی پیکربندی شده است، دستور زیر را اجرا کنید:
    sestatus
    

جمع‌بندی

در این بخش، نحوه بررسی نسخه سیستم‌عامل لینوکس، نسخه SELinux و نصب بسته‌های مورد نیاز برای پیکربندی و استفاده از SELinux بررسی شد. همچنین نحوه تغییر وضعیت SELinux و اعمال تنظیمات در فایل پیکربندی /etc/selinux/config به‌طور کامل توضیح داده شد. این مراحل گام‌های اولیه ضروری برای پیکربندی SELinux هستند و باید قبل از استفاده از آن در سیستم‌های لینوکسی انجام شوند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نصب بسته‌های SELinux در توزیع‌های مختلف لینوکس” subtitle=”توضیحات کامل”]برای استفاده از SELinux در سیستم‌های لینوکسی، باید بسته‌های مخصوص آن را بسته به توزیع لینوکس خود نصب کنید. این بسته‌ها شامل ابزارهای اصلی برای مدیریت و پیکربندی SELinux هستند. در این بخش نحوه نصب بسته‌های SELinux در توزیع‌های مختلف لینوکس شرح داده شده است.

نصب بسته‌های SELinux در توزیع‌های مبتنی بر Debian/Ubuntu
  1. آپدیت فهرست بسته‌هاابتدا باید فهرست بسته‌ها را به‌روز کنید تا از آخرین نسخه‌های موجود مطمئن شوید:
    sudo apt-get update
    
  2. نصب بسته‌های SELinuxسپس بسته‌های مورد نیاز SELinux را نصب کنید. برای نصب SELinux، دستور زیر را وارد کنید:
    sudo apt-get install selinux-utils selinux-policy-default
    
    • selinux-utils: مجموعه‌ای از ابزارها برای مدیریت SELinux
    • selinux-policy-default: سیاست‌های پیش‌فرض SELinux برای سیستم‌های Debian/Ubuntu
  3. نصب ابزارهای مدیریت SELinuxبرای مدیریت و پیکربندی دقیق‌تر SELinux، ابزارهای زیر را نیز نصب کنید:
    sudo apt-get install policycoreutils
    
  4. نصب ابزارهای اضافی SELinuxبرخی از ابزارهای اضافی مانند auditd برای نظارت و ثبت رویدادها در SELinux به کار می‌آید. این ابزار را نیز می‌توانید با دستور زیر نصب کنید:
    sudo apt-get install auditd
    
نصب بسته‌های SELinux در توزیع‌های مبتنی بر Red Hat/CentOS
  1. آپدیت فهرست بسته‌هاابتدا باید فهرست بسته‌ها را به‌روز کنید:
    sudo yum update
    
  2. نصب بسته‌های SELinuxبرای نصب SELinux و سیاست‌های پیش‌فرض آن، دستور زیر را وارد کنید:
    sudo yum install policycoreutils selinux-policy-targeted
    
    • policycoreutils: بسته‌ای که شامل ابزارهای لازم برای مدیریت SELinux می‌باشد.
    • selinux-policy-targeted: سیاست‌های پیش‌فرض برای استفاده از SELinux در Red Hat/CentOS.
  3. نصب ابزارهای اضافی SELinuxهمچنین برای نظارت و ثبت رویدادها، ابزارهای اضافی مانند auditd را می‌توانید نصب کنید:
    sudo yum install audit
    
نصب بسته‌های SELinux در توزیع‌های مبتنی بر Fedora
  1. آپدیت فهرست بسته‌هاابتدا فهرست بسته‌ها را به‌روز کنید:
    sudo dnf update
    
  2. نصب بسته‌های SELinuxبرای نصب بسته‌های SELinux و سیاست‌های پیش‌فرض، دستور زیر را وارد کنید:
    sudo dnf install policycoreutils selinux-policy-targeted
    
    • policycoreutils: ابزارهای مورد نیاز برای مدیریت SELinux.
    • selinux-policy-targeted: سیاست‌های پیش‌فرض برای استفاده از SELinux در Fedora.
  3. نصب ابزارهای اضافی SELinuxمانند دیگر توزیع‌ها، برای ثبت و نظارت بر رویدادها از ابزار auditd استفاده می‌شود. برای نصب این ابزار، دستور زیر را وارد کنید:
    sudo dnf install audit
    
نصب بسته‌های SELinux در توزیع‌های مبتنی بر Arch Linux
  1. آپدیت فهرست بسته‌هاابتدا فهرست بسته‌ها را به‌روز کنید:
    sudo pacman -Syu
    
  2. نصب بسته‌های SELinuxبرای نصب بسته‌های SELinux در Arch Linux، از دستور زیر استفاده کنید:
    sudo pacman -S selinux-utils selinux-policy
    
  3. نصب ابزارهای مدیریت SELinuxابزارهای مدیریتی SELinux را با دستور زیر نصب کنید:
    sudo pacman -S policycoreutils
    
مسیر فایل‌های مربوط به SELinux

پس از نصب بسته‌های SELinux، تنظیمات مربوط به SELinux معمولاً در مسیر زیر قرار دارند:

  • فایل پیکربندی اصلی SELinux: /etc/selinux/config
  • فایل‌های سیاست SELinux: /etc/selinux/
پیکربندی SELinux پس از نصب

بعد از نصب بسته‌های SELinux، برای فعال‌سازی و پیکربندی آن باید فایل پیکربندی SELinux را ویرایش کنید:

  1. فایل پیکربندی را باز کنید:
    sudo vi /etc/selinux/config
    
  2. وضعیت SELinux را به یکی از مقادیر زیر تنظیم کنید:
    • enforcing: برای فعال کردن سیاست‌های SELinux
    • permissive: برای ثبت رویدادها بدون اعمال سیاست‌ها
    • disabled: برای غیرفعال کردن SELinux

    مثلا:

    SELINUX=enforcing
    
  3. بعد از اعمال تغییرات، برای اعمال تغییرات به سیستم مجدداً راه‌اندازی کنید:
    sudo reboot
    

جمع‌بندی

در این بخش، نحوه نصب بسته‌های SELinux در توزیع‌های مختلف لینوکس شامل Debian/Ubuntu، Red Hat/CentOS، Fedora، و Arch Linux توضیح داده شد. این نصب‌ها شامل بسته‌های اصلی برای مدیریت SELinux و ابزارهای اضافی برای نظارت و پیکربندی سیستم هستند. پس از نصب بسته‌ها، فایل پیکربندی SELinux برای فعال‌سازی و تنظیم آن باید ویرایش شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”بررسی پیش‌نیازهای امنیتی (فایروال و پیکربندی شبکه)” subtitle=”توضیحات کامل”]در هر سرور لینوکسی، توجه به مسائل امنیتی برای جلوگیری از حملات و تهدیدات بسیار حیاتی است. یکی از مهم‌ترین بخش‌های امنیت سیستم‌های لینوکسی، پیکربندی مناسب فایروال و شبکه است. در این بخش، به بررسی پیش‌نیازهای امنیتی شامل فایروال و پیکربندی شبکه خواهیم پرداخت و نحوه پیکربندی آن‌ها را با جزئیات کامل توضیح خواهیم داد.

1. پیکربندی فایروال

فایروال یک لایه امنیتی است که ترافیک ورودی و خروجی سیستم را مدیریت می‌کند و مانع دسترسی‌های غیرمجاز به سیستم می‌شود. در لینوکس، ابزارهای مختلفی برای پیکربندی فایروال وجود دارد که مهم‌ترین آن‌ها firewalld و iptables هستند.

نصب و پیکربندی firewalld

در توزیع‌های لینوکس مانند CentOS، RHEL و Fedora، firewalld به‌طور پیش‌فرض نصب است و به‌راحتی می‌توان آن را پیکربندی کرد.

  1. نصب firewalldاگر firewalld به‌طور پیش‌فرض نصب نباشد، می‌توانید آن را با دستور زیر نصب کنید:
    sudo yum install firewalld
    

    یا برای سیستم‌های مبتنی بر dnf مانند Fedora:

    sudo dnf install firewalld
    
  2. راه‌اندازی و فعال‌سازی firewalldبعد از نصب، می‌توانید فایروال را با استفاده از دستورات زیر راه‌اندازی و فعال کنید:
    sudo systemctl start firewalld
    sudo systemctl enable firewalld
    
  3. بررسی وضعیت firewalldبرای بررسی وضعیت فعال بودن فایروال، از دستور زیر استفاده کنید:
    sudo firewall-cmd --state
    
  4. پیکربندی فایروال برای مجاز کردن خدمات خاصبرای مجاز کردن یک سرویس خاص مانند HTTP یا HTTPS، می‌توانید از دستور زیر استفاده کنید:
    sudo firewall-cmd --add-service=http --permanent
    sudo firewall-cmd --add-service=https --permanent
    

    سپس برای اعمال تغییرات:

    sudo firewall-cmd --reload
    
  5. مسدود کردن یک پورت خاصبرای مسدود کردن یک پورت خاص (مثلاً پورت 8080) می‌توانید از دستور زیر استفاده کنید:
    sudo firewall-cmd --remove-port=8080/tcp --permanent
    sudo firewall-cmd --reload
    
نصب و پیکربندی iptables

در صورتی که بخواهید از iptables به جای firewalld استفاده کنید، مراحل زیر را دنبال کنید.

  1. نصب iptablesبرای نصب iptables، از دستور زیر استفاده کنید:
    sudo yum install iptables
    
  2. راه‌اندازی و فعال‌سازی iptablesبرای راه‌اندازی iptables:
    sudo systemctl start iptables
    sudo systemctl enable iptables
    
  3. پیکربندی iptables برای مجاز کردن ترافیکبرای مجاز کردن پورت‌های خاص (مثلاً HTTP و HTTPS)، دستور زیر را اجرا کنید:
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    
  4. ذخیره تغییرات iptablesپس از پیکربندی فایروال با iptables، باید تغییرات را ذخیره کنید تا پس از راه‌اندازی مجدد سرور اعمال شوند:
    sudo service iptables save
    
  5. بررسی وضعیت iptablesبرای مشاهده قوانین فعلی iptables، دستور زیر را وارد کنید:
    sudo iptables -L
    
2. پیکربندی شبکه

برای امنیت شبکه، باید مطمئن شوید که پیکربندی شبکه شما به گونه‌ای است که از دسترسی‌های غیرمجاز جلوگیری کند.

1. تنظیمات شبکه در فایل /etc/sysctl.conf

برای افزایش امنیت شبکه و غیرفعال‌سازی برخی از ویژگی‌های غیرضروری در هسته، می‌توانید پیکربندی‌های زیر را در فایل /etc/sysctl.conf اضافه کنید:

  1. غیرفعال‌سازی IP forwardingبرای جلوگیری از مسیریابی ترافیک به خارج از سیستم، دستور زیر را در فایل /etc/sysctl.conf اضافه کنید:
    net.ipv4.ip_forward = 0
    
  2. غیرفعال‌سازی پاسخ به درخواست‌های ICMP (پینگ)برای جلوگیری از حملات DoS که از طریق پینگ ارسال می‌شوند، دستور زیر را به فایل /etc/sysctl.conf اضافه کنید:
    net.ipv4.icmp_echo_ignore_all = 1
    
  3. غیرفعال‌سازی استفاده از منابع به‌عنوان آدرس‌های IP خصوصیبرای جلوگیری از حملات IP Spoofing، از دستور زیر استفاده کنید:
    net.ipv4.conf.all.rp_filter = 1
    
  4. اعمال تغییراتپس از ویرایش فایل /etc/sysctl.conf، برای اعمال تغییرات دستور زیر را اجرا کنید:
    sudo sysctl -p
    
3. استفاده از SSH برای دسترسی ایمن به سرور

برای تأمین امنیت بیشتر، باید به پیکربندی SSH توجه کنید تا دسترسی‌های غیرمجاز به سرور از طریق پروتکل SSH مسدود شود.

  1. ویرایش فایل پیکربندی SSHفایل پیکربندی SSH در مسیر /etc/ssh/sshd_config قرار دارد. آن را با ویرایشگر دلخواه باز کنید:
    sudo vi /etc/ssh/sshd_config
    
  2. تنظیمات پیشنهادی برای افزایش امنیت SSH
    • غیرفعال کردن ورود به‌صورت ریشه (root):
      PermitRootLogin no
      
    • فعال‌سازی احراز هویت با کلید عمومی:
      PubkeyAuthentication yes
      
    • تغییر پورت پیش‌فرض SSH (پورت 22):
      Port 2222
      
  3. اعمال تغییرات SSHپس از ویرایش فایل پیکربندی، سرویس SSH را برای اعمال تغییرات ریستارت کنید:
    sudo systemctl restart sshd
    

جمع‌بندی

در این بخش، نحوه پیکربندی فایروال و شبکه برای بهبود امنیت در سیستم‌های لینوکسی توضیح داده شد. برای مدیریت فایروال، می‌توانید از ابزارهای firewalld یا iptables استفاده کنید و پورت‌ها و خدمات مورد نیاز خود را باز یا مسدود کنید. همچنین، پیکربندی شبکه شامل غیرفعال‌سازی ویژگی‌های ناامن مانند IP forwarding و ICMP و همچنین پیکربندی SSH برای دسترسی ایمن به سرور بسیار مهم است. با اعمال این تنظیمات می‌توانید امنیت سرور خود را به‌شدت افزایش دهید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. فعال‌سازی و غیرفعال‌سازی SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”فعال‌سازی SELinux در سیستم” subtitle=”توضیحات کامل”]SELinux (Security-Enhanced Linux) یک ماژول امنیتی است که به سیستم‌عامل لینوکس اضافه می‌شود تا امنیت دسترسی‌ها و منابع را در سیستم‌های مبتنی بر لینوکس تقویت کند. این ماژول با استفاده از سیاست‌های دسترسی دقیق، می‌تواند به محدودسازی دسترسی‌های غیرمجاز کمک کند و موجب افزایش امنیت سرور گردد. در این بخش به نحوه فعال‌سازی و پیکربندی SELinux در سیستم‌های لینوکسی پرداخته خواهد شد.

1. بررسی وضعیت فعلی SELinux

قبل از انجام هرگونه تغییر، باید وضعیت SELinux را بررسی کنید. برای این کار می‌توانید از دستور زیر استفاده کنید:

sestatus

این دستور وضعیت SELinux را نمایش می‌دهد، که ممکن است یکی از سه حالت زیر را نشان دهد:

  • Enforcing: SELinux فعال است و تمام سیاست‌های دسترسی اعمال می‌شوند.
  • Permissive: SELinux فعال است، اما هیچ‌گونه سیاستی برای مسدود کردن دسترسی‌ها اعمال نمی‌شود. در این حالت، SELinux فقط لاگ می‌کند که چه دسترسی‌هایی توسط سیاست‌های SELinux مسدود می‌شده است.
  • Disabled: SELinux غیرفعال است.
2. فعال‌سازی SELinux

اگر SELinux غیرفعال باشد، می‌توانید آن را به‌راحتی فعال کنید. برای این کار، باید فایل پیکربندی SELinux را ویرایش کنید.

  1. ویرایش فایل پیکربندی SELinuxفایل پیکربندی SELinux در مسیر /etc/selinux/config قرار دارد. برای ویرایش این فایل از ویرایشگر دلخواه مانند vi یا nano استفاده کنید:
    sudo vi /etc/selinux/config
    
  2. تغییر مقدار SELINUX به Enforcingدر فایل پیکربندی، گزینه SELINUX را پیدا کرده و آن را به enforcing تغییر دهید:
    SELINUX=enforcing
    

    این تغییر باعث می‌شود که SELinux به حالت اعمال سیاست (Enforcing) منتقل شود و همه سیاست‌ها و محدودیت‌ها به‌طور فعال پیاده‌سازی شوند.

  3. تنظیم نوع سیاست SELinuxدر همین فایل، گزینه SELINUXTYPE وجود دارد که نوع سیاست SELinux را مشخص می‌کند. معمولاً دو نوع سیاست اصلی وجود دارد:
    • targeted: این نوع سیاست به‌طور خاص برای سرورها طراحی شده و بیشتر سرویس‌های سیستم را تحت پوشش قرار می‌دهد.
    • mls: این نوع سیاست برای محیط‌های با امنیت بسیار بالا و کنترل دقیق‌تر دسترسی‌ها استفاده می‌شود.

    برای استفاده از سیاست targeted، خط مربوطه به شکل زیر باید باشد:

    SELINUXTYPE=targeted
    
  4. اعمال تغییراتپس از انجام تغییرات، فایل پیکربندی را ذخیره کرده و سیستم را ریستارت کنید تا تغییرات اعمال شوند:
    sudo reboot
    
3. فعال‌سازی SELinux در حالت Permissive بدون ریستارت

اگر نیاز به فعال‌سازی SELinux در حالت permissive دارید (برای آزمایش و مشاهده اینکه چه قوانین SELinux باعث مسدود شدن دسترسی‌ها می‌شوند)، می‌توانید به‌صورت موقتی از دستور زیر استفاده کنید:

sudo setenforce 0

این دستور SELinux را در حالت permissive قرار می‌دهد، اما پس از ریستارت سیستم، دوباره به وضعیت قبلی باز می‌گردد.

4. بررسی وضعیت SELinux بعد از تغییرات

پس از ریستارت سیستم، می‌توانید مجدداً با دستور sestatus وضعیت SELinux را بررسی کنید تا اطمینان حاصل کنید که SELinux به درستی در حالت enforcing قرار دارد.

sestatus

اگر همه چیز به‌درستی پیکربندی شده باشد، باید خروجی به‌صورت زیر باشد:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              disabled
Policy deny_unknown status:     allowed
5. بررسی و مدیریت سیاست‌ها

بعد از فعال‌سازی SELinux، ممکن است بخواهید سیاست‌ها را به‌طور دقیق‌تر مدیریت کنید. برای مثال، برای تغییر وضعیت SELinux به permissive یا enforcing در حال اجرا، از دستور زیر استفاده کنید:

  • برای تغییر به enforcing:
    sudo setenforce 1
    
  • برای تغییر به permissive:
    sudo setenforce 0
    
6. رفع مشکلات SELinux

گاهی ممکن است SELinux موجب مسدود شدن برخی از عملکردهای نرم‌افزارها یا سرویس‌ها شود. برای رفع این مشکلات، می‌توانید از ابزار audit2allow استفاده کنید که به شما کمک می‌کند تا قوانین جدید برای اجازه دادن به دسترسی‌ها ایجاد کنید. برای استفاده از این ابزار، ابتدا باید policycoreutils را نصب کنید:

sudo yum install policycoreutils-python

سپس، برای ایجاد قوانین جدید از لاگ‌های SELinux:

sudo ausearch -m avc -ts recent
sudo audit2allow -M my_custom_policy
sudo semodule -i my_custom_policy.pp

جمع‌بندی

در این بخش، نحوه فعال‌سازی و پیکربندی SELinux در سیستم‌های لینوکسی توضیح داده شد. با فعال‌سازی SELinux در حالت enforcing، می‌توانید امنیت سیستم خود را به‌طور قابل توجهی افزایش دهید. همچنین، ابزارهایی مانند audit2allow می‌توانند برای مدیریت سیاست‌ها و حل مشکلات مرتبط با SELinux مفید باشند. فعال‌سازی صحیح SELinux نقش مهمی در جلوگیری از تهدیدات امنیتی و محافظت از منابع سیستم دارد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”روش‌های فعال‌سازی SELinux از طریق فایل‌های پیکربندی” subtitle=”توضیحات کامل”]فعال‌سازی SELinux از طریق فایل‌های پیکربندی به شما این امکان را می‌دهد که SELinux را به‌طور مداوم و به‌صورت دائم فعال کنید، حتی پس از ریستارت سیستم. این روش به‌ویژه برای تنظیمات سراسری و تغییرات در سیاست‌ها کاربردی است. در این بخش، روش‌های مختلف فعال‌سازی SELinux از طریق فایل‌های پیکربندی شرح داده می‌شود.

1. پیکربندی SELinux از طریق فایل /etc/selinux/config

فایل پیکربندی اصلی SELinux که در آن تنظیمات مربوط به فعال‌سازی یا غیرفعال‌سازی SELinux و همچنین نوع سیاست‌ها انجام می‌شود، در مسیر /etc/selinux/config قرار دارد. برای فعال‌سازی یا غیرفعال‌سازی SELinux از این فایل، مراحل زیر را دنبال کنید:

  1. ویرایش فایل پیکربندیابتدا باید این فایل را با یک ویرایشگر متن باز کنید. برای این کار، از ویرایشگر vi یا nano استفاده کنید:
    sudo vi /etc/selinux/config
    
  2. تغییر وضعیت SELinuxدر این فایل، خط SELINUX وجود دارد که وضعیت SELinux را مشخص می‌کند. این گزینه می‌تواند یکی از مقادیر زیر را داشته باشد:
    • enforcing: SELinux فعال است و سیاست‌های دسترسی به‌طور کامل اعمال می‌شوند.
    • permissive: SELinux فعال است اما به‌جای اعمال سیاست‌ها، فقط لاگ می‌کند.
    • disabled: SELinux غیرفعال است.

    برای فعال‌سازی SELinux به‌صورت دائم، مقدار این گزینه را به enforcing تغییر دهید:

    SELINUX=enforcing
    
  3. انتخاب نوع سیاست SELinuxدر همین فایل، گزینه SELINUXTYPE وجود دارد که نوع سیاست SELinux را مشخص می‌کند. معمولاً دو نوع سیاست اصلی وجود دارد:
    • targeted: این سیاست بیشتر بر روی سرویس‌ها و فرآیندهای خاص سیستم تمرکز دارد.
    • mls: این سیاست بیشتر برای محیط‌های با امنیت بالا و نیاز به کنترل دقیق دسترسی‌ها استفاده می‌شود.

    به‌طور پیش‌فرض، معمولاً از targeted استفاده می‌شود. اطمینان حاصل کنید که خط زیر به شکل زیر باشد:

    SELINUXTYPE=targeted
    
  4. ذخیره تغییراتپس از انجام تغییرات، فایل را ذخیره کرده و از ویرایشگر خارج شوید.
  5. ریستارت سیستمبرای اعمال تغییرات، باید سیستم را ریستارت کنید:
    sudo reboot
    
2. فعال‌سازی SELinux از طریق دستورات در خط فرمان

اگر می‌خواهید SELinux را به‌طور موقت تغییر دهید بدون نیاز به ویرایش فایل پیکربندی، می‌توانید از دستورات setenforce برای تغییر حالت SELinux استفاده کنید.

  • برای تغییر به حالت enforcing (فعال‌سازی SELinux):
    sudo setenforce 1
    
  • برای تغییر به حالت permissive:
    sudo setenforce 0
    

این تغییرات موقتی هستند و پس از ریستارت سیستم به حالت پیش‌فرض خود باز می‌گردند. برای اعمال تغییرات دائم باید فایل پیکربندی /etc/selinux/config را ویرایش کنید.

3. بررسی وضعیت SELinux پس از تغییرات

پس از اعمال تغییرات، می‌توانید با استفاده از دستور sestatus وضعیت فعلی SELinux را بررسی کنید:

sestatus

اگر SELinux به درستی فعال شده باشد، باید در خروجی به‌صورت زیر مشاهده کنید:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
4. تغییر نوع سیاست SELinux

اگر می‌خواهید نوع سیاست SELinux را تغییر دهید (مثلاً از targeted به mls)، باید فایل پیکربندی /etc/selinux/config را ویرایش کرده و مقدار گزینه SELINUXTYPE را تغییر دهید:

SELINUXTYPE=mls

پس از تغییر نوع سیاست، سیستم را ریستارت کنید تا تغییرات اعمال شوند.

5. رفع مشکلات SELinux با تغییرات در فایل‌های پیکربندی

گاهی اوقات، SELinux ممکن است دسترسی‌ها را مسدود کند و مشکلاتی ایجاد نماید. در این صورت، برای رفع مشکلات و به‌دست آوردن مجوزهای لازم، می‌توانید از ابزارهایی مانند audit2allow استفاده کنید.

برای نصب این ابزار:

sudo yum install policycoreutils-python

برای مشاهده مشکلات SELinux و ایجاد قوانین برای رفع آن‌ها:

sudo ausearch -m avc -ts recent
sudo audit2allow -M my_custom_policy
sudo semodule -i my_custom_policy.pp
جمع‌بندی

در این بخش، روش‌های فعال‌سازی SELinux از طریق فایل‌های پیکربندی و دستورات خط فرمان شرح داده شد. فعال‌سازی SELinux در حالت enforcing موجب اعمال سیاست‌های دسترسی دقیق در سیستم می‌شود که باعث افزایش امنیت سرور می‌گردد. از طریق فایل پیکربندی /etc/selinux/config می‌توانید SELinux را به‌طور دائم فعال کنید و در صورت نیاز، نوع سیاست‌ها را تغییر دهید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”استفاده از دستور setenforce” subtitle=”توضیحات کامل”]دستور setenforce یکی از ابزارهای خط فرمان در سیستم‌عامل‌های لینوکسی است که به‌طور موقت وضعیت SELinux را تغییر می‌دهد. این دستور برای تغییر وضعیت SELinux از حالت «فعال» به حالت «مجوزی» و بالعکس بدون نیاز به ویرایش فایل‌های پیکربندی مفید است. تغییرات اعمال‌شده از طریق setenforce تا زمانی که سیستم مجدداً راه‌اندازی نشود، برقرار خواهند بود.

1. حالت‌های مختلف دستور setenforce

دستور setenforce فقط دو حالت برای SELinux تعیین می‌کند:

  • حالت Enforcing: SELinux فعال است و سیاست‌های امنیتی به‌طور کامل اعمال می‌شوند.
  • حالت Permissive: SELinux فعال است، اما به‌جای اعمال سیاست‌ها، فقط پیغام‌های مربوط به نقض سیاست‌ها را در لاگ‌ها ثبت می‌کند.
2. دستور setenforce برای تغییر حالت SELinux

برای تغییر وضعیت SELinux با استفاده از دستور setenforce، از مقادیر زیر استفاده می‌کنیم:

  • برای فعال‌سازی SELinux (حالت Enforcing):برای فعال کردن کامل SELinux و اعمال سیاست‌ها، از دستور زیر استفاده کنید:
    sudo setenforce 1
    
  • برای تغییر به حالت Permissive (مجوزی):برای غیرفعال کردن اعمال سیاست‌ها، اما باقی ماندن SELinux در حالت فعال و ثبت خطاها در لاگ‌ها، از دستور زیر استفاده کنید:
    sudo setenforce 0
    
3. بررسی وضعیت فعلی SELinux

برای مشاهده وضعیت فعلی SELinux و بررسی اینکه آیا در حالت «enforcing» یا «permissive» است، از دستور getenforce استفاده کنید:

getenforce

خروجی این دستور یکی از دو حالت زیر خواهد بود:

  • Enforcing: نشان‌دهنده این است که SELinux در حال اعمال سیاست‌ها است.
  • Permissive: نشان‌دهنده این است که SELinux در حالت مجوزی است و فقط لاگ‌ها را ثبت می‌کند.
4. محدودیت‌ها و کاربردها
  • تغییرات موقتی: دستور setenforce تغییرات موقتی اعمال می‌کند. به این معنی که پس از ریستارت سیستم، SELinux به حالت اولیه خود بازمی‌گردد. برای اعمال تغییرات دائم باید فایل پیکربندی /etc/selinux/config را ویرایش کنید.
  • استفاده برای تست یا عیب‌یابی: این دستور معمولاً برای عیب‌یابی و آزمایش‌ها مورد استفاده قرار می‌گیرد. به‌ویژه در زمانی که می‌خواهید SELinux را به‌طور موقت به حالت «permissive» درآورید تا بررسی کنید که آیا مشکل دسترسی به‌خاطر SELinux است یا خیر.
5. پیکربندی دائمی حالت SELinux

اگر می‌خواهید تغییراتی که با استفاده از setenforce اعمال کرده‌اید پس از ریستارت سیستم نیز باقی بماند، باید فایل پیکربندی /etc/selinux/config را ویرایش کنید و مقدار SELINUX را به حالت موردنظر ( enforcing یا permissive) تغییر دهید.

برای تغییر فایل پیکربندی:

sudo vi /etc/selinux/config

سپس گزینه SELINUX را به یکی از مقادیر زیر تغییر دهید:

SELINUX=enforcing   # برای حالت فعال
SELINUX=permissive  # برای حالت مجوزی
جمع‌بندی

دستور setenforce یک ابزار سریع و موقت برای تغییر حالت SELinux است که می‌توانید از آن برای آزمایش و رفع مشکلات استفاده کنید. این دستور تغییرات موقتی ایجاد می‌کند و تا زمان راه‌اندازی مجدد سیستم برقرار خواهد بود. برای اعمال تغییرات دائم باید فایل پیکربندی SELinux را ویرایش کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”غیرفعال‌سازی SELinux” subtitle=”توضیحات کامل”]غیرفعال‌سازی SELinux در سیستم‌های لینوکسی می‌تواند در برخی موارد ضروری باشد، به ویژه زمانی که مشکلات مربوط به امنیت یا محدودیت‌های SELinux مانع از عملکرد صحیح برخی برنامه‌ها یا سرویس‌ها شوند. در حالی که به طور کلی توصیه می‌شود SELinux را فعال نگه دارید تا سیستم شما از سیاست‌های امنیتی بهره‌مند شود، ممکن است برای حل مشکلات خاص یا برای تست، نیاز به غیرفعال‌سازی آن داشته باشید.

روش‌های غیرفعال‌سازی SELinux

برای غیرفعال‌سازی SELinux، می‌توان از چند روش استفاده کرد که هرکدام تغییرات متفاوتی ایجاد می‌کنند.

1. غیرفعال‌سازی موقتی با استفاده از دستور setenforce

اگر بخواهید SELinux را موقتا غیرفعال کنید (بدون اینکه نیاز به تغییرات دائمی در فایل پیکربندی داشته باشید)، می‌توانید از دستور setenforce استفاده کنید.

دستور برای غیرفعال کردن SELinux:

برای غیرفعال کردن SELinux در حالت موقت و بدون نیاز به راه‌اندازی مجدد سیستم، دستور زیر را وارد کنید:

sudo setenforce 0

این دستور SELinux را به حالت permissive تغییر می‌دهد که به این معنی است که SELinux همچنان فعال است، اما فقط خطاها را لاگ می‌کند و هیچ‌گونه محدودیتی بر روی دسترسی‌ها اعمال نمی‌کند.

بررسی وضعیت بعد از اجرای دستور:

برای مشاهده اینکه SELinux در حالت permissive قرار دارد یا خیر، از دستور getenforce استفاده کنید:

getenforce

خروجی باید Permissive باشد.

توجه: این تغییر موقتی است و پس از راه‌اندازی مجدد سیستم، SELinux دوباره به حالت اولیه خود بازمی‌گردد.

2. غیرفعال‌سازی دائمی با ویرایش فایل پیکربندی

اگر می‌خواهید SELinux به‌طور دائم غیرفعال شود، باید فایل پیکربندی آن را ویرایش کنید.

مراحل غیرفعال‌سازی دائمی SELinux:

  1. فایل پیکربندی SELinux را با استفاده از ویرایشگر متن موردنظر خود باز کنید (در اینجا از vi استفاده می‌کنیم):
    sudo vi /etc/selinux/config
    
  2. در فایل پیکربندی، مقدار گزینه SELINUX را به disabled تغییر دهید:
    SELINUX=disabled
    

    با این تغییر، SELinux به‌طور کامل غیرفعال خواهد شد و دیگر در هنگام راه‌اندازی سیستم بارگذاری نمی‌شود.

  3. پس از ویرایش فایل، آن را ذخیره کرده و ویرایشگر را ببندید.
  4. برای اعمال تغییرات، سیستم را دوباره راه‌اندازی کنید:
    sudo reboot
    

3. بررسی وضعیت SELinux پس از راه‌اندازی مجدد

بعد از راه‌اندازی مجدد سیستم، می‌توانید وضعیت SELinux را بررسی کنید تا مطمئن شوید که غیرفعال شده است:

getenforce

اگر SELinux به‌درستی غیرفعال شده باشد، خروجی این دستور باید Disabled باشد.

جمع‌بندی

غیرفعال‌سازی SELinux می‌تواند به‌طور موقت یا دائمی انجام شود. برای تغییر موقتی وضعیت SELinux، می‌توانید از دستور setenforce 0 استفاده کنید، که تغییرات فقط تا زمان راه‌اندازی مجدد سیستم برقرار خواهد بود. برای غیرفعال‌سازی دائمی، باید فایل پیکربندی /etc/selinux/config را ویرایش کرده و مقدار SELINUX را به disabled تغییر دهید. پس از اعمال تغییرات، سیستم را دوباره راه‌اندازی کنید تا SELinux به‌طور کامل غیرفعال شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”دستورالعمل برای غیرفعال کردن SELinux در حالات مختلف” subtitle=”توضیحات کامل”]در این بخش، نحوه غیرفعال کردن SELinux را در حالات مختلف (موقتی و دائمی) برای سیستم‌های لینوکسی توضیح خواهیم داد. این روش‌ها به شما این امکان را می‌دهند که با توجه به نیازهای خود، SELinux را به حالت‌های مختلفی تغییر دهید.

1. غیرفعال‌سازی موقتی SELinux با دستور setenforce

اگر نیاز به غیرفعال کردن SELinux به صورت موقتی دارید، می‌توانید از دستور setenforce استفاده کنید. این روش تغییرات را بدون نیاز به ویرایش فایل‌های پیکربندی اعمال می‌کند و تنها تا زمان راه‌اندازی مجدد سیستم معتبر خواهد بود.

دستور برای غیرفعال کردن SELinux موقتی:

برای غیرفعال کردن SELinux به صورت موقتی، دستور زیر را وارد کنید:

sudo setenforce 0

این دستور SELinux را به حالت permissive تغییر می‌دهد. در این حالت، SELinux همچنان فعال است اما تنها خطاها را لاگ می‌کند و هیچ‌گونه محدودیتی بر روی دسترسی‌ها اعمال نمی‌شود.

بررسی وضعیت پس از تغییر:

برای بررسی وضعیت SELinux پس از تغییر، دستور زیر را وارد کنید:

getenforce

خروجی باید Permissive باشد. در این حالت، SELinux به طور موقت غیرفعال است و فقط هشدارهای امنیتی را ثبت می‌کند.

2. غیرفعال‌سازی دائمی SELinux از طریق فایل پیکربندی

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

مراحل غیرفعال‌سازی دائمی SELinux:

  1. با استفاده از ویرایشگر متن مورد نظر خود (در اینجا از vi استفاده می‌کنیم)، فایل پیکربندی SELinux را باز کنید:
    sudo vi /etc/selinux/config
    
  2. در فایل پیکربندی، مقدار گزینه SELINUX را به disabled تغییر دهید:
    SELINUX=disabled
    

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

  3. فایل پیکربندی را ذخیره کرده و ویرایشگر را ببندید.
  4. سیستم را برای اعمال تغییرات دوباره راه‌اندازی کنید:
    sudo reboot
    

بررسی وضعیت پس از راه‌اندازی مجدد:

بعد از راه‌اندازی مجدد سیستم، برای اطمینان از غیرفعال شدن کامل SELinux، دستور زیر را وارد کنید:

getenforce

اگر SELinux به درستی غیرفعال شده باشد، خروجی باید Disabled باشد.

3. غیرفعال‌سازی SELinux با استفاده از ویرایش فایل selinux در زمان بوت

برای غیرفعال کردن SELinux در زمان بوت، می‌توانید تنظیمات لازم را از طریق فایل‌های بوت سیستم اعمال کنید.

مراحل غیرفعال‌سازی در زمان بوت:

  1. ابتدا فایل grub را ویرایش کنید:
    sudo vi /etc/default/grub
    
  2. خط GRUB_CMDLINE_LINUX را پیدا کرده و به آن مقدار زیر را اضافه کنید:
    selinux=0
    
  3. سپس تنظیمات GRUB را به روز کنید:برای سیستم‌های مبتنی بر GRUB 2، دستور زیر را وارد کنید:
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  4. پس از انجام این تغییرات، سیستم را دوباره راه‌اندازی کنید:
    sudo reboot
    

بررسی وضعیت SELinux پس از بوت:

پس از راه‌اندازی مجدد سیستم، با استفاده از دستور زیر بررسی کنید که SELinux غیرفعال شده است:

getenforce

خروجی باید Disabled باشد.

جمع‌بندی

برای غیرفعال کردن SELinux می‌توانید از روش‌های مختلفی استفاده کنید:

  1. غیرفعال‌سازی موقتی: با استفاده از دستور setenforce 0 می‌توانید SELinux را موقتاً غیرفعال کنید تا خطاها را لاگ کرده اما هیچ‌گونه محدودیتی را اعمال نکند. این تغییرات تا زمان راه‌اندازی مجدد سیستم معتبر خواهند بود.
  2. غیرفعال‌سازی دائمی: با ویرایش فایل /etc/selinux/config و تغییر مقدار گزینه SELINUX=disabled می‌توانید SELinux را به طور دائمی غیرفعال کنید.
  3. غیرفعال‌سازی در زمان بوت: برای غیرفعال کردن SELinux در زمان بوت، می‌توانید با ویرایش فایل‌های بوت مانند /etc/default/grub و اضافه کردن selinux=0، SELinux را در هر بار راه‌اندازی سیستم غیرفعال کنید.

در تمامی روش‌ها، پس از اعمال تغییرات، بررسی وضعیت SELinux با دستور getenforce کمک می‌کند تا از موفقیت‌آمیز بودن تغییرات مطمئن شوید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”بررسی تأثیرات فعال‌سازی و غیرفعال‌سازی SELinux بر امنیت” subtitle=”توضیحات کامل”]SELinux یک افزونه امنیتی برای سیستم‌عامل لینوکس است که توسط NSA (سازمان امنیت ملی ایالات متحده) توسعه یافته است. هدف اصلی آن تقویت مدل امنیتی لینوکس با استفاده از سیاست‌های دسترسی بسیار دقیق است. در این بخش، به بررسی تأثیرات فعال‌سازی و غیرفعال‌سازی SELinux بر امنیت سیستم‌های لینوکسی خواهیم پرداخت.


تأثیرات فعال‌سازی SELinux بر امنیت

فعال‌سازی SELinux بر امنیت سیستم تأثیرات مثبت و قوی دارد. SELinux با استفاده از مدل دسترسی مبتنی بر سیاست‌ها (MAC – Mandatory Access Control)، به طور دقیق مشخص می‌کند که کدام فرآیندها و کاربران به چه منابعی دسترسی دارند. در ادامه به مزایای فعال‌سازی SELinux می‌پردازیم:

  1. محدود کردن دسترسی به منابع سیستم: با فعال‌سازی SELinux، فرآیندها و کاربران تنها به منابعی که به آن‌ها دسترسی داده شده است، دسترسی خواهند داشت. این به معنای محدود کردن دامنه حملات ممکن است. حتی اگر یک مهاجم موفق به نفوذ به سیستم شود، SELinux از گسترش حمله و دسترسی به بخش‌های حساس سیستم جلوگیری می‌کند.
  2. محافظت از برنامه‌های کاربردی و سرویس‌ها: SELinux می‌تواند دسترسی به فایل‌ها و منابع سیستم را برای برنامه‌های خاص محدود کند. به عنوان مثال، اگر یک برنامه آسیب‌پذیر مورد حمله قرار گیرد، SELinux می‌تواند از اجرای دستورات مخرب یا دسترسی به فایل‌های حیاتی سیستم جلوگیری کند.
  3. ایجاد لایه‌های امنیتی اضافی: SELinux لایه‌های امنیتی اضافی به سیستم اضافه می‌کند که حتی اگر سیاست‌های دسترسی استاندارد (مانند iptables یا firewalld) به‌طور کامل پیکربندی نشده باشند، باز هم حفاظت از سیستم صورت گیرد.
  4. پیشگیری از آسیب‌های داخلی: SELinux نه تنها از حملات خارجی محافظت می‌کند، بلکه از حملات داخلی مانند اشتباهات کاربری یا نفوذ کارکنان نیز جلوگیری می‌کند. با استفاده از سیاست‌های دقیق، حتی کاربران مجاز نیز تنها به منابع مشخصی دسترسی خواهند داشت.

تأثیرات غیرفعال‌سازی SELinux بر امنیت

غیرفعال‌سازی SELinux، در صورت عدم توجه به سایر ابزارهای امنیتی، می‌تواند خطرات قابل توجهی را برای سیستم ایجاد کند. در زیر به برخی از تأثیرات منفی غیرفعال‌سازی SELinux اشاره خواهیم کرد:

  1. افزایش خطرات ناشی از نفوذ: اگر SELinux غیرفعال باشد، مهاجمانی که موفق به نفوذ به سیستم شوند، می‌توانند به منابع بیشتری دسترسی پیدا کنند و حملات خود را گسترش دهند. این ممکن است شامل دسترسی به اطلاعات حساس، تغییرات در پیکربندی سیستم، یا اجرای برنامه‌های مخرب باشد.
  2. کمبود لایه‌های امنیتی اضافی: با غیرفعال‌سازی SELinux، سیستم از لایه‌های امنیتی اضافی که SELinux فراهم می‌آورد، محروم می‌شود. اگرچه ممکن است تنظیمات فایروال و سایر ابزارهای امنیتی فعال باشند، اما غیرفعال‌سازی SELinux موجب از دست رفتن یکی از مهم‌ترین لایه‌های دفاعی در برابر تهدیدات می‌شود.
  3. عدم محدودیت در فرآیندها و دسترسی‌ها: غیرفعال‌سازی SELinux باعث می‌شود که هیچ محدودیتی بر دسترسی فرآیندها به منابع سیستم وجود نداشته باشد. این می‌تواند موجب اجرای غیرمجاز برنامه‌ها و ایجاد آسیب‌پذیری‌های امنیتی جدید شود.
  4. مشکلات در شناسایی و مدیریت تهدیدات: SELinux از طریق گزارش‌دهی دقیق و تحلیل سیاست‌ها به شناسایی حملات و تهدیدات کمک می‌کند. غیرفعال‌سازی SELinux، ممکن است فرآیندهای شناسایی و پاسخ به تهدیدات را مختل کند، زیرا این سیستم گزارشات دقیقی از فعالیت‌های مشکوک تولید می‌کند.

نحوه فعال‌سازی SELinux به‌صورت کامندی

برای فعال‌سازی SELinux، از دستور setenforce استفاده می‌شود. دستور زیر SELinux را به حالت “Enforcing” تغییر می‌دهد:

sudo setenforce 1

این دستور SELinux را در حالت اجرایی قرار می‌دهد که در آن تمام سیاست‌ها به‌طور کامل اعمال می‌شوند.

نحوه غیرفعال‌سازی SELinux به‌صورت کامندی

برای غیرفعال‌سازی SELinux، از دستور setenforce با مقدار ۰ استفاده می‌شود:

sudo setenforce 0

این دستور SELinux را به حالت “Permissive” تغییر می‌دهد که در آن سیاست‌ها اعمال نمی‌شوند اما رویدادهای مشکوک ثبت خواهند شد.

برای غیرفعال‌سازی دائمی SELinux، فایل پیکربندی /etc/selinux/config را ویرایش کرده و مقدار SELINUX را به disabled تغییر دهید:

sudo nano /etc/selinux/config

در این فایل، مقدار SELINUX را به disabled تغییر دهید:

SELINUX=disabled

پس از اعمال تغییرات، سیستم را ری‌استارت کنید تا تغییرات اعمال شوند.

تأثیرات بر امنیت

با فعال‌سازی SELinux، سیستم شما از سطح بالاتری از امنیت بهره‌مند می‌شود، به‌ویژه در محیط‌هایی که امنیت اهمیت ویژه‌ای دارد. در مقابل، غیرفعال‌سازی SELinux می‌تواند سیستم شما را در معرض خطرات بیشتری قرار دهد، به‌خصوص اگر سایر ابزارهای امنیتی به‌طور صحیح پیکربندی نشده باشند.


جمع‌بندی

فعال‌سازی SELinux تأثیر مثبتی بر امنیت سیستم دارد و می‌تواند از حملات خارجی و داخلی جلوگیری کند. این ابزار با محدود کردن دسترسی‌ها و نظارت دقیق بر فرآیندها، به‌طور مؤثری از سیستم محافظت می‌کند. از طرف دیگر، غیرفعال‌سازی SELinux ممکن است منجر به ضعف‌های امنیتی جدی شود، زیرا این اقدام می‌تواند به فرآیندها و کاربران اجازه دهد تا به منابع حساس سیستم دسترسی پیدا کنند. در نهایت، تصمیم به فعال‌سازی یا غیرفعال‌سازی SELinux باید با توجه به نیازهای امنیتی خاص سیستم و سازمان اتخاذ شود.[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. بررسی وضعیت SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”استفاده از دستور sestatus برای بررسی وضعیت SELinux” subtitle=”توضیحات کامل”]دستور sestatus یکی از ابزارهای کاربردی و مفید در لینوکس است که برای بررسی وضعیت SELinux (Security-Enhanced Linux) مورد استفاده قرار می‌گیرد. با استفاده از این دستور، می‌توان اطلاعات کاملی در مورد وضعیت کنونی SELinux دریافت کرد. این دستور به‌طور خاص به‌صورت خوانا و ساده وضعیت SELinux را نمایش می‌دهد و به مدیران سیستم کمک می‌کند تا سریعاً وضعیت امنیتی سیستم را بررسی کنند.

در این بخش، به توضیح دستور sestatus و نحوه استفاده از آن برای بررسی وضعیت SELinux خواهیم پرداخت.


دستور sestatus چیست؟

دستور sestatus برای نمایش وضعیت کنونی SELinux در سیستم‌های لینوکسی به کار می‌رود. این دستور اطلاعاتی مانند وضعیت کلی SELinux (فعال یا غیرفعال)، حالت اعمال سیاست‌ها (Enforcing یا Permissive)، و دیگر جزئیات مربوط به پیکربندی SELinux را نمایش می‌دهد.


نحوه استفاده از دستور sestatus

برای استفاده از دستور sestatus، فقط کافی است در خط فرمان آن را وارد کنید:

sestatus

در صورتی که SELinux به درستی نصب و پیکربندی شده باشد، خروجی مشابه زیر خواهید دید:

SELinux status:                 enabled
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                  enforcing
Mode from config file:         enforcing
Policy version:                31
Policy from config file:       targeted

در اینجا، اطلاعات کلیدی که دستور sestatus به شما می‌دهد عبارتند از:

  1. SELinux status: نشان می‌دهد که SELinux فعال است یا غیرفعال. اگر مقدار آن enabled باشد، SELinux فعال است و اگر disabled باشد، به‌طور کامل غیرفعال است.
  2. Current mode: وضعیت کنونی SELinux را نشان می‌دهد که می‌تواند یکی از مقادیر زیر باشد:
    • enforcing: SELinux به‌طور کامل فعال است و سیاست‌های امنیتی را اجرا می‌کند.
    • permissive: SELinux به‌طور فعالانه سیاست‌ها را اجرا نمی‌کند، اما خطاها و رویدادهای مربوط به نقض سیاست‌ها را گزارش می‌کند.
    • disabled: SELinux غیرفعال است و هیچ سیاستی در سیستم اعمال نمی‌شود.
  3. Loaded policy name: نام سیاستی که SELinux بر اساس آن عمل می‌کند. معمولاً این نام targeted است که نشان می‌دهد سیاست‌های امنیتی به‌طور هدفمند برای برخی از سرویس‌ها و برنامه‌ها اعمال می‌شود.
  4. Policy version: نسخه‌ای که سیاست SELinux از آن پیروی می‌کند.
  5. SELinuxfs mount و SELinux root directory: مسیرهای مربوط به نصب SELinux و دایرکتوری ریشه سیاست‌ها.

بررسی وضعیت SELinux به‌صورت مداوم

اگر می‌خواهید وضعیت SELinux را به‌طور مداوم بررسی کنید، می‌توانید از دستور watch استفاده کنید تا خروجی دستور sestatus به‌طور مداوم به‌روز شود:

watch sestatus

این دستور خروجی دستور sestatus را هر ۲ ثانیه یک‌بار به‌روز رسانی می‌کند.


تغییر وضعیت SELinux

در صورتی که بخواهید وضعیت SELinux را تغییر دهید، باید از دستورات setenforce یا ویرایش فایل پیکربندی استفاده کنید. در ادامه به برخی از دستورات رایج برای تغییر وضعیت SELinux اشاره می‌شود:

  1. تغییر به حالت Enforcing: برای قرار دادن SELinux در حالت Enforcing (اجرای کامل سیاست‌ها)، از دستور زیر استفاده کنید:
    sudo setenforce 1
    
  2. تغییر به حالت Permissive: برای قرار دادن SELinux در حالت Permissive (که تنها خطاها را گزارش می‌کند)، از دستور زیر استفاده کنید:
    sudo setenforce 0
    
  3. غیرفعال‌سازی SELinux به‌صورت دائمی: برای غیرفعال‌سازی SELinux به‌طور دائمی، فایل پیکربندی /etc/selinux/config را ویرایش کرده و مقدار SELINUX را به disabled تغییر دهید:
    sudo nano /etc/selinux/config
    

    سپس مقدار SELINUX را به disabled تغییر دهید:

    SELINUX=disabled
    

    پس از اعمال تغییرات، سیستم را ری‌استارت کنید.


جمع‌بندی

دستور sestatus ابزاری مفید برای بررسی وضعیت SELinux در سیستم‌های لینوکس است. این دستور اطلاعات دقیقی درباره وضعیت امنیتی سیستم ارائه می‌دهد، از جمله اینکه SELinux فعال است یا غیرفعال، در چه حالتی قرار دارد (Enforcing، Permissive یا Disabled)، و سیاست‌های فعلی آن چیست. با استفاده از این ابزار می‌توان به راحتی وضعیت SELinux را بررسی کرده و در صورت لزوم آن را تغییر داد تا امنیت سیستم بهینه‌تر شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تحلیل خروجی دستور sestatus و توضیحات آن” subtitle=”توضیحات کامل”]دستور sestatus در لینوکس برای نمایش وضعیت SELinux (Security-Enhanced Linux) استفاده می‌شود. این دستور اطلاعات مهمی را در مورد وضعیت کلی SELinux، حالت‌های آن و سیاست‌های بارگذاری شده فراهم می‌کند. در این بخش، به تحلیل خروجی این دستور خواهیم پرداخت و هر قسمت از آن را توضیح خواهیم داد.


خروجی نمونه دستور sestatus

هنگامی که دستور sestatus را اجرا می‌کنید، خروجی آن به‌صورت زیر خواهد بود (در صورتی که SELinux در سیستم فعال باشد):

SELinux status:                 enabled
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                  enforcing
Mode from config file:         enforcing
Policy version:                31
Policy from config file:       targeted

حال، هر یک از این بخش‌ها را به‌تفصیل بررسی خواهیم کرد.


بخش‌های مختلف خروجی دستور sestatus

  1. SELinux status:
    • توضیح: این قسمت نشان می‌دهد که SELinux در سیستم فعال است یا خیر. اگر مقدار آن enabled باشد، SELinux فعال است. اگر disabled باشد، به این معناست که SELinux به‌طور کامل غیرفعال است.
    • مثال:
      • enabled: SELinux فعال است و در حال استفاده است.
      • disabled: SELinux غیرفعال است.
  2. SELinuxfs mount:
    • توضیح: این قسمت مسیر فایل‌سیستمی است که برای ذخیره داده‌های مربوط به SELinux استفاده می‌شود. معمولاً این مسیر /selinux است.
    • مثال: مسیر /selinux به این معناست که SELinux در فایل‌سیستم در این مسیر mount شده است.
  3. SELinux root directory:
    • توضیح: این مسیر دایرکتوری ریشه‌ای است که پیکربندی‌های SELinux در آن قرار دارند. معمولاً این مسیر /etc/selinux است.
    • مثال: مسیر /etc/selinux به این معناست که فایل‌های پیکربندی و سیاست‌های SELinux در این دایرکتوری قرار دارند.
  4. Loaded policy name:
    • توضیح: این بخش نشان می‌دهد که کدام سیاست SELinux در حال استفاده است. معمولاً در سیستم‌های لینوکس از سیاست targeted استفاده می‌شود، که به‌طور هدفمند سیاست‌ها را فقط برای سرویس‌ها و برنامه‌های خاص اعمال می‌کند.
    • مثال: اگر مقدار آن targeted باشد، به این معناست که سیاست‌های امنیتی targeted در حال استفاده هستند که مخصوصاً برای برخی از سرویس‌ها و برنامه‌ها پیاده‌سازی شده است.
  5. Current mode:
    • توضیح: این بخش وضعیت فعلی SELinux را نشان می‌دهد که می‌تواند یکی از سه حالت زیر باشد:
      • Enforcing: در این حالت، SELinux سیاست‌ها را به‌طور کامل اجرا می‌کند و تمام اقدامات نقض سیاست‌ها را گزارش می‌کند.
      • Permissive: در این حالت، SELinux سیاست‌ها را اجرا نمی‌کند، اما خطاها و نقض‌های امنیتی را گزارش می‌کند.
      • Disabled: در این حالت، SELinux غیرفعال است و هیچ سیاست امنیتی اعمال نمی‌شود.
    • مثال:
      • enforcing: SELinux به‌طور فعال در حال اعمال سیاست‌ها است.
      • permissive: SELinux فقط گزارش خطاها را انجام می‌دهد و سیاست‌ها را اجرا نمی‌کند.
  6. Mode from config file:
    • توضیح: این بخش نشان‌دهنده تنظیماتی است که از فایل پیکربندی /etc/selinux/config خوانده شده‌اند. این مقادیر معمولاً مشابه با وضعیت فعلی SELinux هستند، اما در برخی موارد ممکن است تفاوت داشته باشند. این حالت معمولاً enforcing یا permissive خواهد بود.
    • مثال: اگر در فایل پیکربندی SELinux مقدار SELINUX=enforcing تنظیم شده باشد، این بخش نیز enforcing را نشان خواهد داد.
  7. Policy version:
    • توضیح: این بخش نسخه سیاست SELinux را نمایش می‌دهد. هر نسخه از سیاست‌ها شامل مجموعه‌ای از قوانین است که تعیین می‌کنند SELinux چگونه باید به درخواست‌های سیستم پاسخ دهد.
    • مثال: عدد 31 نشان‌دهنده نسخه سیاست در حال استفاده است.
  8. Policy from config file:
    • توضیح: این بخش نشان می‌دهد که سیاست SELinux از کدام فایل پیکربندی بارگذاری شده است. این معمولاً باید با targeted یا سیاست‌های مشابه باشد.
    • مثال: اگر مقدار آن targeted باشد، به این معناست که سیاست‌های targeted از فایل پیکربندی بارگذاری شده است.

جمع‌بندی

دستور sestatus یک ابزار مفید برای بررسی وضعیت SELinux است. خروجی آن اطلاعات دقیقی درباره وضعیت SELinux در سیستم، حالت کنونی، سیاست‌های فعال و نسخه آن ارائه می‌دهد. این اطلاعات برای مدیران سیستم بسیار مفید است تا وضعیت امنیتی سیستم را ارزیابی کرده و در صورت نیاز به تنظیمات و تغییرات، اقدام کنند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”بررسی فایل پیکربندی /etc/selinux/config” subtitle=”توضیحات کامل”]فایل پیکربندی /etc/selinux/config یکی از فایل‌های حیاتی در سیستم‌های لینوکسی است که تنظیمات پایه‌ای مربوط به SELinux (Security-Enhanced Linux) را تعیین می‌کند. این فایل به‌طور خاص نحوه عملکرد SELinux در زمان بوت سیستم و تنظیمات مربوط به آن را مدیریت می‌کند. در این بخش، به بررسی محتویات و بخش‌های مختلف این فایل خواهیم پرداخت.


مسیر فایل پیکربندی SELinux

فایل پیکربندی SELinux معمولاً در مسیر زیر قرار دارد:

/etc/selinux/config

این فایل به‌طور پیش‌فرض به‌صورت متنی است و برای مشاهده و ویرایش آن می‌توانید از ویرایشگر متنی مانند nano یا vim استفاده کنید.


ساختار و بخش‌های مختلف فایل /etc/selinux/config

یک نمونه از محتوای فایل /etc/selinux/config به‌صورت زیر است:

# This file controls the state of SELinux on your system.
# SELINUX= can take one of these three values:
#   enforcing - SELinux security policy is enforced.
#   permissive - SELinux prints warnings instead of enforcing.
#   disabled - No SELinux policy is loaded.
SELINUX=enforcing

# SELINUXTYPE= can take one of these two values:
#   targeted - Targeted policy is loaded.
#   minimum - Minimum policy is loaded.
#   mls - Multi Level Security policy is loaded.
SELINUXTYPE=targeted

در این فایل، دو بخش اصلی وجود دارد که تنظیمات SELinux را مشخص می‌کنند:

  1. SELINUX:
    • توضیح: این گزینه تعیین می‌کند که SELinux در زمان بوت سیستم چه حالتی داشته باشد.
      • enforcing: در این حالت، SELinux سیاست‌ها را به‌طور کامل اجرا می‌کند و هیچ‌گونه تخلفی را تحمل نمی‌کند.
      • permissive: در این حالت، SELinux به‌جای اعمال سیاست‌ها، فقط هشدارها و خطاها را ثبت می‌کند، اما اجازه می‌دهد که برنامه‌ها به‌طور عادی اجرا شوند.
      • disabled: در این حالت، SELinux به‌طور کامل غیرفعال است و هیچ‌گونه سیاست امنیتی اعمال نمی‌شود.
    • مثال:
      • SELINUX=enforcing: SELinux به‌طور کامل فعال است و سیاست‌های امنیتی اجرا می‌شوند.
      • SELINUX=permissive: SELinux فقط هشدارهای امنیتی را ثبت می‌کند.
      • SELINUX=disabled: SELinux غیرفعال است و هیچ‌گونه سیاستی اعمال نمی‌شود.
  2. SELINUXTYPE:
    • توضیح: این گزینه تعیین می‌کند که کدام سیاست SELinux برای سیستم بارگذاری شود. سه گزینه اصلی برای این تنظیم وجود دارد:
      • targeted: سیاست‌های پیش‌فرض و محبوب که به‌طور خاص برای برخی از سرویس‌ها و برنامه‌ها اعمال می‌شود.
      • minimum: سیاستی که به‌طور حداقلی و برای کاربرانی که نیاز به امنیت بیشتری دارند اعمال می‌شود.
      • mls: سیاست Multi Level Security که به‌طور خاص برای محیط‌های با نیازهای امنیتی بسیار بالا و سطوح مختلف دسترسی طراحی شده است.
    • مثال:
      • SELINUXTYPE=targeted: سیاست‌های پیش‌فرض و هدفمند بارگذاری می‌شوند.
      • SELINUXTYPE=minimum: سیاست امنیتی حداقلی بارگذاری می‌شود.
      • SELINUXTYPE=mls: سیاست‌های Multi Level Security بارگذاری می‌شوند.

نحوه ویرایش فایل /etc/selinux/config

برای ویرایش فایل پیکربندی SELinux، شما می‌توانید از ویرایشگر متنی مانند nano یا vim استفاده کنید:

  1. با استفاده از دستور nano:
    sudo nano /etc/selinux/config
    
  2. با استفاده از دستور vim:
    sudo vim /etc/selinux/config
    

پس از ویرایش، فایل را ذخیره کرده و سیستم را مجدداً راه‌اندازی کنید تا تغییرات اعمال شوند.


تغییرات ممکن در فایل /etc/selinux/config

  • اگر قصد دارید SELinux را غیرفعال کنید، می‌توانید مقدار SELINUX را به disabled تغییر دهید:
    SELINUX=disabled
    
  • برای فعال‌سازی SELinux و اعمال سیاست‌های امنیتی به‌طور کامل، مقدار آن را به enforcing تغییر دهید:
    SELINUX=enforcing
    
  • اگر می‌خواهید SELinux را در حالت permissive قرار دهید، به‌طوری‌که فقط هشدارها ثبت شوند و سیاست‌ها اعمال نشوند، مقدار آن را به permissive تغییر دهید:
    SELINUX=permissive
    
  • برای تغییر نوع سیاست SELinux، می‌توانید مقدار SELINUXTYPE را به یکی از گزینه‌های targeted، minimum یا mls تغییر دهید:
    SELINUXTYPE=targeted
    

جمع‌بندی

فایل /etc/selinux/config تنظیمات اصلی SELinux را کنترل می‌کند. با تغییر مقادیر SELINUX و SELINUXTYPE، می‌توانید نحوه عملکرد SELinux در سیستم را تنظیم کنید. انتخاب سیاست مناسب برای امنیت سیستم بسیار مهم است و باید با توجه به نیازهای امنیتی سیستم انجام شود. پس از اعمال تغییرات در این فایل، برای اعمال آن‌ها نیاز به راه‌اندازی مجدد سیستم دارید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”حالت‌های مختلف SELinux در فایل /etc/selinux/config (Enforcing، Permissive، Disabled)” subtitle=”توضیحات کامل”]در فایل پیکربندی SELinux (/etc/selinux/config)، پارامتر SELINUX نقش حیاتی در تعیین نحوه عملکرد SELinux در زمان بوت سیستم دارد. این پارامتر سه حالت مختلف دارد که می‌توان آن را تنظیم کرد: Enforcing، Permissive و Disabled. در این بخش به توضیح هر یک از این حالت‌ها و تأثیرات آن‌ها بر روی سیستم پرداخته خواهد شد.


1. حالت Enforcing

  • توضیح: در این حالت، SELinux به‌طور کامل فعال است و سیاست‌های امنیتی را به‌صورت سختگیرانه اجرا می‌کند. تمامی قوانین و محدودیت‌های تعریف‌شده در SELinux، مانند دسترسی به فایل‌ها، پردازش‌ها و شبکه‌ها، به‌طور فعال و دقیق اعمال می‌شوند.
  • اثر بر سیستم:
    • تمامی سیاست‌ها و محدودیت‌های SELinux به‌طور کامل اجرایی هستند.
    • اگر یک فرآیند یا کاربر بخواهد عملیاتی انجام دهد که با سیاست‌های SELinux مغایرت داشته باشد، این عمل مسدود خواهد شد.
    • تمام خطاهای مربوط به نقض سیاست‌ها در لاگ‌ها ثبت می‌شود، بنابراین شفافیت امنیتی بالایی وجود دارد.
  • مثال:
    SELINUX=enforcing
    
  • کاربرد: این حالت برای بیشتر سرورها و سیستم‌های تولیدی توصیه می‌شود، زیرا امنیت بالاتری را ارائه می‌دهد. در این حالت، SELinux از سیستم در برابر حملات و تهدیدات محافظت می‌کند.

2. حالت Permissive

  • توضیح: در این حالت، SELinux همچنان فعال است، اما هیچ‌گونه سیاست امنیتی اعمال نمی‌شود. به‌عبارت دیگر، SELinux تنها هشدارهایی را در مورد نقض سیاست‌ها ثبت می‌کند و هیچ‌گونه محدودیتی برای عملکرد سیستم ایجاد نمی‌کند.
  • اثر بر سیستم:
    • سیاست‌های SELinux در سیستم اعمال نمی‌شوند و تمامی عملیات مجاز خواهند بود.
    • فقط هشدارها و اخطارهایی در لاگ‌ها ثبت می‌شود که به شما کمک می‌کند تا نقض سیاست‌ها را شناسایی کنید.
    • به‌عنوان یک حالت آزمایشی، مفید است زیرا می‌توانید رفتار سیستم را در محیط‌های عملیاتی مشاهده کنید بدون اینکه محدودیتی اعمال شود.
  • مثال:
    SELINUX=permissive
    
  • کاربرد: این حالت برای عیب‌یابی و تست سیاست‌های SELinux بسیار مفید است. معمولاً در زمان توسعه یا آزمایش برای مشاهده تاثیرات SELinux بدون اعمال محدودیت‌های سخت‌گیرانه استفاده می‌شود.

3. حالت Disabled

  • توضیح: در این حالت، SELinux به‌طور کامل غیرفعال است و هیچ‌گونه سیاست امنیتی SELinux بر روی سیستم اعمال نمی‌شود. هیچ محدودیتی برای دسترسی به فایل‌ها، پردازش‌ها و سایر منابع سیستم وجود ندارد.
  • اثر بر سیستم:
    • تمامی سیاست‌های امنیتی SELinux غیرفعال می‌شوند.
    • امنیت سیستم به‌طور قابل‌توجهی کاهش می‌یابد، زیرا SELinux دیگر از سیستم در برابر تهدیدات امنیتی محافظت نمی‌کند.
    • این حالت باعث می‌شود که تمام دسترسی‌ها، حتی دسترسی‌های غیرمجاز، به‌راحتی انجام شوند.
  • مثال:
    SELINUX=disabled
    
  • کاربرد: این حالت معمولاً برای آزمایش‌ها یا در شرایطی که نیاز به غیرفعال‌سازی موقت SELinux برای تطبیق با یک نرم‌افزار یا سرویس خاص است، استفاده می‌شود. با این حال، غیرفعال کردن SELinux به‌شدت توصیه نمی‌شود مگر در مواقع خاص.

جمع‌بندی

در فایل پیکربندی SELinux (/etc/selinux/config)، سه حالت اصلی وجود دارد:

  1. Enforcing: SELinux فعال است و سیاست‌های امنیتی به‌طور کامل اجرا می‌شود.
  2. Permissive: SELinux فعال است، اما هیچ‌گونه سیاستی اجرا نمی‌شود و تنها هشدارها ثبت می‌شود.
  3. Disabled: SELinux به‌طور کامل غیرفعال است و هیچ‌گونه سیاستی اعمال نمی‌شود.

انتخاب حالت مناسب بستگی به نیاز امنیتی سیستم دارد. برای امنیت بالا، حالت Enforcing توصیه می‌شود، در حالی که برای عیب‌یابی و آزمایش، حالت Permissive ممکن است مفید باشد. غیرفعال کردن SELinux به‌طور کلی توصیه نمی‌شود مگر در شرایط خاص.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نحوه تغییر تنظیمات در فایل پیکربندی برای حالت‌های مختلف SELinux” subtitle=”توضیحات کامل”]برای تغییر تنظیمات SELinux و انتخاب حالت‌های مختلف (Enforcing، Permissive، Disabled)، باید فایل پیکربندی SELinux (/etc/selinux/config) را ویرایش کنید. در این بخش، مراحل گام به گام تغییر تنظیمات SELinux را برای هر یک از حالت‌ها شرح خواهیم داد.


1. تغییر به حالت Enforcing

در حالت Enforcing، SELinux به‌طور کامل فعال است و سیاست‌های امنیتی به‌شدت اجرا می‌شوند. برای تغییر به این حالت، مراحل زیر را دنبال کنید:

مراحل:
  1. فایل پیکربندی SELinux را با ویرایشگر متنی مانند vi یا nano باز کنید:
    sudo vi /etc/selinux/config
    
  2. خط مربوط به SELINUX= را پیدا کرده و آن را به شکل زیر تغییر دهید:
    SELINUX=enforcing
    
  3. فایل را ذخیره و از ویرایشگر خارج شوید. برای ذخیره در vi، از کلیدهای Esc سپس تایپ کنید :wq و برای nano از Ctrl+O برای ذخیره و Ctrl+X برای خروج استفاده کنید.
  4. سیستم را مجدداً راه‌اندازی کنید تا تغییرات اعمال شوند:
    sudo reboot
    

پس از راه‌اندازی مجدد، SELinux به حالت Enforcing خواهد بود و سیاست‌ها و محدودیت‌ها به‌طور فعال بر روی سیستم اعمال خواهند شد.


2. تغییر به حالت Permissive

در حالت Permissive، SELinux همچنان فعال است، اما هیچ‌گونه محدودیتی برای دسترسی‌ها اعمال نمی‌شود و فقط هشدارها ثبت می‌شود. برای تغییر به این حالت، مراحل زیر را دنبال کنید:

مراحل:
  1. فایل پیکربندی SELinux را با ویرایشگر متنی باز کنید:
    sudo vi /etc/selinux/config
    
  2. خط مربوط به SELINUX= را پیدا کرده و آن را به شکل زیر تغییر دهید:
    SELINUX=permissive
    
  3. فایل را ذخیره و از ویرایشگر خارج شوید.
  4. سیستم را مجدداً راه‌اندازی کنید تا تغییرات اعمال شوند:
    sudo reboot
    

پس از راه‌اندازی مجدد، SELinux به حالت Permissive خواهد بود و محدودیت‌ها اعمال نمی‌شوند، اما هشدارها در لاگ‌ها ثبت خواهند شد.


3. تغییر به حالت Disabled

در حالت Disabled, SELinux به‌طور کامل غیرفعال خواهد شد. در این حالت هیچ‌گونه سیاست امنیتی توسط SELinux اعمال نمی‌شود. برای تغییر به این حالت، مراحل زیر را دنبال کنید:

مراحل:
  1. فایل پیکربندی SELinux را با ویرایشگر متنی باز کنید:
    sudo vi /etc/selinux/config
    
  2. خط مربوط به SELINUX= را پیدا کرده و آن را به شکل زیر تغییر دهید:
    SELINUX=disabled
    
  3. فایل را ذخیره و از ویرایشگر خارج شوید.
  4. سیستم را مجدداً راه‌اندازی کنید تا تغییرات اعمال شوند:
    sudo reboot
    

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


جمع‌بندی

برای تغییر تنظیمات SELinux و انتخاب حالت‌های مختلف، باید فایل پیکربندی /etc/selinux/config را ویرایش کنید. تغییرات در سه حالت اصلی:

  1. Enforcing: به‌طور کامل سیاست‌ها و محدودیت‌ها را اعمال می‌کند.
  2. Permissive: فقط هشدارها را ثبت می‌کند و هیچ‌گونه محدودیتی اعمال نمی‌شود.
  3. Disabled: SELinux را به‌طور کامل غیرفعال می‌کند.

پس از تغییر تنظیمات، سیستم باید مجدداً راه‌اندازی شود تا تغییرات به‌درستی اعمال گردند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. پیکربندی SELinux برای عملکرد مناسب”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”پیکربندی SELinux بر اساس نیازهای امنیتی” subtitle=”توضیحات کامل”]SELinux (Security-Enhanced Linux) یک لایه امنیتی پیشرفته است که به کمک سیاست‌های امنیتی دقیق، کنترل دسترسی به منابع سیستم را انجام می‌دهد. این پیکربندی می‌تواند بر اساس نیازهای خاص امنیتی سازمان یا سرور تغییر کند. در این بخش، به بررسی نحوه پیکربندی SELinux برای پاسخ به نیازهای امنیتی مختلف خواهیم پرداخت.


1. ارزیابی نیازهای امنیتی

قبل از انجام هرگونه پیکربندی برای SELinux، ضروری است که نیازهای امنیتی سیستم خود را ارزیابی کنید. این ارزیابی می‌تواند شامل موارد زیر باشد:

  • سطح دسترسی کاربران و گروه‌ها: آیا کاربران مختلف باید به منابع مختلف سیستم دسترسی داشته باشند؟
  • حساسیت داده‌ها: آیا سیستم شما شامل داده‌های حساس است که باید از آن‌ها محافظت شود؟
  • پاسخگویی به تهدیدات: تهدیدات احتمالی و حملات باید شبیه‌سازی و بررسی شوند.

بر اساس ارزیابی این موارد، می‌توان تصمیم گرفت که SELinux باید در حالت Enforcing، Permissive یا Disabled قرار گیرد.


2. پیکربندی SELinux در حالت Enforcing

اگر نیاز دارید تا سطح بالاتری از امنیت در سیستم خود داشته باشید، می‌توانید SELinux را در حالت Enforcing تنظیم کنید. در این حالت، SELinux تمامی سیاست‌ها را به‌طور کامل اعمال می‌کند و محدودیت‌های دسترسی سختگیرانه‌ای برای منابع سیستم ایجاد می‌شود. این حالت بهترین گزینه برای محیط‌های تولیدی است که باید از داده‌ها و منابع خود محافظت کنند.

مراحل:
  1. برای فعال کردن حالت Enforcing در SELinux، فایل پیکربندی /etc/selinux/config را باز کنید:
    sudo vi /etc/selinux/config
    
  2. سپس خط SELINUX= را به enforcing تغییر دهید:
    SELINUX=enforcing
    
  3. فایل را ذخیره و از ویرایشگر خارج شوید.
  4. سیستم را مجدداً راه‌اندازی کنید:
    sudo reboot
    

در این حالت، SELinux قوانین دسترسی را به‌طور کامل اجرا می‌کند و فقط دسترسی‌هایی که مطابق با سیاست‌های امنیتی تعریف‌شده هستند، مجاز خواهند بود.


3. پیکربندی SELinux در حالت Permissive

اگر در حال توسعه یا آزمایش سیستم هستید و به‌دنبال نظارت بر رفتار SELinux بدون اعمال سیاست‌های امنیتی سختگیرانه هستید، می‌توانید از حالت Permissive استفاده کنید. در این حالت، SELinux همچنان هشدارها و گزارش‌ها را ثبت می‌کند، اما محدودیتی برای دسترسی‌ها اعمال نمی‌شود. این حالت برای شبیه‌سازی و شناسایی مشکلات امنیتی مفید است.

مراحل:
  1. برای تغییر به حالت Permissive، فایل پیکربندی /etc/selinux/config را باز کنید:
    sudo vi /etc/selinux/config
    
  2. خط SELINUX= را به permissive تغییر دهید:
    SELINUX=permissive
    
  3. فایل را ذخیره کرده و از ویرایشگر خارج شوید.
  4. سیستم را مجدداً راه‌اندازی کنید:
    sudo reboot
    

در این حالت، SELinux به‌طور موقت محدودیت‌ها را غیرفعال می‌کند، اما تمامی عملیات‌های امنیتی و سیاست‌های اعمال‌شده به‌طور کامل ثبت می‌شوند.


4. پیکربندی SELinux در حالت Disabled

در برخی مواقع، ممکن است بخواهید SELinux را به‌طور کامل غیرفعال کنید. این ممکن است در محیط‌هایی باشد که نیاز به امنیت بسیار پایین دارند یا زمانی که مشکلی در پیاده‌سازی SELinux وجود دارد. این حالت به‌طور کلی توصیه نمی‌شود، مگر در شرایط خاص.

مراحل:
  1. برای غیرفعال کردن SELinux، فایل پیکربندی /etc/selinux/config را باز کنید:
    sudo vi /etc/selinux/config
    
  2. خط SELINUX= را به disabled تغییر دهید:
    SELINUX=disabled
    
  3. فایل را ذخیره کرده و از ویرایشگر خارج شوید.
  4. سیستم را مجدداً راه‌اندازی کنید:
    sudo reboot
    

در این حالت، SELinux به‌طور کامل غیرفعال می‌شود و هیچ‌گونه محدودیت امنیتی توسط این لایه اعمال نخواهد شد.


5. پیکربندی سیاست‌های امنیتی سفارشی

در صورت نیاز به تنظیمات دقیق‌تری برای کنترل دسترسی‌ها و امنیت سیستم، می‌توان سیاست‌های SELinux را به‌طور سفارشی تعریف کرد. این پیکربندی‌ها ممکن است شامل تغییرات در فایل‌های سیاستی، تعریف قوانین جدید، یا تنظیمات خاص برای برنامه‌ها و کاربران باشد.

مراحل:
  1. سیاست‌های SELinux را می‌توان با استفاده از ابزار semanage تغییر داد:
    • نصب ابزار policycoreutils-python:
      sudo yum install policycoreutils-python
      
  2. برای اضافه کردن سیاست امنیتی جدید، از دستور semanage استفاده کنید:
    sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    

    این دستور اجازه می‌دهد که محتوای وب در مسیر /var/www/html به‌طور صحیح مدیریت شود.

  3. پس از تغییرات، باید با استفاده از دستور restorecon سیاست‌ها را اعمال کنید:
    sudo restorecon -R /var/www/html
    

این ابزارها و دستورات به شما این امکان را می‌دهند که سیاست‌های دقیق‌تری برای محیط‌های خاص امنیتی پیاده‌سازی کنید.


جمع‌بندی

پیکربندی SELinux بر اساس نیازهای امنیتی می‌تواند در سه حالت اصلی انجام شود:

  1. Enforcing: برای محیط‌های حساس و تولیدی که نیاز به امنیت بالایی دارند.
  2. Permissive: برای محیط‌های آزمایشی که نیاز به مشاهده گزارش‌ها و هشدارها دارند.
  3. Disabled: برای سیستم‌های خاص که نیازی به سیاست‌های امنیتی SELinux ندارند.

علاوه بر این، می‌توان سیاست‌های امنیتی سفارشی را با استفاده از ابزارهای مختلف SELinux تنظیم کرد تا مطابق با نیازهای خاص امنیتی محیط‌های مختلف عمل کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”ایجاد تغییرات در سیاست‌های پیش‌فرض SELinux” subtitle=”توضیحات کامل”]SELinux از سیاست‌های امنیتی برای کنترل دسترسی و مدیریت منابع سیستم استفاده می‌کند. این سیاست‌ها به‌طور پیش‌فرض برای بسیاری از سیستم‌ها و برنامه‌ها تعریف شده‌اند، اما ممکن است نیاز باشد که این سیاست‌ها برای برآورده کردن نیازهای خاص امنیتی یا عملکردی تغییر کنند. در این بخش، به نحوه ایجاد تغییرات در سیاست‌های پیش‌فرض SELinux و اعمال آن‌ها خواهیم پرداخت.


1. تغییرات در سیاست‌های پیش‌فرض با استفاده از semanage

ابزار semanage یکی از ابزارهای مهم برای مدیریت سیاست‌های SELinux است. با استفاده از این ابزار، می‌توانید تغییرات مختلفی را در سیاست‌ها ایجاد کنید، از جمله تغییرات در برچسب‌های فایل، سیاست‌های نوع (type) و دیگر موارد امنیتی.

نصب semanage

برای استفاده از ابزار semanage، ابتدا باید بسته policycoreutils-python را نصب کنید. برای نصب آن از دستور زیر استفاده کنید:

sudo yum install policycoreutils-python

2. تغییرات در برچسب‌های فایل

برچسب‌های SELinux اطلاعات امنیتی را برای منابع سیستم، مانند فایل‌ها و دایرکتوری‌ها، ذخیره می‌کنند. با استفاده از semanage می‌توان برچسب‌ها را تغییر داد تا دسترسی‌ها و امنیت سیستم به‌طور دقیق‌تری مدیریت شود.

تغییر برچسب SELinux برای یک فایل یا دایرکتوری

برای تغییر برچسب SELinux یک فایل یا دایرکتوری، از دستور semanage fcontext استفاده می‌شود. به عنوان مثال، اگر بخواهید برچسب SELinux برای دایرکتوری /var/www/html را تغییر دهید تا محتوای وب به‌طور صحیح مدیریت شود، می‌توانید دستور زیر را اجرا کنید:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"

این دستور برچسب SELinux را برای دایرکتوری /var/www/html به نوع httpd_sys_content_t تغییر می‌دهد که به SELinux اعلام می‌کند که محتوای این دایرکتوری مربوط به سرویس وب (مثل Apache) است.

اعمال تغییرات برچسب

پس از اعمال تغییرات در برچسب‌ها، باید از دستور restorecon برای اعمال این تغییرات استفاده کنید. دستور restorecon به‌طور خودکار برچسب‌های جدید را به فایل‌ها و دایرکتوری‌ها اعمال می‌کند.

sudo restorecon -R /var/www/html

این دستور به‌طور بازگشتی (با استفاده از گزینه -R) برچسب‌ها را به تمامی فایل‌ها و زیرشاخه‌های دایرکتوری /var/www/html اعمال می‌کند.


3. تغییرات در سیاست‌های نوع (Type Enforcement)

در SELinux، هر نوع (type) منابع سیستم سیاست‌های خاصی دارد که نحوه دسترسی به آن‌ها را تعیین می‌کند. با استفاده از ابزار semanage می‌توان این سیاست‌ها را تغییر داد.

تغییر سیاست‌های نوع برای فایل‌ها

برای تغییر سیاست نوع یک فایل، می‌توان از دستور semanage fcontext استفاده کرد. این دستور به شما این امکان را می‌دهد که نوع جدیدی به فایل‌ها اختصاص دهید تا دسترسی‌ها به آن‌ها مطابق با نیازهای امنیتی جدید تنظیم شود.

برای مثال، اگر می‌خواهید فایل‌های موجود در /opt/myapp به‌عنوان یک نوع خاص (مثلاً myapp_t) شناخته شوند، دستور زیر را اجرا کنید:

sudo semanage fcontext -a -t myapp_t "/opt/myapp(/.*)?"

این دستور تمامی فایل‌ها و دایرکتوری‌ها داخل /opt/myapp را به نوع myapp_t اختصاص می‌دهد.

تغییرات برای برنامه‌ها

اگر نیاز به تغییر سیاست SELinux برای یک برنامه خاص دارید، می‌توانید با استفاده از ابزار semanage آن برنامه را تنظیم کنید. به عنوان مثال، برای تغییر دسترسی‌های SELinux برای برنامه‌های web server می‌توانید از سیاست‌های مخصوص آن برنامه استفاده کنید.


4. تنظیمات امنیتی سفارشی

در صورتی که نیاز دارید سیاست‌های سفارشی برای کنترل دسترسی‌ها و منابع سیستم ایجاد کنید، می‌توانید از audit2allow استفاده کنید. این ابزار می‌تواند به‌طور خودکار سیاست‌های جدیدی بر اساس لاگ‌های audit ایجاد کند.

استفاده از audit2allow

اگر به دلیل اعمال محدودیت‌های SELinux به خطاهایی برخوردید، می‌توانید با استفاده از audit2allow یک سیاست جدید برای رفع مشکل ایجاد کنید. ابتدا باید لاگ‌های SELinux را با استفاده از دستور ausearch استخراج کنید:

sudo ausearch -m avc -ts recent

سپس از audit2allow برای تولید سیاست‌های جدید استفاده کنید:

sudo ausearch -m avc -ts recent | audit2allow -M mypolicy

این دستور سیاست‌های لازم برای رفع خطاهای SELinux را ایجاد کرده و در قالب یک بسته جدید به نام mypolicy ذخیره می‌کند.

سپس می‌توانید این سیاست‌ها را با دستور semodule نصب کنید:

sudo semodule -i mypolicy.pp

این دستور سیاست جدیدی که با استفاده از audit2allow ساخته شده را به سیستم SELinux اضافه می‌کند.


5. ایجاد و بارگذاری سیاست‌های سفارشی

اگر نیاز دارید که سیاست‌های سفارشی پیچیده‌تری ایجاد کنید، می‌توانید از زبان سیاست SELinux استفاده کنید. این زبان به شما اجازه می‌دهد تا به‌طور دقیق‌تری دسترسی‌ها و منابع سیستم را تعریف کنید.

ایجاد فایل سیاست

یک فایل سیاست جدید می‌توانید به‌صورت زیر ایجاد کنید:

sudo vi /etc/selinux/targeted/modules/active/custom/my_custom_policy.te

سپس، سیاست‌های خود را در این فایل بنویسید.

بارگذاری سیاست

پس از ایجاد فایل سیاست، می‌توانید آن را با دستور زیر بارگذاری کنید:

sudo checkmodule -M -m -o /etc/selinux/targeted/modules/active/custom/my_custom_policy.mod /etc/selinux/targeted/modules/active/custom/my_custom_policy.te
sudo semodule_package -o /etc/selinux/targeted/modules/active/custom/my_custom_policy.pp -m /etc/selinux/targeted/modules/active/custom/my_custom_policy.mod
sudo semodule -i /etc/selinux/targeted/modules/active/custom/my_custom_policy.pp

این دستورات ابتدا فایل سیاست را کامپایل کرده و سپس آن را به سیستم SELinux اضافه می‌کنند.


جمع‌بندی

ایجاد تغییرات در سیاست‌های پیش‌فرض SELinux به‌طور مستقیم بر روی امنیت و دسترسی‌ها تأثیر می‌گذارد. این تغییرات می‌توانند شامل تنظیم برچسب‌ها، تغییرات در سیاست‌های نوع، استفاده از ابزارهای نظارتی مانند audit2allow و ایجاد سیاست‌های سفارشی باشند. با اعمال تغییرات دقیق و آگاهانه در سیاست‌ها، می‌توان سطح امنیتی سیستم را بهینه کرد و نیازهای امنیتی خاص را تأمین نمود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”پیکربندی SELinux برای سرویس‌ها و برنامه‌های خاص” subtitle=”توضیحات کامل”]SELinux ابزار قدرتمندی است که می‌تواند به‌طور خاص دسترسی‌ها و امنیت سرویس‌ها و برنامه‌های مختلف سیستم را کنترل کند. به‌طور پیش‌فرض، SELinux سیاست‌های امنیتی را برای سرویس‌ها و برنامه‌های مختلف در نظر می‌گیرد، اما ممکن است نیاز باشد که این سیاست‌ها برای برنامه‌های خاص سفارشی شوند. در این بخش، نحوه پیکربندی SELinux برای سرویس‌ها و برنامه‌های خاص را با استفاده از ابزارها و دستورات مختلف شرح خواهیم داد.


1. استفاده از نوع (Type) و سیاست‌های نوع (Type Enforcement)

سیاست‌های SELinux برای برنامه‌ها معمولاً بر اساس نوع (type) منابع سیستم تعیین می‌شود. برای هر سرویس یا برنامه خاص، یک نوع پیش‌فرض تعریف شده است که دسترسی‌ها و مجوزها را برای منابع مرتبط با آن سرویس کنترل می‌کند. برای پیکربندی SELinux برای یک سرویس خاص، باید از نوع‌های مناسب استفاده کرد.

بررسی نوع (Type) سرویس‌ها

برای بررسی نوع یک سرویس خاص، می‌توان از دستور ps -Z استفاده کرد. این دستور نشان می‌دهد که هر فرایند با چه نوعی در SELinux شناخته می‌شود.

برای مثال، برای بررسی نوع پروسه‌های سرویس Apache (httpd)، دستور زیر را اجرا می‌کنیم:

ps -Z | grep httpd

خروجی مشابه زیر خواهد بود:

system_u:system_r:httpd_t:s0 apache

در اینجا، httpd_t نوع SELinux برای سرویس Apache است. این نوع تعیین می‌کند که چه دسترسی‌هایی به فایل‌ها، پورت‌ها و منابع دیگر برای سرویس Apache مجاز است.

تغییر نوع (Type) برای سرویس‌ها

اگر نیاز دارید که نوع SELinux برای سرویس خاصی تغییر کند، می‌توانید از دستور semanage استفاده کنید. به‌عنوان مثال، برای تغییر نوع SELinux برای سرویس HTTPD، از دستور زیر استفاده کنید:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"

این دستور به SELinux می‌گوید که فایل‌های موجود در /var/www/html باید به‌عنوان محتوای وب مورد استفاده قرار گیرند و به‌این‌ترتیب اجازه دسترسی به این فایل‌ها برای سرویس وب (مانند Apache) فراهم می‌شود.


2. استفاده از semanage برای پیکربندی SELinux برای سرویس‌ها

ابزار semanage به شما این امکان را می‌دهد که سیاست‌های SELinux را برای سرویس‌ها به‌طور دقیق‌تری پیکربندی کنید. با استفاده از semanage می‌توانید نوع و برچسب‌های SELinux را برای فایل‌ها، پورت‌ها، و دیگر منابع تغییر دهید.

افزودن پورت‌ها به سیاست SELinux

برای تغییر پورت‌های قابل دسترسی برای یک سرویس خاص در SELinux، می‌توانید از دستور semanage port استفاده کنید. به‌عنوان مثال، اگر بخواهید پورت جدیدی را برای سرویس HTTPD تعریف کنید، دستور زیر را اجرا کنید:

sudo semanage port -a -t http_port_t -p tcp 8080

این دستور پورت 8080 را به‌عنوان پورت مجاز برای سرویس HTTPD معرفی می‌کند.

تغییر نوع فایل برای برنامه خاص

اگر یک برنامه خاص نیاز دارد به نوع خاصی از منابع دسترسی داشته باشد، می‌توانید نوع آن فایل را به‌طور دستی تغییر دهید. برای این کار، از دستور semanage fcontext استفاده می‌کنیم.

برای مثال، برای تغییر نوع یک فایل به نوع httpd_sys_content_t، دستور زیر را اجرا کنید:

sudo semanage fcontext -a -t httpd_sys_content_t "/opt/myapp(/.*)?"

سپس باید از دستور restorecon برای اعمال تغییرات استفاده کنید:

sudo restorecon -R /opt/myapp

3. بررسی سیاست‌ها برای برنامه‌های خاص با استفاده از audit2allow

اگر SELinux باعث محدودیت یا خطا در دسترسی به منابع برای برنامه خاصی می‌شود، می‌توانید از ابزار audit2allow برای شناسایی و اصلاح این محدودیت‌ها استفاده کنید. این ابزار لاگ‌های SELinux را بررسی کرده و سیاست‌هایی را ایجاد می‌کند که به‌طور خودکار این محدودیت‌ها را رفع می‌کنند.

استفاده از audit2allow برای رفع خطاها
  1. ابتدا باید لاگ‌های SELinux را با استفاده از دستور ausearch استخراج کنید:
    sudo ausearch -m avc -ts recent
    
  2. سپس از ابزار audit2allow برای تولید سیاست‌های جدید استفاده کنید:
    sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
    
  3. پس از تولید سیاست‌های جدید، آن‌ها را با استفاده از دستور semodule بارگذاری کنید:
    sudo semodule -i mypolicy.pp
    

این فرآیند به شما این امکان را می‌دهد که به‌طور خودکار سیاست‌های SELinux را برای سرویس‌ها یا برنامه‌های خاص به‌روز کنید تا از بروز خطاهای دسترسی جلوگیری شود.


4. تنظیمات اضافی برای سرویس‌ها و برنامه‌های خاص

گاهی اوقات ممکن است نیاز به تنظیمات خاص‌تر برای یک سرویس یا برنامه باشد. این تنظیمات می‌توانند شامل موارد زیر باشند:

تنظیمات امنیتی برای Nginx

برای سرویس‌هایی مانند Nginx که به‌طور پیش‌فرض توسط SELinux به‌عنوان یک وب‌سرور غیرقابل دسترسی در نظر گرفته می‌شود، باید تنظیمات خاصی برای دسترسی به فایل‌ها و پورت‌ها انجام دهید.

  1. تغییر برچسب‌های فایل:
    sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx(/.*)?"
    
  2. تغییر پورت‌های قابل دسترسی برای Nginx:
    sudo semanage port -a -t http_port_t -p tcp 8080
    

پس از اعمال این تغییرات، دسترسی به فایل‌ها و پورت‌های مشخص‌شده برای Nginx مجاز خواهد شد.

پیکربندی SELinux برای MySQL

برای برنامه‌هایی مانند MySQL که به‌طور پیش‌فرض به برخی منابع خاص نیاز دارند، می‌توانید از دستور semanage برای تنظیم برچسب‌های خاص استفاده کنید.

  1. تغییر برچسب برای فایل‌های دیتابیس:
    sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
    
  2. اعمال تغییرات برچسب:
    sudo restorecon -R /var/lib/mysql
    

جمع‌بندی

پیکربندی SELinux برای سرویس‌ها و برنامه‌های خاص نیازمند تنظیم دقیق سیاست‌ها و برچسب‌های امنیتی است. با استفاده از ابزارهایی مانند semanage, audit2allow, و تغییرات برچسب‌های فایل، می‌توان SELinux را برای نیازهای خاص برنامه‌ها و سرویس‌ها پیکربندی کرد. این تنظیمات به سیستم کمک می‌کند تا امنیت و دسترسی‌ها را به‌طور دقیق‌تر کنترل کرده و از بروز مشکلات امنیتی جلوگیری کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”مثال‌هایی از پیکربندی برای سرویس‌هایی مانند Apache، Nginx و MySQL” subtitle=”توضیحات کامل”]پیکربندی SELinux برای سرویس‌های مختلف سیستم مانند Apache، Nginx و MySQL نیازمند تنظیمات خاص برای اطمینان از اینکه این سرویس‌ها به‌طور صحیح و امن عمل کنند. در این بخش، به بررسی نحوه پیکربندی SELinux برای این سرویس‌ها با استفاده از ابزارهای مختلف خواهیم پرداخت.


1. پیکربندی SELinux برای سرویس Apache

Apache یکی از پرکاربردترین وب‌سرورها است که ممکن است به‌طور پیش‌فرض تحت سیاست‌های SELinux قرار گیرد. در اینجا نحوه پیکربندی SELinux برای Apache را بررسی خواهیم کرد.

تنظیم دسترسی به فایل‌های وب‌سایت

برای آنکه SELinux دسترسی به فایل‌های وب‌سایت را برای Apache مجاز کند، می‌توانید از دستور semanage استفاده کنید تا فایل‌های مربوطه را برچسب‌گذاری کنید.

  1. ابتدا باید نوع فایل‌های وب‌سایت را برای Apache به httpd_sys_content_t تغییر دهید. این کار به Apache اجازه می‌دهد تا به محتوای وب‌سایت دسترسی داشته باشد:
    sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    
  2. سپس برای اعمال تغییرات برچسب، از دستور restorecon استفاده کنید:
    sudo restorecon -R /var/www/html
    
تغییر پورت‌های Apache

اگر Apache به پورت غیر از پورت پیش‌فرض (80) نیاز داشته باشد، می‌توانید از دستور semanage برای افزودن پورت جدید استفاده کنید.

برای افزودن پورت 8080 به SELinux برای Apache، دستور زیر را اجرا کنید:

sudo semanage port -a -t http_port_t -p tcp 8080

این دستور اجازه می‌دهد که Apache به پورت 8080 دسترسی داشته باشد.

بررسی وضعیت SELinux برای Apache

برای بررسی وضعیت SELinux برای Apache، از دستور ps -Z استفاده کنید تا مطمئن شوید که Apache در حال اجرا با نوع صحیح است:

ps -Z | grep httpd

خروجی مشابه زیر خواهد بود:

system_u:system_r:httpd_t:s0 apache

در اینجا، httpd_t نوع SELinux برای Apache است.


2. پیکربندی SELinux برای سرویس Nginx

Nginx یکی دیگر از وب‌سرورهای محبوب است که ممکن است نیاز به پیکربندی SELinux برای دسترسی به فایل‌ها و پورت‌ها داشته باشد.

تنظیم دسترسی به فایل‌های Nginx

برای اینکه SELinux اجازه دهد Nginx به فایل‌های خاصی دسترسی داشته باشد، باید برچسب‌های SELinux را تغییر دهید. به‌عنوان مثال، برای تغییر نوع فایل‌ها به httpd_sys_content_t برای Nginx، دستور زیر را اجرا کنید:

sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx(/.*)?"

پس از تغییر برچسب‌ها، از دستور restorecon برای اعمال تغییرات استفاده کنید:

sudo restorecon -R /usr/share/nginx
افزودن پورت به SELinux برای Nginx

اگر Nginx باید از پورت خاصی استفاده کند که به‌طور پیش‌فرض در سیاست‌های SELinux مجاز نیست، باید پورت جدید را به سیاست SELinux اضافه کنید. برای افزودن پورت 8080 به SELinux برای Nginx، دستور زیر را اجرا کنید:

sudo semanage port -a -t http_port_t -p tcp 8080

این دستور به Nginx اجازه می‌دهد که از پورت 8080 استفاده کند.

بررسی وضعیت SELinux برای Nginx

برای بررسی وضعیت SELinux برای Nginx، از دستور ps -Z استفاده کنید تا مطمئن شوید که Nginx با نوع مناسب در حال اجرا است:

ps -Z | grep nginx

خروجی مشابه زیر خواهد بود:

system_u:system_r:httpd_t:s0 nginx

در اینجا، httpd_t نوع SELinux برای Nginx است.


3. پیکربندی SELinux برای سرویس MySQL

MySQL یک پایگاه داده است که برای دسترسی به فایل‌های دیتابیس و سایر منابع نیازمند پیکربندی SELinux می‌باشد.

تنظیم دسترسی به فایل‌های دیتابیس MySQL

برای اینکه MySQL بتواند به فایل‌های دیتابیس خود دسترسی داشته باشد، باید نوع فایل‌ها را به mysqld_db_t تغییر دهید. برای این کار، دستور زیر را اجرا کنید:

sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"

پس از تغییر برچسب‌ها، از دستور restorecon برای اعمال تغییرات استفاده کنید:

sudo restorecon -R /var/lib/mysql
تغییر پورت‌های MySQL

اگر MySQL به پورت غیر از پورت پیش‌فرض (3306) نیاز داشته باشد، باید پورت جدید را به سیاست SELinux اضافه کنید. برای افزودن پورت 3307 به SELinux برای MySQL، دستور زیر را اجرا کنید:

sudo semanage port -a -t mysqld_port_t -p tcp 3307

این دستور به MySQL اجازه می‌دهد که از پورت 3307 استفاده کند.

بررسی وضعیت SELinux برای MySQL

برای بررسی وضعیت SELinux برای MySQL، از دستور ps -Z استفاده کنید تا مطمئن شوید که MySQL با نوع مناسب در حال اجرا است:

ps -Z | grep mysqld

خروجی مشابه زیر خواهد بود:

system_u:system_r:mysqld_t:s0 mysqld

در اینجا، mysqld_t نوع SELinux برای MySQL است.


جمع‌بندی

پیکربندی SELinux برای سرویس‌های مختلف مانند Apache، Nginx و MySQL نیازمند تنظیمات خاص برای فایل‌ها، پورت‌ها و منابع مختلف است. با استفاده از ابزارهایی مانند semanage برای تغییر برچسب‌ها و افزودن پورت‌ها، و استفاده از دستور restorecon برای اعمال این تغییرات، می‌توان SELinux را به‌طور مؤثر پیکربندی کرد. این تنظیمات به سرویس‌ها کمک می‌کنند تا به منابع موردنیاز دسترسی پیدا کنند و در عین حال امنیت سیستم حفظ شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”آشنایی با سیاست‌های targeted و mls” subtitle=”توضیحات کامل”]SELinux (Security-Enhanced Linux) یک معماری کنترل دسترسی پیشرفته است که به‌طور گسترده‌ای در لینوکس برای افزایش امنیت سیستم‌ها استفاده می‌شود. SELinux از سیاست‌های مختلفی برای مدیریت دسترسی‌ها استفاده می‌کند که دو مورد از رایج‌ترین این سیاست‌ها عبارتند از Targeted و MLS. در این بخش به بررسی این دو سیاست خواهیم پرداخت.


1. سیاست Targeted

سیاست Targeted ساده‌ترین و رایج‌ترین سیاست SELinux است که به‌طور پیش‌فرض در بسیاری از توزیع‌های لینوکس از جمله Red Hat Enterprise Linux (RHEL) و CentOS استفاده می‌شود. این سیاست بیشتر برای کاربران و سرویس‌هایی طراحی شده است که نیاز به امنیت پیشرفته دارند.

ویژگی‌ها و عملکرد سیاست Targeted
  • هدف‌گذاری شده: سیاست Targeted فقط سرویس‌ها و فرآیندهای خاصی که نیاز به کنترل امنیت دارند را هدف قرار می‌دهد. این سرویس‌ها شامل وب‌سرورها (Apache, Nginx)، پایگاه‌های داده (MySQL)، و دیگر سرویس‌های حساس هستند.
  • دسترسی محدود: در این سیاست، SELinux فقط محدودیت‌های دسترسی را برای سرویس‌هایی که به‌طور خاص به آن‌ها نیاز است، اعمال می‌کند. به‌عبارت‌دیگر، کاربران عادی یا فرآیندهای غیرمجاز تحت تأثیر قرار نمی‌گیرند.
  • سهولت در پیکربندی: این سیاست به‌طور کلی پیکربندی ساده‌ای دارد و به‌خوبی برای استفاده در سرورهای معمولی طراحی شده است. در این سیاست، اکثر کاربران و فرآیندها از سیاست‌های SELinux به‌طور غیرمستقیم عبور می‌کنند، در حالی که فقط فرآیندهای خاص محدود می‌شوند.
نحوه فعال‌سازی سیاست Targeted

برای اطمینان از اینکه سیستم شما از سیاست Targeted استفاده می‌کند، می‌توانید دستور زیر را برای بررسی وضعیت SELinux اجرا کنید:

sestatus

در صورت استفاده از سیاست Targeted، خروجی باید مشابه زیر باشد:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux policy version:         31
Policy type:                   targeted

اگر سیاست به‌طور صحیح فعال باشد، نوع سیاست به targeted تنظیم شده است.


2. سیاست MLS (Multi-Level Security)

سیاست MLS برای سیستم‌هایی طراحی شده است که نیاز به کنترل دسترسی به داده‌ها و اطلاعات بر اساس سطوح مختلف امنیتی دارند. این سیاست معمولاً در سیستم‌های حساس یا سیستم‌هایی که داده‌های حساس را مدیریت می‌کنند، مورد استفاده قرار می‌گیرد. سیاست MLS پیچیده‌تر از سیاست Targeted است و نیازمند پیکربندی دقیق‌تری است.

ویژگی‌ها و عملکرد سیاست MLS
  • کنترل دسترسی چند سطحی: سیاست MLS برای کنترل دسترسی به داده‌ها و منابع بر اساس سطوح مختلف امنیتی طراحی شده است. این سطوح می‌توانند شامل سطوح امنیتی مانند “محرمانه”، “محرمانه بالا”، “عمومی” و غیره باشند.
  • سیاست‌های امنیتی دقیق‌تر: در سیاست MLS، هر کاربر و فرآیند به یک سطح امنیتی خاص اختصاص داده می‌شود. این سطح امنیتی مشخص می‌کند که کاربر یا فرآیند می‌تواند به چه داده‌هایی دسترسی داشته باشد.
  • مناسب برای محیط‌های بسیار امن: سیاست MLS در محیط‌هایی که نیاز به جداسازی داده‌ها و منابع دارند، بسیار مفید است. به‌عنوان‌مثال، در سیستم‌های دولتی یا نظامی که اطلاعات باید به‌طور جداگانه از یکدیگر محافظت شوند، از این سیاست استفاده می‌شود.
نحوه فعال‌سازی سیاست MLS

برای استفاده از سیاست MLS، باید آن را در فایل پیکربندی SELinux مشخص کنید. برای تغییر نوع سیاست به MLS، مراحل زیر را دنبال کنید:

  1. ویرایش فایل /etc/selinux/config با استفاده از ویرایشگر متنی مانند vi:
    sudo vi /etc/selinux/config
    
  2. در این فایل، خط SELINUXTYPE را به mls تغییر دهید:
    SELINUXTYPE=mls
    
  3. پس از اعمال این تغییرات، باید سیستم خود را ری‌استارت کنید تا سیاست جدید اعمال شود:
    sudo reboot
    

بعد از ری‌استارت، برای بررسی اینکه سیاست MLS فعال شده است، از دستور sestatus استفاده کنید. خروجی باید مشابه زیر باشد:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux policy version:         31
Policy type:                   mls

مقایسه سیاست‌های Targeted و MLS

ویژگی Targeted MLS
پیچیدگی کم زیاد
هدف‌گذاری سرویس‌های خاص دسترسی به داده‌ها با سطوح امنیتی مختلف
مناسب برای سرورهای عمومی و کاربران عادی سیستم‌های دولتی، نظامی و محیط‌های امنیتی پیشرفته
پیکربندی ساده پیچیده

جمع‌بندی

سیاست‌های Targeted و MLS دو نوع متفاوت از سیاست‌های SELinux هستند که هرکدام برای مقاصد مختلف طراحی شده‌اند. سیاست Targeted برای سیستم‌های معمولی و سرویس‌های خاص استفاده می‌شود و پیکربندی ساده‌ای دارد. در مقابل، سیاست MLS برای محیط‌هایی که نیاز به کنترل دسترسی پیچیده‌تر و سطوح امنیتی مختلف دارند، مناسب است. انتخاب سیاست مناسب بستگی به نیازهای امنیتی سیستم و محیط شما دارد.[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. تست و ارزیابی SELinux پس از پیکربندی”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”استفاده از ابزارهای تست برای ارزیابی کارکرد SELinux” subtitle=”توضیحات کامل”]SELinux یک لایه امنیتی است که به‌طور گسترده در سیستم‌های لینوکسی برای کنترل دسترسی‌ها و جلوگیری از نفوذ به سیستم استفاده می‌شود. یکی از بخش‌های مهم در ارزیابی عملکرد SELinux، استفاده از ابزارهای مختلف برای تست و بررسی وضعیت آن است. در این بخش به معرفی ابزارهای مختلفی که می‌توانند برای ارزیابی کارکرد SELinux استفاده شوند، خواهیم پرداخت.


1. ابزار seinfo

ابزار seinfo یکی از ابزارهای SELinux است که برای بررسی وضعیت SELinux و اطلاعات مختلف در مورد پیکربندی و سیاست‌های آن استفاده می‌شود. با استفاده از این ابزار می‌توان اطلاعات دقیق‌تری از سیاست‌ها و وضعیت SELinux در سیستم به دست آورد.

نصب و استفاده از ابزار seinfo

برای استفاده از ابزار seinfo ابتدا باید اطمینان حاصل کنید که بسته‌های SELinux در سیستم شما نصب شده‌اند. اگر این ابزار در سیستم شما موجود نیست، می‌توانید آن را با دستور زیر نصب کنید:

sudo yum install policycoreutils-python-utils

برای استفاده از این ابزار و دریافت اطلاعات دقیق از SELinux می‌توانید از دستور زیر استفاده کنید:

seinfo

این دستور به شما اطلاعاتی مانند سیاست‌های SELinux، نوع سیاست، و پیکربندی‌های مختلف SELinux را نمایش خواهد داد.

مثال خروجی دستور seinfo
Policy name: targeted
Policy version: 31

2. ابزار audit2allow

ابزار audit2allow برای تجزیه‌وتحلیل لاگ‌های auditd استفاده می‌شود و به شما کمک می‌کند تا مشکلاتی که به دلیل محدودیت‌های SELinux رخ می‌دهند را شناسایی و رفع کنید. این ابزار معمولاً برای شناسایی خطاهایی که در زمان اجرای برنامه‌ها به دلیل سیاست‌های SELinux رخ می‌دهد، کاربرد دارد.

نحوه استفاده از audit2allow

اولین گام در استفاده از این ابزار، بررسی لاگ‌های SELinux است. برای مشاهده این لاگ‌ها می‌توانید از دستور زیر استفاده کنید:

sudo ausearch -m avc -ts recent

پس از مشاهده لاگ‌ها، می‌توانید با استفاده از ابزار audit2allow یک سیاست جدید برای رفع مشکلات امنیتی پیشنهادی ایجاد کنید:

sudo ausearch -m avc -ts recent | audit2allow -M mypolicy

این دستور یک ماژول جدید به نام mypolicy ایجاد می‌کند که می‌توانید آن را با استفاده از دستور زیر بارگذاری کنید:

sudo semodule -i mypolicy.pp

3. ابزار semanage

ابزار semanage یکی از ابزارهای مدیریت SELinux است که برای تغییر سیاست‌های SELinux و پیکربندی‌های آن استفاده می‌شود. این ابزار به‌ویژه برای تغییر یا اضافه کردن پورت‌ها، فایل‌ها و دایرکتوری‌ها به سیاست‌های SELinux بسیار مفید است.

نحوه استفاده از semanage

برای افزودن پورت جدید به سیاست SELinux، از دستور زیر استفاده کنید:

sudo semanage port -a -t http_port_t -p tcp 8080

این دستور پورت TCP 8080 را به عنوان یک پورت مجاز برای سرویس‌های HTTP تعریف می‌کند.

برای مشاهده پورت‌های موجود در سیستم، می‌توانید از دستور زیر استفاده کنید:

sudo semanage port -l

4. ابزار setools

ابزار setools مجموعه‌ای از ابزارهای کاربردی برای تحلیل و مدیریت سیاست‌های SELinux است. این ابزار به شما کمک می‌کند تا تحلیل‌های پیچیده‌تری در مورد امنیت سیستم و دسترسی‌ها انجام دهید. ابزار setools می‌تواند برای تجزیه‌وتحلیل و گزارش‌گیری از سیاست‌ها و فایل‌های SELinux استفاده شود.

نصب و استفاده از setools

برای نصب setools در سیستم خود، می‌توانید از دستور زیر استفاده کنید:

sudo yum install setools

برای تحلیل امنیت یک فایل خاص با استفاده از setools، از دستور زیر استفاده کنید:

seinfo -f /path/to/file

این دستور اطلاعات مربوط به دسترسی‌های SELinux برای فایلی خاص را نمایش خواهد داد.


5. ابزار sestatus

ابزار sestatus یکی از مهم‌ترین ابزارها برای بررسی وضعیت SELinux است. این ابزار به شما اطلاعاتی دقیق در مورد وضعیت فعلی SELinux، نوع سیاست و نحوه اعمال آن در سیستم می‌دهد.

نحوه استفاده از sestatus

برای مشاهده وضعیت SELinux، می‌توانید از دستور زیر استفاده کنید:

sestatus

این دستور اطلاعاتی مانند نوع سیاست، وضعیت SELinux (فعال یا غیرفعال) و سطح امنیتی فعلی را نمایش می‌دهد.

مثال خروجی دستور sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux policy version:         31
Policy type:                   targeted

6. ابزار getsebool و setsebool

ابزار getsebool برای بررسی وضعیت تنظیمات متغیرهای SELinux استفاده می‌شود، در حالی که ابزار setsebool برای تغییر آن‌ها به‌کار می‌رود. این ابزارها برای پیکربندی جزئیات SELinux و اصلاح رفتار آن در سطح سیاست‌ها بسیار مفید هستند.

نحوه استفاده از getsebool

برای مشاهده وضعیت یک متغیر خاص SELinux از دستور زیر استفاده کنید:

getsebool -a

برای بررسی وضعیت یک متغیر خاص، به‌عنوان مثال httpd_can_network_connect، از دستور زیر استفاده کنید:

getsebool httpd_can_network_connect
نحوه استفاده از setsebool

برای تغییر وضعیت یک متغیر، به‌عنوان مثال برای فعال‌سازی دسترسی به شبکه برای سرویس HTTP، از دستور زیر استفاده کنید:

setsebool -P httpd_can_network_connect on

جمع‌بندی

ابزارهای مختلفی برای ارزیابی کارکرد SELinux وجود دارند که می‌توانند در شناسایی مشکلات و بهبود تنظیمات امنیتی مفید واقع شوند. ابزارهایی مانند seinfo برای بررسی اطلاعات سیاست‌ها، audit2allow برای رفع مشکلات SELinux از طریق لاگ‌ها، و sestatus برای بررسی وضعیت کلی SELinux از جمله ابزارهای کاربردی در این زمینه هستند. استفاده از این ابزارها به شما کمک می‌کند تا SELinux را به‌طور مؤثر مدیریت کرده و مشکلات امنیتی را شناسایی و رفع کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”شبیه‌سازی سناریوهای امنیتی برای اطمینان از عملکرد صحیح SELinux” subtitle=”توضیحات کامل”]شبیه‌سازی سناریوهای امنیتی یکی از مهم‌ترین روش‌ها برای ارزیابی عملکرد صحیح SELinux و بررسی واکنش آن به تهدیدات مختلف است. در این بخش به بررسی روش‌هایی برای شبیه‌سازی سناریوهای مختلف امنیتی خواهیم پرداخت تا بتوانیم اطمینان حاصل کنیم که SELinux به‌درستی در مقابل تهدیدات امنیتی و حملات احتمالی واکنش نشان می‌دهد.


1. شبیه‌سازی حملات مربوط به دسترسی به فایل‌ها

یکی از تهدیدات رایج در سیستم‌ها، تلاش برای دسترسی غیرمجاز به فایل‌ها و دایرکتوری‌ها است. SELinux با سیاست‌های خود، به‌ویژه در حالت “Enforcing”، باید از چنین دسترسی‌هایی جلوگیری کند.

سناریو:

فرض کنید یک کاربر عادی (non-root) قصد دارد به یک فایل حساس که توسط مدیر سیستم تنظیم شده است، دسترسی پیدا کند. فایل در مسیر /etc/secure_file قرار دارد.

شبیه‌سازی حمله:
  1. ابتدا یک فایل حساس ایجاد می‌کنیم:
sudo touch /etc/secure_file
sudo chown root:root /etc/secure_file
sudo chmod 600 /etc/secure_file
  1. سپس یک کاربر عادی به نام user1 ایجاد می‌کنیم:
sudo useradd user1
  1. حالا کاربر user1 تلاش می‌کند به فایل حساس دسترسی پیدا کند:
sudo -u user1 cat /etc/secure_file
بررسی نتیجه:

در حالت SELinux Enforcing، SELinux باید از این اقدام جلوگیری کند و پیامی مشابه با این خروجی نشان دهد:

cat: /etc/secure_file: Permission denied

اگر SELinux غیرفعال باشد، کاربر user1 به راحتی قادر خواهد بود به فایل دسترسی پیدا کند.

تحلیل با ابزار audit2allow:

برای بررسی دقیق‌تر اینکه SELinux چرا دسترسی را مسدود کرده است، می‌توانیم از ابزار audit2allow استفاده کنیم تا سیاست مناسب را برای دسترسی به فایل ایجاد کنیم. ابتدا لاگ مربوطه را جستجو می‌کنیم:

sudo ausearch -m avc -ts recent

سپس با استفاده از ابزار audit2allow سیاست جدید را تولید می‌کنیم:

sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
sudo semodule -i mypolicy.pp

2. شبیه‌سازی حملات شبکه‌ای

حملات شبکه‌ای معمولاً به‌دنبال دسترسی به پورت‌های خاص یا سرویس‌های باز هستند. SELinux باید ترافیک غیرمجاز را مسدود کند. در این سناریو، قصد داریم یک کاربر غیرمجاز را شبیه‌سازی کنیم که می‌خواهد به پورت خاصی (مثلاً پورت 8080) متصل شود.

سناریو:

فرض کنید که SELinux به‌طور پیش‌فرض تنها به پورت‌های مشخص‌شده برای سرویس‌های خاص اجازه دسترسی می‌دهد. در اینجا پورت 8080 که به‌طور پیش‌فرض در سیاست‌های SELinux برای سرویس HTTP مجاز نیست، بررسی خواهد شد.

شبیه‌سازی حمله:
  1. برای شبیه‌سازی حمله، ابتدا تلاش می‌کنیم به پورت 8080 متصل شویم:
nc -zv 127.0.0.1 8080
  1. در صورتی که پورت 8080 برای دسترسی به سرویس‌های HTTP مجاز نباشد، SELinux باید این درخواست را مسدود کند و پیامی مشابه به این نمایش داده شود:
nc: connect to 127.0.0.1 port 8080 (tcp) failed: Permission denied
تحلیل با استفاده از ابزار seinfo:

برای تحلیل علت مسدود شدن این دسترسی، می‌توانیم از ابزار seinfo برای بررسی سیاست‌های پورت‌های SELinux استفاده کنیم:

seinfo -p

3. شبیه‌سازی حملات مربوط به سرویس‌های HTTP (Apache یا Nginx)

یکی از سناریوهای معمول، تلاش برای ارسال درخواست‌های غیرمجاز به سرویس‌های وب است. در این سناریو، ما قصد داریم بررسی کنیم که SELinux چگونه در برابر دسترسی غیرمجاز به منابع خاصی که تحت نظارت سرویس‌های Apache یا Nginx هستند، واکنش نشان می‌دهد.

سناریو:
  1. فرض کنید که یک وب‌سرور Apache یا Nginx روی پورت 80 یا 443 در حال اجرا است و در معرض تهدیدات مختلف قرار دارد.
  2. کاربر تلاش می‌کند یک فایل حساس را از طریق مرورگر یا ابزارهای مختلف به‌دست آورد.
شبیه‌سازی حمله:

برای شبیه‌سازی یک حمله، می‌توانیم یک فایل حساس ایجاد کرده و سپس تلاش کنیم که از طریق درخواست HTTP به آن دسترسی پیدا کنیم.

  1. ابتدا یک فایل حساس ایجاد می‌کنیم:
sudo touch /var/www/html/secret_file
sudo chown apache:apache /var/www/html/secret_file
sudo chmod 600 /var/www/html/secret_file
  1. سپس با استفاده از ابزار curl سعی می‌کنیم به این فایل دسترسی پیدا کنیم:
curl http://localhost/secret_file
بررسی نتیجه:

در صورتی که SELinux به‌درستی پیکربندی شده باشد، باید دسترسی به این فایل از طریق مرورگر یا curl مسدود شود و پیامی مشابه با “Permission denied” یا خطای 403 نشان داده شود.


4. شبیه‌سازی حملات از طریق نرم‌افزارهای خارجی

اگر برنامه‌ای خارجی به سیستم نصب شود، ممکن است تلاش کند به منابع حساس دسترسی پیدا کند. در این سناریو، می‌خواهیم بررسی کنیم که آیا SELinux از اجرای این برنامه‌ها یا دسترسی آن‌ها به منابع حساس جلوگیری می‌کند یا خیر.

سناریو:
  1. یک برنامه خارجی به نام malware_app ایجاد می‌کنیم که تلاش می‌کند به فایل حساس دسترسی پیدا کند.
  2. با استفاده از ابزار strace فرآیند دسترسی به فایل را ردیابی می‌کنیم:
strace -e trace=open malware_app

در صورتی که SELinux در حالت Enforcing باشد، باید دسترسی به فایل‌ها یا منابع حساس از سوی این برنامه غیرمجاز مسدود شود.


جمع‌بندی

شبیه‌سازی سناریوهای امنیتی یکی از روش‌های موثر برای بررسی عملکرد صحیح SELinux و واکنش آن در برابر تهدیدات مختلف است. با استفاده از ابزارهای مختلف مانند audit2allow، seinfo، و sestatus می‌توانیم عملکرد SELinux را در شرایط مختلف آزمایش کرده و از امنیت سیستم مطمئن شویم. این شبیه‌سازی‌ها به ما کمک می‌کند تا نقاط ضعف امنیتی را شناسایی کرده و SELinux را به‌طور مؤثر پیکربندی کنیم تا سیستم در برابر تهدیدات محافظت شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”استفاده از دستور getenforce برای بررسی وضعیت SELinux پس از تغییرات” subtitle=”توضیحات کامل”]دستور getenforce یکی از دستورات مفید در مدیریت SELinux است که وضعیت کنونی SELinux را در سیستم نشان می‌دهد. این دستور معمولاً برای بررسی وضعیت SELinux پس از انجام تغییرات در تنظیمات آن، مانند تغییر حالت از “Enforcing” به “Permissive” یا “Disabled”، استفاده می‌شود.


1. بررسی وضعیت SELinux با دستور getenforce

برای استفاده از دستور getenforce و بررسی وضعیت SELinux، کافی است دستور زیر را اجرا کنید:

getenforce

خروجی این دستور یکی از سه حالت زیر را نمایش می‌دهد:

  • Enforcing: SELinux در حال اجرا است و سیاست‌های امنیتی به‌طور کامل اعمال می‌شوند.
  • Permissive: SELinux فعال است، اما به‌جای اعمال سیاست‌ها، تنها لاگ می‌کند که چه اقدامی ممکن است نقض سیاست‌ها باشد.
  • Disabled: SELinux غیرفعال است و هیچ‌گونه نظارتی روی سیستم اعمال نمی‌شود.

2. تغییر وضعیت SELinux و بررسی آن با getenforce

اگر شما تغییراتی در وضعیت SELinux اعمال کرده‌اید، می‌توانید با استفاده از دستور getenforce وضعیت جدید آن را بررسی کنید.

مثال:

فرض کنید شما در حال تغییر وضعیت SELinux از حالت Enforcing به Permissive هستید. برای این کار از دستور زیر استفاده می‌کنید:

sudo setenforce 0

پس از اجرای این دستور، SELinux به حالت Permissive تغییر خواهد کرد. حالا برای بررسی وضعیت جدید از دستور getenforce استفاده می‌کنیم:

getenforce

خروجی باید Permissive باشد که نشان‌دهنده تغییر موفقیت‌آمیز وضعیت SELinux است.

تغییر حالت SELinux به Disabled:

برای غیرفعال‌سازی کامل SELinux و تغییر وضعیت به Disabled، باید به فایل پیکربندی /etc/selinux/config بروید و تنظیمات مربوط به SELinux را ویرایش کنید.

  1. ویرایش فایل پیکربندی:
sudo nano /etc/selinux/config
  1. در این فایل، گزینه SELINUX را به disabled تغییر دهید:
SELINUX=disabled
  1. پس از انجام تغییرات، سیستم را ری‌استارت کنید:
sudo reboot

پس از راه‌اندازی مجدد سیستم، دستور getenforce باید خروجی Disabled را نشان دهد:

getenforce

3. بررسی وضعیت SELinux در طول زمان

برای اطمینان از اینکه تغییرات اعمال‌شده به درستی در طول زمان حفظ می‌شوند، می‌توانید دستور getenforce را به‌طور دوره‌ای اجرا کنید یا از ابزارهایی مثل cron برای ثبت وضعیت SELinux در فایل‌های لاگ استفاده کنید.


جمع‌بندی

دستور getenforce ابزار ساده و موثری برای بررسی وضعیت SELinux است. پس از اعمال تغییرات در وضعیت SELinux، می‌توان با این دستور به‌سرعت وضعیت کنونی آن را بررسی کرده و مطمئن شد که تغییرات به‌درستی اعمال شده‌اند. این دستور به‌ویژه پس از تغییر وضعیت SELinux در فایل پیکربندی یا تغییر تنظیمات با دستور setenforce بسیار مفید است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”روش‌های بررسی فایل‌های لاگ SELinux و تحلیل آن‌ها برای ارزیابی پیکربندی” subtitle=”توضیحات کامل”]SELinux برای نظارت و اعمال سیاست‌های امنیتی در سیستم‌های لینوکسی از لاگ‌ها برای ثبت اتفاقات و نقض‌های احتمالی استفاده می‌کند. بررسی دقیق این لاگ‌ها برای ارزیابی عملکرد و پیکربندی SELinux از اهمیت زیادی برخوردار است، زیرا این لاگ‌ها می‌توانند اطلاعات مفیدی درباره خطاها، مشکلات دسترسی و هر گونه نقض سیاست‌ها در اختیار مدیران سیستم قرار دهند.

در این بخش، به بررسی روش‌های مختلف برای مشاهده و تحلیل لاگ‌های SELinux و همچنین ارزیابی پیکربندی آن می‌پردازیم.


1. فایل‌های لاگ SELinux

لاگ‌های SELinux معمولاً در دایرکتوری /var/log ذخیره می‌شوند. برخی از مهم‌ترین فایل‌های لاگ که برای بررسی و تحلیل استفاده می‌شوند، عبارتند از:

  • /var/log/audit/audit.log: این فایل مهم‌ترین منبع لاگ برای SELinux است و شامل تمام رویدادهایی می‌شود که توسط SELinux ثبت می‌شوند. این لاگ شامل اطلاعاتی درباره اقدامات مجاز و غیرمجاز در سیستم است.
  • /var/log/messages: در این فایل می‌توان برخی از پیام‌های عمومی مربوط به SELinux را مشاهده کرد، گرچه اطلاعات آن کمتر از فایل audit.log دقیق است.
  • /var/log/selinux: در برخی سیستم‌ها، لاگ‌های خاص مربوط به SELinux در این دایرکتوری ذخیره می‌شوند.

2. بررسی لاگ‌ها با استفاده از دستور ausearch

دستور ausearch ابزاری برای جستجو و فیلتر کردن اطلاعات موجود در فایل‌های لاگ SELinux است. این دستور به شما این امکان را می‌دهد که رویدادهای خاص را بر اساس پارامترهای مختلف بررسی کنید.

نمونه‌ها:
  1. جستجوی لاگ‌های مربوط به SELinux:
ausearch -m avc

این دستور تمام رویدادهای مربوط به Access Vector Cache (AVC) را نمایش می‌دهد. این رویدادها معمولاً زمانی رخ می‌دهند که SELinux تلاش کند دسترسی به یک منبع را مسدود کند.

  1. جستجوی لاگ‌های مربوط به یک فایل خاص:

برای جستجوی لاگ‌ها برای فایل یا دایرکتوری خاصی، می‌توانید از دستور زیر استفاده کنید:

ausearch -f /path/to/file

این دستور تمام رویدادهایی که به فایل یا دایرکتوری مشخص مربوط می‌شوند را نمایش می‌دهد.


3. استفاده از دستور sealert برای تحلیل لاگ‌ها

دستور sealert ابزاری است که برای تحلیل لاگ‌های SELinux و ارائه توضیحات دقیق و پیشنهادات برای حل مشکلات استفاده می‌شود. پس از بررسی لاگ‌ها با دستور ausearch یا از طریق فایل‌های لاگ، می‌توانید از این ابزار برای دریافت پیشنهادات و راه‌حل‌ها استفاده کنید.

نحوه استفاده:
  1. تحلیل لاگ‌ها با sealert:

برای تجزیه و تحلیل یک لاگ خاص، می‌توانید دستور زیر را اجرا کنید:

sealert -a /var/log/audit/audit.log

این دستور، لاگ‌های مربوط به SELinux را تحلیل کرده و پیغام‌هایی را برای هر خطا یا هشدار احتمالی به همراه توضیحات و پیشنهادات نمایش می‌دهد.

  1. جستجوی رویدادهای خاص:

اگر می‌خواهید اطلاعات مربوط به یک خطای خاص را بیابید، می‌توانید از دستور زیر استفاده کنید:

sealert -l <alert_id>

که در آن <alert_id> شناسه رویدادی است که به‌دنبال آن می‌گردید.


4. بررسی سیاست‌های امنیتی و تنظیمات SELinux

گاهی اوقات مشکل در لاگ‌های SELinux ناشی از تنظیمات نادرست سیاست‌های امنیتی است. برای ارزیابی دقیقتر پیکربندی، باید تنظیمات موجود در فایل‌های پیکربندی SELinux بررسی شوند.

  1. بررسی تنظیمات SELinux در فایل پیکربندی:

برای مشاهده تنظیمات اولیه SELinux، فایل /etc/selinux/config را بررسی کنید. این فایل شامل تنظیمات مهمی مانند وضعیت SELinux (Enforcing, Permissive, Disabled) است.

cat /etc/selinux/config
  1. بررسی حالت اجرای SELinux:

با استفاده از دستور getenforce می‌توان وضعیت کنونی SELinux را بررسی کرد. در حالت “Enforcing” باید سیاست‌های امنیتی به‌طور کامل اعمال شوند.

getenforce

5. شبیه‌سازی سناریوهای امنیتی

برای ارزیابی عملکرد SELinux و اطمینان از اینکه تنظیمات آن به‌درستی اعمال شده‌اند، می‌توانید سناریوهای امنیتی مختلفی را شبیه‌سازی کنید.

  1. شبیه‌سازی دسترسی غیرمجاز:

برای این‌که بررسی کنید SELinux به درستی از دسترسی‌های غیرمجاز جلوگیری می‌کند، می‌توانید سعی کنید به فایلی که دسترسی به آن محدود شده است، دسترسی پیدا کنید.

sudo cat /root/secretfile

اگر SELinux به‌درستی پیکربندی شده باشد، باید از دسترسی به این فایل جلوگیری شود و لاگ‌های مربوطه در /var/log/audit/audit.log ثبت شوند.

  1. شبیه‌سازی اجرای برنامه‌های بدون مجوز:

شما می‌توانید یک برنامه یا سرویس را که مجوز اجرای آن طبق سیاست‌های SELinux محدود شده است، اجرا کنید. این امر باید باعث ثبت لاگ در فایل‌های مربوطه و نمایش هشدارها شود.


جمع‌بندی

برای ارزیابی و تحلیل پیکربندی SELinux، بررسی دقیق لاگ‌ها یکی از مهم‌ترین مراحل است. ابزارهایی مانند ausearch و sealert می‌توانند در این فرایند کمک کنند. بررسی تنظیمات و سیاست‌های امنیتی SELinux در کنار شبیه‌سازی سناریوهای امنیتی نیز به شما کمک خواهد کرد تا از کارکرد صحیح این سیستم امنیتی اطمینان حاصل کنید. همچنین، استفاده از لاگ‌ها برای تحلیل مشکلات و خطاها به شما این امکان را می‌دهد که نقاط ضعف پیکربندی SELinux را شناسایی و اصلاح کنید.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”بخش 3. مفاهیم و سیاست‌های SELinux”][cdb_course_lesson title=”فصل 1. تعریف سیاست‌ها (Policies) در SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”مفهوم سیاست‌های امنیتی در SELinux” subtitle=”توضیحات کامل”]در SELinux، سیاست‌های امنیتی مجموعه‌ای از قوانین و دستورالعمل‌ها هستند که به‌طور دقیق کنترل می‌کنند که کدام فرآیندها، کاربران و برنامه‌ها به منابع سیستم دسترسی داشته باشند. این سیاست‌ها به‌طور پیش‌فرض در قالب یک مجموعه به نام پالیسی (policy) تعریف می‌شوند و هدف اصلی آن‌ها محافظت از سیستم در برابر تهدیدات و افزایش سطح امنیت است.

در SELinux، مفاهیم سیاست‌های امنیتی و نحوه اعمال آن‌ها به‌طور مستقیم بر عملکرد سیستم و ایمنی آن تأثیر می‌گذارد. سیاست‌های SELinux به‌ویژه در سیستم‌هایی با نیازهای امنیتی بالا مانند سرورها و پایگاه‌های داده اهمیت دارند.


انواع سیاست‌های SELinux

سیاست‌های SELinux به دو دسته کلی تقسیم می‌شوند:

  1. سیاست‌های امنیتی هدفمند (Targeted Security Policies): این سیاست‌ها فقط بر روی مجموعه‌ای خاص از فرآیندها و برنامه‌ها اعمال می‌شوند و هدف آن‌ها تقویت امنیت در این بخش‌ها است. بیشتر توزیع‌های لینوکسی از این نوع سیاست‌ها استفاده می‌کنند.در این سیاست‌ها، تنها برنامه‌ها و فرآیندهایی که به‌طور پیش‌فرض نیاز به محافظت دارند، کنترل می‌شوند. برای مثال، وب سرورها، دیتابیس‌ها و سایر سرویس‌ها از این سیاست‌ها استفاده می‌کنند.
  2. سیاست‌های امنیتی جامع (Strict Security Policies): این سیاست‌ها به‌طور گسترده‌تری بر روی تمامی منابع سیستم اعمال می‌شوند و سخت‌گیرانه‌تر هستند. در این سیاست‌ها، تمام فرآیندها و منابع به‌طور جداگانه و دقیق کنترل می‌شوند.این نوع سیاست‌ها بیشتر در مواردی کاربرد دارند که سیستم باید به بالاترین سطح از امنیت دست یابد و محافظت از تمام منابع سیستم مورد نظر باشد.

اجزای سیاست‌های SELinux

سیاست‌های SELinux از چند بخش مختلف تشکیل شده‌اند که هرکدام نقش خاصی در امنیت سیستم ایفا می‌کنند. این اجزا عبارت‌اند از:

  1. قوانین (Rules): این بخش‌ها مشخص می‌کنند که چه اقداماتی مجاز یا غیرمجاز هستند. برای مثال، اگر برنامه‌ای بخواهد به فایلی دسترسی داشته باشد، باید بررسی شود که این عمل مطابق با سیاست‌های SELinux باشد یا خیر.به‌طور کلی، قوانین SELinux می‌توانند شامل موارد زیر باشند:
    • دسترسی به فایل‌ها
    • دسترسی به پورت‌ها و شبکه‌ها
    • اجرای فرآیندها یا اسکریپت‌ها
  2. برچسب‌ها (Labels): یکی از اصول اساسی SELinux، استفاده از برچسب‌ها برای تعیین سطح دسترسی است. هر فایل، فرآیند یا منبع سیستم دارای یک برچسب امنیتی خاص است که نشان‌دهنده سطح دسترسی آن است.برچسب‌ها معمولاً شامل سه بخش اصلی هستند:
    • نوع (Type): این بخش مشخص می‌کند که کدام نوع سیاست بر روی منبع اعمال می‌شود. برای مثال، نوع httpd_sys_content_t نشان‌دهنده این است که منبع برای وب سرور HTTP است.
    • مالکیت (User): این بخش مشخص می‌کند که چه کاربر یا فرآیندی مجاز به دسترسی به منبع است.
    • سطح امنیتی (Level): این بخش نشان‌دهنده حساسیت اطلاعات است. می‌تواند شامل سطح‌های امنیتی مانند s0, s1, s2, etc باشد.
  3. حالت‌ها (States): SELinux می‌تواند در یکی از سه حالت زیر باشد:
    • Enforcing: در این حالت، سیاست‌ها به‌طور کامل اعمال می‌شوند و هرگونه دسترسی غیرمجاز بلاک می‌شود.
    • Permissive: در این حالت، SELinux خطاها را ثبت می‌کند اما هیچ‌گونه مسدودی برای دسترسی‌ها ایجاد نمی‌شود.
    • Disabled: در این حالت، SELinux غیرفعال است و هیچ‌گونه سیاست امنیتی اعمال نمی‌شود.

اعمال سیاست‌های SELinux

برای اعمال سیاست‌های امنیتی SELinux بر روی فایل‌ها، فرآیندها یا منابع مختلف، SELinux از مجموعه‌ای از ابزارها استفاده می‌کند که از مهم‌ترین آن‌ها می‌توان به ابزار semanage اشاره کرد. این ابزار به‌صورت ویژه برای مدیریت و پیکربندی سیاست‌های SELinux به‌کار می‌رود.

دستور برای مشاهده برچسب‌ها و تغییر سیاست‌ها:

semanage fcontext -l

این دستور فهرستی از سیاست‌های اعمال‌شده به فایل‌ها و منابع مختلف سیستم را نمایش می‌دهد.

دستور برای تغییر سیاست SELinux برای یک فایل خاص:

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"

در این دستور، تغییرات لازم برچسب به فایل‌های موجود در دایرکتوری /var/www/html اعمال می‌شود.


نحوه تغییر و افزودن سیاست‌ها

برای افزودن یا تغییر سیاست‌های SELinux، از ابزار semanage استفاده می‌شود. این ابزار به شما امکان می‌دهد که سیاست‌های جدید را تعریف کرده یا سیاست‌های موجود را تغییر دهید.

دستور برای افزودن سیاست به یک دایرکتوری خاص:

semanage fcontext -a -t httpd_sys_content_t "/home/user/data(/.*)?"

این دستور به دایرکتوری /home/user/data برچسب httpd_sys_content_t اختصاص می‌دهد.

دستور برای بازنشانی برچسب‌ها و سیاست‌ها:

restorecon -Rv /home/user/data

این دستور برچسب‌ها و سیاست‌ها را به‌طور کامل برای دایرکتوری مورد نظر اعمال می‌کند.


جمع‌بندی

سیاست‌های امنیتی در SELinux یکی از اصلی‌ترین ابزارهای ایمن‌سازی در سیستم‌های لینوکسی هستند. این سیاست‌ها به‌طور دقیق سطح دسترسی به منابع سیستم را مدیریت کرده و باعث می‌شوند که تنها کاربران و فرآیندهای مجاز به منابع خاصی دسترسی داشته باشند. با استفاده از ابزارهای مختلفی مانند semanage و restorecon، می‌توان سیاست‌ها را به‌طور دقیق پیکربندی کرده و امنیت سیستم را بهبود بخشید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”انواع سیاست‌ها (Targeted, MLS, MCS)” subtitle=”توضیحات کامل”]در SELinux، سیاست‌های امنیتی به‌طور کلی در سه دسته اصلی قرار می‌گیرند: سیاست هدفمند (Targeted)، سیاست امنیتی با سطوح چندگانه (MLS) و سیاست کنترل دسترسی چندسطحی (MCS). هرکدام از این سیاست‌ها برای موارد خاصی طراحی شده‌اند و ویژگی‌ها و کاربردهای متفاوتی دارند.


1. سیاست امنیتی هدفمند (Targeted Security Policy)

سیاست هدفمند (Targeted)، رایج‌ترین نوع سیاست در SELinux است و هدف آن محدود کردن دسترسی به منابع فقط برای فرآیندهای خاصی است که نیاز به محافظت دارند. این سیاست به‌طور پیش‌فرض در بسیاری از توزیع‌های لینوکسی استفاده می‌شود.

ویژگی‌ها:

  • فقط برخی از فرآیندها محافظت می‌شوند: در این سیاست، محدودیت‌ها و دسترسی‌ها تنها بر روی فرآیندهای خاص اعمال می‌شود که از قبل شناسایی شده‌اند. این فرآیندها شامل سرویس‌ها و برنامه‌های حساس نظیر وب سرورها، پایگاه‌های داده، و دیگر برنامه‌هایی هستند که ممکن است آسیب‌پذیر باشند.
  • ساده‌تر و کاربرپسندتر: این سیاست به‌طور خودکار فقط فرآیندهای مورد نیاز را هدف قرار می‌دهد، بنابراین نسبت به دیگر سیاست‌ها پیچیدگی کمتری دارد.
  • عدم تاثیر بر عملکرد کلی سیستم: چون فقط تعدادی از فرآیندها کنترل می‌شوند، این سیاست باعث کاهش بار بر روی سیستم نمی‌شود.

کاربردها:

  • این سیاست معمولاً در سرورهای وب و سایر سیستم‌هایی که نیاز به محافظت از برنامه‌های خاص دارند، استفاده می‌شود.

مثال:

  • در یک سیستم لینوکسی با سیاست هدفمند، ممکن است وب سرور httpd محافظت شود، ولی سایر فرآیندها مانند bash بدون محدودیت باقی بمانند.

2. سیاست امنیتی با سطوح چندگانه (MLS – Multi-Level Security)

سیاست MLS (Multi-Level Security) برای پیاده‌سازی مدل امنیتی با سطوح دسترسی متعدد طراحی شده است. این سیاست برای سیستم‌هایی مناسب است که باید اطلاعات حساس را از دیگر اطلاعات تفکیک کنند.

ویژگی‌ها:

  • سطوح امنیتی: در این سیاست، به هر فایل، فرآیند و منبع یک سطح امنیتی اختصاص داده می‌شود. این سطوح معمولاً از کمترین (برای مثال s0) تا بالاترین سطح (برای مثال s15) تغییر می‌کنند.
  • پیکربندی دقیق‌تر: برخلاف سیاست‌های هدفمند، در سیاست MLS هر منبع و فرآیند می‌تواند سطح امنیتی خاصی داشته باشد. این سطح‌ها مشخص می‌کنند که کدام فرآیندها و کاربران می‌توانند به منابع با سطح‌های خاص دسترسی داشته باشند.
  • تفکیک داده‌های حساس: این سیاست به‌ویژه برای محیط‌هایی که نیاز به مدیریت دقیق دسترسی به داده‌های حساس دارند، مانند دولت‌ها و سازمان‌های اطلاعاتی، کاربرد دارد.

کاربردها:

  • در سیستم‌های دولتی یا سازمان‌هایی که اطلاعات طبقه‌بندی شده دارند (مثل اطلاعات نظامی یا اطلاعات محرمانه)، استفاده می‌شود.

مثال:

  • یک فایل با سطح امنیتی s0 (سطح پایین) فقط می‌تواند توسط فرآیندهایی با همان سطح یا سطح بالاتر مورد دسترسی قرار گیرد، در حالی که یک فایل با سطح امنیتی s15 ممکن است فقط توسط فرآیندهایی با سطح مشابه یا بالاتر قابل دسترسی باشد.

3. سیاست کنترل دسترسی چندسطحی (MCS – Multi-Category Security)

سیاست MCS (Multi-Category Security) مشابه سیاست MLS است اما با ویژگی متفاوت. این سیاست برای تفکیک داده‌ها و منابع بر اساس دسته‌بندی‌های خاص طراحی شده است.

ویژگی‌ها:

  • دسته‌بندی داده‌ها: در سیاست MCS، منابع به دسته‌بندی‌های مختلف تقسیم می‌شوند. هر داده یا فرآیند می‌تواند به یک یا چند دسته‌بندی خاص تعلق داشته باشد.
  • سیاست‌های دسترسی: دسترسی به منابع تنها به کاربرانی مجاز است که به آن دسته‌بندی دسترسی دارند.
  • مدیریت ساده‌تر از MLS: برخلاف MLS که سطوح امنیتی پیچیده‌ای دارد، MCS از دسته‌بندی‌های ساده‌تری برای تفکیک منابع استفاده می‌کند و این امر در سازمان‌های بزرگ می‌تواند مفید باشد.

کاربردها:

  • در محیط‌هایی که نیاز به تفکیک اطلاعات بر اساس دسته‌بندی خاص دارند، مانند سازمان‌هایی که داده‌های مختلف را با دسته‌بندی‌های متعدد مدیریت می‌کنند.

مثال:

  • یک فایل که در دسته‌بندی confidential قرار دارد تنها می‌تواند توسط کاربرانی دسترسی یابد که به این دسته‌بندی خاص مجاز هستند. کاربران دیگر حتی اگر مجاز به دسترسی به برخی منابع دیگر باشند، نمی‌توانند به این فایل دسترسی داشته باشند.

جمع‌بندی

سیاست‌های SELinux شامل سه نوع اصلی سیاست هستند که هرکدام برای موارد خاصی طراحی شده‌اند:

  • سیاست هدفمند (Targeted): برای سیستم‌هایی که به‌طور خاص به محافظت از برنامه‌ها و فرآیندهای حساس نیاز دارند.
  • سیاست امنیتی با سطوح چندگانه (MLS): برای محیط‌هایی که نیاز به تفکیک اطلاعات حساس با سطوح امنیتی مختلف دارند.
  • سیاست کنترل دسترسی چندسطحی (MCS): برای تفکیک داده‌ها و منابع بر اساس دسته‌بندی‌های خاص، بدون استفاده از سطوح امنیتی پیچیده.

هرکدام از این سیاست‌ها مزایا و کاربردهای خاص خود را دارند و بسته به نیازهای امنیتی، می‌توانند برای سیستم‌های مختلف انتخاب شوند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه تنظیم و تغییر سیاست‌های پیش‌فرض در SELinux” subtitle=”توضیحات کامل”]برای تنظیم و تغییر سیاست‌های پیش‌فرض در SELinux، باید از ابزارها و دستورات خاصی استفاده کنید. SELinux به‌طور پیش‌فرض از یک سیاست خاص مانند Targeted استفاده می‌کند، اما شما می‌توانید سیاست مورد نظر خود را به‌راحتی تغییر دهید.

در این بخش، به نحوه تغییر سیاست‌های پیش‌فرض، نحوه مشاهده وضعیت کنونی و تنظیم سیاست‌های مختلف پرداخته می‌شود.


1. مشاهده وضعیت کنونی SELinux

ابتدا باید وضعیت SELinux را بررسی کنید تا ببینید که چه سیاستی به‌طور پیش‌فرض در سیستم شما فعال است. این کار را می‌توان با دستور sestatus انجام داد.

دستور بررسی وضعیت SELinux:

sestatus

خروجی نمونه:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing

در این مثال، سیاست SELinux به‌طور پیش‌فرض Targeted است.


2. تغییر سیاست پیش‌فرض SELinux

برای تغییر سیاست پیش‌فرض SELinux، باید فایل پیکربندی SELinux را ویرایش کنید. فایل پیکربندی SELinux به‌طور معمول در مسیر /etc/selinux/config قرار دارد. شما می‌توانید این فایل را با استفاده از ویرایشگر متنی مانند vi یا nano باز کرده و سیاست مورد نظر خود را تغییر دهید.

دستور ویرایش فایل پیکربندی:

sudo vi /etc/selinux/config

در این فایل، شما با خطی مانند زیر مواجه خواهید شد:

SELINUX=enforcing
SELINUXTYPE=targeted

برای تغییر سیاست پیش‌فرض، باید مقدار SELINUXTYPE را به سیاست مورد نظر خود تغییر دهید. برای مثال، برای تغییر به سیاست MLS یا MCS، باید یکی از این گزینه‌ها را وارد کنید:

  • برای سیاست Targeted:
    SELINUXTYPE=targeted
    
  • برای سیاست MLS:
    SELINUXTYPE=mls
    
  • برای سیاست MCS:
    SELINUXTYPE=mcs
    

نمونه فایل پیکربندی تغییر یافته برای سیاست MCS:

SELINUX=enforcing
SELINUXTYPE=mcs

پس از تغییر این فایل، باید سیستم را ریستارت کنید تا تغییرات اعمال شوند.


3. تغییر حالت SELinux

حالت SELinux را می‌توان به یکی از حالت‌های زیر تغییر داد:

  • enforcing: این حالت سیاست‌های SELinux را به‌طور کامل اجرا می‌کند و دسترسی‌ها و اقدامات را بر اساس سیاست‌ها محدود می‌کند.
  • permissive: در این حالت، SELinux فقط لاگ‌هایی از تخلفات امنیتی تولید می‌کند، اما دسترسی‌ها را محدود نمی‌کند.
  • disabled: در این حالت، SELinux به‌طور کامل غیرفعال می‌شود.

برای تغییر حالت SELinux به حالت permissive یا disabled، می‌توانید از دستور زیر استفاده کنید:

دستور برای تغییر حالت به permissive:

sudo setenforce 0

دستور برای تغییر حالت به enforcing:

sudo setenforce 1

برای غیرفعال کردن SELinux به‌طور دائمی، باید در فایل پیکربندی /etc/selinux/config تغییرات زیر را اعمال کنید:

SELINUX=disabled

4. بررسی تغییرات و وضعیت سیاست جدید

پس از تغییر سیاست و ریستارت سیستم، دوباره باید وضعیت SELinux را بررسی کنید تا اطمینان حاصل کنید که تغییرات به درستی اعمال شده‌اند.

دستور بررسی وضعیت پس از تغییرات:

sestatus

جمع‌بندی

برای تغییر سیاست پیش‌فرض در SELinux، باید ابتدا فایل پیکربندی /etc/selinux/config را ویرایش کرده و مقدار SELINUXTYPE را به سیاست جدید تغییر دهید. سپس با استفاده از دستور setenforce می‌توانید حالت SELinux را به‌طور موقت تغییر دهید. پس از اعمال تغییرات، لازم است که سیستم را ریستارت کنید تا تغییرات به‌طور کامل اعمال شوند.

این اقدامات به شما این امکان را می‌دهد که سیاست‌های امنیتی SELinux را مطابق با نیازهای امنیتی و عملیاتی خود تنظیم و پیکربندی کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. نقش‌ها (Roles) در SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تعریف نقش‌ها و وظایف آن‌ها در SELinux” subtitle=”توضیحات کامل”]در SELinux، مفهوم نقش‌ها (Roles) به‌عنوان یکی از اجزای اصلی در مدل امنیتی فلسفه کنترل دسترسی مبتنی بر نقش (RBAC) عمل می‌کند. نقش‌ها در واقع تعیین می‌کنند که هر کاربر یا فرآیند چه سطحی از دسترسی به منابع سیستم دارد و چه عملیاتی را می‌تواند انجام دهد.

در SELinux، هر کاربر، فرآیند یا شیء به یک نقش خاص اختصاص داده می‌شود. این نقش‌ها به‌طور گسترده در سیاست‌های SELinux برای کنترل دقیق دسترسی‌ها و انجام عملیات مختلف استفاده می‌شوند.


1. نقش‌ها (Roles) در SELinux

نقش‌ها در SELinux به‌طور کلی مسئول تعیین نوع و سطح دسترسی یک کاربر یا فرآیند به منابع سیستم هستند. این دسترسی‌ها می‌تواند شامل اجازه‌ی خواندن، نوشتن، یا اجرای فرآیندها باشد.

نقش‌ها در SELinux به‌صورت زیر دسته‌بندی می‌شوند:

  • نقش‌های پیش‌فرض (Default Roles): این نقش‌ها برای کاربران معمولی یا سیستم‌هایی که نیازی به کنترل دقیق دسترسی ندارند، به‌طور پیش‌فرض تنظیم شده‌اند.
  • نقش‌های خاص (Special Roles): این نقش‌ها برای کاربران خاص یا فرآیندهایی که نیاز به دسترسی‌های ویژه دارند، مانند نقش‌های مدیریتی (admin) یا نقش‌های مرتبط با امنیت، طراحی شده‌اند.

2. تعریف سیاست‌های نقش‌ها

در SELinux، سیاست‌های مربوط به نقش‌ها به‌طور مشخص تعیین می‌کنند که یک کاربر یا فرآیند با توجه به نقش خود می‌تواند به چه منابعی دسترسی داشته باشد. به‌عنوان مثال، کاربری با نقش sysadm_r می‌تواند به منابع مدیریتی دسترسی داشته باشد، در حالی که کاربری با نقش user_r محدود به دسترسی به منابع عمومی است.

نمونه‌ای از سیاست‌های نقش در SELinux می‌تواند به این صورت باشد که یک کاربر با نقش staff_r فقط مجاز به دسترسی به منابع خاصی از سیستم است و نمی‌تواند دسترسی به منابع حساس مانند فایل‌های پیکربندی سیستم داشته باشد.


3. نحوه تعریف و تخصیص نقش‌ها

نقش‌ها در SELinux به‌طور مستقیم از طریق سیاست‌ها تعیین می‌شوند. در این سیاست‌ها، از واژه‌های خاصی برای تعریف دسترسی‌ها استفاده می‌شود. در زیر نحوه تخصیص و استفاده از نقش‌ها را با دستوراتی که می‌توان استفاده کرد، نشان خواهیم داد.

3.1. مشاهده نقش‌های موجود در SELinux

برای مشاهده فهرست تمام نقش‌های موجود در SELinux، از دستور seinfo استفاده می‌شود. این دستور به شما اطلاعات دقیقی از نقش‌های موجود و ویژگی‌های آن‌ها می‌دهد.

دستور مشاهده نقش‌ها:

seinfo --roles

این دستور فهرستی از تمام نقش‌های موجود در سیستم را نمایش می‌دهد.

3.2. تخصیص نقش به یک کاربر

برای تخصیص یک نقش خاص به یک کاربر در SELinux، می‌توان از دستور semanage user استفاده کرد. این دستور به شما این امکان را می‌دهد که نقش‌های مختلف را به کاربران مختلف تخصیص دهید.

دستور تخصیص نقش به کاربر:

sudo semanage user -a -R role_name username

به‌عنوان مثال، اگر بخواهید نقش staff_r را به کاربر john تخصیص دهید، دستور به‌صورت زیر خواهد بود:

sudo semanage user -a -R staff_r john
3.3. تغییر نقش پیش‌فرض

برای تغییر نقش پیش‌فرض یک کاربر، از دستور semanage استفاده می‌شود. این دستور به شما این امکان را می‌دهد که نقش پیش‌فرض یک کاربر را تغییر دهید.

دستور تغییر نقش پیش‌فرض برای یک کاربر:

sudo semanage user -m -R new_role username

برای مثال، اگر بخواهید نقش پیش‌فرض کاربر john را به sysadm_r تغییر دهید، از دستور زیر استفاده می‌شود:

sudo semanage user -m -R sysadm_r john

4. نقش‌ها و سیاست‌های مربوطه

نقش‌ها در SELinux معمولاً به‌طور خاص برای کاربردهای امنیتی تعریف می‌شوند. به‌عنوان مثال، نقش‌های زیر برای دسترسی‌های مختلف در سیستم SELinux وجود دارند:

  • user_r: این نقش معمولاً برای کاربران عادی استفاده می‌شود.
  • sysadm_r: این نقش به مدیران سیستم اختصاص دارد و به آن‌ها دسترسی به منابع مدیریتی را می‌دهد.
  • staff_r: این نقش به کارکنان اختصاص دارد که ممکن است به منابع خاصی از سیستم دسترسی داشته باشند.
  • unconfined_r: این نقش به‌طور معمول به فرآیندهایی اختصاص دارد که هیچ‌گونه محدودیتی ندارند و می‌توانند به منابع سیستم دسترسی آزاد داشته باشند.

5. وظایف نقش‌ها در SELinux

وظایف نقش‌ها به‌طور کلی شامل کنترل دسترسی به منابع مختلف سیستم، حفاظت از اطلاعات حساس، و محدود کردن دسترسی به کاربران و فرآیندها به‌صورت دقیق و هدفمند است. این موارد عبارتند از:

  • محدود کردن دسترسی به منابع حساس: با استفاده از نقش‌ها، دسترسی کاربران و فرآیندها به منابع حساس محدود می‌شود.
  • اجرای سیاست‌های امنیتی در سطح کاربر و فرآیند: نقش‌ها به اجرای دقیق سیاست‌های امنیتی در SELinux کمک می‌کنند.
  • پشتیبانی از کنترل دسترسی مبتنی بر نقش (RBAC): نقش‌ها نقش اساسی در پیاده‌سازی کنترل دسترسی مبتنی بر نقش (RBAC) در SELinux دارند.

جمع‌بندی

نقش‌ها در SELinux ابزارهایی هستند که برای مدیریت دسترسی‌ها به منابع سیستم و تعریف سطوح مختلف دسترسی استفاده می‌شوند. این نقش‌ها می‌توانند به‌طور دقیق برای کاربران، گروه‌ها و فرآیندها تخصیص یابند و به‌طور مؤثری از اطلاعات حساس محافظت کنند. با استفاده از دستورات semanage و seinfo می‌توانید نقش‌ها را مشاهده کرده، تخصیص دهید و تغییرات لازم را در سیستم اعمال کنید. نقش‌ها به‌طور خاص برای پیاده‌سازی کنترل دسترسی مبتنی بر نقش (RBAC) در SELinux طراحی شده‌اند تا دسترسی به منابع سیستم را به‌طور مؤثر مدیریت کنند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”لیست نقش‌های پیش‌فرض در SELinux” subtitle=”توضیحات کامل”]در SELinux، نقش‌ها برای مدیریت دسترسی‌ها و امنیت سیستم‌ها طراحی شده‌اند. هر نقش به‌طور خاص برای کاربران یا فرآیندهای مختلف تعریف می‌شود تا کنترل دقیق‌تری روی منابع سیستم ایجاد شود. در اینجا برخی از نقش‌های پیش‌فرض در SELinux آورده شده است:


1. user_r

  • توضیح: این نقش معمولاً به کاربران عادی یا غیرمدیریتی اختصاص دارد. دسترسی‌های این نقش محدود به منابع پایه‌ای و عادی سیستم است.
  • ویژگی‌ها: این نقش برای کاربران معمولی و غیرمدیر است که دسترسی محدود به منابع حساس سیستم دارند.

2. system_r

  • توضیح: این نقش به فرآیندهای سیستم و سرویس‌های سطح پایین اختصاص دارد. از آن برای کنترل دسترسی به منابع سیستمی مانند سرویس‌ها و فرآیندهای اصلی سیستم استفاده می‌شود.
  • ویژگی‌ها: این نقش برای سرویس‌های سیستمی که نیاز به دسترسی بالا دارند، مانند init و systemd، تنظیم می‌شود.

3. sysadm_r

  • توضیح: نقش مدیر سیستم است که دسترسی‌های بیشتری به منابع مدیریتی سیستم می‌دهد. معمولاً به مدیران سیستم اختصاص داده می‌شود.
  • ویژگی‌ها: این نقش به مدیران سیستم اجازه می‌دهد که به بخش‌های مدیریتی و حیاتی سیستم دسترسی داشته باشند.

4. staff_r

  • توضیح: این نقش به کارکنان و کاربرانی اختصاص می‌یابد که نیاز به دسترسی به منابع خاص دارند، اما سطح دسترسی‌شان به‌اندازه مدیران نیست.
  • ویژگی‌ها: معمولاً برای افرادی است که می‌خواهند به منابع خاصی از سیستم دسترسی داشته باشند، مانند داده‌های معمولی یا منابع نیمه‌حساس.

5. unconfined_r

  • توضیح: این نقش برای فرآیندهایی که هیچ‌گونه محدودیتی ندارند و می‌توانند به تمامی منابع سیستم دسترسی داشته باشند، استفاده می‌شود.
  • ویژگی‌ها: این نقش به‌طور معمول برای فرآیندهایی که باید بدون هیچ‌گونه محدودیتی اجرا شوند، مانند برخی از فرآیندهای حیاتی سیستم، به کار می‌رود.

6. selinux_r

  • توضیح: این نقش برای فرآیندهای SELinux استفاده می‌شود که نیاز به مدیریت و نظارت بر پیکربندی‌های امنیتی دارند.
  • ویژگی‌ها: معمولاً برای فرآیندهایی که مرتبط با تنظیمات و پیکربندی‌های SELinux هستند، استفاده می‌شود.

7. guest_r

  • توضیح: این نقش به مهمان‌ها یا کاربران ضیفه اختصاص دارد که دسترسی‌های بسیار محدودی به منابع سیستم دارند.
  • ویژگی‌ها: این نقش برای کاربران یا مهمانانی است که تنها به بخش‌هایی از سیستم که به‌طور عمومی در دسترس است، دسترسی دارند.

8. cimserver_r

  • توضیح: این نقش برای سرورهای CIM (Common Information Model) استفاده می‌شود که برای ارائه اطلاعات سیستم از طریق پروتکل‌ها به کار می‌روند.
  • ویژگی‌ها: این نقش برای مدیریت و نظارت بر سرویس‌های CIM طراحی شده است.

جمع‌بندی

نقش‌ها در SELinux به‌طور خاص برای تنظیم دسترسی‌های مختلف به منابع سیستم ایجاد شده‌اند. از این نقش‌ها می‌توان برای محدود کردن یا اختصاص دسترسی به کاربرانی با نیازهای مختلف استفاده کرد. از جمله نقش‌های پیش‌فرض در SELinux می‌توان به user_r برای کاربران عادی، system_r برای سرویس‌های سیستم، sysadm_r برای مدیران سیستم، و unconfined_r برای فرآیندهای بدون محدودیت اشاره کرد. هر نقش با توجه به نیازهای امنیتی سیستم، تعیین‌کننده سطح دسترسی کاربران و فرآیندهای مختلف به منابع است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه اختصاص نقش‌ها به کاربران و فرآیندها” subtitle=”توضیحات کامل”]در SELinux، نقش‌ها (Roles) تعیین می‌کنند که چه نوع دسترسی‌هایی به کاربران و فرآیندها داده شود. در این بخش، به بررسی نحوه اختصاص نقش‌ها به کاربران و فرآیندها می‌پردازیم و نحوه انجام این کار به‌صورت عملی و کامندی را نیز توضیح خواهیم داد.


1. نقش‌ها در SELinux

نقش‌ها در SELinux، به‌عنوان یک سطح از سیاست‌های امنیتی، برای تعیین میزان دسترسی کاربران و فرآیندها به منابع سیستم استفاده می‌شوند. برای هر نقش، یک یا چند نوع دسترسی تعیین می‌شود که می‌تواند اجازه خواندن، نوشتن یا اجرا کردن منابع را شامل شود.

رایج‌ترین نقش‌ها شامل موارد زیر هستند:

  • system_r: نقش پیش‌فرض برای فرآیندهای سیستمی.
  • user_r: نقش پیش‌فرض برای کاربران معمولی.
  • staff_r: نقش برای کاربران با دسترسی‌های مدیریتی.
  • sysadm_r: نقش مدیر سیستم.
  • dbadmin_r: نقش برای مدیران پایگاه‌داده.

این نقش‌ها ممکن است به‌صورت مستقیم یا به‌طور غیرمستقیم از طریق دسترسی به سیاست‌ها و فرآیندهای مختلف تعیین شوند.


2. نحوه اختصاص نقش‌ها به کاربران

برای اختصاص نقش‌ها به کاربران در SELinux، از دستور semanage و chcon می‌توان استفاده کرد. دستور semanage امکان مدیریت SELinux در سطح سیستم را فراهم می‌کند، از جمله تخصیص نقش‌ها به کاربران.

استفاده از دستور semanage برای تخصیص نقش به کاربر

فرض کنید می‌خواهیم نقش staff_r را به کاربری به نام example_user اختصاص دهیم. برای انجام این کار، باید از دستور semanage استفاده کنیم:

sudo semanage user -a -R staff_r example_user

در این دستور:

  • -a به معنی افزودن کاربر است.
  • -R برای تعیین نقش به کاربر است.
  • staff_r نقش مورد نظر است.
  • example_user نام کاربر است.
بررسی نقش‌های اختصاص داده‌شده به کاربر

برای بررسی نقش‌های اختصاص داده‌شده به یک کاربر، می‌توان از دستور seinfo استفاده کرد:

seinfo -u example_user

این دستور نقش‌های مربوط به کاربر را نمایش خواهد داد.


3. نحوه تخصیص نقش‌ها به فرآیندها

فرآیندها در SELinux نیز به نقش‌ها مرتبط هستند و می‌توانند برای کنترل دسترسی‌های دقیق‌تری استفاده شوند. برای تخصیص نقش به یک فرآیند در زمان اجرای آن، می‌توان از دستور newrole استفاده کرد.

استفاده از دستور newrole برای تخصیص نقش به یک فرآیند

فرض کنید می‌خواهید نقش sysadm_r را به فرآیند جاری خود اختصاص دهید. دستور زیر برای این کار استفاده می‌شود:

newrole -r sysadm_r

با اجرای این دستور، فرآیند جاری به نقش sysadm_r تغییر می‌کند.


4. تغییر نقش‌های پیش‌فرض برای کاربران

گاهی اوقات ممکن است بخواهید نقش پیش‌فرض برای یک کاربر خاص را تغییر دهید. این کار را می‌توان از طریق ویرایش فایل پیکربندی SELinux انجام داد.

ویرایش فایل پیکربندی

برای تغییر نقش پیش‌فرض یک کاربر، باید فایل /etc/selinux/selinux_config را ویرایش کنید. برای این کار، ابتدا فایل را باز کنید:

sudo nano /etc/selinux/selinux_config

در این فایل، بخش‌های مختلف مربوط به سیاست‌ها و نقش‌ها قرار دارند. برای تغییر نقش پیش‌فرض یک کاربر، بخش مربوط به user را پیدا کرده و نقش مورد نظر را اختصاص دهید.


جمع‌بندی

در این بخش، نحوه اختصاص نقش‌ها به کاربران و فرآیندها در SELinux توضیح داده شد. با استفاده از دستورات semanage و newrole، می‌توان نقش‌های مختلف را به کاربران و فرآیندهای سیستم اختصاص داد. همچنین، برای مدیریت نقش‌های پیش‌فرض می‌توان تنظیمات را در فایل پیکربندی SELinux ویرایش کرد. این تنظیمات به‌طور مؤثر دسترسی‌ها و امنیت سیستم را تحت کنترل قرار می‌دهند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. نوع‌ها (Types) در SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”مفهوم Type Enforcement (TE) در SELinux” subtitle=”توضیحات کامل”]Type Enforcement (TE) یکی از مفاهیم کلیدی و اصلی در SELinux است که به‌طور مؤثر و دقیق کنترل دسترسی‌ها در سیستم را مدیریت می‌کند. در SELinux، TE به‌عنوان یک سیاست امنیتی استفاده می‌شود که به‌وسیله آن نوع منابع (مانند فایل‌ها، فرآیندها و سایر منابع سیستم) و نحوه دسترسی به آن‌ها مشخص می‌شود.


1. تعریف Type Enforcement

Type Enforcement در واقع به مجموعه‌ای از قوانین و سیاست‌ها اشاره دارد که تعیین می‌کند هر نوع (type) از منابع سیستم چه نوع دسترسی‌ای به سایر منابع یا فرآیندها دارد. این سیستم اجازه می‌دهد تا دسترسی‌ها به منابع مختلف به‌صورت دقیق و محدود به یک سری قواعد خاص مدیریت شوند.

در SELinux، هر فرآیند و هر شیء سیستم (فایل‌ها، پایگاه داده‌ها و …) به یک نوع (type) خاص تعلق دارد. سپس با استفاده از سیاست‌های Type Enforcement، می‌توان تعیین کرد که هر نوع از فرآیندها به چه منابعی دسترسی دارند و چه اقداماتی را می‌توانند انجام دهند.


2. اجزای اصلی Type Enforcement

در SELinux، Type Enforcement از چند بخش کلیدی تشکیل شده است که عبارتند از:

  • Type: هر شیء (منبع یا فرآیند) در SELinux یک نوع (type) خاص دارد که آن را از سایر اشیاء متمایز می‌کند. برای مثال، فایل‌ها می‌توانند نوع user_home_t داشته باشند، در حالی که یک فرآیند ممکن است نوع httpd_t داشته باشد.
  • Domain: فرآیندها در SELinux به یک حوزه (domain) خاص تعلق دارند. هر دامنه نیز معمولاً به یک نوع مرتبط است. به‌عنوان‌مثال، فرآیندهای مربوط به وب‌سرور ممکن است به دامنه httpd_t تعلق داشته باشند.
  • Access Vector: SELinux برای کنترل دسترسی، دسترسی‌های خاصی را برای انواع مختلف اشیاء تعریف می‌کند. این دسترسی‌ها معمولاً شامل اجازه خواندن، نوشتن یا اجرای منابع هستند. این دسترسی‌ها برای هر نوع و دامنه تعیین می‌شوند.

3. قوانین Type Enforcement

در SELinux، سیاست‌های Type Enforcement در قالب قوانین خاصی نوشته می‌شوند. این قوانین مشخص می‌کنند که چه فرآیندهایی می‌توانند به چه نوعی از فایل‌ها یا منابع دسترسی داشته باشند. این قوانین بر اساس انواع و دامنه‌ها تنظیم می‌شوند.

مثال یک قانون ساده از نوع Type Enforcement به‌صورت زیر است:

allow httpd_t user_home_t:file { read write };

در این قانون:

  • httpd_t نوع (type) فرآیند وب‌سرور است.
  • user_home_t نوع فایل‌هایی است که در دایرکتوری خانگی کاربران قرار دارند.
  • read write دسترسی‌هایی هستند که به این فایل‌ها داده می‌شود (در این مثال اجازه خواندن و نوشتن).

در اینجا، قانون تعیین می‌کند که فرآیندهای وب‌سرور (با نوع httpd_t) می‌توانند به فایل‌های موجود در دایرکتوری خانگی کاربران (با نوع user_home_t) دسترسی پیدا کنند.


4. نحوه تعریف و اعمال Type Enforcement

برای تعریف و اعمال قوانین Type Enforcement در SELinux، باید از ابزارهایی مانند semanage و audit2allow استفاده کرد. این ابزارها به شما امکان می‌دهند تا قوانین SELinux را تنظیم و اعمال کنید.

استفاده از semanage برای اعمال قوانین

ابزار semanage به شما این امکان را می‌دهد که قوانین SELinux را به‌طور خودکار مدیریت کنید. برای مثال، برای افزودن یک قانون دسترسی به یک نوع خاص، می‌توان از دستور زیر استفاده کرد:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"

این دستور به SELinux می‌گوید که دایرکتوری /var/www/html و تمامی زیرمجموعه‌های آن باید به نوع httpd_sys_content_t تعلق داشته باشند، که معمولاً برای وب‌سایت‌های تحت کنترل وب‌سرور استفاده می‌شود.


5. ابزارهای مربوط به Type Enforcement

در SELinux، ابزارهایی مانند audit2allow و seinfo برای تجزیه و تحلیل و تنظیم سیاست‌های Type Enforcement وجود دارند.

  • audit2allow: این ابزار به شما کمک می‌کند تا از لاگ‌های SELinux، قوانینی برای اجتناب از خطاهای دسترسی بسازید. به‌طور مثال، اگر یک فرآیند به علت سیاست‌های SELinux نتواند به منبعی دسترسی پیدا کند، با استفاده از این ابزار می‌توانید قوانینی برای رفع آن مشکل بسازید.برای مثال، اگر خطای دسترسی در لاگ SELinux ثبت شده باشد، می‌توانید از دستور زیر استفاده کنید:
    audit2allow -a -M mymodule
    

    این دستور قانون‌هایی را که به رفع مشکل کمک می‌کنند، تولید می‌کند و آن‌ها را در قالب یک ماژول SELinux ذخیره می‌کند.


جمع‌بندی

Type Enforcement (TE) یکی از اصول بنیادین در SELinux است که به‌طور مؤثر و دقیق دسترسی‌ها به منابع و فرآیندها را کنترل می‌کند. در این سیاست، منابع و فرآیندها به انواع مختلفی تقسیم می‌شوند و برای هر کدام قواعد دسترسی خاصی تعیین می‌شود. این سیستم به‌طور مؤثر امنیت سیستم را از طریق سیاست‌های دقیق دسترسی مدیریت می‌کند و می‌تواند به‌طور قابل‌توجهی از سیستم در برابر تهدیدات مختلف محافظت کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تفاوت انواع مختلف اشیاء در SELinux (فایل‌ها، پورت‌ها، فرآیندها)” subtitle=”توضیحات کامل”]در SELinux، منابع سیستم مختلف (که به آن‌ها اشیاء گفته می‌شود) مانند فایل‌ها، پورت‌ها و فرآیندها هرکدام ویژگی‌ها و نحوه دسترسی متفاوتی دارند. در اینجا، تفاوت‌های اصلی این اشیاء به تفصیل بررسی می‌شود تا نقش و عملکرد آن‌ها در سیاست‌های SELinux بهتر درک شود.


1. فایل‌ها (Files)

در SELinux، فایل‌ها یکی از رایج‌ترین انواع اشیاء هستند. فایل‌ها می‌توانند انواع مختلفی از اطلاعات را در خود ذخیره کنند و سیاست‌های SELinux به‌منظور کنترل دسترسی به آن‌ها طراحی شده است. فایل‌ها معمولاً به یک نوع خاص تعلق دارند که بر اساس کاربرد یا محتوا تعیین می‌شود.

  • نوع فایل‌ها (File Types): هر فایل در SELinux یک نوع مشخص دارد که آن را از سایر فایل‌ها متمایز می‌کند. این نوع (type) معمولاً بر اساس کاربرد فایل و پروسه‌هایی که می‌توانند به آن دسترسی داشته باشند، مشخص می‌شود. به‌عنوان‌مثال:
    • httpd_sys_content_t: برای فایل‌های مربوط به وب‌سرور
    • user_home_t: برای فایل‌های داخل دایرکتوری خانگی کاربران
    • var_log_t: برای فایل‌های لاگ سیستم
  • کنترل دسترسی به فایل‌ها: SELinux از طریق قوانین Type Enforcement (TE) دسترسی به فایل‌ها را کنترل می‌کند. این قوانین مشخص می‌کنند که چه فرآیندهایی به چه فایل‌هایی دسترسی دارند و چه عملیاتی (خواندن، نوشتن، اجرا) مجاز است. به‌عنوان‌مثال، یک فرآیند وب‌سرور (httpd_t) ممکن است مجاز به خواندن فایل‌های وب‌سایت (httpd_sys_content_t) باشد.
مثال دستور SELinux برای اعمال سیاست دسترسی به فایل‌ها:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -R /var/www/html

این دستورات تعیین می‌کنند که تمامی فایل‌ها و دایرکتوری‌های زیر /var/www/html باید نوع httpd_sys_content_t داشته باشند.


2. پورت‌ها (Ports)

پورت‌ها در SELinux نیز به‌عنوان اشیاء مهمی که نیاز به کنترل دسترسی دارند شناخته می‌شوند. پورت‌ها معمولاً برای ارتباطات شبکه‌ای استفاده می‌شوند و SELinux به‌منظور مدیریت دسترسی به پورت‌های مختلف، از سیاست‌های امنیتی خاص استفاده می‌کند.

  • نوع پورت‌ها (Port Types): مشابه فایل‌ها، پورت‌ها نیز به انواع خاصی تعلق دارند که برای تعیین دسترسی‌های شبکه‌ای طراحی شده‌اند. به‌عنوان‌مثال:
    • http_port_t: برای پورت‌های HTTP (مثلاً پورت 80)
    • ssh_port_t: برای پورت‌های SSH (مثلاً پورت 22)
  • کنترل دسترسی به پورت‌ها: SELinux دسترسی به پورت‌ها را با استفاده از قوانین TE مدیریت می‌کند که تعیین می‌کند کدام فرآیندها می‌توانند از کدام پورت‌ها استفاده کنند. برای مثال، وب‌سرور (httpd_t) باید دسترسی به پورت HTTP (پورت 80) داشته باشد.
مثال دستور SELinux برای اعمال سیاست دسترسی به پورت‌ها:
sudo semanage port -a -t http_port_t -p tcp 8080

این دستور به SELinux می‌گوید که پورت TCP 8080 باید به نوع http_port_t تعلق داشته باشد، به این معنی که این پورت برای استفاده توسط سرویس‌های HTTP مجاز خواهد بود.


3. فرآیندها (Processes)

در SELinux، فرآیندها به‌عنوان اشیاء مهمی شناخته می‌شوند که باید دسترسی‌ها و اقداماتشان کنترل شوند. فرآیندها به‌طور مستقیم با انواع دیگر اشیاء (فایل‌ها، پورت‌ها) تعامل دارند و نوع آن‌ها تأثیر زیادی بر روی نحوه دسترسی‌ها و قوانین امنیتی می‌گذارد.

  • نوع فرآیندها (Process Types): مشابه فایل‌ها و پورت‌ها، هر فرآیند در SELinux به یک نوع خاص تعلق دارد. این نوع معمولاً بر اساس عملکرد فرآیند و منابعی که به آن دسترسی دارند تعیین می‌شود. به‌عنوان‌مثال:
    • httpd_t: برای فرآیندهای وب‌سرور
    • sshd_t: برای فرآیندهای SSH
    • unconfined_t: برای فرآیندهای بدون کنترل SELinux
  • کنترل دسترسی به فرآیندها: SELinux از طریق قوانینی که در سیاست‌های TE تعریف می‌شوند، دسترسی فرآیندها به سایر منابع سیستم (فایل‌ها، پورت‌ها و …) را مدیریت می‌کند. این قوانین تعیین می‌کنند که فرآیندهای مختلف می‌توانند به چه منابعی دسترسی داشته باشند.
مثال دستور SELinux برای مدیریت فرآیندها:
sudo semanage permissive -a httpd_t

این دستور به SELinux می‌گوید که برای فرآیندهای با نوع httpd_t حالت مجاز (permissive) اعمال شود، به این معنی که این فرآیندها می‌توانند به منابع مختلف دسترسی داشته باشند بدون اینکه دستورات خطا گزارش شوند.


جمع‌بندی

در SELinux، تفاوت‌های زیادی بین انواع مختلف اشیاء مانند فایل‌ها، پورت‌ها و فرآیندها وجود دارد. هرکدام از این اشیاء به یک نوع خاص تعلق دارند که بر اساس آن‌ها دسترسی‌ها و سیاست‌های امنیتی SELinux تنظیم می‌شود. فایل‌ها به‌عنوان منابع داده‌ای، پورت‌ها برای مدیریت دسترسی به شبکه و فرآیندها برای اجرای اقدامات مختلف در سیستم تعریف شده‌اند. SELinux از طریق سیاست‌های Type Enforcement (TE) و ابزارهای مختلف، دسترسی‌ها به این اشیاء را به‌طور دقیق و محدود مدیریت می‌کند تا امنیت سیستم حفظ شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه تخصیص نوع‌ها به فایل‌ها و دایرکتوری‌ها” subtitle=”توضیحات کامل”]در SELinux، نوع‌ها (types) به اشیاء مختلف سیستم (مانند فایل‌ها، دایرکتوری‌ها، پورت‌ها و فرآیندها) اختصاص داده می‌شوند تا از طریق سیاست‌های Type Enforcement (TE) دسترسی‌ها کنترل شوند. برای فایل‌ها و دایرکتوری‌ها، اختصاص نوع‌ها یکی از مراحل اصلی پیکربندی است که باید به‌طور دقیق انجام شود.

در این بخش، به نحوه تخصیص نوع‌ها به فایل‌ها و دایرکتوری‌ها در SELinux پرداخته می‌شود. این فرآیند شامل استفاده از ابزارهایی مانند semanage و chcon است تا نوع‌های مورد نظر به فایل‌ها و دایرکتوری‌ها اعمال شود.


1. استفاده از semanage برای تخصیص نوع به فایل‌ها و دایرکتوری‌ها

ابزار semanage یکی از ابزارهای اصلی برای مدیریت سیاست‌های SELinux است. این ابزار می‌تواند برای تخصیص انواع مختلف به فایل‌ها و دایرکتوری‌ها استفاده شود.

  • تخصیص نوع به فایل یا دایرکتوری: برای تخصیص یک نوع به یک فایل یا دایرکتوری خاص، از دستور semanage fcontext استفاده می‌شود.
مثال:

برای تخصیص نوع httpd_sys_content_t به تمامی فایل‌ها و دایرکتوری‌های زیر /var/www/html، از دستور زیر استفاده می‌کنیم:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
  • در این دستور:
    • -a: به معنی افزودن یک سیاست جدید است.
    • -t httpd_sys_content_t: نوع مورد نظر برای تخصیص (در اینجا نوع فایل‌های وب‌سایت).
    • "/var/www/html(/.*)?": مسیر فایل یا دایرکتوری که نوع باید به آن اختصاص داده شود (در اینجا دایرکتوری /var/www/html و تمام زیرشاخه‌های آن).
  • پس از اجرای دستور semanage، برای اعمال تغییرات به فایل‌ها و دایرکتوری‌ها باید از دستور restorecon استفاده کرد.
اجرای دستور restorecon:
sudo restorecon -R /var/www/html
  • دستور restorecon انواع را برای فایل‌ها و دایرکتوری‌های مشخص شده به‌روز می‌کند. گزینه -R به معنی بازبینی و اعمال تغییرات به صورت بازگشتی است.

2. استفاده از chcon برای تخصیص نوع به فایل‌ها و دایرکتوری‌ها

ابزار chcon برای تغییر موقت نوع‌ها برای فایل‌ها و دایرکتوری‌ها بدون نیاز به تغییر سیاست‌های SELinux استفاده می‌شود. این دستور به‌طور مستقیم نوع فایل‌ها را تغییر می‌دهد و نیازی به بازنگری در سیاست‌ها ندارد.

مثال:

برای تخصیص نوع httpd_sys_content_t به یک فایل خاص به نام index.html در دایرکتوری /var/www/html، از دستور زیر استفاده می‌کنیم:

sudo chcon -t httpd_sys_content_t /var/www/html/index.html
  • در این دستور:
    • -t httpd_sys_content_t: به معنی تخصیص نوع httpd_sys_content_t به فایل.
    • /var/www/html/index.html: مسیر فایل یا دایرکتوری که نوع به آن تخصیص داده می‌شود.

نکته: تغییرات اعمال‌شده با استفاده از chcon موقت هستند و پس از انجام عملیات بازبینی یا بازنشانی فایل‌ها ممکن است تغییرات بازنشانی شوند. در صورتی که تغییرات دائمی مدنظر باشد، باید از semanage استفاده کرد.


3. استفاده از semanage fcontext برای تخصیص نوع‌های خاص به فایل‌ها

برای تخصیص نوع‌های خاص به فایل‌ها یا دایرکتوری‌ها، می‌توان از semanage fcontext برای تعریف قواعد پیچیده‌تر و سفارشی استفاده کرد.

مثال:

برای تخصیص نوع user_home_t به تمامی فایل‌ها و دایرکتوری‌های زیر /home/user1:

sudo semanage fcontext -a -t user_home_t "/home/user1(/.*)?"
sudo restorecon -R /home/user1

در این مثال:

  • نوع user_home_t به تمامی فایل‌ها و دایرکتوری‌های زیر /home/user1 اختصاص می‌یابد.
  • با استفاده از دستور restorecon تغییرات اعمال می‌شود.

4. استفاده از semanage برای تخصیص نوع به فایل‌های پیکربندی

برای فایل‌های پیکربندی که نقش مهمی در عملکرد سیستم دارند، معمولاً نوع خاصی تخصیص داده می‌شود تا امنیت آن‌ها حفظ گردد. به‌عنوان‌مثال، فایل‌های پیکربندی وب‌سرور ممکن است نوع httpd_config_t داشته باشند.

مثال:

برای تخصیص نوع httpd_config_t به فایل‌های پیکربندی وب‌سرور در مسیر /etc/httpd/:

sudo semanage fcontext -a -t httpd_config_t "/etc/httpd(/.*)?"
sudo restorecon -R /etc/httpd

جمع‌بندی

تخصیص نوع‌ها به فایل‌ها و دایرکتوری‌ها در SELinux یکی از بخش‌های مهم تنظیمات و مدیریت امنیت سیستم است. ابزارهای مختلفی مانند semanage و chcon برای تخصیص انواع به منابع مختلف سیستم استفاده می‌شوند. استفاده از semanage برای اعمال تغییرات دائمی و استفاده از chcon برای تغییرات موقت توصیه می‌شود. این تغییرات به‌طور مؤثر دسترسی به فایل‌ها و دایرکتوری‌ها را محدود کرده و امنیت سیستم را افزایش می‌دهند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. حالت‌های SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”حالت‌های SELinux: Enforcing، Permissive و Disabled” subtitle=”توضیحات کامل”]در SELinux سه حالت اصلی وجود دارد که نحوه رفتار SELinux را در برابر دسترسی‌ها و عملیات مختلف تعیین می‌کند. این سه حالت عبارتند از: Enforcing، Permissive و Disabled. هرکدام از این حالت‌ها عملکرد خاص خود را دارند که در ادامه به بررسی آن‌ها پرداخته می‌شود.


1. حالت Enforcing: بررسی چگونگی اعمال محدودیت‌ها و مجازات‌ها

حالت Enforcing به این معناست که SELinux سیاست‌های امنیتی خود را به‌طور کامل و دقیق اعمال می‌کند. در این حالت، SELinux تمام دسترسی‌ها و عملیات‌هایی که مغایر با سیاست‌های تعریف‌شده هستند را مسدود می‌کند و همچنین اقدام به ثبت وقایع (logs) می‌کند تا مدیران سیستم بتوانند موارد نقض را شناسایی کنند.

  • عملکرد: زمانی که SELinux در حالت Enforcing قرار دارد، تمام سیاست‌های امنیتی به‌طور فعال اجرا می‌شوند و هرگونه دسترسی غیرمجاز (چه به‌صورت فایل، پورت و یا فرآیند) به سیستم، مسدود می‌شود.
  • مثال: اگر یک کاربر سعی کند به فایلی که دسترسی به آن ندارند دسترسی پیدا کند، SELinux آن را مسدود می‌کند و یک پیام هشدار در لاگ‌ها ثبت می‌شود.
دستور برای بررسی وضعیت SELinux:

برای بررسی وضعیت SELinux و اینکه در کدام حالت قرار دارد، از دستور زیر استفاده می‌شود:

getenforce

این دستور یکی از مقادیر زیر را باز می‌گرداند:

  • Enforcing: سیاست‌های SELinux به‌طور کامل اجرا می‌شوند.
  • Permissive: فقط هشدارها ثبت می‌شوند.
  • Disabled: SELinux غیرفعال است.

2. حالت Permissive: بررسی نحوه ثبت هشدارها بدون اعمال محدودیت

در حالت Permissive، SELinux سیاست‌های خود را اجرا نمی‌کند، اما همچنان برای تمام عملیات‌هایی که مغایر با سیاست‌ها هستند، هشدارهایی در لاگ‌ها ثبت می‌کند. این حالت بیشتر برای عیب‌یابی و تحلیل نحوه اجرای سیاست‌های SELinux استفاده می‌شود، زیرا تغییرات اعمالی را نمی‌بندد و فقط به ثبت وقایع می‌پردازد.

  • عملکرد: زمانی که SELinux در حالت Permissive است، همه دسترسی‌های غیرمجاز ثبت می‌شوند اما هیچ‌گونه محدودیتی اعمال نمی‌شود. به عبارت دیگر، این حالت به مدیر سیستم این امکان را می‌دهد که بررسی کند چه اتفاقاتی می‌تواند در حالت Enforcing رخ دهد، بدون اینکه عملیاتی مسدود شود.
  • مثال: زمانی که یک برنامه سعی می‌کند به یک فایل غیرمجاز دسترسی پیدا کند، SELinux آن را مسدود نمی‌کند، بلکه یک هشدار به لاگ‌ها ارسال می‌کند.
دستور برای تغییر به حالت Permissive:

برای تغییر وضعیت SELinux به حالت Permissive، از دستور زیر استفاده می‌شود:

sudo setenforce 0

برای بازگشت به حالت Enforcing، دستور زیر را وارد می‌کنیم:

sudo setenforce 1

3. حالت Disabled: غیرفعال کردن SELinux و چگونگی آن

حالت Disabled به این معناست که SELinux به‌طور کامل غیرفعال است و هیچ‌گونه محدودیتی برای دسترسی‌ها و عملیات‌ها اعمال نمی‌شود. در این حالت، سیستم به‌طور کامل از سیاست‌های SELinux بی‌بهره است و به عبارت دیگر امنیت سیستم تنها به وسیله سایر ابزارها و سیاست‌ها تأمین می‌شود.

  • عملکرد: وقتی SELinux در حالت Disabled قرار دارد، تمام سیاست‌ها و محدودیت‌هایی که SELinux ایجاد می‌کند، به‌طور کامل غیرفعال می‌شوند و هیچ‌گونه نظارتی از سوی SELinux بر سیستم اعمال نمی‌شود. این حالت برای محیط‌هایی مناسب است که نیاز به امنیت SELinux ندارند یا موقتاً به دلایلی باید غیرفعال شود.
  • مثال: زمانی که SELinux در حالت Disabled باشد، هیچ‌گونه خطای SELinux در صورتی که یک کاربر یا برنامه به منابع غیرمجاز دسترسی پیدا کند، ثبت نمی‌شود.
دستور برای غیرفعال کردن SELinux:

برای غیرفعال کردن SELinux به‌طور دائم، باید فایل پیکربندی /etc/selinux/config ویرایش شود.

sudo nano /etc/selinux/config

سپس مقدار SELINUX را به disabled تغییر دهید:

SELINUX=disabled

پس از اعمال این تغییر، نیاز به ریبوت سیستم است تا تغییرات اعمال شود.


جمع‌بندی

سه حالت اصلی SELinux عبارتند از Enforcing، Permissive و Disabled که هرکدام رفتار متفاوتی در برابر اعمال سیاست‌های امنیتی دارند. حالت Enforcing محدودیت‌ها را اعمال کرده و مجازات‌ها را به اجرا می‌گذارد، حالت Permissive فقط هشدارهایی برای نقض سیاست‌ها ثبت می‌کند و حالت Disabled SELinux را غیرفعال کرده و هیچ‌گونه محدودیتی اعمال نمی‌شود. استفاده از هرکدام از این حالت‌ها بستگی به نیاز و محیط سیستم دارد، و باید به‌طور مناسب انتخاب شود.[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. Security Labels و Types”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”مفهوم Security Labels در SELinux” subtitle=”توضیحات کامل”]در SELinux، برچسب‌های امنیتی یا Security Labels نقش اساسی در اجرای سیاست‌های امنیتی ایفا می‌کنند. این برچسب‌ها به هر شیء (اعم از فایل‌ها، پورت‌ها، پروسه‌ها و غیره) در سیستم اعمال می‌شوند و اطلاعات امنیتی مورد نیاز برای تعیین اجازه‌های دسترسی را ذخیره می‌کنند. این برچسب‌ها به SELinux کمک می‌کنند تا تعیین کند کدام فرآیندها مجاز به دسترسی به چه منابعی هستند و تحت چه شرایطی می‌توانند عملیات خاصی را انجام دهند.

Security Labels به‌طور کلی از چندین بخش مختلف تشکیل می‌شوند که در زیر به آن‌ها اشاره می‌شود:


اجزای برچسب‌های امنیتی در SELinux

هر Security Label از چندین بخش تشکیل می‌شود که در مجموع برای هر شیء اطلاعاتی درباره نحوه تعامل آن با دیگر اجزاء سیستم فراهم می‌آورد. این اجزاء عبارتند از:

  1. User: این بخش نمایانگر نام کاربری است که شیء مربوط به آن است. به عبارت دیگر، تعیین می‌کند که شیء به کدام کاربر مربوط می‌شود.
  2. Role: این بخش نقش مربوط به شیء را مشخص می‌کند. نقش‌ها در SELinux برای تعیین سطوح مختلف دسترسی به منابع استفاده می‌شوند. نقش‌ها می‌توانند محدودیت‌هایی برای دسترسی به منابع سیستم ایجاد کنند.
  3. Type: این بخش نوع شیء را مشخص می‌کند. Type Enforcement (TE) در SELinux به‌طور خاص بر اساس این بخش عمل می‌کند تا دسترسی‌ها را محدود کند. نوع‌ها تعیین می‌کنند که یک شیء خاص چه نوع عملیاتی می‌تواند انجام دهد.
  4. Level (Optional): در برخی از سیاست‌ها مانند Multi-Level Security (MLS)، این بخش سطح امنیتی شیء را مشخص می‌کند. این سطح‌ها نشان‌دهنده اولویت‌های امنیتی هستند که می‌توانند بر اساس سیاست‌های مربوط به دسترسی و امنیت سیستم تعیین شوند.

این چهار بخش با هم ترکیب می‌شوند تا یک Security Label کامل برای هر شیء ایجاد کنند که SELinux از آن برای اعمال محدودیت‌های دسترسی استفاده می‌کند.


ساختار Security Label

یک Security Label معمولاً به‌صورت یک رشته متنی با فرمت زیر نشان داده می‌شود:

user:role:type:level

برای مثال، برچسب امنیتی یک فایل ممکن است به این صورت باشد:

system_u:object_r:file_t:s0

در اینجا:

  • system_u: نمایانگر کاربری است که فایل به آن تعلق دارد.
  • object_r: نقش مربوط به شیء.
  • file_t: نوع شیء که در اینجا یک فایل است.
  • s0: سطح امنیتی مربوط به شیء.

نحوه اعمال برچسب‌های امنیتی در SELinux

برچسب‌های امنیتی به‌طور خودکار توسط SELinux به منابع مختلف سیستم اعمال می‌شوند. برای تغییر یا مشاهده برچسب‌های امنیتی، می‌توان از دستورهای مختلفی استفاده کرد. یکی از مهم‌ترین ابزارها برای این کار، دستور ls -Z است که برچسب‌های امنیتی فایل‌ها و دایرکتوری‌ها را نشان می‌دهد.

مثال دستور برای مشاهده برچسب‌های امنیتی:
ls -Z /path/to/file

این دستور به‌طور دقیق برچسب امنیتی مربوط به فایل‌ها و دایرکتوری‌ها را نمایش می‌دهد.


تغییر برچسب‌های امنیتی

گاهی ممکن است نیاز به تغییر برچسب‌های امنیتی برای فایل‌ها یا منابع خاصی باشد. برای این کار از ابزار chcon استفاده می‌شود که امکان تغییر برچسب امنیتی یک شیء را فراهم می‌کند.

مثال دستور برای تغییر برچسب امنیتی:
sudo chcon -t file_t /path/to/file

در این مثال، برچسب امنیتی فایل به file_t تغییر می‌کند.


جمع‌بندی

Security Labels در SELinux به‌عنوان یکی از اجزای اصلی سیستم امنیتی، برای کنترل دسترسی به منابع و تعیین سطح امنیتی آن‌ها به‌کار می‌روند. این برچسب‌ها شامل بخش‌های مختلفی هستند که شامل نام کاربری، نقش، نوع و سطح امنیتی می‌شود. هر شیء سیستم یک Security Label منحصر به‌فرد دارد که به SELinux این امکان را می‌دهد تا سیاست‌های امنیتی را به‌طور دقیق اعمال کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”انواع Labels و نحوه استفاده از آن‌ها برای طبقه‌بندی اشیاء” subtitle=”توضیحات کامل”]Labels در SELinux، به عنوان ابزار اصلی برای کنترل دسترسی و امنیت منابع سیستم عمل می‌کنند. این Labels به هر شیء، اعم از فایل‌ها، فرآیندها، پورت‌ها و دیگر منابع سیستم، اختصاص می‌یابند و از آن‌ها برای اعمال سیاست‌های امنیتی استفاده می‌شود. این Labels از چند بخش مختلف تشکیل شده‌اند که به SELinux کمک می‌کنند تا دسترسی‌ها و تعاملات مختلف بین فرآیندها و منابع را مدیریت کند.

Labels در SELinux به طور کلی در قالب‌های مختلف برای اشیاء مختلف مانند فایل‌ها، دایرکتوری‌ها، فرآیندها، پورت‌ها و حتی دستگاه‌ها اعمال می‌شوند. در این بخش، به بررسی انواع Labels و نحوه استفاده از آن‌ها برای طبقه‌بندی اشیاء خواهیم پرداخت.


اجزای Labels

هر Label در SELinux از چندین بخش تشکیل می‌شود که اطلاعاتی در مورد شیء خاص فراهم می‌آورد. این بخش‌ها شامل موارد زیر هستند:

  1. User: این بخش نمایانگر نام کاربری است که شیء به آن تعلق دارد.
  2. Role: این بخش نقش (Role) شیء را مشخص می‌کند. نقش‌ها به SELinux کمک می‌کنند تا سطوح مختلف دسترسی را در سیستم تعریف کند.
  3. Type: این بخش نوع (Type) شیء را مشخص می‌کند. نوع‌ها برای اعمال Type Enforcement (TE) در SELinux استفاده می‌شوند و تعیین می‌کنند که یک شیء چه دسترسی‌هایی به دیگر اشیاء در سیستم دارد.
  4. Level: این بخش فقط در سیاست‌های Multi-Level Security (MLS) کاربرد دارد و برای تعیین سطح امنیتی شیء استفاده می‌شود.

این اجزا با هم ترکیب می‌شوند تا یک Label کامل برای هر شیء ایجاد کنند.


انواع Labels در SELinux

Labels به طور کلی در سه دسته مختلف برای اشیاء مختلف سیستم تقسیم می‌شوند:

  1. File Labels: برای فایل‌ها و دایرکتوری‌ها، SELinux از Labels خاصی برای کنترل دسترسی استفاده می‌کند. در این Labels، نوع شیء (file_t، dir_t و …) از اهمیت بالایی برخوردار است.مثال:
    • system_u:object_r:file_t:s0

    در این مثال:

    • file_t: نوع شیء که نشان‌دهنده این است که این شیء یک فایل است.
    • system_u: کاربری که به فایل تعلق دارد.
    • object_r: نقش شیء که در اینجا برای فایل‌ها، این نقش معمولاً object_r است.
    • s0: سطح امنیتی شیء.
  2. Process Labels: برای فرآیندها، SELinux از Labels مختلفی استفاده می‌کند. این Labels برای تعیین اینکه یک فرآیند به چه منابعی می‌تواند دسترسی داشته باشد، استفاده می‌شود.مثال:
    • system_u:role_r:sysadm_t:s0

    در این مثال:

    • sysadm_t: نوع شیء که نشان‌دهنده یک فرآیند با دسترسی‌های خاص است.
    • role_r: نقش فرآیند.
    • system_u: کاربری که به فرآیند تعلق دارد.
    • s0: سطح امنیتی فرآیند.
  3. Port Labels: SELinux از Labels برای پورت‌ها استفاده می‌کند تا دسترسی‌های شبکه‌ای را محدود کند. هر پورت شبکه‌ای یک Label خاص خواهد داشت.مثال:
    • system_u:object_r:port_t:s0

    در اینجا:

    • port_t: نوع شیء که نشان‌دهنده یک پورت شبکه است.
    • s0: سطح امنیتی پورت.
  4. Device Labels: SELinux همچنین برای دستگاه‌ها (devices) از Labels استفاده می‌کند. این Labels برای محدود کردن دسترسی به دستگاه‌های خاص در سیستم طراحی شده‌اند.مثال:
    • system_u:object_r:device_t:s0

    در اینجا:

    • device_t: نوع شیء که نشان‌دهنده یک دستگاه است.
    • s0: سطح امنیتی دستگاه.

نحوه استفاده از Labels برای طبقه‌بندی اشیاء

در SELinux، از Labels برای طبقه‌بندی اشیاء مختلف استفاده می‌شود تا از این طریق دسترسی‌ها به‌صورت دقیق و موثر کنترل شوند. استفاده از Labels به این صورت است که SELinux بر اساس نوع (Type) و نقش (Role) شیء تصمیم می‌گیرد که کدام فرآیندها مجاز به دسترسی به آن شیء هستند. در اینجا چند نمونه از نحوه استفاده از Labels برای طبقه‌بندی اشیاء آورده شده است:

  1. طبقه‌بندی فایل‌ها: فایل‌ها بر اساس نوع خود برچسب‌گذاری می‌شوند. به عنوان مثال، فایل‌هایی که برای برنامه‌ها و پیکربندی‌ها استفاده می‌شوند، معمولاً دارای برچسب‌هایی مانند etc_t یا bin_t خواهند بود. این Labels مشخص می‌کنند که فقط فرآیندهایی با نوع خاص می‌توانند به این فایل‌ها دسترسی پیدا کنند.مثال:
    • sudo باید به فایل‌هایی با نوع etc_t دسترسی داشته باشد، اما ممکن است هیچ فرآیند دیگری نتواند به آن دسترسی پیدا کند.
  2. طبقه‌بندی فرآیندها: فرآیندهای مختلف در سیستم به برچسب‌های خاصی نسبت داده می‌شوند تا بتوانند تنها به منابع خاص دسترسی پیدا کنند. برای مثال، فرآیندهای مرتبط با وب‌سرورها ممکن است به Labelهایی مانند httpd_t تعلق داشته باشند.مثال:
    • httpd_t: این Label به فرآیندهایی مانند Apache وب‌سرور تعلق دارد و تنها به فایل‌های خاص که برچسب httpd_sys_content_t دارند دسترسی پیدا می‌کند.
  3. طبقه‌بندی پورت‌ها: هر پورت شبکه‌ای که در سیستم باز است، دارای یک Label خاص است که دسترسی به آن پورت‌ها را مدیریت می‌کند. به عنوان مثال، پورت‌های HTTP (پورت 80 و 443) معمولاً دارای Labels خاصی هستند که به آن‌ها اجازه دسترسی محدود به فرآیندهای خاص می‌دهند.مثال:
    • پورت‌های http_port_t تنها می‌توانند توسط فرآیندهایی با Label httpd_t استفاده شوند.

جمع‌بندی

Labels در SELinux ابزاری حیاتی برای طبقه‌بندی و مدیریت دسترسی‌ها به منابع مختلف سیستم هستند. این Labels شامل اطلاعاتی در مورد نوع، نقش، کاربر و سطح امنیتی یک شیء می‌باشند که برای اعمال دقیق سیاست‌های امنیتی استفاده می‌شوند. انواع مختلف Labels شامل File Labels، Process Labels، Port Labels و Device Labels می‌شوند. هر کدام از این Labels نقش مهمی در محدود کردن دسترسی‌ها و محافظت از منابع سیستم دارند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی روابط بین Labels و Types در سیاست‌ها” subtitle=”توضیحات کامل”]Labels و Types در SELinux ابزارهای اصلی برای اعمال سیاست‌های امنیتی و مدیریت دسترسی به منابع مختلف سیستم هستند. این دو عنصر به‌طور مستقیم با یکدیگر در ارتباط هستند و با استفاده از آن‌ها می‌توان قوانین امنیتی پیچیده‌ای را برای سیستم اعمال کرد. در این بخش، به بررسی روابط بین Labels و Types در سیاست‌ها و نحوه تأثیرگذاری آن‌ها بر امنیت سیستم پرداخته خواهد شد.


مفهوم Label و Type در SELinux

Label در SELinux به عنوان یک برچسب امنیتی به هر شیء (اعم از فایل‌ها، فرآیندها، پورت‌ها و غیره) اختصاص داده می‌شود. هر Label در SELinux به طور معمول از چهار بخش اصلی تشکیل شده است:

  1. User: مشخص‌کننده کاربر (User) که به شیء مربوط می‌شود.
  2. Role: نقش (Role) شیء را مشخص می‌کند.
  3. Type: نوع (Type) شیء است که نقش اساسی در تعیین سطح دسترسی‌ها دارد.
  4. Level: این بخش فقط در سیاست‌های Multi-Level Security (MLS) کاربرد دارد و به سطح امنیتی شیء اشاره می‌کند.

Type در واقع بخش حیاتی Label است که نقش مهمی در تعیین دسترسی‌ها دارد. به عبارت دیگر، Type (که در واقع نوع شیء است) نشان‌دهنده نوع و دسته‌بندی منابع مختلف در سیستم است که طبق آن می‌توان سطح دسترسی‌ها و قوانین امنیتی را تعیین کرد.


روابط بین Labels و Types

در SELinux، Types و Labels در سیاست‌های امنیتی به‌طور هم‌زمان برای کنترل دسترسی به اشیاء سیستم مورد استفاده قرار می‌گیرند. نوع (Type) در واقع بخشی از Label است که برای اعمال Type Enforcement (TE) در SELinux استفاده می‌شود. Type Enforcement اصلی‌ترین سیاست SELinux برای کنترل دسترسی است که به SELinux اجازه می‌دهد که تصمیم بگیرد کدام فرآیندها می‌توانند به کدام منابع دسترسی داشته باشند. این تصمیم‌ها کاملاً بر اساس Type منابع و فرآیندها گرفته می‌شوند.

برای درک بهتر، می‌توان گفت که Labels به اشیاء سیستم اختصاص داده می‌شوند تا مشخص کنند آن‌ها به چه دسته‌ای تعلق دارند (مثل فایل‌ها، فرآیندها، پورت‌ها و غیره). Types به عنوان زیرمجموعه‌ای از Labels، نشان‌دهنده نوع دقیق شیء و نقش آن در سیاست‌های امنیتی هستند.


نحوه اعمال روابط بین Labels و Types در سیاست‌ها

در سیاست‌های SELinux، هر شیء سیستم از طریق Label خود شناسایی می‌شود. بر اساس نوع (Type) این Label، SELinux تصمیم می‌گیرد که کدام فرآیندها مجاز به تعامل با این شیء هستند. به این ترتیب، Type Enforcement از نوع‌ها برای ایجاد سیاست‌های دقیق امنیتی استفاده می‌کند.

  1. تعریف دسترسی‌ها بر اساس Type: نوع (Type) هر شیء به طور مستقیم دسترسی‌هایی که آن شیء می‌تواند به آن‌ها دست یابد را مشخص می‌کند. برای مثال، فایل‌ها با نوع httpd_sys_content_t تنها به فرآیندهایی با نوع httpd_t دسترسی خواهند داشت. بنابراین، SELinux به‌طور خودکار دسترسی‌ها را بر اساس این روابط اعمال می‌کند.
  2. Type Enforcing: سیاست‌های Type Enforcement در SELinux به بررسی نوع شیء و فرآیند می‌پردازند. به‌طور مثال، اگر یک فرآیند با نوع httpd_t سعی کند به یک فایل با نوع var_t دسترسی پیدا کند، و اگر در سیاست SELinux مجاز نباشد، این دسترسی رد خواهد شد.
  3. Policy File: در فایل‌های سیاست SELinux، به‌طور خاص Type‌ها با یکدیگر ارتباط دارند تا تعیین کنند که یک فرآیند می‌تواند به یک شیء خاص دسترسی پیدا کند یا خیر. برای مثال، در سیاست‌های SELinux، ممکن است قانونی تعریف شود که می‌گوید فرآیندهای httpd_t فقط می‌توانند به فایل‌های httpd_sys_content_t دسترسی داشته باشند. در این صورت، SELinux از Typeها برای ارزیابی دسترسی‌ها استفاده می‌کند.
  4. Role-based Access Control (RBAC): در SELinux، Roleهای مختلفی به کاربران و فرآیندها اختصاص می‌یابد که از نظر دسترسی‌ها با یکدیگر متفاوت هستند. این Roles می‌توانند با Types ترکیب شوند تا دسترسی‌های پیچیده‌تری ایجاد کنند. برای مثال، یک کاربر با Role sysadm_r می‌تواند به انواع خاصی از فایل‌ها با Type sysadm_t دسترسی پیدا کند.

مثال‌های کاربردی از روابط بین Labels و Types

  1. فایل‌ها: یک فایل خاص ممکن است Label خاصی به نام etc_t داشته باشد که نشان‌دهنده این است که این فایل باید فقط توسط فرآیندهایی با نوع etc_t قابل دسترسی باشد.مثال:
    • فایل: /etc/httpd.conf
    • Label: system_u:object_r:etc_t:s0

    در اینجا، نوع etc_t نشان‌دهنده این است که فایل httpd.conf تنها می‌تواند توسط فرآیندهایی با نوع httpd_t یا مشابه آن دسترسی پیدا کند.

  2. فرآیندها: یک فرآیند خاص مانند وب‌سرور Apache ممکن است با Label httpd_t مشخص شود که به آن اجازه می‌دهد تنها به فایل‌هایی با نوع httpd_sys_content_t دسترسی داشته باشد.مثال:
    • فرآیند: httpd
    • Label: system_u:role_r:httpd_t:s0

    در اینجا، نوع httpd_t مشخص می‌کند که این فرآیند می‌تواند فقط به فایل‌هایی با نوع httpd_sys_content_t دسترسی داشته باشد.

  3. پورت‌ها: در SELinux، پورت‌های شبکه مانند پورت‌های HTTP نیز با Labels خاصی طبقه‌بندی می‌شوند تا دسترسی به آن‌ها محدود شود. پورت‌هایی که برای پروتکل‌های خاصی باز هستند، به یک نوع مشخص نسبت داده می‌شوند.مثال:
    • پورت: 80
    • Label: system_u:object_r:http_port_t:s0

    در اینجا، نوع http_port_t نشان‌دهنده این است که فقط فرآیندهایی با نوع httpd_t می‌توانند از این پورت استفاده کنند.


جمع‌بندی

در SELinux، Labels و Types ارتباط نزدیکی با یکدیگر دارند و از طریق آن‌ها دسترسی‌ها به منابع مختلف سیستم کنترل می‌شود. Types بخشی از Labels هستند که مشخص می‌کنند یک شیء چه نوع دسترسی‌هایی دارد و چه فرآیندهایی می‌توانند به آن دسترسی داشته باشند. از طریق سیاست‌های Type Enforcement (TE)، SELinux دسترسی‌ها را به دقت مدیریت می‌کند و از منابع سیستم محافظت می‌نماید. در نهایت، SELinux به‌وسیله این روابط و سیاست‌ها، یک لایه امنیتی قوی را برای سیستم‌های لینوکسی ایجاد می‌کند.

 [/cdb_course_lesson][cdb_course_lesson title=”فصل 6. تخصیص سیاست‌ها در SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تخصیص سیاست‌های پیش‌فرض برای سرویس‌ها (مثل Apache، Nginx)” subtitle=”توضیحات کامل”]در SELinux، هر سرویس یا فرآیند سیستم، بر اساس نوع خود، دارای سیاست‌های امنیتی خاصی است. این سیاست‌ها از طریق سیستم Type Enforcement (TE) به این سرویس‌ها تخصیص داده می‌شود. برای هر سرویس، SELinux سیاست‌های پیش‌فرضی را فراهم می‌کند که شامل دسترسی‌ها، محدودیت‌ها و رفتارهای خاص آن سرویس در تعامل با سایر اجزاء سیستم است. این سیاست‌ها برای ایمن‌سازی سرویس‌ها در مقابل دسترسی‌های غیرمجاز و حملات مختلف طراحی شده‌اند.

در این بخش، نحوه تخصیص سیاست‌های پیش‌فرض برای سرویس‌های معروف مانند Apache و Nginx توضیح داده خواهد شد.


سیاست‌های پیش‌فرض برای سرویس Apache

Apache به عنوان یک وب‌سرور معروف و پرکاربرد، نیاز به سیاست‌های امنیتی خاصی دارد تا از دسترسی‌های غیرمجاز به فایل‌ها و منابع سیستم جلوگیری شود. در SELinux، سیاست‌های پیش‌فرض Apache معمولاً بر اساس نوع httpd_t اعمال می‌شود.

  1. نوع‌های پیش‌فرض برای Apache:
    • httpd_t: این نوع برای فرآیندهای وب‌سرور Apache تعریف می‌شود. SELinux به فرآیندهای مربوط به Apache نوع httpd_t را اختصاص می‌دهد تا از آن برای تعیین دسترسی‌ها استفاده کند.
    • httpd_sys_content_t: این نوع برای فایل‌های محتوای وب (مثل HTML، CSS، و فایل‌های پیکربندی وب‌سرور) استفاده می‌شود. فایل‌های با این نوع تنها توسط فرآیندهای httpd_t قابل دسترسی هستند.
    • httpd_log_t: برای فایل‌های لاگ Apache که توسط سرویس وب‌سرور به‌روزرسانی می‌شود.
  2. نحوه تخصیص سیاست‌ها: سیاست‌های SELinux برای Apache به‌طور خودکار به‌هنگام نصب و پیکربندی Apache اعمال می‌شوند، اما در صورت نیاز، می‌توان این سیاست‌ها را برای نیازهای خاص تنظیم کرد.به‌عنوان مثال، اگر نیاز به تغییر مجوزهای دسترسی به یک دایرکتوری خاص برای Apache دارید، می‌توانید از دستورات زیر برای تخصیص نوع مناسب به دایرکتوری‌ها استفاده کنید:
    chcon -R -t httpd_sys_content_t /var/www/html
    

    این دستور باعث می‌شود که دایرکتوری /var/www/html نوع httpd_sys_content_t را دریافت کند و Apache می‌تواند به این فایل‌ها دسترسی پیدا کند.

  3. حالت‌های SELinux برای Apache:
    • در حالت Enforcing، اگر Apache بخواهد به منابعی دسترسی پیدا کند که برای آن مجاز نیست، SELinux دسترسی را مسدود می‌کند و گزارشی در لاگ‌ها ثبت می‌شود.
    • در حالت Permissive، SELinux به‌طور موقت از مسدود کردن دسترسی‌ها خودداری می‌کند، اما هشدارهای مربوط به دسترسی‌های غیرمجاز را در لاگ‌ها ثبت می‌کند.
    • در حالت Disabled، SELinux غیرفعال شده و هیچ‌گونه سیاست امنیتی برای Apache یا سایر فرآیندها اعمال نمی‌شود.

سیاست‌های پیش‌فرض برای سرویس Nginx

همانند Apache، Nginx نیز به‌عنوان یک وب‌سرور، سیاست‌های امنیتی خاص خود را در SELinux دارد. این سیاست‌ها برای جلوگیری از دسترسی غیرمجاز به منابع سیستم و فایل‌ها ایجاد شده‌اند.

  1. نوع‌های پیش‌فرض برای Nginx:
    • nginx_t: این نوع برای فرآیندهای Nginx اختصاص داده می‌شود.
    • nginx_var_run_t: این نوع به دایرکتوری‌های مورد استفاده توسط Nginx برای ذخیره فایل‌های runtime (مانند PID) تعلق می‌گیرد.
    • nginx_log_t: این نوع برای فایل‌های لاگ Nginx اختصاص داده می‌شود.
  2. نحوه تخصیص سیاست‌ها: همانند Apache، سیاست‌های SELinux برای Nginx نیز به‌طور خودکار اعمال می‌شوند، اما ممکن است در برخی موارد نیاز به تنظیمات خاصی باشد.برای مثال، اگر بخواهید یک دایرکتوری را به‌طور خاص برای Nginx تنظیم کنید تا به آن دسترسی داشته باشد، می‌توانید از دستورات زیر استفاده کنید:
    chcon -R -t nginx_var_run_t /var/run/nginx
    

    این دستور باعث می‌شود که دایرکتوری /var/run/nginx نوع nginx_var_run_t را دریافت کند و Nginx می‌تواند به آن دسترسی پیدا کند.

  3. حالت‌های SELinux برای Nginx:
    • در حالت Enforcing، SELinux تمام دسترسی‌های غیرمجاز Nginx را مسدود می‌کند و هشدارهایی در لاگ‌ها ثبت می‌شود.
    • در حالت Permissive، SELinux هشدارهایی برای دسترسی‌های غیرمجاز Nginx ثبت می‌کند، ولی دسترسی‌ها مسدود نمی‌شود.
    • در حالت Disabled، SELinux هیچ‌گونه سیاست امنیتی برای Nginx اعمال نمی‌کند.

نحوه تغییر سیاست‌های پیش‌فرض برای سرویس‌ها

گاهی اوقات نیاز است که سیاست‌های پیش‌فرض SELinux برای سرویس‌ها به دلایلی مانند تغییرات در پیکربندی، نیاز به دسترسی‌های خاص یا رفع خطاها تغییر کنند. در این‌صورت، می‌توانید با استفاده از دستورات خاص SELinux، سیاست‌ها را تغییر دهید.

  1. بازنگری در سیاست‌های SELinux: برای مثال، اگر می‌خواهید سیاست‌های SELinux برای Apache را اصلاح کنید تا دسترسی بیشتری به دایرکتوری خاصی داشته باشد، از دستورات زیر استفاده کنید:
    semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    restorecon -R -v /var/www/html
    

    این دستورات به SELinux می‌گویند که دایرکتوری /var/www/html و تمامی فایل‌های داخل آن باید به‌عنوان محتوای وب با نوع httpd_sys_content_t شناخته شوند.

  2. تنظیم مجوزها برای پورت‌های خاص: در برخی موارد ممکن است بخواهید SELinux را برای پورت‌های خاصی مانند پورت‌های وب‌سرور (80 و 443) تنظیم کنید:
    semanage port -a -t http_port_t -p tcp 8080
    

    این دستور به SELinux می‌گوید که پورت 8080 را به‌عنوان پورت HTTP (پورت وب‌سرور) با نوع http_port_t شناسایی کند.


جمع‌بندی

در SELinux، سیاست‌های پیش‌فرض برای سرویس‌هایی مانند Apache و Nginx به‌طور خودکار تنظیم می‌شوند، اما می‌توان آن‌ها را بسته به نیازهای خاص تغییر داد. نوع‌های پیش‌فرض برای این سرویس‌ها مانند httpd_t برای Apache و nginx_t برای Nginx به‌منظور اعمال محدودیت‌های امنیتی به‌کار می‌روند. این سیاست‌ها به‌صورت دقیق تعیین می‌کنند که چه فرآیندهایی می‌توانند به کدام منابع دسترسی پیدا کنند و در صورت نیاز، این سیاست‌ها را می‌توان با استفاده از دستورات خاص SELinux تنظیم و تغییر داد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه تغییر سیاست‌ها برای سرویس‌های خاص و برنامه‌های شخص ثالث” subtitle=”توضیحات کامل”]در SELinux، تغییر سیاست‌ها برای سرویس‌های خاص و برنامه‌های شخص ثالث به‌منظور تنظیم مجوزهای دسترسی و ایمن‌سازی سرویس‌ها ضروری است. اگر برنامه‌ای که به‌طور پیش‌فرض سیاست‌های SELinux را ندارد یا نیاز به تغییرات خاص دارد، باید سیاست‌های امنیتی را برای آن تنظیم کرد.

در این بخش، نحوه تغییر سیاست‌ها برای سرویس‌های خاص و برنامه‌های شخص ثالث در SELinux به‌طور دقیق توضیح داده خواهد شد.


مراحل تغییر سیاست‌ها در SELinux

برای تغییر سیاست‌های SELinux برای سرویس‌ها و برنامه‌های شخص ثالث، ابتدا باید یک سری مراحل را دنبال کنید که شامل تعیین نوع‌های مناسب، تخصیص سیاست‌های جدید و سپس استفاده از ابزارهای SELinux برای اعمال تغییرات است.

  1. شناسایی نوع‌ها و لیبل‌ها (Labels) برای هر برنامه یا سرویس خاص، ابتدا باید نوع‌های SELinux مربوطه را شناسایی کنید. این نوع‌ها می‌توانند توسط سیستم عامل یا مدیر SELinux به‌طور خودکار اختصاص داده شوند. برای شناسایی نوع‌های اختصاص داده‌شده به یک فرآیند یا فایل، از دستور ps و ls می‌توانید استفاده کنید.برای شناسایی نوع یک فرآیند خاص، مانند سرویس nginx، از دستور زیر استفاده کنید:
    ps -eZ | grep nginx
    

    این دستور اطلاعات مربوط به فرآیندهای nginx و نوع SELinux مربوط به آن‌ها را نشان می‌دهد.

  2. تخصیص سیاست‌های جدید در صورتی که سرویس یا برنامه‌ای به نوع خاصی نیاز دارد که به‌طور پیش‌فرض توسط SELinux در نظر گرفته نشده است، باید نوع‌های جدیدی به آن اختصاص دهید. به‌طور مثال، فرض کنید که یک برنامه شخص ثالث نیاز دارد به فایل‌های خاصی دسترسی داشته باشد. در این صورت، باید سیاست‌های مربوط به آن فایل‌ها را تغییر دهید.برای اختصاص یک نوع جدید به یک دایرکتوری یا فایل، از دستور chcon استفاده کنید:
    chcon -R -t custom_program_t /path/to/directory_or_file
    

    در این دستور، نوع custom_program_t به فایل یا دایرکتوری موردنظر اختصاص داده می‌شود.

  3. استفاده از ابزار semanage برای تغییر سیاست‌ها ابزار semanage به‌طور ویژه برای مدیریت سیاست‌های SELinux استفاده می‌شود. با استفاده از این ابزار می‌توانید تغییرات گسترده‌ای در سیاست‌ها ایجاد کنید.برای تخصیص سیاست‌های جدید به پورت‌ها، از دستور semanage به‌صورت زیر استفاده کنید:
    semanage port -a -t http_port_t -p tcp 8080
    

    این دستور به SELinux می‌گوید که پورت 8080 باید به‌عنوان پورت HTTP با نوع http_port_t شناسایی شود.

  4. ایجاد یک سیاست جدید برای برنامه‌های شخص ثالث اگر برنامه‌ای نیاز به سیاست امنیتی جدید دارد که در سیاست‌های پیش‌فرض SELinux موجود نیست، باید یک ماژول جدید SELinux برای آن ایجاد کنید.برای این منظور، باید ابتدا یک فایل ماژول تعریف کنید که حاوی سیاست‌های جدید است. به‌عنوان مثال، برای ایجاد ماژول جدید برای برنامه‌ای خاص، ابتدا یک فایل ماژول تعریف کنید:
    nano custom_program.te
    

    در این فایل می‌توانید سیاست‌های جدید را به‌صورت زیر اضافه کنید:

    policy_module(custom_program, 1.0.0)
    
    type custom_program_t;
    application_exec_t(custom_program_t)
    
    allow custom_program_t self:process { execmem execmod };
    

    در این مثال، سیاست‌های جدید برای برنامه custom_program به نوع custom_program_t اختصاص داده شده است و دسترسی‌های لازم برای اجرای برنامه به‌طور خاص تعریف شده است.

    سپس برای اعمال این ماژول، از دستور زیر استفاده کنید:

    checkmodule -M -m -o custom_program.mod custom_program.te
    semodule_package -o custom_program.pp -m custom_program.mod
    semodule -i custom_program.pp
    

    این دستورات ماژول جدید SELinux را ایجاد کرده و آن را به سیستم اضافه می‌کنند.


تنظیمات ویژه برای برنامه‌های شخص ثالث

گاهی ممکن است نیاز باشد که سیاست‌های SELinux را برای برنامه‌های شخص ثالث به‌طور خاص تنظیم کنید، به‌ویژه اگر برنامه در تعامل با منابع سیستم باشد که تحت سیاست‌های SELinux کنترل می‌شوند. برای این منظور، می‌توانید اقدامات زیر را انجام دهید:

  1. تخصیص دسترسی به فایل‌های خاص اگر برنامه به فایل‌هایی دسترسی نیاز دارد که به‌طور پیش‌فرض در سیاست‌های SELinux اجازه داده نمی‌شود، می‌توانید با استفاده از دستورات زیر نوع‌ها و مجوزهای دسترسی را تغییر دهید:
    chcon -R -t custom_program_data_t /path/to/data
    
  2. تخصیص دسترسی به پورت‌های خاص در صورتی که برنامه شما نیاز به استفاده از پورت‌های خاصی داشته باشد که SELinux آن‌ها را مسدود کرده است، می‌توانید با استفاده از دستور semanage پورت‌های جدید را برای برنامه اختصاص دهید:
    semanage port -a -t custom_program_port_t -p tcp 9000
    
  3. بازبینی و اصلاح خطاهای SELinux اگر پس از اعمال سیاست‌ها به سرویس یا برنامه شخص ثالث با خطاهای SELinux مواجه شدید، می‌توانید از دستور ausearch برای بررسی خطاهای SELinux استفاده کنید:
    ausearch -m avc -ts recent
    

    این دستور گزارشی از خطاهای SELinux را که به‌تازگی ثبت شده‌اند نمایش می‌دهد و به شما کمک می‌کند تا مشکلات امنیتی و محدودیت‌های دسترسی را شناسایی کنید.


جمع‌بندی

تغییر سیاست‌ها در SELinux برای سرویس‌ها و برنامه‌های شخص ثالث ضروری است تا از دسترسی غیرمجاز به منابع سیستم جلوگیری شود. برای تغییر سیاست‌ها، می‌توان از ابزارهایی مانند chcon, semanage و checkmodule استفاده کرد. این ابزارها به شما این امکان را می‌دهند که نوع‌ها، پورت‌ها، فایل‌ها و حتی ماژول‌های جدید SELinux را برای برنامه‌های خاص ایجاد کنید و تنظیمات خاصی را برای سرویس‌ها و برنامه‌ها اعمال نمایید. به‌ویژه در مواقعی که سرویس یا برنامه شخص ثالث به منابع خاصی نیاز دارد که توسط سیاست‌های پیش‌فرض SELinux محدود شده‌اند، این تنظیمات ضروری هستند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از ابزارهای semanage و seinfo برای مدیریت سیاست‌ها” subtitle=”توضیحات کامل”]در SELinux، ابزارهای مختلفی برای مدیریت و پیکربندی سیاست‌ها وجود دارند. دو ابزار اصلی که برای تغییر و مدیریت سیاست‌ها در SELinux استفاده می‌شوند، semanage و seinfo هستند. در این بخش به معرفی این دو ابزار و نحوه استفاده از آن‌ها برای مدیریت سیاست‌ها خواهیم پرداخت.


1. ابزار semanage

ابزار semanage یکی از ابزارهای مهم برای مدیریت تنظیمات و سیاست‌های SELinux است. این ابزار به شما این امکان را می‌دهد که پیکربندی‌هایی مانند تغییر سیاست‌های پورت‌ها، فایل‌ها، دایرکتوری‌ها، و سطوح دسترسی SELinux را به‌راحتی مدیریت کنید. semanage به‌ویژه برای مدیریت تنظیمات تغییرپذیر SELinux که به‌صورت پیش‌فرض در سیستم قرار دارند، مفید است.

ویژگی‌ها و استفاده‌های مهم semanage

  • مدیریت پورت‌ها برای مدیریت پورت‌ها و تخصیص آن‌ها به نوع خاص، از دستور semanage port استفاده می‌شود. این دستور به‌ویژه زمانی مفید است که شما بخواهید پورت جدیدی را به سرویس خاصی اختصاص دهید.برای افزودن یک پورت جدید به نوع خاص:
    semanage port -a -t http_port_t -p tcp 8080
    

    این دستور به SELinux می‌گوید که پورت 8080 باید به نوع http_port_t اختصاص داده شود.

  • مدیریت دایرکتوری‌ها و فایل‌ها برای تغییر نوع SELinux برای دایرکتوری‌ها یا فایل‌ها، از دستور semanage fcontext استفاده می‌شود.به‌عنوان مثال، برای اختصاص یک نوع جدید به دایرکتوری خاص:
    semanage fcontext -a -t custom_program_t "/path/to/directory(/.*)?"
    

    این دستور نوع custom_program_t را به دایرکتوری /path/to/directory و تمام زیرشاخه‌های آن اختصاص می‌دهد.

  • مدیریت سطوح امنیتی (SELinux Security Levels) semanage همچنین امکان تنظیم سطوح امنیتی (security levels) را برای سیستم فراهم می‌کند.برای تغییر سطح امنیتی یک فایل یا دایرکتوری خاص، از دستور semanage به‌صورت زیر استفاده کنید:
    semanage fcontext -m -t custom_type_t "/path/to/file"
    

    این دستور نوع SELinux به‌روز شده برای فایل یا دایرکتوری موردنظر را اعمال می‌کند.

مثال‌های کاربردی از semanage:

  1. افزودن پورت جدید به سرویس‌ها اگر یک پورت خاص به‌عنوان بخشی از سرویس جدید در نظر گرفته شده است، می‌توانید از semanage برای تخصیص آن استفاده کنید:
    semanage port -a -t http_port_t -p tcp 9090
    
  2. مدیریت فایل‌ها و دایرکتوری‌ها برای تغییر سیاست‌های امنیتی دایرکتوری‌ها یا فایل‌ها به‌طور موقت یا دائمی، از دستور زیر استفاده می‌شود:
    semanage fcontext -a -t custom_program_t "/custom_program(/.*)?"
    restorecon -Rv /custom_program
    

    این دستورات نوع custom_program_t را به تمام فایل‌ها و دایرکتوری‌های موجود در مسیر /custom_program اختصاص می‌دهد.


2. ابزار seinfo

ابزار seinfo یک ابزار کاربردی برای نمایش اطلاعات مفید در مورد سیاست‌های SELinux است. با استفاده از seinfo می‌توان اطلاعات دقیقی در مورد سیاست‌های SELinux، اشیاء (objects)، نوع‌ها (types) و سیاست‌های امنیتی موجود در سیستم دریافت کرد. این ابزار به‌ویژه برای افرادی که نیاز به تحلیل دقیق‌تر سیاست‌ها دارند، بسیار مفید است.

ویژگی‌ها و استفاده‌های مهم seinfo

  • مشاهده انواع موجود در سیاست‌ها با استفاده از دستور seinfo -t می‌توانید لیست تمامی انواع (types) تعریف‌شده در سیستم را مشاهده کنید.
    seinfo -t
    

    این دستور تمامی انواع SELinux که در سیستم موجود هستند را نمایش می‌دهد.

  • مشاهده قوانین (rules) در سیاست‌ها دستور seinfo به شما این امکان را می‌دهد که قوانین مختلف SELinux (مانند قانون‌های دسترسی) را مشاهده کنید. به‌عنوان مثال، با دستور زیر می‌توانید لیست تمام سیاست‌های مربوط به دسترسی‌ها را مشاهده کنید:
    seinfo -c
    
  • نمایش نوع‌های مربوط به فایل‌ها و دایرکتوری‌ها برای مشاهده نوع‌های SELinux که به فایل‌ها و دایرکتوری‌ها اختصاص داده شده‌اند، از دستور زیر استفاده کنید:
    seinfo -f
    

    این دستور فهرست تمامی فایل‌ها و دایرکتوری‌ها و نوع‌های SELinux آن‌ها را نشان می‌دهد.

مثال‌های کاربردی از seinfo:

  1. مشاهده لیست انواع SELinux برای مشاهده تمامی انواع SELinux موجود در سیستم، از دستور زیر استفاده کنید:
    seinfo -t
    
  2. مشاهده قوانین دسترسی SELinux برای مشاهده تمامی قوانین دسترسی که برای انواع مختلف تعریف شده‌اند:
    seinfo -c
    
  3. مشاهده سیاست‌های فایل‌ها برای مشاهده انواع SELinux اختصاص داده‌شده به فایل‌ها و دایرکتوری‌ها، از دستور زیر استفاده کنید:
    seinfo -f
    

جمع‌بندی

ابزارهای semanage و seinfo ابزارهای کلیدی برای مدیریت و نظارت بر سیاست‌های SELinux هستند. ابزار semanage به‌ویژه برای اعمال تغییرات در پیکربندی‌های SELinux مانند تغییر پورت‌ها، نوع‌ها و سطوح امنیتی مفید است. از سوی دیگر، ابزار seinfo برای مشاهده و تحلیل اطلاعات مربوط به سیاست‌های SELinux استفاده می‌شود و به شما این امکان را می‌دهد که اطلاعات مفصلی از انواع و قوانین موجود در سیستم را مشاهده کنید. استفاده صحیح از این ابزارها به‌ویژه در محیط‌های پیچیده با نیاز به تنظیمات خاص می‌تواند به مدیریت بهتر و ایمن‌تر سیاست‌های SELinux کمک کند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 7. کنترل دسترسی با MAC (Mandatory Access Control)”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”توضیح در مورد MAC و نقش آن در SELinux” subtitle=”توضیحات کامل”]مفهوم MAC (Mandatory Access Control) و نقش آن در SELinux یکی از اصول اساسی در ارتقای امنیت سیستم است که به طور ویژه در SELinux پیاده‌سازی شده است. این مدل امنیتی مبتنی بر اعمال سیاست‌های دسترسی اجباری است که بدون در نظر گرفتن اختیار کاربر در مورد دسترسی‌ها، اجازه یا جلوگیری از دسترسی به منابع مختلف را کنترل می‌کند.

مفهوم MAC در SELinux

MAC یک مدل امنیتی است که برخلاف DAC (Discretionary Access Control) که در آن کاربر می‌تواند دسترسی به فایل‌ها و منابع را کنترل کند، در MAC دسترسی‌ها بر اساس سیاست‌های از پیش تعریف شده اعمال می‌شود. در SELinux، MAC به عنوان یک لایه امنیتی عمل می‌کند و دسترسی‌ها را تحت قوانین مشخص و با محدودیت‌های شدیدتری کنترل می‌کند.

در SELinux، دسترسی به منابع مختلف سیستم (از جمله فایل‌ها، پورت‌ها و فرآیندها) بر اساس سیاست‌های امنیتی که توسط سیستم‌مدیر تعریف شده‌اند، اعمال می‌شود. به این ترتیب، SELinux می‌تواند حتی در صورت وجود دسترسی‌های بالای کاربر، مانند root، محدودیت‌هایی را برای فرآیندهای مختلف به وجود آورد.

انواع سیاست‌های کنترل دسترسی در SELinux:

  1. Type Enforcement (TE): این سیاست مشخص می‌کند که چه فرآیندهایی می‌توانند به کدام نوع اشیاء دسترسی داشته باشند.
  2. Role-Based Access Control (RBAC): این نوع سیاست، نقش‌هایی را برای کاربران تعریف کرده و تصمیم می‌گیرد که هر نقش چه سطحی از دسترسی را به منابع داشته باشد.
  3. Multi-Level Security (MLS): این مدل امنیتی بیشتر برای شرایطی که نیاز به حفاظت از اطلاعات حساس دارند، استفاده می‌شود و امکان طبقه‌بندی داده‌ها در سطوح مختلف امنیتی را فراهم می‌کند.

نحوه اعمال MAC در SELinux

در SELinux، سیستم دسترسی به منابع با استفاده از security contexts مدیریت می‌شود. هر شیء، مانند فایل‌ها و فرآیندها، دارای یک security context خاص است که به آن نوع، نقش و سطح دسترسی اختصاص می‌دهد.

تغییر سیاست‌های SELinux به صورت کامندی

برای تغییر سیاست‌های پیش‌فرض SELinux و فعال کردن یا غیرفعال کردن کنترل دسترسی اجباری، از دستورات زیر استفاده می‌شود:

  1. برای تغییر وضعیت SELinux (Enforcing, Permissive, Disabled): برای تغییر حالت SELinux به Enforcing یا Permissive، دستور زیر را وارد می‌کنیم:
    sudo setenforce Enforcing
    

    یا برای حالت Permissive:

    sudo setenforce Permissive
    

    فایل پیکربندی این حالت‌ها در مسیر /etc/selinux/config قرار دارد. برای تغییر آن به صورت دائم، می‌توانید فایل config را ویرایش کنید:

    sudo nano /etc/selinux/config
    

    سپس مقدار SELINUX را به enforcing، permissive یا disabled تغییر دهید:

    SELINUX=enforcing
    
  2. تخصیص نقش‌ها به کاربران: برای تخصیص نقش به یک کاربر، از دستور semanage استفاده می‌شود. به طور مثال، برای تغییر نقش یک کاربر به user_r می‌توان از دستور زیر استفاده کرد:
    sudo semanage login -a -s user_r username
    

    در این دستور، username نام کاربری است که نقش به آن اختصاص داده می‌شود.

  3. تخصیص نوع‌ها به فایل‌ها: برای اختصاص نوع به یک فایل، از دستور chcon استفاده می‌شود. به طور مثال، برای اختصاص نوع httpd_sys_content_t به یک فایل خاص:
    sudo chcon -t httpd_sys_content_t /path/to/file
    

    این دستور نوع فایل را به httpd_sys_content_t تغییر می‌دهد که به فایل‌های وب‌سایت مربوط می‌شود.

  4. ایجاد و ویرایش سیاست‌ها با استفاده از ابزار semanage: با استفاده از دستور semanage، می‌توان تنظیمات پیش‌فرض SELinux را برای سرویس‌ها و برنامه‌ها تغییر داد. به طور مثال، برای تغییر سیاست‌های پیش‌فرض برای یک پورت خاص، از دستور زیر استفاده می‌شود:
    sudo semanage port -a -t http_port_t -p tcp 8080
    

    این دستور پورت 8080 را برای سرویس‌های HTTP اختصاص می‌دهد.

جمع‌بندی

MAC (Mandatory Access Control) در SELinux به عنوان یکی از مهم‌ترین ویژگی‌های امنیتی به‌شمار می‌آید. این مدل امنیتی از قوانین و سیاست‌های مشخصی برای کنترل دسترسی‌ها به منابع استفاده می‌کند که به طور دقیق می‌تواند رفتار سیستم را مدیریت کند. SELinux با اعمال محدودیت‌های مختلف و سیاست‌های از پیش تعریف‌شده، امکان حفاظت از سیستم در برابر حملات و نفوذهای مختلف را فراهم می‌آورد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”چگونگی اعمال کنترل دسترسی اجباری برای فرآیندها و منابع” subtitle=”توضیحات کامل”]کنترل دسترسی اجباری (MAC) در SELinux به‌طور کامل فرآیندها و منابع سیستم را تحت نظارت قرار می‌دهد. در این مدل، سیستم به‌جای این‌که اجازه دهد کاربران به‌طور مستقیم دسترسی به منابع داشته باشند، این دسترسی‌ها را بر اساس سیاست‌های امنیتی از پیش تعیین‌شده محدود می‌کند. SELinux با اعمال سیاست‌های از پیش تعیین‌شده، اطمینان حاصل می‌کند که فقط فرآیندهایی که مجاز به دسترسی به منابع خاص هستند، می‌توانند این دسترسی را انجام دهند.

در این بخش، نحوه اعمال کنترل دسترسی اجباری (MAC) برای فرآیندها و منابع مختلف در SELinux توضیح داده می‌شود.

1. پیکربندی انواع اشیاء (Objects) و فرآیندها

در SELinux، هر شیء (اعم از فایل‌ها، پورت‌ها، دایرکتوری‌ها، فرآیندها و …) به‌وسیله یک security context شناسایی می‌شود. Security context شامل اطلاعات مربوط به نوع (type)، سطح امنیتی (level)، و نقش (role) است. این context‌ها برای فرآیندها و اشیاء مختلف به‌طور جداگانه و مشخص تنظیم می‌شوند.

هر فرآیند و هر شیء در SELinux دارای نوع مخصوص به خود است. برای مثال، فایل‌ها ممکن است دارای نوع httpd_sys_content_t باشند، در حالی‌که فرآیندهایی مانند وب‌سرور Apache ممکن است به نوع httpd_t تخصیص داده شوند.

2. پیکربندی کنترل دسترسی برای فرآیندها

فرآیندها نیز در SELinux تحت نوع‌ها (Types) قرار می‌گیرند. برای اعمال سیاست‌های MAC برای فرآیندها، باید نوع‌های خاصی برای آن‌ها تعیین شود که اجازه دسترسی به منابع مختلف را به فرآیند بدهد.

برای مثال، اگر بخواهیم دسترسی به فایل‌های یک وب‌سرور را محدود کنیم، می‌توانیم نوع فایل‌ها را به نوع httpd_sys_content_t تغییر دهیم و نوع فرآیند Apache را به httpd_t اختصاص دهیم.

3. پیکربندی دسترسی‌های مجاز برای منابع

به‌طور مشابه، منابع مختلف مانند فایل‌ها، پورت‌ها و دایرکتوری‌ها نیز به نوع‌های خاصی اختصاص داده می‌شوند. برای هر نوع، دسترسی‌های خاصی تنظیم می‌شود که می‌تواند دسترسی‌های مختلف مانند خواندن، نوشتن یا اجرای فایل‌ها را برای فرآیندها کنترل کند.

4. استفاده از ابزارهای SELinux برای تنظیم دسترسی‌ها

برای تنظیم دسترسی‌ها و پیکربندی سیاست‌ها در SELinux، ابزارهای مختلفی مانند chcon، semanage، restorecon و غیره وجود دارد. این ابزارها به شما کمک می‌کنند تا کنترل دقیقی بر دسترسی‌ها و نوع‌ها برای منابع و فرآیندها داشته باشید.

مثال: تخصیص نوع به یک فایل

برای تخصیص نوع httpd_sys_content_t به یک فایل خاص، از دستور chcon استفاده می‌شود:

sudo chcon -t httpd_sys_content_t /path/to/file

این دستور نوع httpd_sys_content_t را به فایل مشخص‌شده اختصاص می‌دهد.

مثال: تخصیص نوع به یک پورت

برای تخصیص پورت TCP به یک سرویس خاص، از دستور semanage استفاده می‌شود:

sudo semanage port -a -t http_port_t -p tcp 8080

این دستور پورت 8080 را به نوع http_port_t اختصاص می‌دهد.

5. چگونگی اعمال سیاست‌های امنیتی در فرآیندهای خاص

برای اعمال سیاست‌های SELinux به فرآیندهای خاص، مانند یک وب‌سرور یا برنامه شخص ثالث، می‌توانیم از ابزارهای SELinux برای تخصیص نوع و نقش مناسب استفاده کنیم. این فرآیند شامل تخصیص نوع‌های خاص به سرویس‌ها و فرآیندها، و تعریف دسترسی‌های مجاز برای این نوع‌ها است.

برای مثال، برای اینکه وب‌سرور Apache بتواند به فایل‌های html دسترسی پیدا کند، باید نوع فایل‌ها را به httpd_sys_content_t اختصاص داد و نوع فرآیند Apache را به httpd_t تغییر داد.

6. استفاده از دستور setenforce برای تغییر حالت SELinux

برای تغییر حالت SELinux به حالت Enforcing یا Permissive، از دستور زیر استفاده می‌شود:

برای تغییر حالت به Enforcing:

sudo setenforce Enforcing

برای تغییر حالت به Permissive:

sudo setenforce Permissive

در حالت Enforcing، SELinux به‌طور کامل سیاست‌های امنیتی را اعمال می‌کند، در حالی‌که در حالت Permissive، SELinux تنها هشدارهایی را در مورد تخلفات ثبت می‌کند بدون اینکه محدودیتی اعمال کند.

جمع‌بندی

در SELinux، اعمال کنترل دسترسی اجباری برای فرآیندها و منابع، از طریق تخصیص انواع و نقش‌های خاص انجام می‌شود. این فرآیندها به‌طور دقیق دسترسی به منابع سیستم را محدود می‌کنند تا امنیت سیستم حفظ شود. ابزارهایی مانند chcon و semanage به شما این امکان را می‌دهند که به‌راحتی نوع‌ها و نقش‌های مختلف را به فایل‌ها، پورت‌ها، دایرکتوری‌ها و فرآیندهای مختلف تخصیص دهید. SELinux با اجرای سیاست‌های سخت‌گیرانه خود، به جلوگیری از نفوذ به سیستم کمک کرده و امنیت سیستم را افزایش می‌دهد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”مقایسه MAC در SELinux با سایر روش‌های کنترل دسترسی” subtitle=”توضیحات کامل”]کنترل دسترسی اجباری (MAC) در SELinux یکی از قدرتمندترین و جامع‌ترین روش‌های امنیتی است که در سیستم‌عامل‌های لینوکسی به‌کار می‌رود. در این روش، برخلاف کنترل دسترسی اختیاری (DAC) که به کاربران و فرآیندها این امکان را می‌دهد که خود تصمیم بگیرند چه کسانی به منابع دسترسی داشته باشند، سیستم به‌طور مرکزی و بر اساس سیاست‌های از پیش تعیین‌شده دسترسی‌ها را کنترل می‌کند. در این بخش، به مقایسه MAC در SELinux با سایر روش‌های کنترل دسترسی پرداخته می‌شود.

1. کنترل دسترسی اجباری (MAC) در SELinux

در SELinux، کنترل دسترسی اجباری به این معناست که دسترسی به منابع سیستم به‌طور خودکار توسط سیاست‌های امنیتی پیش‌فرض یا تعریف‌شده توسط مدیر سیستم محدود می‌شود. این سیاست‌ها، که معمولاً به‌صورت security context برای هر شیء یا فرآیند تعریف می‌شوند، شامل نوع‌ها، نقش‌ها و سطوح امنیتی است. سیاست‌های MAC اجازه نمی‌دهند که کاربر یا فرآیند، به‌طور مستقیم تغییرات گسترده‌ای روی دسترسی‌ها ایجاد کند و به‌جای آن، سیستم به‌طور مرکزی کنترل دسترسی را انجام می‌دهد.

مزایا:

  • امنیت بالا به‌دلیل اعمال سیاست‌های محدودکننده دقیق
  • جلوگیری از دسترسی‌های غیرمجاز حتی در صورت وجود آسیب‌پذیری‌های در سیستم
  • قابلیت پیچیدگی بالا در پیکربندی سیاست‌ها برای نیازهای مختلف

معایب:

  • پیکربندی پیچیده و دشوار
  • ممکن است در صورت تنظیم نادرست، دسترسی‌های مجاز را هم مسدود کند

2. کنترل دسترسی اختیاری (DAC)

در روش کنترل دسترسی اختیاری (DAC)، مالکین منابع (مانند فایل‌ها) یا مدیران سیستم می‌توانند دسترسی‌ها را برای دیگر کاربران تعیین کنند. در این مدل، هر فایل یا شیء دارای یک مالک است که می‌تواند تصمیم بگیرد چه کسانی می‌توانند به آن فایل دسترسی داشته باشند. این نوع کنترل دسترسی معمولاً در سیستم‌عامل‌های لینوکس و یونیکس استفاده می‌شود و از دستوراتی مانند chmod، chown و chgrp برای تغییر مجوزهای دسترسی به فایل‌ها و دایرکتوری‌ها استفاده می‌کند.

مزایا:

  • پیکربندی ساده و آسان
  • دسترسی مستقیم برای کاربران و مدیران سیستم
  • انعطاف‌پذیری در تخصیص دسترسی‌ها به کاربران

معایب:

  • امنیت پایین‌تر در برابر حملات خارجی، زیرا آسیب‌پذیری‌ها می‌توانند منجر به دسترسی غیرمجاز به منابع شوند
  • نیاز به سطح دسترسی بالاتر برای تغییر مجوزها

3. کنترل دسترسی مبتنی بر نقش (RBAC)

کنترل دسترسی مبتنی بر نقش (RBAC) مدل دیگری از کنترل دسترسی است که دسترسی‌ها را بر اساس نقش‌های مختلف در سازمان مدیریت می‌کند. در این مدل، کاربران به‌جای تخصیص دسترسی‌های مستقیم، نقش‌هایی به آن‌ها اختصاص می‌یابد که هر نقش مجموعه‌ای از مجوزهای خاص به منابع سیستم دارد. این مدل معمولاً در سازمان‌ها و سیستم‌هایی استفاده می‌شود که نیاز به مدیریت متمرکز بر نقش‌های مختلف کاربران دارند.

مزایا:

  • مدیریت ساده‌تر دسترسی‌ها در سازمان‌های بزرگ
  • تخصیص دسترسی‌ها بر اساس نقش‌های شغلی، که انعطاف‌پذیر و منطقی است
  • کاهش خطرات ناشی از اشتباهات انسانی در تعیین مجوزها

معایب:

  • پیچیدگی در تعیین و مدیریت دقیق نقش‌ها در سازمان‌های پیچیده
  • محدودیت در دسترسی‌ها به‌طور غیرمستقیم، زیرا گاهی ممکن است دسترسی‌های ناخواسته به دلیل تعیین نادرست نقش‌ها ایجاد شود

4. کنترل دسترسی مبتنی بر ویژگی (ABAC)

کنترل دسترسی مبتنی بر ویژگی (ABAC) به این صورت عمل می‌کند که دسترسی به منابع بر اساس ویژگی‌های مختلف موجود در سیستم، مانند زمان، مکان، گروه کاربر و سایر ویژگی‌های قابل تعریف، تعیین می‌شود. در این مدل، به جای استفاده از نقش‌ها یا نوع‌های ساده، سیاست‌ها به‌صورت پیچیده‌تری تعریف می‌شوند که امکان بررسی دقیق ویژگی‌های مختلف را فراهم می‌آورد.

مزایا:

  • انعطاف‌پذیری بالا در تنظیم سیاست‌ها بر اساس ویژگی‌های مختلف
  • مناسب برای محیط‌های پیچیده و داینامیک که نیاز به قوانین متغیر دارند

معایب:

  • پیچیدگی بسیار بالا در مدیریت و پیکربندی سیاست‌ها
  • نیاز به منابع زیاد برای پردازش ویژگی‌ها و ارزیابی سیاست‌ها

5. مقایسه MAC (SELinux) با سایر روش‌ها

ویژگی SELinux (MAC) DAC RBAC ABAC
سطح امنیت بالا پایین متوسط بالا
پیچیدگی پیکربندی بالا کم متوسط بسیار بالا
انعطاف‌پذیری در تخصیص دسترسی محدود (پیش‌فرض‌ها باید رعایت شوند) زیاد متوسط بسیار زیاد
مناسب برای سازمان‌های بزرگ و سیستم‌های امنیتی حساس استفاده‌های ساده و خانگی سازمان‌ها با نقش‌های مشخص سازمان‌های داینامیک با ویژگی‌های پیچیده
سهولت در مدیریت پیچیده ساده متوسط پیچیده

جمع‌بندی

  • SELinux (MAC): امنیت بالاتر و کنترل دقیق‌تر دسترسی‌ها را فراهم می‌کند، اما پیچیدگی زیادی در پیکربندی دارد. این روش مناسب برای محیط‌های حساس و با نیاز به امنیت بالا است.
  • DAC: پیکربندی ساده‌ای دارد اما در مقایسه با MAC، امنیت کمتری ارائه می‌دهد و مستعد آسیب‌پذیری‌های ناشی از اشتباهات کاربری است.
  • RBAC: برای سازمان‌های بزرگ و با نیاز به مدیریت نقش‌های مختلف مفید است، اما ممکن است تنظیمات پیچیده‌ای داشته باشد.
  • ABAC: بیشترین انعطاف‌پذیری را در تخصیص دسترسی‌ها بر اساس ویژگی‌های مختلف دارد، اما مدیریت آن بسیار پیچیده است.

در نهایت، انتخاب بین این روش‌ها بستگی به نیازهای امنیتی، پیچیدگی محیط و منابع موجود دارد.[/cdb_course_lesson][cdb_course_lesson title=”فصل 8. مدیریت سیاست‌های امنیتی سفارشی”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه ایجاد و تعریف سیاست‌های امنیتی سفارشی برای نیازهای خاص” subtitle=”توضیحات کامل”]در SELinux، برای پاسخ‌گویی به نیازهای خاص امنیتی یک سیستم، می‌توان سیاست‌های امنیتی سفارشی ایجاد و تعریف کرد. این سیاست‌ها به‌طور دقیق دسترسی‌ها و رفتار فرآیندها و منابع مختلف سیستم را کنترل می‌کنند. این فرایند شامل نوشتن، کامپایل و بارگذاری سیاست‌های جدید است که می‌تواند محدودیت‌های خاصی برای سرویس‌ها، فایل‌ها و فرآیندها اعمال کند. در ادامه به نحوه ایجاد و تعریف سیاست‌های امنیتی سفارشی پرداخته می‌شود.

1. آماده‌سازی محیط برای ایجاد سیاست سفارشی

قبل از ایجاد سیاست‌های سفارشی، باید اطمینان حاصل کنید که محیط SELinux به‌طور صحیح پیکربندی شده است. برای این منظور، باید ابزارهای مربوطه را نصب کرده و محیط توسعه SELinux را آماده کنید.

نصب ابزارهای SELinux: ابتدا، ابزارهای مورد نیاز برای ایجاد و مدیریت سیاست‌های SELinux را نصب کنید. به‌طور معمول، این ابزارها در بسته‌های policycoreutils و selinux-policy-devel قرار دارند.

sudo yum install policycoreutils policycoreutils-devel selinux-policy-devel

دسترسی به دایرکتوری پیکربندی SELinux: برای ایجاد و ویرایش سیاست‌ها، باید به دایرکتوری پیکربندی SELinux دسترسی داشته باشید. این دایرکتوری معمولاً در مسیر /etc/selinux/ قرار دارد.

cd /etc/selinux

2. تعریف سیاست‌های سفارشی با استفاده از زبان سیاست SELinux

برای تعریف سیاست‌های امنیتی سفارشی، از زبان سیاست SELinux استفاده می‌شود. این زبان به شما این امکان را می‌دهد که دسترسی‌ها و قواعد مختلف را برای کاربران و فرآیندها به‌طور دقیق تنظیم کنید. برای نوشتن سیاست‌های سفارشی، باید فایل‌هایی با پسوند .te (برای تعریف نوع‌ها و قوانین) ایجاد کنید.

نمونه سیاست سفارشی برای یک برنامه خاص:

فرض کنید قصد داریم سیاستی برای برنامه myapp بنویسیم که دسترسی خاصی به یک دایرکتوری داشته باشد. ابتدا باید یک فایل جدید با پسوند .te ایجاد کنید:

nano myapp.te

محتوای فایل می‌تواند به شکل زیر باشد:

module myapp 1.0;

require {
    type unconfined_t;
    type httpd_t;
    class dir { read write };
}

# تعریف نوع برای دایرکتوری که می‌خواهیم به آن دسترسی داشته باشیم
type myapp_data_t;
files_type(myapp_data_t)

# اجازه خواندن و نوشتن به دایرکتوری خاص
allow httpd_t myapp_data_t:dir { read write };

در این مثال:

  • myapp یک ماژول SELinux است.
  • httpd_t به فرآیندهای مربوط به وب‌سرور اشاره دارد.
  • myapp_data_t یک نوع جدید است که برای دایرکتوری داده‌های myapp تعریف شده است.
  • سیاست دسترسی به دایرکتوری myapp_data_t را تنظیم می‌کند.

3. کامپایل و بارگذاری سیاست جدید

پس از تعریف سیاست، باید آن را کامپایل و بارگذاری کنید تا به‌طور مؤثر در سیستم اعمال شود.

کامپایل سیاست SELinux: برای کامپایل فایل سیاست، از دستور checkmodule و semodule_package استفاده می‌شود. ابتدا فایل .te را با استفاده از دستور زیر کامپایل کنید:

checkmodule -M -m -o myapp.mod myapp.te

سپس، فایل .mod را به یک بسته قابل بارگذاری تبدیل کنید:

semodule_package -o myapp.pp -m myapp.mod

بارگذاری سیاست جدید: برای بارگذاری سیاست جدید، از دستور semodule استفاده می‌کنیم:

sudo semodule -i myapp.pp

4. تست سیاست سفارشی

پس از بارگذاری سیاست، باید از درست بودن عملکرد آن اطمینان حاصل کنید. می‌توانید از ابزارهای مانند seinfo یا semanage برای بررسی وضعیت و دسترسی‌ها استفاده کنید.

برای مثال، برای مشاهده وضعیت سیستم و مطمئن شدن از اعمال سیاست، می‌توانید دستور زیر را اجرا کنید:

seinfo -t myapp_data_t

اگر سیاست به درستی اعمال شده باشد، باید اطلاعات مربوط به نوع myapp_data_t نمایش داده شود.

5. نحوه ویرایش سیاست‌ها در صورت نیاز

اگر در آینده بخواهید تغییراتی در سیاست اعمال کنید، می‌توانید همان مراحل را دنبال کرده و فقط فایل .te را ویرایش کنید. پس از ویرایش، باید مجدداً سیاست را کامپایل و بارگذاری کنید.

ویرایش فایل سیاست:

nano myapp.te

پس از اعمال تغییرات، دوباره دستور checkmodule و semodule_package را اجرا کرده و سیاست جدید را بارگذاری کنید.

6. حذف سیاست‌های سفارشی

اگر دیگر نیازی به سیاست سفارشی ندارید یا بخواهید آن را حذف کنید، از دستور semodule -r استفاده کنید:

sudo semodule -r myapp

این دستور ماژول myapp را از سیستم حذف می‌کند.

جمع‌بندی

  • برای ایجاد سیاست‌های امنیتی سفارشی در SELinux، ابتدا باید ابزارهای مربوطه را نصب کرده و دایرکتوری‌های پیکربندی SELinux را آماده کنید.
  • سپس، با استفاده از زبان سیاست SELinux، سیاست‌های جدیدی برای فرآیندها و منابع سیستم تعریف می‌کنید.
  • پس از نوشتن فایل سیاست با پسوند .te، آن را کامپایل کرده و با استفاده از دستور semodule بارگذاری می‌کنید.
  • در صورت نیاز به تغییر سیاست‌ها، فایل‌های .te و دستور کامپایل مجدد باید استفاده شوند.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه ایجاد قوانین جدید برای سرویس‌ها و برنامه‌های خاص” subtitle=”توضیحات کامل”]در SELinux، برای مدیریت و کنترل دقیق دسترسی‌ها و رفتار سرویس‌ها و برنامه‌های خاص، می‌توان قوانین جدید تعریف کرد. این قوانین می‌توانند محدودیت‌ها و مجوزهای خاصی را برای فرآیندها و منابع تعیین کنند تا اطمینان حاصل شود که سرویس‌ها در چارچوب امنیتی تعریف‌شده عمل می‌کنند. در ادامه به نحوه ایجاد قوانین جدید برای سرویس‌ها و برنامه‌های خاص در SELinux پرداخته می‌شود.

1. آماده‌سازی محیط برای ایجاد قوانین جدید

قبل از نوشتن قوانین جدید، اطمینان حاصل کنید که سیستم SELinux به‌طور کامل پیکربندی شده باشد و ابزارهای لازم نصب شده باشند.

نصب ابزارهای SELinux: برای ایجاد و مدیریت قوانین در SELinux، باید از بسته‌های policycoreutils و selinux-policy-devel استفاده کنید. اگر این ابزارها از قبل نصب نشده‌اند، می‌توانید آن‌ها را با دستور زیر نصب کنید:

sudo yum install policycoreutils policycoreutils-devel selinux-policy-devel

دسترسی به دایرکتوری سیاست‌ها: برای ایجاد قوانین جدید، به دایرکتوری پیکربندی SELinux که معمولاً در مسیر /etc/selinux قرار دارد، دسترسی پیدا کنید.

cd /etc/selinux

2. تعریف قوانین جدید با استفاده از زبان سیاست SELinux

برای تعریف قوانین جدید برای سرویس‌ها و برنامه‌های خاص، باید فایل‌هایی با پسوند .te (برای تعریف نوع‌ها و قوانین) ایجاد کنید. این فایل‌ها معمولاً شامل تعریف نوع‌ها، دسترسی‌ها و مجوزها هستند.

مثال: ایجاد قانون برای برنامه Apache

فرض کنید که می‌خواهید قانونی برای سرویس Apache ایجاد کنید تا دسترسی خاصی به یک دایرکتوری اختصاصی داشته باشد. ابتدا یک فایل .te جدید ایجاد کنید:

nano apache_custom.te

محتوای این فایل می‌تواند به شکل زیر باشد:

module apache_custom 1.0;

require {
    type httpd_t;
    type httpd_sys_content_t;
    class dir { read write };
    class file { read write };
}

# تعریف نوع برای دایرکتوری خاص
type apache_custom_data_t;
files_type(apache_custom_data_t)

# اجازه خواندن و نوشتن به دایرکتوری اختصاصی Apache
allow httpd_t apache_custom_data_t:dir { read write };
allow httpd_t apache_custom_data_t:file { read write };

در این مثال:

  • httpd_t نوعی است که به فرآیندهای مربوط به سرویس Apache اشاره دارد.
  • apache_custom_data_t نوعی جدید است که به دایرکتوری خاصی که قرار است Apache به آن دسترسی داشته باشد، اختصاص می‌یابد.
  • قانون ایجاد‌شده، به سرویس Apache اجازه می‌دهد که به دایرکتوری apache_custom_data_t دسترسی داشته باشد.

3. کامپایل و بارگذاری قوانین جدید

پس از تعریف قوانین جدید، باید آن‌ها را کامپایل کرده و به سیستم SELinux اضافه کنید. این مراحل شامل استفاده از ابزارهای checkmodule و semodule_package است.

کامپایل فایل سیاست: ابتدا فایل .te را با استفاده از دستور checkmodule کامپایل کنید:

checkmodule -M -m -o apache_custom.mod apache_custom.te

سپس، فایل .mod را به یک بسته قابل بارگذاری تبدیل کنید:

semodule_package -o apache_custom.pp -m apache_custom.mod

بارگذاری قوانین جدید: برای بارگذاری قوانین جدید، از دستور semodule استفاده می‌کنید:

sudo semodule -i apache_custom.pp

4. تست و بررسی قوانین جدید

پس از بارگذاری قوانین جدید، باید از صحت عملکرد آن‌ها اطمینان حاصل کنید. برای بررسی وضعیت، می‌توانید از ابزارهایی مانند seinfo و semanage استفاده کنید.

بررسی وضعیت نوع‌ها: برای بررسی وضعیت و دسترسی‌های مرتبط با نوع جدید، دستور زیر را اجرا کنید:

seinfo -t apache_custom_data_t

تست دسترسی: برای اطمینان از این که قوانین جدید به درستی اعمال شده‌اند، می‌توانید با اجرای سرویس Apache و بررسی دسترسی آن به دایرکتوری اختصاصی، عملکرد قوانین را تست کنید.

5. ویرایش و تغییر قوانین

اگر بخواهید تغییراتی در قوانین ایجاد‌شده انجام دهید، می‌توانید فایل .te را ویرایش کرده و مراحل کامپایل و بارگذاری را مجدداً انجام دهید.

ویرایش فایل قوانین:

nano apache_custom.te

پس از اعمال تغییرات، مجدداً فایل را کامپایل کرده و بارگذاری کنید.

6. حذف قوانین خاص

اگر دیگر نیازی به قوانین ایجاد‌شده ندارید یا بخواهید آن‌ها را حذف کنید، می‌توانید از دستور semodule -r برای حذف استفاده کنید:

sudo semodule -r apache_custom

این دستور ماژول apache_custom را از سیستم حذف می‌کند.

جمع‌بندی

  • ایجاد قوانین جدید در SELinux شامل نوشتن فایل‌های .te است که در آن‌ها انواع مختلف برای برنامه‌ها و سرویس‌ها تعریف می‌شود و دسترسی‌های خاص مشخص می‌شود.
  • پس از نوشتن و کامپایل قوانین، آن‌ها باید با استفاده از دستور semodule بارگذاری شوند.
  • برای تست و بررسی عملکرد قوانین جدید، از ابزارهایی مانند seinfo و semanage استفاده کنید.
  • در صورت نیاز به تغییر یا حذف قوانین، کافیست فایل .te را ویرایش کرده و دوباره آن‌ها را کامپایل و بارگذاری کنید.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ابزارهای مورد استفاده برای ایجاد و تست سیاست‌های سفارشی (مثل audit2allow, semodule)” subtitle=”توضیحات کامل”]در SELinux، ابزارهای مختلفی برای ایجاد، تست و مدیریت سیاست‌های امنیتی سفارشی وجود دارند. این ابزارها به شما امکان می‌دهند که سیاست‌های خود را ایجاد کرده و سپس به‌طور مؤثری آن‌ها را آزمایش و مدیریت کنید. دو ابزار اصلی برای این کار audit2allow و semodule هستند.

1. ابزار audit2allow

ابزار audit2allow برای تجزیه و تحلیل لاگ‌های audit استفاده می‌شود و از آن برای ایجاد سیاست‌های SELinux سفارشی به‌منظور اجازه دادن به دسترسی‌های که در logهای SELinux ثبت شده‌اند، استفاده می‌شود. این ابزار می‌تواند کمک کند تا دسترسی‌های مجاز به منابع مختلف (مانند فایل‌ها، دایرکتوری‌ها، پورت‌ها و فرآیندها) شناسایی شده و برای آن‌ها قوانین جدیدی نوشته شود.

نحوه استفاده از audit2allow

  1. تجزیه و تحلیل لاگ‌های SELinux: ابتدا باید لاگ‌های SELinux را بررسی کنید. لاگ‌ها معمولاً در فایل /var/log/audit/audit.log ذخیره می‌شوند. این لاگ‌ها نشان‌دهنده تلاش‌های ناموفق برای دسترسی به منابع مختلف در سیستم هستند که ممکن است در سیاست‌های پیش‌فرض SELinux محدود شده باشند.
  2. ایجاد قوانین جدید: از دستور audit2allow برای تولید قوانین SELinux استفاده می‌شود که به برنامه‌ها و فرآیندها اجازه می‌دهد تا دسترسی‌های محدود را به‌طور مشخص در سیاست‌ها تعریف کنند.برای استفاده از audit2allow، ابتدا لاگ‌های audit را به این ابزار ارسال کرده و سپس آن را برای تولید سیاست‌های جدید اجرا کنید:
    sudo cat /var/log/audit/audit.log | audit2allow -M my_custom_policy
    

    در این دستور:

    • /var/log/audit/audit.log مسیر فایل لاگ SELinux است.
    • my_custom_policy نام ماژول جدیدی است که برای سیاست جدید ایجاد خواهد شد.

    پس از اجرای این دستور، یک ماژول جدید با نام my_custom_policy.pp ایجاد خواهد شد که می‌توانید آن را برای اعمال قوانین جدید به سیستم بارگذاری کنید.

  3. بارگذاری ماژول‌ها: پس از ایجاد ماژول‌های جدید با استفاده از audit2allow، باید آن‌ها را بارگذاری کنید:
    sudo semodule -i my_custom_policy.pp
    

2. ابزار semodule

ابزار semodule برای بارگذاری، حذف و مدیریت ماژول‌های سیاست SELinux استفاده می‌شود. این ابزار به شما این امکان را می‌دهد که سیاست‌های جدید ایجاد شده را به سیستم SELinux اضافه کنید و یا سیاست‌های قدیمی را حذف کنید.

نحوه استفاده از semodule

  1. بارگذاری ماژول‌های سیاست: پس از ایجاد یک ماژول سیاست جدید با استفاده از ابزارهایی مانند audit2allow یا نوشتن دستی قوانین در فایل‌های .te، می‌توانید از دستور semodule برای بارگذاری آن‌ها استفاده کنید:
    sudo semodule -i my_custom_policy.pp
    

    این دستور ماژول my_custom_policy.pp را به سیستم اضافه می‌کند و قوانین آن را فعال می‌کند.

  2. حذف ماژول‌های سیاست: اگر به هر دلیلی نیاز به حذف یک ماژول از سیستم دارید، می‌توانید از دستور semodule -r استفاده کنید:
    sudo semodule -r my_custom_policy
    

    این دستور ماژول my_custom_policy را از سیستم حذف می‌کند.

  3. لیست ماژول‌های سیاست بارگذاری‌شده: برای مشاهده لیست ماژول‌های سیاستی که در حال حاضر در سیستم فعال هستند، می‌توانید از دستور زیر استفاده کنید:
    semodule -l
    

    این دستور تمامی ماژول‌های SELinux که در حال حاضر بر روی سیستم بارگذاری شده‌اند را نمایش می‌دهد.

  4. کمپایل و ایجاد ماژول‌های جدید: در صورتی که شما یک فایل .te (که حاوی قوانین SELinux است) نوشته‌اید و می‌خواهید آن را به یک ماژول قابل بارگذاری تبدیل کنید، از دستور semodule_package استفاده می‌کنید:
    checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te
    semodule_package -o my_custom_policy.pp -m my_custom_policy.mod
    

    این دستورات ابتدا فایل .te را به فایل .mod تبدیل می‌کند و سپس آن را به فرمت .pp تبدیل کرده تا بتوانید آن را بارگذاری کنید.

3. ابزار seinfo

ابزار seinfo برای دریافت اطلاعات کلی در مورد سیستم SELinux و وضعیت انواع مختلف موجود در سیستم استفاده می‌شود. این ابزار می‌تواند به شما کمک کند تا اطلاعاتی در مورد انواع مختلف، سیاست‌ها، و ویژگی‌های SELinux به دست آورید.

نحوه استفاده از seinfo

برای مشاهده انواع مختلف و دسترسی‌های SELinux، می‌توانید از دستور زیر استفاده کنید:

seinfo

این دستور گزارشی از اطلاعات موجود در سیستم SELinux به شما ارائه می‌دهد.

4. ابزار semanage

ابزار semanage برای پیکربندی و مدیریت سیاست‌های SELinux به‌کار می‌رود. از این ابزار برای تغییر تنظیمات SELinux، مانند پیکربندی پورت‌ها و تعریف مجوزهای جدید، استفاده می‌شود.

نحوه استفاده از semanage

  1. اضافه کردن پورت جدید به سیاست SELinux: اگر بخواهید پورت خاصی را برای یک سرویس جدید تعریف کنید، می‌توانید از دستور زیر استفاده کنید:
    sudo semanage port -a -t http_port_t -p tcp 8080
    

    این دستور پورت 8080 را به عنوان پورت TCP برای سرویس HTTP اضافه می‌کند.

  2. مشاهده پورت‌ها و تغییرات آن‌ها: برای مشاهده تغییرات و پورت‌های اختصاص داده‌شده در سیستم می‌توانید از دستور زیر استفاده کنید:
    sudo semanage port -l
    

جمع‌بندی

  • audit2allow: ابزاری است که به شما این امکان را می‌دهد که از لاگ‌های SELinux برای تولید سیاست‌های جدید استفاده کنید.
  • semodule: ابزاری برای بارگذاری، حذف و مدیریت ماژول‌های سیاست SELinux است.
  • seinfo: برای نمایش اطلاعات کلی در مورد انواع و سیاست‌های SELinux استفاده می‌شود.
  • semanage: برای پیکربندی و تغییر تنظیمات مختلف SELinux مانند پورت‌ها، مسیرها و کاربران استفاده می‌شود.

با استفاده از این ابزارها، می‌توانید سیاست‌های سفارشی را ایجاد، بارگذاری و مدیریت کرده و به‌طور مؤثر SELinux را برای نیازهای خاص سیستم خود پیکربندی کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 9. بررسی سیاست‌های امنیتی از طریق فایل‌های پیکربندی”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”پیکربندی SELinux در فایل‌های /etc/selinux/config” subtitle=”توضیحات کامل”]پیکربندی SELinux در سیستم‌عامل‌های مبتنی بر لینوکس از جمله ردهت، CentOS، و Fedora در فایل پیکربندی /etc/selinux/config انجام می‌شود. این فایل به‌طور کلی برای مدیریت تنظیمات SELinux در سطح سیستم استفاده می‌شود و تنظیمات اولیه برای وضعیت SELinux را تعیین می‌کند.

این فایل حاوی پارامترهای مختلفی است که بر نحوه عملکرد SELinux تأثیر می‌گذارد و به مدیر سیستم این امکان را می‌دهد که سیاست‌های امنیتی را پیکربندی و مدیریت کند. در این بخش، نحوه پیکربندی SELinux در این فایل توضیح داده می‌شود.

1. ساختار فایل /etc/selinux/config

فایل /etc/selinux/config به‌صورت معمول دارای چهار گزینه اصلی است که هرکدام از آن‌ها نحوه اجرای SELinux را تنظیم می‌کنند:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#   enforcing - SELinux security policy is enforced.
#   permissive - SELinux prints warnings instead of enforcing.
#   disabled - No SELinux policy is loaded.
SELINUX=enforcing

# SELINUXTYPE= can take one of three values:
#   targeted - Targeted policy.  Only targeted daemons are protected.
#   minimum - A very minimal policy.  Only essential daemons are protected.
#   mls - Multi Level Security protection.
SELINUXTYPE=targeted

2. پارامترهای اصلی فایل /etc/selinux/config

2.1. SELINUX

این گزینه تعیین‌کننده وضعیت SELinux است و سه حالت مختلف می‌تواند داشته باشد:

  • enforcing: در این حالت، SELinux سیاست‌های امنیتی را به‌طور کامل اعمال می‌کند. تمامی دسترسی‌ها و اقدامات طبق قوانین SELinux بررسی و محدود می‌شوند.
  • permissive: در این حالت، SELinux فقط هشدارها را ثبت می‌کند و هیچ‌گونه محدودیتی اعمال نمی‌شود. این حالت برای تشخیص مشکلات یا توسعه سیاست‌های جدید مفید است.
  • disabled: در این حالت، SELinux به‌طور کامل غیرفعال می‌شود و هیچ‌کدام از سیاست‌های SELinux اعمال نمی‌شوند.

برای تغییر وضعیت SELinux از این گزینه استفاده می‌شود.

مثال: برای فعال کردن SELinux و اعمال سیاست‌های امنیتی، فایل config را به شکل زیر تنظیم کنید:

SELINUX=enforcing

برای فعال کردن حالت permissive (برای ثبت هشدارها بدون اعمال محدودیت):

SELINUX=permissive

برای غیرفعال کردن SELinux:

SELINUX=disabled
2.2. SELINUXTYPE

این گزینه نوع سیاست امنیتی مورد استفاده توسط SELinux را تعیین می‌کند. سه مقدار اصلی برای این گزینه وجود دارد:

  • targeted: این سیاست تنها بر روی سرویس‌ها و برنامه‌های هدف‌گذاری شده (مانند HTTP، SSH و غیره) اعمال می‌شود.
  • minimum: این سیاست یک سیاست بسیار حداقلی است که فقط بر روی سرویس‌های ضروری (مانند init و syslog) اعمال می‌شود.
  • mls: این سیاست چندسطحی (Multi-Level Security) است و به‌طور معمول در سیستم‌های امنیتی با نیازهای پیشرفته استفاده می‌شود.

مثال: برای استفاده از سیاست targeted (سیاست پیش‌فرض):

SELINUXTYPE=targeted

برای استفاده از سیاست minimum:

SELINUXTYPE=minimum

برای استفاده از سیاست mls (برای سیستم‌های چندسطحی):

SELINUXTYPE=mls

3. تغییر تنظیمات SELinux

برای تغییر تنظیمات SELinux در فایل /etc/selinux/config، مراحل زیر را دنبال کنید:

  1. ویرایش فایل config: فایل /etc/selinux/config را با ویرایشگر متنی مانند vi یا nano باز کنید:
    sudo vi /etc/selinux/config
    
  2. تغییر مقدار SELINUX: مقدار SELINUX را به یکی از سه حالت enforcing، permissive یا disabled تغییر دهید.مثال: برای فعال کردن SELinux در حالت permissive، خط مربوط به SELINUX را به این شکل تغییر دهید:
    SELINUX=permissive
    
  3. تغییر نوع سیاست SELinux: مقدار SELINUXTYPE را به یکی از سه نوع سیاست‌های targeted، minimum یا mls تغییر دهید.مثال: برای استفاده از سیاست targeted، خط مربوط به SELINUXTYPE را به این شکل تغییر دهید:
    SELINUXTYPE=targeted
    
  4. ذخیره و خروج: پس از انجام تغییرات، فایل را ذخیره کرده و از ویرایشگر خارج شوید.برای vi:
    1. تغییرات را ذخیره کنید: :w
    2. از ویرایشگر خارج شوید: :q

    برای nano:

    1. تغییرات را ذخیره کنید: Ctrl + O
    2. از ویرایشگر خارج شوید: Ctrl + X

4. فعال‌سازی تغییرات SELinux

پس از تغییر تنظیمات در فایل /etc/selinux/config، لازم است که سیستم را ریبوت کنید تا تغییرات جدید اعمال شوند:

sudo reboot

اگر نمی‌خواهید سیستم را ریبوت کنید، می‌توانید SELinux را به‌طور موقت با استفاده از دستور زیر تغییر دهید:

sudo setenforce 1   # برای فعال کردن SELinux در حالت enforcing
sudo setenforce 0   # برای تغییر به حالت permissive

5. بررسی وضعیت SELinux

برای بررسی وضعیت فعلی SELinux و نوع سیاست اعمال‌شده، از دستور sestatus استفاده کنید:

sestatus

این دستور اطلاعات مربوط به وضعیت فعلی SELinux، نوع سیاست اعمال‌شده و وضعیت اجرای آن را نمایش می‌دهد.

مثال خروجی دستور sestatus:

SELinux status:                 enforcing
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted

جمع‌بندی

فایل /etc/selinux/config برای پیکربندی و مدیریت SELinux در سیستم‌های مبتنی بر لینوکس استفاده می‌شود. از طریق این فایل، می‌توان وضعیت SELinux را تعیین کرد و نوع سیاست‌های امنیتی را تنظیم کرد. تغییرات اعمال‌شده در این فایل نیاز به ریبوت سیستم دارند تا به‌طور کامل تأثیرگذار باشند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی و تغییر سیاست‌ها در فایل‌های پیکربندی مربوطه” subtitle=”توضیحات کامل”]در SELinux، سیاست‌ها نقش کلیدی در کنترل دسترسی‌ها و ایمن‌سازی سیستم دارند. تنظیمات و پیکربندی‌های سیاست‌های امنیتی در SELinux در فایل‌های مختلفی ذخیره می‌شوند و مدیریت این فایل‌ها از طریق ویرایش آن‌ها انجام می‌شود. فایل‌های پیکربندی این سیاست‌ها می‌توانند تنظیمات مربوط به نوع سیاست، نقش‌ها، نوع‌ها، و دیگر گزینه‌های امنیتی را شامل شوند. در این بخش، نحوه بررسی و تغییر سیاست‌ها در فایل‌های پیکربندی مربوطه توضیح داده می‌شود.

1. فایل‌های پیکربندی SELinux

فایل‌های پیکربندی اصلی برای تنظیم سیاست‌ها در SELinux عبارتند از:

  • /etc/selinux/config: این فایل اصلی برای تنظیم وضعیت SELinux است و تنظیمات اولیه SELinux مانند فعال یا غیرفعال بودن آن، نوع سیاست و وضعیت SELinux را تعیین می‌کند.
  • /etc/selinux/targeted/: این دایرکتوری حاوی سیاست‌های مربوط به نوع سیاست targeted است. در این دایرکتوری فایل‌های سیاستی مختلفی وجود دارد که هرکدام تنظیمات مربوط به بخش‌های مختلف سیستم را تعیین می‌کنند.
  • /etc/selinux/contexts/: این دایرکتوری شامل اطلاعات مربوط به زمینه‌ها و نوع‌های مختلف اشیاء سیستم است.
  • /etc/selinux/booleans: این فایل‌ها تنظیمات برای فعال‌سازی یا غیرفعال‌سازی برخی قابلیت‌های SELinux هستند که به‌طور معمول از نوع boolean می‌باشند.

2. بررسی وضعیت و نوع سیاست SELinux

برای بررسی وضعیت و نوع سیاست SELinux، می‌توانید از دستور sestatus استفاده کنید. این دستور اطلاعاتی در مورد وضعیت SELinux، نوع سیاست و دیگر جزئیات ارائه می‌دهد.

مثال:

sestatus

خروجی این دستور مشابه زیر خواهد بود:

SELinux status:                 enforcing
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted

3. تغییر وضعیت SELinux

برای تغییر وضعیت SELinux از طریق فایل پیکربندی /etc/selinux/config، باید فایلی که در آن سیاست‌ها تنظیم می‌شوند را ویرایش کنید. برای تغییر وضعیت SELinux در این فایل، مراحل زیر را انجام دهید:

  1. فایل /etc/selinux/config را با ویرایشگر متنی باز کنید:
sudo vi /etc/selinux/config
  1. گزینه SELINUX را تغییر دهید:
    • برای فعال کردن SELinux در حالت enforcing:
    SELINUX=enforcing
    
    • برای فعال کردن حالت permissive (برای ثبت هشدارها بدون اعمال محدودیت):
    SELINUX=permissive
    
    • برای غیرفعال کردن SELinux:
    SELINUX=disabled
    
  2. گزینه SELINUXTYPE را برای تنظیم نوع سیاست تغییر دهید:
    • برای استفاده از سیاست targeted (سیاست پیش‌فرض):
    SELINUXTYPE=targeted
    
    • برای استفاده از سیاست minimum:
    SELINUXTYPE=minimum
    
    • برای استفاده از سیاست mls:
    SELINUXTYPE=mls
    
  3. پس از اعمال تغییرات، فایل را ذخیره کنید و از ویرایشگر خارج شوید.

4. تغییر سیاست‌های امنیتی با استفاده از ابزارهای semanage و semodule

اگر بخواهید تغییرات دقیق‌تری در سیاست‌ها ایجاد کنید، می‌توانید از ابزارهایی مانند semanage و semodule استفاده کنید.

4.1. ابزار semanage

ابزار semanage برای مدیریت و تنظیم سیاست‌های SELinux استفاده می‌شود. این ابزار به شما این امکان را می‌دهد که تغییراتی مانند اضافه کردن نوع به فایل‌ها، تغییرات در پورت‌ها و تعیین موارد خاص SELinux را انجام دهید.

مثال:

  • برای اضافه کردن یک نوع جدید برای یک فایل خاص:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"

این دستور به SELinux دستور می‌دهد که به‌طور پیش‌فرض، تمامی فایل‌ها و دایرکتوری‌ها در مسیر /var/www/html نوع httpd_sys_content_t را داشته باشند.

  • برای اعمال تغییرات در سیستم فایل:
sudo restorecon -Rv /var/www/html
4.2. ابزار semodule

ابزار semodule برای بارگذاری و تغییر سیاست‌های SELinux در سطح ماژول‌ها استفاده می‌شود. این ابزار به شما این امکان را می‌دهد که ماژول‌های امنیتی جدیدی را بارگذاری کنید یا ماژول‌های موجود را به‌روز کنید.

مثال:

  • برای بارگذاری یک ماژول SELinux جدید:
sudo semodule -i /path/to/custom_policy.pp
  • برای حذف یک ماژول SELinux:
sudo semodule -r custom_policy

5. تغییر سیاست‌های سرویس‌ها

برای تغییر سیاست‌ها برای سرویس‌ها و برنامه‌های خاص، شما می‌توانید از ابزارهایی مانند semanage و seinfo استفاده کنید. به‌طور مثال، اگر می‌خواهید یک پورت جدید برای سرویس Apache تنظیم کنید:

  1. از ابزار semanage برای اضافه کردن پورت استفاده کنید:
sudo semanage port -a -t http_port_t -p tcp 8080
  1. پس از اعمال تغییرات، با استفاده از دستور restorecon، سیستم فایل را بازسازی کنید:
sudo restorecon -Rv /etc/httpd

6. بررسی تغییرات و تأثیر آن‌ها

برای اطمینان از اعمال درست تغییرات و سیاست‌ها، باید از دستور audit2allow برای مشاهده و بررسی اخطارها و مجوزهای جدید استفاده کنید. این ابزار به شما کمک می‌کند تا تغییرات جدید را تست کنید و مطمئن شوید که تغییرات در سیاست‌ها به درستی اعمال شده است.

مثال:

sudo audit2allow -w -a

این دستور تمامی هشدارها و مشکلات مربوط به SELinux را بررسی کرده و راه‌حل‌های پیشنهادی برای آن‌ها ارائه می‌دهد.

جمع‌بندی

فایل‌های پیکربندی SELinux نقش مهمی در مدیریت و تنظیم سیاست‌های امنیتی سیستم ایفا می‌کنند. با استفاده از ابزارهایی مانند semanage و semodule می‌توان سیاست‌های امنیتی را به‌صورت دقیق و سفارشی برای نیازهای خاص تنظیم کرد. تغییرات در فایل‌های پیکربندی مانند /etc/selinux/config نیاز به ریبوت دارند، اما از طریق ابزارهای دیگر می‌توان تغییرات را بدون نیاز به ریبوت اعمال و تست کرد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تفاوت سیاست‌های targeted و minimum در فایل پیکربندی SELinux” subtitle=”توضیحات کامل”]در SELinux، دو نوع سیاست اصلی وجود دارد که می‌توانند در فایل پیکربندی /etc/selinux/config تنظیم شوند: targeted و minimum. هرکدام از این سیاست‌ها برای اهداف مختلف طراحی شده‌اند و در نحوه اعمال کنترل‌های امنیتی و مدیریت دسترسی‌ها تفاوت دارند.

در این بخش، تفاوت‌ها و ویژگی‌های هر کدام از این سیاست‌ها بررسی می‌شود.

1. سیاست targeted

سیاست targeted یکی از محبوب‌ترین سیاست‌های SELinux است که به‌طور پیش‌فرض در بسیاری از سیستم‌ها استفاده می‌شود. این سیاست تنها برخی از فرآیندهای حساس و حیاتی سیستم را تحت پوشش قرار می‌دهد و از آن‌ها محافظت می‌کند. در واقع، در این سیاست بیشتر تمرکز بر سرویس‌ها و برنامه‌هایی است که می‌توانند آسیب‌پذیر باشند، مانند وب سرورها، دیتابیس‌ها، و سرویس‌های شبکه.

ویژگی‌ها:

  • هدفمند بودن: فقط فرآیندهایی که در معرض تهدید هستند، تحت حفاظت قرار می‌گیرند. این فرآیندها معمولا شامل سرویس‌هایی مانند Apache، Nginx، MySQL و دیگر سرویس‌های مهم هستند.
  • محدودیت‌های کمتر برای کاربران و برنامه‌ها: در این سیاست، کاربران و برنامه‌ها به‌طور کلی آزادتر عمل می‌کنند و محدودیت‌ها بیشتر بر روی سرویس‌های حساس اعمال می‌شود.
  • سهولت استفاده: از آنجا که فقط برخی سرویس‌ها تحت کنترل قرار می‌گیرند، این سیاست ساده‌تر است و نیاز به پیکربندی و مدیریت کمتری دارد.

مثال: در این سیاست، SELinux فقط سرویس‌ها و فرآیندهایی مانند HTTPD، SSH و دیگر سرویس‌ها را محدود می‌کند، اما سایر برنامه‌ها و کاربران با محدودیت کمتری مواجه هستند.

2. سیاست minimum

سیاست minimum به‌طور کلی یک سیاست بسیار محدود و سختگیرانه‌تر است که بیشتر تنظیمات SELinux را در سطح سیستم اعمال می‌کند. در این سیاست، بیشتر فرآیندها و منابع سیستم تحت کنترل و نظارت قرار می‌گیرند و محدودیت‌های امنیتی بیشتری برای تمامی سرویس‌ها و کاربران اعمال می‌شود.

ویژگی‌ها:

  • کنترل بیشتر: در این سیاست، بیشتر فرآیندهای سیستم تحت نظارت قرار می‌گیرند، از جمله سرویس‌های شبکه، برنامه‌ها و حتی کاربران. به عبارت دیگر، این سیاست SELinux به‌طور جامع‌تری عمل می‌کند.
  • محدودیت‌های شدیدتر: بسیاری از فرآیندها، حتی آن‌هایی که در سیاست targeted تحت کنترل نیستند، در سیاست minimum تحت محدودیت قرار می‌گیرند. این شامل دسترسی به فایل‌ها، پورت‌ها و حتی منابع سیستمی می‌شود.
  • امنیت بالاتر: چون این سیاست به‌طور کلی تمامی فرآیندها و منابع را تحت نظارت قرار می‌دهد، سطح امنیت در این حالت بالاتر از سیاست targeted است.
  • پیچیدگی بیشتر: از آنجا که این سیاست محدودیت‌های بیشتری را اعمال می‌کند، نیاز به پیکربندی و مدیریت دقیق‌تری دارد. این می‌تواند باعث پیچیدگی‌های بیشتر در استفاده و نگهداری سیستم شود.

مثال: در این سیاست، حتی سرویس‌هایی که در سیاست targeted محافظت نمی‌شوند نیز تحت نظارت SELinux قرار می‌گیرند. این شامل برنامه‌ها و سرویس‌های غیرضروری هم می‌شود.

3. تفاوت‌های اصلی

ویژگی سیاست targeted سیاست minimum
محدودیت‌ها محدود به برخی سرویس‌ها و فرآیندهای حساس (مانند Apache, MySQL) محدودیت‌ها به‌طور گسترده‌تری بر روی تمامی فرآیندها و منابع اعمال می‌شود.
سطح امنیت امنیت متوسط (تنها برای سرویس‌های حساس) امنیت بالاتر (برای تمامی سرویس‌ها و فرآیندها)
پیچیدگی ساده‌تر و کمتر پیچیده پیچیده‌تر و نیاز به پیکربندی بیشتری دارد.
کاربرد برای سیستم‌هایی که می‌خواهند سرویس‌های حساس خود را ایمن کنند بدون تأثیر زیاد بر عملکرد سایر بخش‌ها. برای سیستم‌هایی که نیاز به امنیت بالاتر دارند و می‌خواهند تمام منابع تحت نظارت باشند.
نوع سیاست‌ها کنترل دقیق و هدفمند بر روی سرویس‌های خاص کنترل جامع و گسترده بر روی تمامی فرآیندها و منابع

4. تنظیم نوع سیاست در فایل پیکربندی

برای تنظیم نوع سیاست در فایل پیکربندی /etc/selinux/config، باید گزینه SELINUXTYPE را مطابق با نیاز خود تغییر دهید:

  • برای استفاده از سیاست targeted:
    SELINUXTYPE=targeted
    
  • برای استفاده از سیاست minimum:
    SELINUXTYPE=minimum
    

جمع‌بندی

تفاوت اصلی میان سیاست‌های targeted و minimum در میزان کنترل و نظارت بر فرآیندها و منابع سیستم است. سیاست targeted فقط برخی سرویس‌های حساس را تحت کنترل قرار می‌دهد، در حالی که سیاست minimum یک سیاست امنیتی جامع و سختگیرانه است که تمامی فرآیندها و منابع را تحت نظارت قرار می‌دهد. انتخاب بین این دو سیاست بستگی به نیاز امنیتی سیستم و پیچیدگی مدیریت آن دارد.[/cdb_course_lesson][cdb_course_lesson title=”فصل 10. ارزیابی و عیب‌یابی سیاست‌ها در SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه ارزیابی سیاست‌های فعال در SELinux و کاربرد ابزار seinfo و sesearch” subtitle=”توضیحات کامل”]در SELinux، ارزیابی سیاست‌های فعال و بررسی وضعیت آن‌ها به‌منظور اطمینان از عملکرد صحیح سیستم و برطرف کردن مشکلات امنیتی ضروری است. برای این کار، ابزارهایی مانند seinfo و sesearch به‌طور گسترده استفاده می‌شوند تا اطلاعات مربوط به سیاست‌ها و تنظیمات فعال در SELinux را جستجو و تحلیل کنند. در این بخش، به نحوه استفاده از این ابزارها برای ارزیابی و جستجوی سیاست‌های SELinux پرداخته می‌شود.

1. ابزار seinfo

ابزار seinfo یک ابزار برای استخراج اطلاعات از پایگاه داده سیاست‌های SELinux است. این ابزار به شما کمک می‌کند تا اطلاعات دقیقی در مورد سیاست‌های فعال، انواع (types)، نقش‌ها (roles) و سایر اجزای مرتبط با SELinux را بدست آورید.

ویژگی‌ها:

  • ارائه اطلاعات در مورد اجزای سیاست SELinux.
  • جستجوی انواع داده، ویژگی‌ها و دیگر بخش‌های سیاست.
  • بررسی وضعیت منابع و اشیاء در SELinux.
نحوه استفاده از seinfo:

برای استفاده از seinfo، می‌توانید از دستورات مختلفی استفاده کنید تا به اطلاعات مختلفی دست یابید. به‌عنوان مثال:

  • مشاهده انواع (types) موجود:برای مشاهده تمامی انواع (types) فعال در سیستم، دستور زیر را وارد کنید:
    seinfo -t
    
  • مشاهده نقش‌ها (roles) موجود:برای مشاهده تمامی نقش‌های (roles) فعال در سیستم، دستور زیر را وارد کنید:
    seinfo -r
    
  • مشاهده اشیاء و منابع (objects) موجود:برای مشاهده تمامی اشیاء (objects) که در سیاست‌ها تعریف شده‌اند، دستور زیر را وارد کنید:
    seinfo -o
    
  • مشاهده فرآیندها (processes) مرتبط با SELinux:برای مشاهده تمامی فرآیندهای فعال که SELinux به آن‌ها اعمال سیاست کرده است، دستور زیر را وارد کنید:
    seinfo -p
    

این ابزار به‌طور کلی برای بررسی وضعیت و ارزیابی سیاست‌های SELinux به کار می‌رود و امکان تجزیه و تحلیل انواع مختلف اطلاعات را فراهم می‌کند.

2. ابزار sesearch

ابزار sesearch به‌عنوان یک ابزار جستجوگر برای SELinux استفاده می‌شود و به شما این امکان را می‌دهد که در داخل سیاست‌ها جستجو کرده و نتایج مرتبط با شرایط خاص را پیدا کنید. این ابزار به‌ویژه در مواقعی که نیاز به بررسی دقیق قوانین و سیاست‌های خاص دارید، مفید است.

ویژگی‌ها:

  • جستجو در سیاست‌های SELinux بر اساس پارامترهای مختلف.
  • بررسی ارتباطات بین انواع (types)، فرآیندها و منابع.
  • بررسی قوانین دسترسی و بررسی مجوزها.
نحوه استفاده از sesearch:

برای استفاده از sesearch، می‌توانید از دستورات مختلفی استفاده کنید که بسته به نیاز شما، نتایج متفاوتی را فراهم می‌آورد.

  • جستجوی یک قانون خاص بر اساس نوع (type):اگر بخواهید قوانینی را که مرتبط با نوع خاصی هستند جستجو کنید، از دستور زیر استفاده کنید:
    sesearch -t <type>
    

    به‌عنوان مثال، برای جستجوی قوانین مرتبط با نوع httpd_t (نوع مرتبط با وب سرور Apache) می‌توانید دستور زیر را وارد کنید:

    sesearch -t httpd_t
    
  • جستجوی قانون با استفاده از دستور مجوز:اگر بخواهید مجوزهای مربوط به یک دستور خاص را جستجو کنید، از دستور زیر استفاده کنید:
    sesearch -s <source_type> -t <target_type>
    

    این دستور تمام قوانین مربوط به دسترسی از نوع خاص (مانند فایل‌ها یا پروسه‌ها) را جستجو خواهد کرد. برای مثال:

    sesearch -s httpd_t -t var_log_t
    
  • جستجوی قوانین با استفاده از عملگرهای خاص:برای جستجوی قوانین خاص‌تر با استفاده از عملگرهای منطقی، می‌توانید از دستور زیر استفاده کنید:
    sesearch -A
    

    این دستور تمامی قوانین allow که به نوع یا فرآیند خاص اجازه دسترسی می‌دهند، جستجو خواهد کرد.

3. کاربرد ابزارهای seinfo و sesearch در ارزیابی سیاست‌های SELinux

با استفاده از seinfo و sesearch می‌توانیم به‌طور دقیق‌تر سیاست‌ها و قوانین SELinux را ارزیابی و بررسی کنیم. این ابزارها می‌توانند به شما کمک کنند که:

  • بررسی انواع و نقش‌ها: با استفاده از seinfo، می‌توان انواع مختلف موجود در سیستم را مشاهده کرد و نقش‌های مختلف را شناسایی نمود.
  • جستجوی سیاست‌های فعال: با استفاده از sesearch، می‌توانید به جستجوی قوانین خاص یا جستجو برای سیاست‌های خاص مرتبط با برنامه‌ها و سرویس‌های مختلف بپردازید.
  • شناسایی مشکلات دسترسی: اگر مشکل دسترسی در سیستم وجود داشته باشد، می‌توانید از sesearch برای جستجوی دقیق قوانین مرتبط با آن استفاده کنید و به‌شکلی مؤثر آن‌ها را شبیه‌سازی کنید.
  • تحلیل جامع از سیاست‌ها: هر دو ابزار به شما این امکان را می‌دهند که به‌طور کلی و جامع از وضعیت و قوانین SELinux آگاهی پیدا کنید.

جمع‌بندی

ابزارهای seinfo و sesearch ابزارهای قدرتمند برای تجزیه و تحلیل و ارزیابی سیاست‌های SELinux هستند. با استفاده از این ابزارها، می‌توان اطلاعات دقیقی در مورد انواع، نقش‌ها، قوانین و ارتباطات بین آن‌ها بدست آورد. این ابزارها همچنین به شما امکان می‌دهند که جستجوهای پیشرفته‌ای برای پیدا کردن قوانین خاص انجام دهید و به شناسایی و رفع مشکلات دسترسی در SELinux کمک کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی مشکلات ناشی از سیاست‌های نادرست و اصلاح آن‌ها” subtitle=”توضیحات کامل”]سیاست‌های SELinux ابزاری قدرتمند برای کنترل دسترسی‌ها و افزایش امنیت سیستم‌ها هستند، اما اگر این سیاست‌ها به‌درستی پیکربندی نشوند یا به اشتباه اعمال شوند، ممکن است مشکلاتی ایجاد کنند که به عملکرد سیستم آسیب برساند. در این بخش، به بررسی مشکلات رایج ناشی از سیاست‌های نادرست SELinux و روش‌های اصلاح این مشکلات خواهیم پرداخت.

1. مشکلات رایج ناشی از سیاست‌های نادرست

  • دسترسی‌های رد شده (Permission Denied): یکی از شایع‌ترین مشکلات ناشی از سیاست‌های نادرست، خطاهای “Permission Denied” است که معمولاً به دلیل وجود محدودیت‌های بیش از حد در سیاست‌ها اتفاق می‌افتد. این خطا معمولاً زمانی رخ می‌دهد که یک فرآیند یا کاربر دسترسی لازم برای اجرای یک عمل (مانند خواندن، نوشتن یا اجرای یک فایل) را ندارد.
  • خطاهای در ارتباطات شبکه: در صورتی که SELinux سیاست‌های مربوط به شبکه را به درستی تنظیم نکرده باشد، ممکن است سرویس‌ها نتوانند ارتباطات شبکه‌ای خود را برقرار کنند. این مشکل معمولاً به‌دلیل محدودیت‌های دسترسی بر روی پورت‌ها یا پروتکل‌هاست.
  • مشکلات در دسترسی به فایل‌ها و دایرکتوری‌ها: اگر سیاست‌ها به‌طور صحیح برای انواع فایل‌ها و دایرکتوری‌ها تنظیم نشوند، ممکن است دسترسی به منابع خاص مسدود شود. این مشکل اغلب به دلیل نادرست بودن انواع (types) و عدم تطابق آن‌ها با برنامه‌های مختلف است.
  • عدم توانایی در اجرای برنامه‌ها: در صورتی که SELinux برای برنامه‌ها و سرویس‌های مختلف سیاست‌های مناسب نداشته باشد، ممکن است آن‌ها نتوانند به‌درستی اجرا شوند یا عملکرد نادرستی داشته باشند.

2. اصلاح مشکلات ناشی از سیاست‌های نادرست

برای اصلاح مشکلات مربوط به سیاست‌های SELinux، باید ابتدا مشکلات شناسایی شوند و سپس اقدامات مناسب برای رفع آن‌ها انجام شود. در اینجا چندین روش برای شناسایی و اصلاح مشکلات آورده شده است:

2.1 استفاده از ابزار audit2allow

یکی از ابزارهای مفید برای شناسایی و اصلاح مشکلات دسترسی در SELinux، ابزار audit2allow است. این ابزار به شما کمک می‌کند تا از لاگ‌های SELinux، قوانین مجاز را برای رفع مشکلات ایجاد کنید.

  • مشاهده لاگ‌ها: ابتدا باید لاگ‌های SELinux را بررسی کنید تا مشکلات دسترسی شناسایی شوند. این لاگ‌ها معمولاً در فایل /var/log/audit/audit.log ذخیره می‌شوند.برای مشاهده لاگ‌ها، از دستور زیر استفاده کنید:
    ausearch -m avc -ts recent
    
  • استفاده از audit2allow برای ایجاد قوانین: پس از شناسایی مشکلات، می‌توانید از audit2allow برای ایجاد قوانین مجاز و اصلاح آن‌ها استفاده کنید. به‌طور مثال، اگر لاگ‌ها نشان‌دهنده‌ی مسدود شدن دسترسی به یک فایل خاص باشند، می‌توانید دستور زیر را اجرا کنید:
    audit2allow -w -a
    

    این دستور، قانونی را برای رفع مشکل ایجاد می‌کند و آن را به شما نشان می‌دهد.

  • اعمال قوانین جدید: پس از ایجاد قوانین جدید، می‌توانید آن‌ها را به‌صورت ماژول SELinux بارگذاری کنید:
    audit2allow -M mymodule -a
    semodule -i mymodule.pp
    

این روش به شما کمک می‌کند تا مشکلات دسترسی به منابع مختلف را شناسایی و اصلاح کنید.

2.2 تغییر حالت SELinux به Permissive

در مواقعی که نیاز به عیب‌یابی یا تست سریع دارید، می‌توانید حالت SELinux را به Permissive تغییر دهید. در این حالت، SELinux فقط هشدارهایی را ثبت می‌کند اما هیچ‌گونه محدودیتی اعمال نمی‌کند. این می‌تواند به شما کمک کند تا بدانید که آیا مشکل ناشی از سیاست‌های SELinux است یا خیر.

برای تغییر حالت SELinux به Permissive، دستور زیر را وارد کنید:

setenforce 0

برای تغییر دوباره به حالت Enforcing، دستور زیر را وارد کنید:

setenforce 1

با این حال، توجه داشته باشید که حالت Permissive بیشتر برای عیب‌یابی موقت است و نباید به‌طور دائمی از آن استفاده کنید.

2.3 بررسی و اصلاح تنظیمات فایل‌های پیکربندی

گاهی اوقات مشکلات SELinux به‌دلیل تنظیمات نادرست در فایل‌های پیکربندی آن ایجاد می‌شوند. این فایل‌ها معمولاً در مسیر /etc/selinux/config قرار دارند. برای بررسی و اصلاح تنظیمات SELinux، می‌توانید فایل پیکربندی را ویرایش کنید.

برای ویرایش فایل پیکربندی SELinux، از ویرایشگر موردنظر خود مانند vi یا nano استفاده کنید:

nano /etc/selinux/config

در این فایل، تنظیمات مربوط به حالت SELinux (SELINUX=enforcing یا SELINUX=permissive) و نوع سیاست (مانند SELINUXTYPE=targeted) را مشاهده خواهید کرد. پس از تغییرات، فایل را ذخیره کرده و سیستم را ری‌استارت کنید تا تغییرات اعمال شود.

2.4 بررسی و تنظیم مجدد انواع و دسترسی‌ها

در صورتی که مشکل از انواع فایل‌ها (types) و دسترسی‌ها (permissions) باشد، باید آن‌ها را با استفاده از ابزار semanage بررسی و تنظیم کنید.

  • بررسی انواع فایل‌ها:برای بررسی و تغییر نوع SELinux یک فایل خاص، از دستور زیر استفاده کنید:
    semanage fcontext -l | grep <file_path>
    
  • تنظیم نوع SELinux برای فایل‌ها:اگر نیاز به تغییر نوع SELinux یک فایل دارید، می‌توانید از دستور زیر استفاده کنید:
    semanage fcontext -a -t <type> <file_path>
    restorecon -v <file_path>
    

این دستورها نوع SELinux فایل را به نوع موردنظر تغییر می‌دهند و سپس با دستور restorecon، سیاست‌های جدید برای فایل اعمال می‌شوند.

جمع‌بندی

سیاست‌های نادرست SELinux می‌توانند مشکلات مختلفی از جمله خطاهای دسترسی و عملکردی ایجاد کنند. برای رفع این مشکلات، می‌توانید از ابزارهایی مانند audit2allow برای ایجاد قوانین مجاز، تغییر حالت SELinux به Permissive برای عیب‌یابی، و همچنین بررسی و اصلاح فایل‌های پیکربندی SELinux استفاده کنید. همچنین، در صورتی که مشکل مربوط به انواع فایل‌ها یا دسترسی‌ها باشد، ابزار semanage به شما کمک می‌کند تا سیاست‌های مناسب را برای فایل‌ها و دایرکتوری‌ها تنظیم کنید. با این روش‌ها می‌توانید مشکلات ناشی از سیاست‌های نادرست SELinux را شناسایی کرده و آن‌ها را اصلاح کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”راهکارهایی برای تست و ارزیابی اثرات سیاست‌های جدید” subtitle=”توضیحات کامل”]آزمایش و ارزیابی اثرات سیاست‌های جدید SELinux برای اطمینان از عملکرد صحیح سیستم و جلوگیری از ایجاد مشکلات امنیتی یا عملکردی بسیار ضروری است. اعمال سیاست‌های جدید می‌تواند تأثیرات غیرمنتظره‌ای بر دسترسی‌ها و سرویس‌ها داشته باشد. در این بخش، به بررسی راهکارهایی برای تست و ارزیابی اثرات سیاست‌های جدید خواهیم پرداخت.

1. استفاده از حالت Permissive برای تست

یکی از روش‌های ساده و مفید برای تست سیاست‌های جدید، تغییر حالت SELinux به Permissive است. در این حالت، SELinux هیچ‌گونه اعمال محدودیتی انجام نمی‌دهد، اما همه‌ی تلاش‌ها برای دسترسی‌ها و اقدامات محدود شده را در لاگ‌ها ثبت می‌کند.

  • مزایا:
    • به شما این امکان را می‌دهد که اثرات سیاست‌های جدید را بدون اعمال محدودیت‌ها بررسی کنید.
    • می‌توانید ببینید که آیا سیاست جدید باعث ایجاد هشدارهای امنیتی یا مشکلات عملکردی می‌شود.

برای تغییر به حالت Permissive، دستور زیر را وارد کنید:

setenforce 0

پس از تست، می‌توانید SELinux را دوباره به حالت Enforcing بازگردانید:

setenforce 1

این روش برای آزمایش و شبیه‌سازی اثرات تغییرات سیاستی بدون ریسک محدود کردن دسترسی‌ها بسیار مفید است.

2. بررسی لاگ‌های SELinux

پس از اعمال تغییرات در سیاست‌های SELinux، بررسی لاگ‌های SELinux ضروری است. این لاگ‌ها معمولاً در مسیر /var/log/audit/audit.log ذخیره می‌شوند. استفاده از ابزارهایی مانند ausearch و audit2allow می‌تواند به شما کمک کند تا مشکلات دسترسی را شناسایی کنید.

  • بررسی هشدارها و خطاها در لاگ‌ها:برای بررسی خطاهای SELinux، از دستور زیر استفاده کنید:
    ausearch -m avc -ts recent
    

    این دستور تمام هشدارهای مربوط به کنترل دسترسی SELinux را که در بازه زمانی اخیر ثبت شده‌اند، نمایش می‌دهد.

  • تجزیه و تحلیل لاگ‌ها با audit2allow:پس از شناسایی هشدارهای در لاگ‌ها، می‌توانید از audit2allow برای ایجاد سیاست‌های جدید و اصلاح محدودیت‌های دسترسی استفاده کنید:
    audit2allow -w -a
    

3. استفاده از ابزارهای تست

ابزارهایی مانند sesearch و seinfo به شما کمک می‌کنند تا سیاست‌های فعال SELinux را بررسی کرده و نحوه اعمال آن‌ها را تست کنید.

  • sesearch: این ابزار به شما این امکان را می‌دهد که جستجوهای پیچیده‌ای برای سیاست‌های SELinux انجام دهید. به‌طور مثال، می‌توانید بررسی کنید که یک نوع خاص (type) چه دسترسی‌هایی دارد.برای جستجوی تمامی دسترسی‌های داده شده به یک نوع خاص (type)، از دستور زیر استفاده کنید:
    sesearch -t <type>
    
  • seinfo: ابزار seinfo اطلاعات مربوط به سیاست‌های SELinux را به شما می‌دهد و می‌تواند به شما کمک کند تا ببینید که یک سیاست خاص به درستی اعمال شده است یا خیر.برای مشاهده اطلاعات مرتبط با یک نوع خاص (type)، دستور زیر را وارد کنید:
    seinfo -t <type>
    

4. تست سرویس‌ها و برنامه‌های خاص

بعد از اعمال سیاست‌های جدید، بهتر است که سرویس‌ها و برنامه‌های مختلفی که تحت تأثیر این سیاست‌ها قرار می‌گیرند را به‌طور دستی تست کنید. به‌طور معمول، پس از اعمال سیاست‌های SELinux، ممکن است نیاز به تنظیم مجدد برخی از سرویس‌ها یا برنامه‌ها باشد.

  • تست سرویس‌های شبکه‌ای: برای بررسی اینکه سیاست‌های جدید بر سرویس‌هایی مانند Apache یا Nginx تأثیر گذاشته‌اند یا خیر، باید این سرویس‌ها را تست کرده و از لاگ‌های SELinux برای شناسایی مشکلات استفاده کنید. به‌طور مثال، اگر سرویس وب کار نمی‌کند، باید مطمئن شوید که پورت‌های مربوط به آن در SELinux مجاز هستند.برای بررسی وضعیت پورت‌های مجاز، از دستور زیر استفاده کنید:
    semanage port -l
    
  • تست برنامه‌های شخص ثالث: اگر برنامه‌هایی به‌طور خاص از SELinux تأثیر پذیرفته‌اند، باید آن‌ها را به‌دقت بررسی و تست کنید. به‌طور مثال، برنامه‌های شخص ثالث که به‌طور مستقیم با فایل‌های خاص یا منابع دیگر سروکار دارند، باید از نظر دسترسی‌ها بررسی شوند.

5. استفاده از ابزارهای تحلیل امنیتی

ابزارهایی مانند OpenSCAP و SELinux Policy Analysis می‌توانند برای تحلیل سیاست‌های SELinux و ارزیابی آسیب‌پذیری‌های امنیتی به کار روند.

  • OpenSCAP: این ابزار یک چارچوب تحلیل امنیتی است که می‌تواند برای ارزیابی وضعیت امنیتی سیستم‌ها استفاده شود. با استفاده از OpenSCAP، می‌توانید ارزیابی‌هایی برای بررسی تطابق سیستم با سیاست‌های SELinux انجام دهید.برای اجرای تست‌های امنیتی با OpenSCAP، دستور زیر را وارد کنید:
    oscap oval eval --results results.xml --report report.html /usr/share/openscap/scap-yaml/oval.xml
    
  • SELinux Policy Analysis: این ابزار می‌تواند برای تجزیه و تحلیل اثرات سیاست‌های SELinux بر سرویس‌ها و منابع مختلف استفاده شود.

6. شبیه‌سازی و تست اثرات تغییرات در محیط‌های آزمایشی

در بسیاری از موارد، ایجاد یک محیط آزمایشی مشابه محیط تولید می‌تواند به شبیه‌سازی اثرات سیاست‌های جدید کمک کند. در این محیط، می‌توانید تغییرات را اعمال کرده و رفتار سیستم را بررسی کنید بدون اینکه به سیستم تولیدی آسیب برسد.

  • ایجاد محیط آزمایشی: از ماشین‌های مجازی یا سیستم‌های جداگانه برای تست سیاست‌های جدید استفاده کنید.
  • مقایسه عملکرد قبل و بعد از تغییرات: عملکرد سیستم در محیط آزمایشی را با حالت اولیه مقایسه کنید تا از عدم وجود مشکلات جدید اطمینان حاصل کنید.

جمع‌بندی

برای ارزیابی اثرات سیاست‌های جدید SELinux، ابزارها و روش‌های مختلفی وجود دارند. استفاده از حالت Permissive برای تست، بررسی دقیق لاگ‌های SELinux، استفاده از ابزارهایی مانند sesearch و seinfo برای تحلیل سیاست‌ها، و تست دقیق سرویس‌ها و برنامه‌ها از جمله روش‌های کلیدی هستند. علاوه بر این، استفاده از ابزارهای تحلیل امنیتی مانند OpenSCAP و شبیه‌سازی اثرات تغییرات در محیط‌های آزمایشی می‌تواند کمک کند تا سیاست‌های جدید به‌درستی ارزیابی شوند و مشکلات امنیتی یا عملکردی قبل از اعمال در محیط تولید شناسایی شوند.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”بخش 4. تحلیل و مدیریت قوانین SELinux”][cdb_course_lesson title=”فصل 1. فهم پیام‌های Log در SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تحلیل لاگ‌ها با استفاده از ابزار audit2allow” subtitle=”توضیحات کامل”]ابزار audit2allow یکی از ابزارهای مهم در SELinux است که به شما کمک می‌کند تا مشکلات ناشی از سیاست‌های SELinux را شناسایی و اصلاح کنید. این ابزار، هشدارهای امنیتی (AVC denials) ثبت‌شده در لاگ‌ها را تجزیه و تحلیل کرده و پیشنهاداتی برای اصلاح سیاست‌ها یا تعریف مجوزهای جدید به شما ارائه می‌دهد.

در این بخش، به نحوه استفاده از audit2allow برای تحلیل لاگ‌ها و ایجاد سیاست‌های جدید خواهیم پرداخت.

1. بررسی لاگ‌های SELinux

برای شروع، باید لاگ‌های SELinux را بررسی کنید. این لاگ‌ها معمولاً در مسیر /var/log/audit/audit.log قرار دارند. این فایل‌ها حاوی اطلاعات مربوط به تمامی درخواست‌های امنیتی و تلاش‌هایی هستند که به دلیل سیاست‌های SELinux رد شده‌اند.

برای مشاهده لاگ‌های SELinux که شامل خطاها و هشدارهای AVC هستند، از دستور زیر استفاده کنید:

ausearch -m avc -ts recent

این دستور تمامی هشدارهای AVC که به تازگی در سیستم ثبت شده‌اند را نمایش می‌دهد. هشدارهای AVC معمولاً به دلیل رد شدن درخواست‌های دسترسی به منابع خاص، مانند فایل‌ها یا پورت‌ها، توسط سیاست‌های SELinux به وجود می‌آیند.

2. استفاده از audit2allow برای تحلیل لاگ‌ها

بعد از شناسایی هشدارها در لاگ‌ها، می‌توانید از audit2allow برای تحلیل آن‌ها استفاده کنید. این ابزار بررسی می‌کند که چه درخواست‌هایی در سیستم رد شده‌اند و سپس دستوراتی برای رفع این مشکلات به شما پیشنهاد می‌دهد.

برای تجزیه و تحلیل لاگ‌ها با استفاده از audit2allow، دستور زیر را وارد کنید:

audit2allow -w -a

این دستور تمامی خطاهای موجود در لاگ‌های SELinux را تجزیه و تحلیل می‌کند و در صورت وجود سیاست‌های نادرست یا نیاز به مجوزهای جدید، به شما پیشنهاد می‌دهد. گزینه -w به شما کمک می‌کند که مشکلات موجود را به‌صورت مفهومی و قابل‌فهم دریافت کنید و گزینه -a تمام موارد ثبت‌شده در لاگ‌ها را برای تحلیل بررسی می‌کند.

3. ایجاد سیاست‌های جدید با audit2allow

اگر به دنبال اصلاح سیاست‌های SELinux هستید و می‌خواهید برای مشکلات مشاهده‌شده در لاگ‌ها سیاست‌های جدید ایجاد کنید، از دستور زیر استفاده کنید:

audit2allow -M mymodule -a

این دستور یک ماژول جدید SELinux با نام mymodule ایجاد می‌کند که سیاست‌های پیشنهادی برای حل مشکلات موجود را شامل می‌شود. شما می‌توانید از این ماژول برای اعمال تغییرات به سیاست‌های SELinux استفاده کنید.

بعد از ایجاد ماژول جدید، باید آن را به سیستم بارگذاری کنید. برای این کار از دستور زیر استفاده کنید:

semodule -i mymodule.pp

این دستور ماژول جدید را به سیستم SELinux اضافه می‌کند و تغییرات را اعمال می‌کند.

4. بررسی مجوزها و تغییرات پس از استفاده از audit2allow

پس از استفاده از audit2allow و اعمال تغییرات، باید بررسی کنید که آیا مشکلات حل شده‌اند یا خیر. به همین منظور، دوباره لاگ‌ها را بررسی کنید تا ببینید که آیا هشدارهای جدیدی ظاهر می‌شوند یا خیر.

برای بررسی مجدد لاگ‌ها می‌توانید از دستور زیر استفاده کنید:

ausearch -m avc -ts recent

اگر دیگر هشدار AVC در لاگ‌ها مشاهده نشد، این به این معنی است که سیاست‌های جدید به درستی اعمال شده‌اند و دسترسی‌های لازم برای سرویس‌ها و برنامه‌ها فراهم شده است.

5. تست تغییرات در محیط تولید

بعد از اعمال تغییرات و بارگذاری ماژول‌های جدید، توصیه می‌شود که سرویس‌ها و برنامه‌ها را به‌دقت تست کنید تا اطمینان حاصل کنید که تغییرات اعمال‌شده به درستی کار می‌کنند و مشکلی به وجود نمی‌آید. همچنین، توجه داشته باشید که اعمال سیاست‌های جدید ممکن است بر عملکرد سیستم تأثیر بگذارد.

جمع‌بندی

ابزار audit2allow یکی از ابزارهای کارآمد SELinux برای تجزیه و تحلیل لاگ‌ها و اصلاح سیاست‌های امنیتی است. با استفاده از این ابزار، می‌توانید هشدارهای AVC موجود در لاگ‌ها را بررسی کرده و سیاست‌های جدید برای حل مشکلات امنیتی ایجاد کنید. همچنین، این ابزار به شما این امکان را می‌دهد که از ایجاد ماژول‌های جدید و اعمال تغییرات به سیاست‌های SELinux به‌طور خودکار و سریع استفاده کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی هشدارها و خطاهای SELinux در فایل‌های لاگ” subtitle=”توضیحات کامل”]در سیستم‌های لینوکسی که از SELinux استفاده می‌کنند، تمامی تلاش‌ها برای دسترسی به منابع و انجام عملیات‌ها تحت کنترل‌های امنیتی SELinux قرار دارد. در صورت بروز مشکلات یا نقض سیاست‌ها، SELinux معمولاً هشدارهایی را در فایل‌های لاگ ثبت می‌کند. این هشدارها و خطاها می‌توانند به مدیران سیستم کمک کنند تا مشکلات امنیتی و نقض سیاست‌های SELinux را شناسایی و اصلاح کنند.

در این بخش، به بررسی نحوه مشاهده، تجزیه و تحلیل و رفع هشدارها و خطاهای SELinux در فایل‌های لاگ خواهیم پرداخت.

1. فایل‌های لاگ مربوط به SELinux

SELinux تمامی فعالیت‌های خود را در فایل‌های لاگ ثبت می‌کند. این لاگ‌ها شامل اطلاعاتی از جمله درخواست‌های موفق و ناموفق، تلاش‌های دسترسی رد شده، و هرگونه فعالیت مشکوک امنیتی می‌باشند. مهم‌ترین فایل‌های لاگ SELinux عبارتند از:

  • /var/log/audit/audit.log: این فایل شامل تمامی لاگ‌های سیستم است و مهم‌ترین منبع برای پیدا کردن هشدارهای SELinux است. اکثر هشدارهای SELinux (AVC denials) در این فایل ثبت می‌شوند.
  • /var/log/messages: این فایل شامل تمامی پیام‌های سیستم است، از جمله هشدارهای SELinux که ممکن است در کنار دیگر پیغام‌ها ظاهر شوند.
  • /var/log/selinux: این فایل می‌تواند اطلاعات اضافی درباره وضعیت SELinux و مشکلات آن ارائه دهد.

2. مشاهده هشدارهای SELinux

برای مشاهده هشدارهای SELinux که در لاگ‌ها ثبت شده‌اند، از دستور ausearch می‌توان استفاده کرد. به‌طور پیش‌فرض، SELinux تمامی رد شدن‌های دسترسی (Access Vector Cache یا AVC) را در لاگ‌ها ثبت می‌کند. برای مشاهده این هشدارها از دستور زیر استفاده کنید:

ausearch -m avc -ts recent

این دستور تمامی هشدارهای AVC را که به‌تازگی در لاگ‌های SELinux ثبت شده‌اند نمایش می‌دهد. گزینه -m avc به این معنی است که فقط هشدارهای مربوط به رد شدن دسترسی‌ها نمایش داده شوند و گزینه -ts recent محدود به هشدارهای اخیر می‌شود.

همچنین برای مشاهده لاگ‌ها به‌صورت پیوسته می‌توانید از دستور tail استفاده کنید:

tail -f /var/log/audit/audit.log

این دستور، لاگ‌های جدید که در حال وارد شدن به فایل هستند را به‌طور مداوم نمایش می‌دهد.

3. تحلیل هشدارهای SELinux

هشدارهای SELinux به‌طور معمول شامل اطلاعات مهمی هستند که می‌توانند به شما کمک کنند تا علت مشکل را شناسایی کنید. یک هشدار SELinux معمولاً شامل جزئیات زیر است:

  • نوع خطا (AVC denial): مشخص می‌کند که کدام درخواست دسترسی رد شده است.
  • آدرس فایل یا پورت: نشان‌دهنده منابعی است که دسترسی به آن‌ها رد شده است.
  • نوع فرآیند: مشخص می‌کند که کدام فرآیند سعی در انجام عملیات غیرمجاز داشته است.
  • پیام خطا: شامل توضیحاتی درباره خطا و دلایل آن.

مثال یک هشدار SELinux:

type=AVC msg=audit(1626198324.657:3019): avc:  denied  { write } for pid=1345 comm="httpd" name="index.html" dev="sda1" ino=1234567 scontext=system_u:system_r:httpd_t tcontext=unconfined_u:object_r:user_home_t tclass=file

در این هشدار:

  • pid=1345: شناسه فرآیند است که سعی کرده دسترسی به منبع را انجام دهد.
  • comm=”httpd”: فرآیند مربوطه که به آن دسترسی داده نشده است.
  • name=”index.html”: فایلی که دسترسی به آن رد شده است.
  • scontext و tcontext: به ترتیب شامل security context فرآیند و منبع مورد نظر هستند.
  • tclass=file: نوع منبع مورد نظر (در اینجا فایل) است.

4. رفع خطاها و هشدارها

پس از مشاهده هشدارهای SELinux، ممکن است نیاز به اصلاح سیاست‌ها برای حل مشکل داشته باشید. در اینجا دو روش معمول برای رفع مشکلات آورده شده است:

  1. استفاده از audit2allow

یکی از ابزارهای مفید برای تجزیه و تحلیل و رفع هشدارهای SELinux، ابزار audit2allow است. این ابزار به شما کمک می‌کند تا قوانین جدید برای حل مشکلات موجود ایجاد کنید. برای مثال، پس از مشاهده یک هشدار AVC، می‌توانید از دستور زیر استفاده کنید تا سیاست‌های جدید برای حل مشکل پیشنهاد شود:

audit2allow -w -a

این دستور تمامی هشدارهای موجود در لاگ‌ها را تجزیه و تحلیل کرده و قوانین جدیدی را برای رفع مشکلات ارائه می‌دهد.

اگر بخواهید این سیاست‌ها را در قالب یک ماژول جدید ذخیره کنید، از دستور زیر استفاده کنید:

audit2allow -M mymodule -a

سپس برای بارگذاری ماژول جدید به سیستم، از دستور زیر استفاده کنید:

semodule -i mymodule.pp
  1. تغییر سیاست‌های موجود

در صورتی که هشدار SELinux به دلیل یک سیاست اشتباه یا ناکافی باشد، می‌توانید سیاست‌های SELinux را به‌صورت دستی اصلاح کنید. برای این کار باید به فایل‌های پیکربندی SELinux مراجعه کرده و سیاست‌ها را تغییر دهید.

مثلاً در فایل پیکربندی /etc/selinux/targeted/contexts/files/file_contexts می‌توانید تغییراتی را اعمال کرده و دسترسی‌های لازم را به فایل‌ها یا دایرکتوری‌های خاص اضافه کنید.

5. بررسی مجدد لاگ‌ها پس از اعمال تغییرات

بعد از اعمال تغییرات و اصلاح سیاست‌ها، باید لاگ‌های SELinux را مجدداً بررسی کنید تا اطمینان حاصل کنید که دیگر هشدار جدیدی در ارتباط با همان مشکل مشاهده نمی‌شود.

برای مشاهده لاگ‌ها به‌طور پیوسته می‌توانید از دستور tail استفاده کنید:

tail -f /var/log/audit/audit.log

اگر دیگر هشدار AVC مشاهده نشد، این نشان‌دهنده این است که مشکل حل شده است.

جمع‌بندی

بررسی و تحلیل هشدارها و خطاهای SELinux در فایل‌های لاگ یک بخش مهم در مدیریت و پیکربندی SELinux است. با استفاده از ابزارهای مختلف مانند ausearch و audit2allow می‌توان هشدارهای SELinux را تجزیه و تحلیل کرده و به سرعت برای اصلاح مشکلات اقدام کرد. پس از اعمال تغییرات در سیاست‌ها، ضروری است که مجدداً لاگ‌ها را بررسی کنید تا مطمئن شوید که خطاها برطرف شده‌اند و سیستم به درستی کار می‌کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه استخراج پیام‌های AVC (Access Vector Cache)” subtitle=”توضیحات کامل”]در سیستم‌های مبتنی بر SELinux، پیام‌های AVC (Access Vector Cache) نقش حیاتی در ثبت و نمایش مشکلات و نقض‌های دسترسی دارند. این پیام‌ها زمانی به وجود می‌آیند که فرآیندها یا کاربران سعی دارند به منابعی دسترسی پیدا کنند که مطابق با سیاست‌های SELinux مجاز نیستند. این پیام‌ها در فایل‌های لاگ ثبت می‌شوند و می‌توانند برای شناسایی و رفع مشکلات امنیتی سیستم کمک کنند.

در این بخش، به نحوه استخراج و مشاهده پیام‌های AVC از لاگ‌ها خواهیم پرداخت.

1. نحوه مشاهده پیام‌های AVC در فایل‌های لاگ

پیام‌های AVC معمولاً در فایل‌های لاگ SELinux ثبت می‌شوند، به‌ویژه در فایل /var/log/audit/audit.log. برای مشاهده این پیام‌ها می‌توان از ابزارهایی مانند ausearch و audit2allow استفاده کرد. در اینجا، مراحل استخراج این پیام‌ها آورده شده است:

1.1 استفاده از دستور ausearch

ابزار ausearch به‌طور خاص برای جستجوی رویدادهای خاص از جمله پیام‌های AVC در لاگ‌ها طراحی شده است. برای استخراج پیام‌های AVC، از دستور زیر استفاده کنید:

ausearch -m avc -ts recent

در این دستور:

  • -m avc: این گزینه به‌طور خاص جستجو را محدود به پیام‌های AVC می‌کند.
  • -ts recent: این گزینه جستجو را محدود به پیام‌های اخیر می‌کند، به‌طوری‌که تنها پیام‌های جدید نمایش داده شوند.

برای مشاهده پیام‌ها در زمان واقعی (به‌صورت مداوم)، می‌توانید از دستور tail همراه با گزینه -f استفاده کنید:

tail -f /var/log/audit/audit.log | grep avc

این دستور به شما این امکان را می‌دهد که پیوسته پیام‌های جدید AVC را در لاگ‌ها مشاهده کنید.

1.2 استفاده از دستور audit2allow

ابزار audit2allow می‌تواند پیام‌های AVC را تحلیل کرده و قوانین جدید برای رفع مشکلات امنیتی پیشنهاد دهد. به‌طور معمول، برای استخراج پیام‌های AVC و مشاهده آن‌ها، از دستور زیر استفاده می‌شود:

audit2allow -w -a

این دستور تمامی پیام‌های AVC را از لاگ‌ها استخراج کرده و جزئیات مربوط به آن‌ها را نمایش می‌دهد. این ابزار می‌تواند به شما کمک کند تا دقیقاً متوجه شوید که کدام درخواست دسترسی رد شده است.

2. درک پیام‌های AVC

یک پیام AVC به‌طور معمول شامل اطلاعات زیر است:

  • نوع خطا: در اینجا، نوع خطا به صورت denied نمایش داده می‌شود که نشان‌دهنده رد شدن دسترسی است.
  • PID (شناسه فرآیند): شناسایی فرآیند مربوط به درخواست دسترسی.
  • نام فرآیند: نام فرآیند که در حال تلاش برای دسترسی به منبع است.
  • نام منبع: نام فایل، پورت یا منبعی که دسترسی به آن رد شده است.
  • scontext و tcontext: به ترتیب شامل security context فرآیند و منبع مورد نظر هستند.
  • نوع دسترسی (access type): نوع دسترسی که درخواست شده است، مانند read, write, execute و غیره.

نمونه‌ای از پیام AVC:

type=AVC msg=audit(1626198324.657:3019): avc:  denied  { write } for pid=1345 comm="httpd" name="index.html" dev="sda1" ino=1234567 scontext=system_u:system_r:httpd_t tcontext=unconfined_u:object_r:user_home_t tclass=file

در این پیام:

  • pid=1345: شناسه فرآیند که درخواست دسترسی داشته است.
  • comm=”httpd”: نام فرآیند که دسترسی را درخواست کرده است (در اینجا، Apache HTTP Server).
  • name=”index.html”: نام منبعی که دسترسی به آن رد شده است.
  • scontext=system_u:system_r:httpd_t: security context فرآیند.
  • tcontext=unconfined_u:object_r:user_home_t: security context منبع.
  • tclass=file: نوع منبع (در اینجا، یک فایل).
  • { write }: نوع دسترسی که درخواست شده بود (در اینجا، نوشتن در فایل).

3. استفاده از ابزارهای دیگر برای تحلیل و رفع مشکلات

برای تحلیل پیام‌های AVC و رفع مشکلات دسترسی، از ابزارهایی مانند audit2allow و semodule می‌توان استفاده کرد. ابزار audit2allow به شما این امکان را می‌دهد که به‌طور خودکار قوانین جدید ایجاد کنید که مشکل دسترسی را برطرف کند.

برای ایجاد یک ماژول جدید از قوانین پیشنهادی، از دستور زیر استفاده کنید:

audit2allow -M mymodule -a

این دستور قوانین پیشنهادی را در قالب یک ماژول با نام mymodule تولید می‌کند. سپس برای بارگذاری این ماژول، از دستور زیر استفاده کنید:

semodule -i mymodule.pp

4. بررسی تأثیر تغییرات بر روی سیستم

پس از اعمال تغییرات و بارگذاری ماژول‌های جدید، باید مجدداً لاگ‌ها را بررسی کنید تا مطمئن شوید که دیگر پیام‌های AVC وجود ندارد و سیستم به درستی عمل می‌کند. می‌توانید از دستور tail برای مشاهده لاگ‌ها به‌طور پیوسته استفاده کنید:

tail -f /var/log/audit/audit.log | grep avc

جمع‌بندی

پیام‌های AVC در SELinux نشان‌دهنده تلاش‌های دسترسی ناموفق به منابع سیستم هستند و تحلیل آن‌ها می‌تواند به شناسایی مشکلات امنیتی کمک کند. برای استخراج این پیام‌ها از لاگ‌ها، می‌توان از ابزارهایی مانند ausearch و audit2allow استفاده کرد. پس از شناسایی علت مشکلات، می‌توان با ایجاد قوانین جدید یا تغییر سیاست‌ها مشکلات را برطرف کرد. این فرآیند به افزایش امنیت سیستم و حفظ انسجام سیاست‌های SELinux کمک می‌کند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. مدیریت تداخلات SELinux با برنامه‌ها”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”شناسایی مشکلات ناشی از SELinux در برنامه‌ها” subtitle=”توضیحات کامل”]در سیستم‌های مبتنی بر SELinux، بسیاری از مشکلات مربوط به برنامه‌ها و سرویس‌ها ممکن است به دلیل سیاست‌های امنیتی سخت‌گیرانه SELinux ایجاد شوند. SELinux به‌طور مداوم دسترسی‌ها را نظارت و محدود می‌کند، و در صورتی که یک فرآیند یا برنامه تلاش کند به منابع یا سرویس‌هایی دسترسی پیدا کند که مطابق با سیاست‌های SELinux نباشد، این دسترسی‌ها به‌طور خودکار مسدود می‌شوند. این محدودیت‌ها ممکن است باعث ایجاد مشکلاتی در عملکرد برنامه‌ها شوند. در این بخش، نحوه شناسایی این مشکلات و ابزارهایی که برای رفع آن‌ها می‌توان استفاده کرد را بررسی خواهیم کرد.

1. مشخصات و علائم مشکلات ناشی از SELinux

مشکلات ناشی از SELinux معمولاً به یکی از اشکال زیر نمایان می‌شوند:

1.1 خطاهای دسترسی (Access Denied)

این مشکلات زمانی به وجود می‌آیند که یک برنامه یا فرآیند دسترسی به منابع خاصی مانند فایل‌ها، پورت‌ها یا دیگر اشیاء سیستم را نداشته باشد. SELinux این دسترسی‌ها را بر اساس سیاست‌های امنیتی خود مسدود می‌کند. این خطاها معمولاً در لاگ‌های SELinux ثبت می‌شوند.

1.2 عملکرد کند یا توقف ناگهانی برنامه‌ها

اگر SELinux دسترسی‌های مورد نیاز یک برنامه را مسدود کند، ممکن است آن برنامه نتواند به درستی کار کند، که می‌تواند باعث کندی یا حتی توقف ناگهانی برنامه شود.

1.3 خطاهای درون‌برنامه‌ای (Application-Specific Errors)

برخی از برنامه‌ها و سرویس‌ها ممکن است به دلیل سیاست‌های SELinux به درستی اجرا نشوند و پیام‌های خطای خاصی نمایش دهند که حاکی از مشکلات امنیتی SELinux باشد.

2. ابزارها و روش‌های شناسایی مشکلات SELinux

برای شناسایی مشکلات SELinux که در برنامه‌ها به وجود آمده‌اند، ابزارهای مختلفی وجود دارد که می‌توانند به راحتی به شناسایی علل مشکلات کمک کنند.

2.1 بررسی لاگ‌های SELinux

SELinux معمولاً تمامی رویدادهای مهم از جمله مسدود کردن دسترسی‌ها را در فایل‌های لاگ خود ثبت می‌کند. این لاگ‌ها معمولاً در /var/log/audit/audit.log ذخیره می‌شوند. برای شناسایی مشکلات، می‌توان این فایل‌ها را بررسی کرد.

2.2 ابزار ausearch

ابزار ausearch به شما این امکان را می‌دهد که پیام‌های AVC (Access Vector Cache) را که مربوط به دسترسی‌های مسدود شده هستند، جستجو کنید. برای پیدا کردن پیام‌های مرتبط با SELinux، از دستور زیر استفاده کنید:

ausearch -m avc -ts recent

این دستور تمام پیام‌های AVC که مربوط به دسترسی‌های مسدود شده است را از لاگ‌ها استخراج می‌کند.

2.3 ابزار audit2allow

ابزار audit2allow برای تجزیه و تحلیل پیام‌های AVC و تولید قوانین پیشنهادی جهت رفع مشکلات امنیتی استفاده می‌شود. برای پیدا کردن قوانین مربوط به مشکلات دسترسی، از دستور زیر استفاده کنید:

audit2allow -w -a

این دستور تمامی پیام‌های AVC را که نشان‌دهنده مشکلات دسترسی هستند، تجزیه و تحلیل کرده و جزئیات آن‌ها را به شما نمایش می‌دهد. این ابزار می‌تواند قوانینی را برای رفع مشکلات ایجاد کند.

2.4 ابزار seinfo

ابزار seinfo می‌تواند اطلاعاتی دقیق در مورد سیاست‌های SELinux و وضعیت سیستم ارائه دهد. این ابزار به شما کمک می‌کند تا درک بهتری از سیاست‌های موجود و فعالیت‌های آن‌ها در سیستم داشته باشید. به‌عنوان مثال، برای نمایش اطلاعات مربوط به انواع و برچسب‌ها می‌توانید از دستور زیر استفاده کنید:

seinfo -t

3. تحلیل لاگ‌ها و شناسایی مشکلات

3.1 جستجوی پیام‌های AVC

برای شناسایی مشکلات، به‌ویژه مشکلات ناشی از دسترسی‌های مسدود شده، باید پیام‌های AVC را در لاگ‌ها جستجو کرد. این پیام‌ها به‌طور معمول به‌صورت زیر هستند:

type=AVC msg=audit(1626198324.657:3019): avc:  denied  { write } for pid=1345 comm="httpd" name="index.html" dev="sda1" ino=1234567 scontext=system_u:system_r:httpd_t tcontext=unconfined_u:object_r:user_home_t tclass=file

در این پیام:

  • denied نشان‌دهنده این است که درخواست دسترسی رد شده است.
  • pid=1345 شناسه فرآیند است که در تلاش برای دسترسی به منبع بوده است.
  • comm=”httpd” نام فرآیند است.
  • name=”index.html” نام منبعی است که دسترسی به آن رد شده است.
  • scontext و tcontext به ترتیب نشان‌دهنده security context فرآیند و منبع هستند.

3.2 تجزیه و تحلیل مشکل

پس از شناسایی پیام‌های AVC، باید برای درک دقیق مشکل، پیام‌ها را تجزیه و تحلیل کنید. مثلاً، اگر فرآیند httpd تلاش کند به فایل index.html که در user_home_t قرار دارد، دسترسی پیدا کند، باید بررسی کنید که چرا SELinux این دسترسی را مسدود کرده است. ممکن است این فایل باید به نوع دیگری تعلق داشته باشد که SELinux آن را مجاز بداند.

4. رفع مشکلات ناشی از SELinux

برای رفع مشکلات ناشی از SELinux، می‌توان از روش‌های مختلفی استفاده کرد:

4.1 تغییر نوع فایل‌ها

گاهی اوقات، مشکل ناشی از اشتباه در تخصیص security context به فایل‌ها یا منابع است. برای تغییر نوع یا context یک فایل، از دستور chcon استفاده کنید:

chcon -t httpd_sys_content_t /path/to/file

این دستور نوع فایل را به httpd_sys_content_t تغییر می‌دهد، به‌طوری‌که Apache بتواند به آن دسترسی پیدا کند.

4.2 استفاده از audit2allow برای ایجاد سیاست‌های جدید

اگر به‌طور مداوم با مشکلات دسترسی مواجه می‌شوید، می‌توانید با استفاده از ابزار audit2allow قوانین جدید برای رفع مشکلات ایجاد کنید:

audit2allow -M mymodule -a
semodule -i mymodule.pp

این دستور ابتدا سیاست‌های پیشنهادی را به‌صورت یک ماژول به نام mymodule ایجاد کرده و سپس آن را بارگذاری می‌کند.

جمع‌بندی

مشکلات ناشی از SELinux در برنامه‌ها معمولاً به‌دلیل محدودیت‌های دسترسی ایجاد می‌شود. شناسایی این مشکلات از طریق لاگ‌ها، ابزارهای مختلف مانند ausearch و audit2allow امکان‌پذیر است. پس از شناسایی مشکل، می‌توان از روش‌هایی مانند تغییر نوع فایل‌ها و اضافه کردن قوانین جدید برای رفع آن‌ها استفاده کرد. در نهایت، SELinux به‌عنوان یک سیستم کنترل دسترسی اجباری (MAC) به امنیت سیستم کمک می‌کند و تحلیل و رفع مشکلات آن می‌تواند برنامه‌ها و سرویس‌ها را به‌درستی پیکربندی کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از ابزار sealert برای نمایش هشدارها و خطاهای SELinux” subtitle=”توضیحات کامل”]ابزار sealert یکی از ابزارهای مفید SELinux است که به‌طور خاص برای تجزیه و تحلیل پیام‌های هشدار و خطاهای مربوط به SELinux طراحی شده است. این ابزار به‌طور خودکار پیام‌های AVC و دیگر خطاها را تجزیه و تحلیل کرده و به شما اطلاعات مفیدی برای رفع مشکلات به‌صورت دقیق و سریع ارائه می‌دهد. در این بخش، نحوه استفاده از ابزار sealert برای نمایش هشدارها و خطاهای SELinux و تجزیه و تحلیل آن‌ها را بررسی خواهیم کرد.

1. نصب ابزار sealert

قبل از استفاده از ابزار sealert، ابتدا باید بسته مربوطه را نصب کنید. در اکثر توزیع‌های لینوکس مبتنی بر RHEL (Red Hat, CentOS, Fedora) این ابزار به‌طور پیش‌فرض همراه با بسته setools نصب می‌شود. برای نصب این ابزار می‌توانید از دستور زیر استفاده کنید:

sudo yum install setools-console

در توزیع‌های مبتنی بر Debian مانند Ubuntu، می‌توانید از دستور زیر استفاده کنید:

sudo apt-get install policycoreutils

2. استفاده از sealert برای مشاهده هشدارها

ابزار sealert می‌تواند پیام‌های هشدار و خطای SELinux را که در لاگ‌های audit ثبت شده‌اند، نمایش دهد. برای نمایش این پیام‌ها، کافی است دستور زیر را اجرا کنید:

sealert -a /var/log/audit/audit.log

این دستور به ابزار sealert می‌گوید که لاگ‌های audit را تجزیه و تحلیل کند و تمامی پیام‌های هشدار و خطای مربوط به SELinux را برای شما نمایش دهد.

3. تجزیه و تحلیل خروجی ابزار sealert

پس از اجرای دستور فوق، خروجی به‌طور پیش‌فرض شامل پیامی مشابه زیر خواهد بود:

SELinux is preventing /usr/sbin/httpd from read access on the file /var/www/html/index.html.

*****  Plugin allow_sys_admin  *****
If you trust the source of the file and want to allow the httpd to read the file, you can allow this access using the following command:
 
    ausearch -c 'httpd' --raw | audit2allow -M myhttpd
    semodule -i myhttpd.pp

در این پیام:

  • SELinux is preventing: نشان‌دهنده این است که SELinux دسترسی را مسدود کرده است.
  • /usr/sbin/httpd from read access on the file /var/www/html/index.html: مشخص می‌کند که کدام فرآیند (در اینجا httpd) از دسترسی به کدام فایل (در اینجا index.html) جلوگیری شده است.
  • Plugin allow_sys_admin: این نشان می‌دهد که یک plugin مخصوص امنیتی به شما پیشنهاد می‌دهد که آیا می‌خواهید این دسترسی مسدود شده را مجاز کنید یا نه.
  • Solution: در انتهای پیام، پیشنهادی برای رفع مشکل ارائه می‌شود. در این مورد، ابزار به شما دستوراتی را می‌دهد که می‌توانید برای مجاز کردن دسترسی httpd به فایل index.html استفاده کنید.

4. رفع مشکلات با استفاده از sealert

پس از مشاهده پیام‌ها و هشدارهای sealert، می‌توانید برای رفع مشکلات دسترسی، اقدام کنید. این ابزار به‌طور خودکار دستوراتی را برای رفع مشکلات پیشنهاد می‌دهد. به‌عنوان مثال، برای مجاز کردن دسترسی یک فرآیند به یک فایل خاص، می‌توانید از دستورات زیر استفاده کنید:

  1. استفاده از دستور ausearch برای جستجوی پیام‌های مربوط به خطا:
ausearch -c 'httpd' --raw
  1. استفاده از audit2allow برای ایجاد ماژول جدید با سیاست‌های لازم برای مجاز کردن دسترسی:
audit2allow -M myhttpd
  1. بارگذاری ماژول جدید SELinux:
semodule -i myhttpd.pp

این دستورات به شما کمک می‌کنند تا با استفاده از قوانین جدید، دسترسی‌های مورد نیاز را مجاز کنید.

5. مشاهده هشدارهای اخیر

اگر به دنبال هشدارها و خطاهای اخیر SELinux هستید، می‌توانید از دستور زیر استفاده کنید تا فقط هشدارهای جدید را مشاهده کنید:

sealert -l

این دستور به‌طور مختصر فهرستی از هشدارهای جدید را به شما نمایش می‌دهد.

6. خروجی HTML و گرافیکی با sealert

ابزار sealert علاوه بر نمایش خطاها به‌صورت متنی، این قابلیت را دارد که خروجی را به‌صورت HTML و گرافیکی نیز نمایش دهد. این ویژگی می‌تواند برای تجزیه و تحلیل عمیق‌تر و ارائه گزارش‌های زیبا بسیار مفید باشد. برای تولید گزارش به‌صورت HTML، از دستور زیر استفاده کنید:

sealert -b

این دستور یک گزارش گرافیکی از وضعیت SELinux و هشدارهای موجود ایجاد کرده و آن را در browser شما نمایش می‌دهد.

7. استخراج پیغام‌ها برای سرویس خاص

اگر می‌خواهید پیغام‌های خطا یا هشدارهای مربوط به یک سرویس خاص را جستجو کنید، می‌توانید از دستور زیر استفاده کنید:

sealert -a /var/log/audit/audit.log | grep "httpd"

این دستور فقط پیام‌های مربوط به سرویس httpd را از لاگ‌ها استخراج می‌کند.

جمع‌بندی

ابزار sealert یک ابزار قدرتمند و مفید برای تجزیه و تحلیل پیام‌های هشدار و خطای SELinux است. با استفاده از این ابزار می‌توان به‌راحتی مشکلات امنیتی ناشی از SELinux را شناسایی کرده و اقدام به رفع آن‌ها نمود. ابزار sealert پیام‌های دقیقی را در مورد خطاها ارائه می‌دهد و پیشنهادهایی برای رفع آن‌ها ارائه می‌کند که می‌تواند به‌طور خودکار اقدامات لازم را انجام دهد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی و حل مشکلات سرویس‌های رایج مانند Apache، Nginx و MySQL” subtitle=”توضیحات کامل”]در سیستم‌های لینوکسی که SELinux فعال است، ممکن است مشکلاتی در عملکرد سرویس‌های مختلف مانند Apache، Nginx و MySQL به دلیل محدودیت‌های اعمال‌شده توسط سیاست‌های SELinux پیش بیاید. این مشکلات معمولاً ناشی از سیاست‌های محدودکننده‌ای است که به فرآیندها و فایل‌های مرتبط با این سرویس‌ها اعمال می‌شود.

1. Apache

مشکلات معمولی در سرویس Apache به دلیل محدودیت‌های SELinux می‌تواند شامل دسترسی‌های غیرمجاز به دایرکتوری‌ها، فایل‌های پیکربندی یا اسکریپت‌های PHP باشد. برای حل این مشکلات، باید ابتدا لاگ‌های SELinux را بررسی کنید.

1.1. لاگ‌های SELinux

لاگ‌های SELinux به‌ویژه پیام‌های avc می‌توانند کمک کنند تا دلیل اصلی مشکلات Apache شناسایی شود.

دستور زیر را برای بررسی لاگ‌ها اجرا کنید:

ausearch -m avc -ts recent

این دستور پیام‌های avc که به‌تازگی تولید شده‌اند را نمایش می‌دهد.

1.2. استفاده از audit2allow برای ایجاد قوانین جدید

اگر پیام‌های avc نشان می‌دهند که SELinux مانع دسترسی Apache به منابع خاصی می‌شود، می‌توانید از ابزار audit2allow برای ایجاد یک قانون جدید استفاده کنید. برای مثال:

ausearch -m avc -ts recent | audit2allow -M apache_policy
semodule -i apache_policy.pp

این دستورات یک ماژول سیاست جدید ایجاد می‌کنند و آن را به SELinux اضافه می‌کنند تا اجازه دسترسی‌های لازم را به Apache بدهند.

2. Nginx

مشکلات مشابهی ممکن است برای Nginx به وجود آید، به‌ویژه هنگامی که Nginx به منابعی مانند فایل‌های لاگ یا دایرکتوری‌هایی دسترسی پیدا کند که سیاست‌های SELinux مانع از آن می‌شوند.

2.1. بررسی لاگ‌ها

برای بررسی لاگ‌های مربوط به Nginx، از دستور زیر استفاده کنید:

ausearch -m avc -ts recent | grep nginx
2.2. ایجاد قوانین جدید با audit2allow

اگر خطاهای SELinux را مشاهده کردید، از audit2allow برای ایجاد یک سیاست جدید برای Nginx استفاده کنید:

ausearch -m avc -ts recent | audit2allow -M nginx_policy
semodule -i nginx_policy.pp

3. MySQL

مشکلات در MySQL می‌تواند به دلایل مشابه به مشکلات Apache و Nginx رخ دهد. MySQL ممکن است نتواند به فایل‌ها یا پورت‌های خاصی دسترسی پیدا کند.

3.1. بررسی لاگ‌ها

برای بررسی لاگ‌ها و شناسایی مشکلات مربوط به MySQL، از دستور زیر استفاده کنید:

ausearch -m avc -ts recent | grep mysql
3.2. استفاده از audit2allow برای ایجاد قوانین جدید

برای حل مشکلات دسترسی MySQL با استفاده از audit2allow، دستور زیر را اجرا کنید:

ausearch -m avc -ts recent | audit2allow -M mysql_policy
semodule -i mysql_policy.pp

جمع بندی

در تمامی سرویس‌ها، هنگامی که SELinux مانع از عملکرد صحیح سرویس‌ها می‌شود، می‌توان با بررسی لاگ‌ها و شناسایی مشکلات، از ابزار audit2allow برای ایجاد سیاست‌های جدید و اصلاح تنظیمات SELinux استفاده کرد. این روش به شما کمک می‌کند تا به‌صورت مؤثر و امن مشکلات سرویس‌ها را حل کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. مجاز کردن دسترسی‌های محدود شده”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از ابزار audit2allow برای ایجاد قوانین جدید” subtitle=”توضیحات کامل”]ابزار audit2allow یکی از ابزارهای مهم در SELinux است که برای تجزیه و تحلیل لاگ‌ها و تبدیل پیام‌های avc به قوانین SELinux قابل استفاده است. این ابزار به‌ویژه زمانی که سرویس‌ها به دلیل محدودیت‌های SELinux دچار مشکلات می‌شوند، می‌تواند بسیار مفید باشد.

1. مفهوم و کاربرد audit2allow

هنگامی که SELinux مانع از انجام عملیاتی توسط یک برنامه یا سرویس می‌شود، پیام‌هایی با نوع avc در لاگ‌ها ثبت می‌شوند. این پیام‌ها نشان‌دهنده درخواست‌های مجاز نشده‌ای هستند که توسط SELinux شناسایی شده‌اند. ابزار audit2allow این پیام‌ها را تجزیه کرده و به‌صورت خودکار قوانین جدید SELinux تولید می‌کند که می‌تواند دسترسی‌های لازم را فراهم کند.

2. نحوه استفاده از audit2allow

برای استفاده از audit2allow ابتدا باید لاگ‌های مربوط به دسترسی‌های ناموفق را از طریق ابزار ausearch یا audit.log استخراج کنید. سپس این لاگ‌ها را به audit2allow ورودی می‌دهید تا سیاست‌های جدید تولید شوند.

2.1. بررسی لاگ‌های SELinux

قبل از استفاده از audit2allow باید لاگ‌های SELinux را بررسی کنید تا علت محدودیت‌ها را شناسایی کنید. برای این کار از دستور ausearch یا journalctl استفاده کنید:

ausearch -m avc -ts recent

این دستور پیام‌های avc از تاریخ و زمان اخیر را نمایش می‌دهد.

2.2. استفاده از audit2allow برای ایجاد قوانین

پس از شناسایی خطاها در لاگ‌ها، می‌توانید از audit2allow برای ایجاد قوانین جدید استفاده کنید. دستور زیر قوانین جدید را برای اجازه دسترسی به منابع خاص ایجاد می‌کند:

ausearch -m avc -ts recent | audit2allow -M my_custom_policy

در اینجا، my_custom_policy نام فایل خروجی است که ماژول سیاست جدید به آن اختصاص داده می‌شود.

2.3. نصب ماژول جدید

پس از ایجاد ماژول سیاست جدید با نام my_custom_policy.pp، باید آن را به SELinux اضافه کنید. برای این کار از دستور semodule استفاده می‌شود:

semodule -i my_custom_policy.pp

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

3. ایجاد قوانین جدید برای یک سرویس خاص

فرض کنید که SELinux مانع دسترسی Apache به یک فایل یا پورت خاص شده است. ابتدا باید لاگ‌ها را بررسی کرده و سپس از audit2allow برای ایجاد قانون استفاده کنید.

3.1. بررسی لاگ‌ها برای Apache

برای شناسایی خطاهای مربوط به Apache از دستور زیر استفاده کنید:

ausearch -m avc -ts recent | grep apache
3.2. ایجاد و نصب قوانین جدید

سپس از audit2allow برای ایجاد سیاست جدید استفاده کنید:

ausearch -m avc -ts recent | audit2allow -M apache_policy
semodule -i apache_policy.pp

این کار دسترسی‌های لازم را برای Apache فراهم می‌کند.

4. بررسی و تایید قوانین جدید

پس از اعمال قوانین جدید، بهتر است با استفاده از ابزارهای مختلف مانند seinfo و sesearch بررسی کنید که سیاست‌ها به درستی اعمال شده‌اند و هیچ مشکلی وجود ندارد.

برای مثال، از دستور seinfo برای بررسی وضعیت سیاست‌ها استفاده کنید:

seinfo -s
جمع بندی

ابزار audit2allow یک ابزار بسیار مفید در SELinux است که به‌طور خودکار سیاست‌های لازم برای رفع محدودیت‌های ناشی از SELinux را ایجاد می‌کند. این ابزار به شما کمک می‌کند تا به‌راحتی سیاست‌های امنیتی جدید را بدون نیاز به تغییرات دستی در فایل‌های پیکربندی SELinux اعمال کنید و از امنیت سیستم خود اطمینان حاصل نمایید.

 [/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تجزیه و تحلیل پیام‌های avc (Access Vector Cache)” subtitle=”توضیحات کامل”]پیام‌های avc (Access Vector Cache) در SELinux به‌عنوان یکی از اصلی‌ترین ابزارها برای شناسایی و تجزیه و تحلیل مشکلات دسترسی به منابع در سیستم عامل لینوکس استفاده می‌شود. این پیام‌ها معمولاً زمانی که SELinux مانع از انجام عملیاتی می‌شود، تولید می‌شوند و شامل اطلاعات مفیدی در مورد درخواست‌های دسترسی ناموفق هستند.

1. مفهوم پیام‌های avc

پیام‌های avc نشان‌دهنده وضعیت‌هایی هستند که در آن‌ها یک فرآیند یا برنامه سعی دارد به منابع خاصی دسترسی پیدا کند، اما SELinux این دسترسی را به دلایل مختلفی مسدود می‌کند. این پیام‌ها اطلاعات دقیقی راجع به نوع درخواست، فرایند، نوع منابع و نوع دسترسی مسدودشده فراهم می‌کنند.

پیام‌های avc به‌طور معمول در لاگ‌های سیستم ذخیره می‌شوند و شامل اطلاعاتی مانند شناسه فرایند (PID)، نوع دسترسی (مانند read, write)، نام فایل یا منبع، و نوع سیاست SELinux (مثلاً denied) هستند.

2. تجزیه و تحلیل پیام‌های avc

برای تجزیه و تحلیل پیام‌های avc، ابتدا باید این پیام‌ها را از لاگ‌های سیستم استخراج کنید. لاگ‌های SELinux معمولاً در فایل /var/log/audit/audit.log ذخیره می‌شوند و می‌توان آن‌ها را با استفاده از ابزارهایی مانند ausearch یا journalctl مشاهده کرد.

برای مشاهده پیام‌های avc از دستور زیر استفاده کنید:

ausearch -m avc

این دستور تمامی پیام‌های avc را در لاگ‌ها پیدا می‌کند و نمایش می‌دهد. در صورتی که بخواهید پیام‌های مربوط به یک فرآیند خاص را مشاهده کنید، می‌توانید از دستور زیر استفاده کنید:

ausearch -m avc -ts recent | grep process_name

در اینجا، process_name نام فرآیندی است که می‌خواهید لاگ‌های مربوط به آن را مشاهده کنید.

3. تجزیه و تحلیل جزئیات پیام‌های avc

پیام‌های avc شامل اطلاعات مختلفی هستند که برای شناسایی علت مسدود شدن دسترسی به منابع مفید می‌باشند. به‌طور کلی، یک پیام avc معمولاً شامل بخش‌های زیر است:

  • Type: نوع منبع (مثلاً file, port, process)
  • Action: نوع عمل انجام‌شده (مثلاً read, write, execute)
  • Denied: نشان‌دهنده اینکه دسترسی مسدود شده است
  • Process Name & PID: نام فرآیند و شناسه آن
  • Resource: منبعی که دسترسی به آن مسدود شده است (مثلاً مسیر فایل)

برای مثال، یک پیام avc می‌تواند به شکل زیر باشد:

type=AVC msg=audit(1607123456.123:456): avc:  denied  { read } for  pid=1234 comm="httpd" name="example.conf" dev="sda1" ino=1234567 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_config_t:s0 tclass=file

در این پیام:

  • pid=1234: شناسه فرایند که درخواست دسترسی کرده است.
  • comm="httpd": نام برنامه‌ای که درخواست دسترسی داده است.
  • name="example.conf": نام منبعی که درخواست دسترسی به آن شده است.
  • scontext=system_u:system_r:httpd_t:s0: زمینه امنیتی فرایند (در اینجا، فرایند httpd).
  • tcontext=system_u:object_r:httpd_config_t:s0: زمینه امنیتی منبع (در اینجا، فایل پیکربندی httpd).
  • tclass=file: نوع منبع (فایل).
4. حل مشکلات از طریق تجزیه و تحلیل پیام‌های avc

بعد از تحلیل پیام‌های avc، اگر متوجه شدید که دسترسی‌های مورد نیاز مسدود شده‌اند، می‌توانید از ابزارهایی مانند audit2allow برای تولید قوانین جدید SELinux استفاده کنید.

برای مثال، پس از مشاهده پیام avc در لاگ‌ها، می‌توانید از دستور زیر برای ایجاد قانون جدید استفاده کنید:

ausearch -m avc -ts recent | audit2allow -M custom_policy

این دستور پیام‌های avc را تجزیه کرده و قانون جدیدی برای رفع مسدودیت‌ها ایجاد می‌کند.

جمع‌بندی

پیام‌های avc در SELinux ابزار قدرتمندی برای شناسایی و تجزیه و تحلیل مشکلات دسترسی به منابع هستند. این پیام‌ها اطلاعات مهمی را درباره نوع درخواست‌ها و منابع مسدودشده فراهم می‌کنند که به مدیران سیستم کمک می‌کند تا علت مشکلات دسترسی را شناسایی و سیاست‌های امنیتی مناسب را برای رفع آن‌ها ایجاد کنند. از ابزارهای مختلف مانند ausearch، audit2allow و sealert می‌توان برای تحلیل و حل مشکلات ناشی از سیاست‌های SELinux استفاده کرد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”اضافه کردن دسترسی‌های مورد نیاز به سیاست‌های SELinux” subtitle=”توضیحات کامل”]در SELinux، زمانی که یک فرآیند یا سرویس تلاش می‌کند به منبعی دسترسی پیدا کند که برای آن دسترسی مجاز نیست، سیستم پیامی از نوع avc ایجاد می‌کند. برای رفع این مشکل و افزودن دسترسی‌های مورد نیاز، می‌توان سیاست‌های SELinux را تغییر داد. این فرایند معمولاً شامل تجزیه و تحلیل پیام‌های avc و سپس ایجاد قوانین جدید برای رفع مسدودیت‌ها و ارائه دسترسی به منابع مورد نیاز است.

1. شناسایی مشکل و پیام‌های avc

اولین قدم در افزودن دسترسی‌های مورد نیاز، شناسایی مشکل است. برای این کار، ابتدا باید پیام‌های avc را بررسی کنید. این پیام‌ها معمولاً در لاگ‌ها ذخیره می‌شوند. می‌توانید با استفاده از ابزار ausearch پیام‌های avc را جستجو کنید:

ausearch -m avc

در صورتی که پیام‌های avc مربوط به یک فرآیند خاص را می‌خواهید مشاهده کنید، از دستور زیر استفاده کنید:

ausearch -m avc -ts recent | grep process_name

این دستور، پیام‌های avc مربوط به فرآیند مورد نظر شما را نمایش می‌دهد.

2. استفاده از audit2allow برای تولید قوانین جدید

بعد از شناسایی مشکل و مشاهده پیام‌های avc، برای ایجاد قانون جدید به‌منظور رفع مسدودیت‌ها می‌توانید از ابزار audit2allow استفاده کنید. این ابزار به‌طور خودکار قوانین جدید برای SELinux تولید می‌کند که دسترسی‌های مسدودشده را مجاز می‌کند.

برای تولید و ذخیره قوانین جدید، می‌توانید از دستور زیر استفاده کنید:

ausearch -m avc -ts recent | audit2allow -M custom_policy

در این دستور:

  • ausearch -m avc -ts recent: پیام‌های avc اخیر را جستجو می‌کند.
  • audit2allow -M custom_policy: این ابزار قوانین جدید را بر اساس پیام‌های avc تولید می‌کند و آن‌ها را در یک ماژول SELinux به نام custom_policy ذخیره می‌کند.

این دستور یک فایل به نام custom_policy.pp تولید می‌کند که می‌توانید آن را به‌صورت ماژول جدید به سیاست‌های SELinux اضافه کنید.

3. بارگذاری ماژول جدید SELinux

بعد از تولید ماژول، برای اعمال آن، باید ماژول را بارگذاری کنید. این کار را با استفاده از دستور semodule انجام می‌دهید:

semodule -i custom_policy.pp

این دستور ماژول جدید custom_policy.pp را به سیاست‌های SELinux اضافه می‌کند و دسترسی‌های مسدودشده را مجاز می‌کند.

4. آزمایش و ارزیابی تغییرات

بعد از بارگذاری ماژول، بهتر است دوباره سیستم را آزمایش کنید تا مطمئن شوید که دسترسی‌ها به درستی اعمال شده‌اند. می‌توانید با استفاده از دستور ausearch یا بررسی لاگ‌های SELinux، پیام‌های avc جدید را جستجو کنید و اطمینان حاصل کنید که دسترسی‌های مسدودشده دیگر وجود ندارد.

برای مشاهده پیام‌های جدید avc از دستور زیر استفاده کنید:

ausearch -m avc

اگر پیام‌های avc جدیدی مشاهده نکردید و مشکل دسترسی حل شده است، تغییرات شما موفقیت‌آمیز بوده است.

جمع‌بندی

اضافه کردن دسترسی‌های مورد نیاز به سیاست‌های SELinux فرایندی است که شامل شناسایی مشکلات دسترسی، استفاده از ابزارهایی مانند audit2allow برای ایجاد قوانین جدید، و بارگذاری این قوانین به سیستم است. بعد از اعمال تغییرات، باید سیستم را آزمایش و ارزیابی کنید تا اطمینان حاصل کنید که دسترسی‌های مورد نیاز به‌درستی اعمال شده‌اند و دیگر هیچ مسدودی وجود ندارد.[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. استفاده از ابزارهای SELinux برای عیب‌یابی”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ابزار seinfo برای نمایش اطلاعات SELinux” subtitle=”توضیحات کامل”]ابزار seinfo یکی از ابزارهای مفید در SELinux است که به شما این امکان را می‌دهد تا اطلاعات مهم و جزئیات در مورد سیاست‌ها، تنظیمات و وضعیت SELinux را مشاهده کنید. با استفاده از این ابزار، می‌توانید اطلاعاتی مانند لیست نوع‌ها، نقش‌ها، مجوزها، ماژول‌ها و سایر اجزای مربوط به SELinux را استخراج کنید.

1. نصب ابزار seinfo

در ابتدا، اگر ابزار seinfo روی سیستم شما نصب نیست، می‌توانید آن را از طریق پکیج‌های موجود برای توزیع لینوکس خود نصب کنید. برای نصب آن در سیستم‌هایی که از YUM (مثل CentOS یا RHEL) استفاده می‌کنند، از دستور زیر استفاده کنید:

sudo yum install policycoreutils

در سیستم‌های مبتنی بر Debian یا Ubuntu، می‌توانید از دستور زیر استفاده کنید:

sudo apt-get install policycoreutils
2. استفاده از ابزار seinfo

ابزار seinfo از دستورات مختلفی برای نمایش اطلاعات در SELinux پشتیبانی می‌کند. در اینجا به برخی از مهم‌ترین دستورات آن پرداخته می‌شود:

3. نمایش اطلاعات سیاست‌ها

با استفاده از دستور زیر می‌توانید اطلاعات کلی در مورد سیاست‌های SELinux را مشاهده کنید:

seinfo -s

این دستور اطلاعاتی مانند تعداد ماژول‌ها، تعداد انواع مختلف (types) و نقش‌های (roles) مختلف در سیاست‌ها را به شما نشان می‌دهد.

4. نمایش انواع موجود در SELinux

اگر می‌خواهید لیستی از انواع (types) موجود در سیاست SELinux را مشاهده کنید، از دستور زیر استفاده کنید:

seinfo -t

این دستور لیستی از تمامی انواع تعریف‌شده در سیاست‌های SELinux را نمایش می‌دهد.

5. نمایش نقش‌ها و مجوزها

برای مشاهده نقش‌ها (roles) و ارتباط آن‌ها با انواع و مجوزها، می‌توانید از دستور زیر استفاده کنید:

seinfo -r

این دستور تمامی نقش‌های موجود در سیستم را نمایش می‌دهد و شما می‌توانید اطلاعاتی در مورد نحوه ارتباط آن‌ها با انواع مختلف در SELinux به دست آورید.

6. نمایش اطلاعات در مورد فرآیندها

برای مشاهده اطلاعات مربوط به فرآیندها و نحوه تعامل آن‌ها با سیاست‌های SELinux، می‌توانید از دستور زیر استفاده کنید:

seinfo -p

این دستور اطلاعات مربوط به فرآیندهای در حال اجرا که تحت کنترل SELinux هستند را به شما نشان می‌دهد.

7. نمایش اطلاعات در مورد فایل‌ها و دایرکتوری‌ها

برای مشاهده اطلاعات مربوط به فایل‌ها و دایرکتوری‌ها، از دستور زیر استفاده کنید:

seinfo -f

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

8. استفاده از گزینه‌های مختلف برای جستجوی دقیق‌تر

ابزار seinfo از چندین گزینه اضافی برای جستجو و فیلتر کردن اطلاعات پشتیبانی می‌کند. به عنوان مثال، برای جستجوی دقیق در مورد نوع خاصی از اشیاء، می‌توانید از گزینه‌های ترکیبی استفاده کنید:

seinfo -t | grep "httpd"

این دستور لیستی از انواع مرتبط با سرویس Apache (httpd) را به شما نمایش می‌دهد.

جمع‌بندی

ابزار seinfo ابزار بسیار مفیدی برای مدیران سیستم است که می‌خواهند اطلاعات دقیق و جزئیاتی در مورد سیاست‌های SELinux و نحوه پیکربندی آن‌ها در سیستم خود به دست آورند. با استفاده از این ابزار، می‌توانید اطلاعاتی در مورد انواع، نقش‌ها، فرآیندها، فایل‌ها و دایرکتوری‌ها در سیستم SELinux را مشاهده کنید و از آن‌ها برای بهبود پیکربندی و رفع مشکلات امنیتی استفاده کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ابزار sesearch برای جستجو در سیاست‌های SELinux” subtitle=”توضیحات کامل”]ابزار sesearch یکی از ابزارهای قدرتمند SELinux است که به شما امکان جستجو در سیاست‌های SELinux را می‌دهد. این ابزار به شما این امکان را می‌دهد که به سرعت سیاست‌ها، مجوزها، انواع، نقش‌ها و سایر اجزای SELinux را جستجو کنید و تجزیه و تحلیل کنید. با استفاده از sesearch، می‌توانید اطلاعات بسیار دقیقی در مورد تعاملات بین فرآیندها، انواع، و سیاست‌ها به دست آورید.

1. نصب ابزار sesearch

معمولاً ابزار sesearch بخشی از بسته policycoreutils است، که معمولاً به‌طور پیش‌فرض نصب شده است. در صورتی که این ابزار نصب نیست، می‌توانید آن را از طریق دستور زیر نصب کنید:

  • در سیستم‌های مبتنی بر YUM (مثل CentOS و RHEL):
sudo yum install policycoreutils-python
  • در سیستم‌های مبتنی بر APT (مثل Ubuntu و Debian):
sudo apt-get install policycoreutils
2. ساختار کلی دستور sesearch

ابزار sesearch برای جستجو در سیاست‌های SELinux از دستورهای مختلفی استفاده می‌کند. این دستورها به شما کمک می‌کنند تا به‌طور دقیق و سریع، سیاست‌ها و تعاملات مختلف بین اشیاء سیستم خود را پیدا کنید.

3. جستجو در سیاست‌های SELinux بر اساس نوع (Type)

اگر بخواهید سیاست‌هایی که به نوع خاصی تعلق دارند را جستجو کنید، از دستور زیر استفاده کنید:

sesearch -t <نوع>

به‌عنوان مثال، اگر می‌خواهید تمام سیاست‌هایی که به نوع httpd_t (که به سرویس Apache مربوط است) تعلق دارند را جستجو کنید، دستور زیر را وارد کنید:

sesearch -t httpd_t
4. جستجو بر اساس مجوزهای خاص

شما می‌توانید با استفاده از sesearch جستجوی خود را بر اساس مجوزهای خاص (مثل read, write, execute) انجام دهید. برای این کار از گزینه -p استفاده کنید:

sesearch -p read

این دستور سیاست‌هایی را که مجوز read را شامل می‌شوند، نمایش می‌دهد.

5. جستجو در سیاست‌ها بر اساس نقش‌ها

اگر می‌خواهید سیاست‌هایی که به یک نقش خاص تعلق دارند را جستجو کنید، می‌توانید از گزینه -r استفاده کنید. به‌عنوان مثال، برای جستجوی سیاست‌ها برای نقش system_r، دستور زیر را وارد کنید:

sesearch -r system_r

این دستور همه سیاست‌هایی را که به نقش system_r تعلق دارند به شما نشان می‌دهد.

6. جستجو در سیاست‌ها بر اساس فایل‌های خاص

اگر بخواهید سیاست‌هایی که به یک فایل خاص مربوط می‌شوند را جستجو کنید، می‌توانید از دستور زیر استفاده کنید:

sesearch -f /path/to/file

این دستور، سیاست‌هایی را که به فایل مشخص‌شده با مسیر /path/to/file مربوط هستند جستجو می‌کند.

7. جستجو برای دسترسی‌های خاص

برای جستجو در مورد دسترسی‌های خاص (مانند مجوزهای read, write و execute)، می‌توانید از دستور زیر استفاده کنید:

sesearch --allow -s <سورس> -t <نوع>

به‌عنوان مثال، برای جستجو در مورد دسترسی‌های اجازه داده‌شده به نوع httpd_t برای فرآیندهای مختلف، از دستور زیر استفاده کنید:

sesearch --allow -s httpd_t -t user_t
8. جستجوی کامل بر اساس دستورات خاص

برای جستجو در تمام دستورات و قوانین SELinux که با یک نوع خاص در ارتباط هستند، می‌توانید از دستور زیر استفاده کنید:

sesearch -A -t <نوع>

به‌عنوان مثال، برای جستجو در مورد تمامی قوانین SELinux که به نوع httpd_t مرتبط هستند، دستور زیر را وارد کنید:

sesearch -A -t httpd_t
9. جستجو در مورد فایل‌های سیاست‌های SELinux

برای جستجو در مورد فایل‌های سیاست SELinux و بررسی جزئیات مربوط به آن‌ها، می‌توانید از دستور زیر استفاده کنید:

sesearch -f /etc/selinux/

این دستور به شما اطلاعاتی در مورد سیاست‌هایی که در دایرکتوری /etc/selinux/ تعریف شده‌اند، ارائه می‌دهد.

جمع‌بندی

ابزار sesearch ابزار بسیار قدرتمندی است که به شما این امکان را می‌دهد تا در سیاست‌های SELinux جستجو کنید و اطلاعات دقیقی در مورد تعاملات میان انواع، مجوزها، فرآیندها و سیاست‌ها به دست آورید. این ابزار برای مدیران سیستم و افرادی که نیاز دارند جزئیات دقیقی در مورد نحوه پیکربندی SELinux کسب کنند، بسیار مفید است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از ابزار semanage برای مدیریت تنظیمات SELinux” subtitle=”توضیحات کامل”]ابزار semanage یکی از ابزارهای مهم SELinux است که به شما امکان مدیریت تنظیمات و پیکربندی‌های مختلف SELinux را می‌دهد. این ابزار به طور خاص برای مدیریت سیاست‌های SELinux در سطح سیستم و تنظیمات مختلف مانند نوع‌های فایل، پورت‌ها، و قوانین دسترسی طراحی شده است. با استفاده از semanage، می‌توانید تغییرات لازم را به راحتی اعمال کرده و پیکربندی‌های پیشرفته‌ای را برای SELinux انجام دهید.

1. نصب ابزار semanage

معمولاً ابزار semanage به همراه بسته policycoreutils-python نصب می‌شود. اگر این ابزار در سیستم شما موجود نیست، می‌توانید آن را از طریق دستور زیر نصب کنید:

  • در سیستم‌های مبتنی بر YUM (مثل CentOS و RHEL):
sudo yum install policycoreutils-python
  • در سیستم‌های مبتنی بر APT (مثل Ubuntu و Debian):
sudo apt-get install policycoreutils
2. کاربرد ابزار semanage

ابزار semanage برای انجام وظایف مختلف SELinux در سطح سیستم طراحی شده است. می‌توان از آن برای مدیریت تنظیمات مرتبط با پورت‌ها، انواع فایل‌ها، و سایر جزئیات SELinux استفاده کرد.

3. مدیریت انواع فایل‌ها با semanage

یکی از کاربردهای رایج semanage، مدیریت انواع فایل‌ها است. SELinux از انواع برای کنترل دسترسی به فایل‌ها استفاده می‌کند. با استفاده از دستور semanage fcontext می‌توانید نوع یک فایل خاص را تنظیم کنید.

  • برای مشاهده نوع‌های فایل‌های موجود در سیستم:
semanage fcontext -l
  • برای تغییر نوع یک فایل خاص (به عنوان مثال تغییر نوع یک دایرکتوری به httpd_sys_content_t برای استفاده با Apache):
sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'

این دستور باعث می‌شود تا تمامی فایل‌ها و دایرکتوری‌ها در مسیر /var/www/html به نوع httpd_sys_content_t تغییر یابند.

  • پس از اعمال تغییرات، برای اعمال نوع جدید به فایل‌ها، از دستور restorecon استفاده کنید:
sudo restorecon -R /var/www/html
4. مدیریت پورت‌ها با semanage

ابزار semanage به شما این امکان را می‌دهد که پورت‌های SELinux را مدیریت کنید. SELinux به پورت‌ها نیاز دارد تا کنترل دسترسی به سرویس‌ها را اعمال کند.

  • برای مشاهده پورت‌های SELinux در حال استفاده:
semanage port -l
  • برای اضافه کردن پورت جدید برای یک سرویس خاص (به عنوان مثال برای افزودن پورت 8080 به سرویس http_port_t):
sudo semanage port -a -t http_port_t -p tcp 8080

این دستور باعث می‌شود تا پورت 8080 به عنوان یک پورت برای سرویس HTTP با نوع http_port_t معرفی شود.

  • برای حذف پورت از پیکربندی SELinux:
sudo semanage port -d -t http_port_t -p tcp 8080
5. مدیریت قوانین SELinux با semanage

ابزار semanage همچنین به شما این امکان را می‌دهد که سیاست‌ها و قوانین SELinux را نیز مدیریت کنید.

  • برای مشاهده سیاست‌ها:
semanage boolean -l
  • برای فعال یا غیرفعال کردن یک قانون خاص، از دستور زیر استفاده کنید:
sudo semanage boolean -m --on httpd_can_network_connect

این دستور باعث می‌شود که قانون httpd_can_network_connect برای سرویس Apache فعال شود.

6. مدیریت دامنه‌های SELinux با semanage

یکی از کاربردهای دیگر ابزار semanage مدیریت دامنه‌های SELinux است. به طور معمول، SELinux از دامنه‌ها برای مدیریت اجرای برنامه‌ها و فرآیندها استفاده می‌کند.

  • برای مشاهده دامنه‌های موجود:
semanage login -l
  • برای تغییر دامنه یک کاربر خاص:
sudo semanage login -a -s staff_u user1

این دستور باعث می‌شود که کاربر user1 به دامنه staff_u اختصاص یابد.

جمع‌بندی

ابزار semanage یکی از ابزارهای قدرتمند SELinux است که امکان مدیریت تنظیمات مختلف SELinux را فراهم می‌آورد. از طریق این ابزار می‌توانید انواع فایل‌ها، پورت‌ها، قوانین، و دامنه‌های SELinux را به راحتی مدیریت کرده و پیکربندی‌های لازم را برای امنیت بهتر سیستم انجام دهید. این ابزار برای مدیران سیستم که نیاز به تنظیمات دقیق SELinux دارند بسیار مفید است.[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. حل مشکلات رایج SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”حل مشکلات دسترسی در برنامه‌های third-party” subtitle=”توضیحات کامل”]مشکلات دسترسی در برنامه‌های third-party می‌تواند به دلیل محدودیت‌های SELinux ایجاد شود. SELinux به طور پیش‌فرض محدودیت‌هایی را برای اجرای برنامه‌ها و دسترسی آنها به منابع سیستم اعمال می‌کند. این محدودیت‌ها ممکن است برای برنامه‌های third-party که نیاز به دسترسی به فایل‌ها، پورت‌ها یا دیگر منابع سیستم دارند، مشکلاتی ایجاد کند. در این بخش، نحوه حل این مشکلات دسترسی در برنامه‌های third-party به تفصیل بررسی خواهد شد.

1. شناسایی مشکلات دسترسی با SELinux

اولین قدم برای حل مشکلات دسترسی، شناسایی علت دقیق مشکل است. SELinux به طور پیش‌فرض تمامی فعالیت‌های مشکوک را در لاگ‌ها ثبت می‌کند. برای شناسایی مشکلات دسترسی ناشی از SELinux، می‌توانید از ابزارهایی مانند audit2allow، sealert یا بررسی مستقیم لاگ‌های SELinux استفاده کنید.

  • برای بررسی لاگ‌های SELinux و شناسایی مشکلات، ابتدا به فایل لاگ مربوطه مراجعه کنید:
sudo cat /var/log/audit/audit.log | grep AVC

در اینجا، AVC به معنای “Access Vector Cache” است که هشدارهای دسترسی به منابع توسط SELinux را نشان می‌دهد.

2. استفاده از ابزار audit2allow برای ایجاد قوانین جدید

اگر شناسایی کردید که SELinux به دلایلی مانند عدم وجود قانون مناسب برای برنامه third-party مانع از دسترسی به منابع خاص می‌شود، می‌توانید از ابزار audit2allow برای تولید قوانین جدید استفاده کنید. این ابزار بررسی می‌کند که SELinux چه فعالیت‌هایی را بلاک کرده و سپس به شما کمک می‌کند قوانینی را برای رفع این مشکلات ایجاد کنید.

  • برای مشاهده لاگ‌ها و تولید قوانین جدید از audit2allow استفاده کنید:
sudo grep 'avc:  denied' /var/log/audit/audit.log | audit2allow -M my_policy

این دستور، تمام پیام‌های avc: denied در لاگ‌ها را بررسی کرده و یک ماژول سیاست جدید به نام my_policy ایجاد می‌کند.

  • سپس برای نصب و بارگذاری ماژول جدید از دستور زیر استفاده کنید:
sudo semodule -i my_policy.pp

با این کار، قوانینی که نیاز است برای رفع مشکل دسترسی در SELinux به صورت خودکار ایجاد شده و اعمال خواهند شد.

3. تنظیم وضعیت SELinux به Permissive

اگر مشکل دسترسی مربوط به SELinux است و نیاز دارید که به طور موقت دسترسی‌ها را برای آزمایش باز کنید، می‌توانید SELinux را به حالت Permissive تغییر دهید. در این حالت، SELinux فقط هشدار می‌دهد و محدودیت‌ها را اعمال نمی‌کند، که می‌تواند برای شبیه‌سازی و عیب‌یابی مفید باشد.

  • برای تغییر وضعیت SELinux به Permissive به طور موقت:
sudo setenforce 0

در این حالت، SELinux به تمامی فعالیت‌ها اجازه می‌دهد و فقط هشدار می‌دهد که این اقدامات خارج از سیاست‌های امنیتی تعریف شده هستند.

  • برای بازگشت به حالت Enforcing، از دستور زیر استفاده کنید:
sudo setenforce 1
4. تنظیم پیکربندی فایل‌های پورت‌ها و نوع‌ها برای برنامه‌های third-party

گاهی اوقات، برنامه‌های third-party ممکن است به پورت‌ها یا نوع‌های خاصی نیاز داشته باشند که در پیکربندی SELinux تعریف نشده‌اند. در چنین مواردی، می‌توانید از ابزارهایی مانند semanage برای افزودن پورت‌ها و نوع‌های جدید برای برنامه‌ها استفاده کنید.

  • برای افزودن پورت جدید به SELinux برای یک سرویس خاص (مثل Apache یا Nginx) از دستور semanage port استفاده کنید:
sudo semanage port -a -t http_port_t -p tcp 8080

این دستور باعث می‌شود که SELinux اجازه دهد تا پورت 8080 به عنوان پورت HTTP مورد استفاده قرار گیرد.

5. بررسی دامنه‌ها و نقش‌های SELinux

در برخی موارد، ممکن است برنامه‌های third-party نیاز به تغییر دامنه‌ها و نقش‌های SELinux برای کارکرد صحیح داشته باشند. این تغییرات ممکن است به شما اجازه دهند که برنامه به منابع خاصی دسترسی پیدا کند که پیش از این محدود شده بودند.

  • برای تغییر دامنه SELinux برای یک فرآیند خاص، می‌توانید از دستور زیر استفاده کنید:
sudo semanage login -a -s my_domain user1

این دستور دامنه my_domain را به کاربر user1 اختصاص می‌دهد.

6. استفاده از ابزار sealert برای تحلیل و حل مشکلات

ابزار sealert یک ابزار مفید دیگر برای تحلیل خطاهای SELinux است. این ابزار می‌تواند هشدارها و خطاهای SELinux را با توضیحات و راه‌حل‌های پیشنهادی ارائه دهد.

  • برای بررسی هشدارها و خطاهای SELinux از sealert استفاده کنید:
sudo sealert -a /var/log/audit/audit.log

این دستور تمامی لاگ‌های SELinux را بررسی کرده و به شما اطلاعات دقیق و مفیدی در مورد خطاها و هشدارهای مربوط به دسترسی‌ها می‌دهد. این ابزار می‌تواند راه‌حل‌هایی را برای اصلاح مشکلات نیز پیشنهاد کند.

جمع‌بندی

برای حل مشکلات دسترسی در برنامه‌های third-party، ابتدا باید علت دقیق مشکل را شناسایی کنید. ابزارهای مختلفی مانند audit2allow، sealert و semanage به شما کمک می‌کنند تا مشکلات را شناسایی و حل کنید. همچنین، می‌توانید با تغییر تنظیمات SELinux به حالت‌های مختلف یا با افزودن پورت‌ها و نوع‌ها به برنامه‌های third-party اجازه دهید که به منابع مورد نیاز خود دسترسی پیدا کنند. این روش‌ها به شما کمک می‌کنند تا سیاست‌های SELinux را به طور صحیح تنظیم کرده و از امنیت سیستم محافظت کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”شناسایی و رفع مشکلات خاص در فایروال‌ها و سرویس‌های شبکه‌ای” subtitle=”توضیحات کامل”]یکی از چالش‌های مهم در سیستم‌های لینوکسی، به ویژه در محیط‌هایی که از SELinux استفاده می‌کنند، شناسایی و رفع مشکلات امنیتی مرتبط با فایروال‌ها و سرویس‌های شبکه‌ای است. SELinux به‌طور پیش‌فرض دسترسی‌های محدود به منابع سیستم و شبکه‌ها را فراهم می‌کند، که ممکن است باعث بروز مشکلاتی در سرویس‌دهی شبکه‌ای و تعامل با فایروال‌ها شود. در این بخش، نحوه شناسایی و رفع مشکلات خاص در فایروال‌ها و سرویس‌های شبکه‌ای بررسی خواهد شد.

1. شناسایی مشکلات دسترسی با بررسی لاگ‌ها

برای شناسایی مشکلات دسترسی که ناشی از تنظیمات SELinux و فایروال‌ها هستند، اولین گام، بررسی دقیق لاگ‌ها است. SELinux تمامی فعالیت‌هایی که دسترسی‌ها به منابع مختلف سیستم (از جمله شبکه) را محدود می‌کنند، در فایل‌های لاگ ثبت می‌کند. برای شروع، می‌توان از ابزارهایی مانند audit2allow برای بررسی دقیق این لاگ‌ها استفاده کرد.

  • برای بررسی خطاها و محدودیت‌های SELinux در لاگ‌ها، از دستور زیر استفاده کنید:
sudo cat /var/log/audit/audit.log | grep AVC

این دستور، تمامی پیام‌های مربوط به محدودیت‌های دسترسی که توسط SELinux ثبت شده‌اند را نشان می‌دهد. این پیام‌ها می‌توانند شامل مشکلاتی باشند که به دلیل تنظیمات نادرست فایروال یا سرویس‌های شبکه‌ای ایجاد شده‌اند.

2. استفاده از ابزار sealert برای تحلیل مشکلات

برای تجزیه و تحلیل بیشتر مشکلات SELinux، می‌توانید از ابزار sealert استفاده کنید. این ابزار گزارش‌هایی با جزئیات دقیق در مورد مشکلات امنیتی ایجاد شده توسط SELinux تولید می‌کند و معمولاً راه‌حل‌هایی برای رفع آنها پیشنهاد می‌دهد.

  • برای مشاهده هشدارها و خطاهای SELinux با استفاده از sealert، دستور زیر را وارد کنید:
sudo sealert -a /var/log/audit/audit.log

این دستور تمام هشدارها و مشکلات مرتبط با SELinux را بررسی کرده و اطلاعات مفیدی در مورد علت آنها و روش‌های رفع مشکلات فراهم می‌آورد.

3. بررسی مشکلات در فایروال‌ها

مشکلات مربوط به فایروال‌ها معمولاً به دلیل تنظیمات نادرست یا عدم تطابق بین فایروال و تنظیمات SELinux پیش می‌آید. برای مثال، ممکن است SELinux به‌طور پیش‌فرض برخی پورت‌ها یا سرویس‌های شبکه‌ای را مسدود کند، در حالی که فایروال نیز تنظیماتی مشابه داشته باشد.

  • برای بررسی وضعیت فایروال و پورت‌های باز سیستم، از ابزار firewalld یا iptables استفاده کنید.
sudo firewall-cmd --list-all

یا

sudo iptables -L

این دستورات وضعیت فعلی فایروال و قوانین مرتبط با پورت‌ها را نشان می‌دهند.

4. هم‌راستایی تنظیمات SELinux و فایروال‌ها

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

  • برای افزودن پورت‌ها به SELinux، از دستور semanage استفاده کنید:
sudo semanage port -a -t http_port_t -p tcp 8080

این دستور پورت 8080 را به فهرست پورت‌های مجاز SELinux برای سرویس‌های HTTP اضافه می‌کند.

  • همچنین می‌توانید برای اضافه کردن پورت‌ها به فایروال، از دستور زیر استفاده کنید:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

این دستورات پورت 8080 را به فایروال اضافه کرده و تغییرات را اعمال می‌کنند.

5. بررسی مشکلات خاص در سرویس‌های شبکه‌ای

سرویس‌های شبکه‌ای مانند Apache، Nginx یا MySQL ممکن است تحت تأثیر تنظیمات فایروال یا SELinux قرار گیرند و به دلایل مختلف نتوانند به درستی کار کنند. به عنوان مثال، ممکن است SELinux دسترسی به دایرکتوری‌ها یا فایل‌های خاص را مسدود کرده باشد که توسط این سرویس‌ها استفاده می‌شوند.

  • برای رفع مشکلات مرتبط با سرویس‌های Apache یا Nginx، می‌توانید از ابزارهای SELinux مانند audit2allow برای ایجاد سیاست‌های جدید استفاده کنید.
sudo grep 'avc:  denied' /var/log/audit/audit.log | audit2allow -M apache_policy
sudo semodule -i apache_policy.pp

این دستورات باعث می‌شوند که SELinux به Apache اجازه دسترسی به منابع خاصی که قبلاً مسدود شده بودند، بدهد.

6. استفاده از ابزار audit2allow برای ایجاد قوانین جدید

برای مشکلاتی که به دلیل سیاست‌های SELinux پیش آمده‌اند، می‌توانید از ابزار audit2allow برای ایجاد قوانین جدید استفاده کنید. این ابزار به شما کمک می‌کند تا قوانینی برای رفع مشکلات دسترسی ایجاد کرده و آنها را به سیستم اعمال کنید.

  • برای ایجاد قوانین جدید به منظور رفع مشکلات، از دستور زیر استفاده کنید:
sudo grep 'avc:  denied' /var/log/audit/audit.log | audit2allow -M custom_policy
sudo semodule -i custom_policy.pp

این دستورها به شما کمک می‌کنند تا مشکلات دسترسی را شناسایی کرده و قوانین لازم را برای رفع آنها ایجاد کنید.

جمع‌بندی

شناسایی و رفع مشکلات خاص در فایروال‌ها و سرویس‌های شبکه‌ای می‌تواند چالش‌هایی به همراه داشته باشد. با استفاده از ابزارهایی مانند audit2allow، sealert و firewall-cmd می‌توانید مشکلات مربوط به SELinux و فایروال‌ها را شناسایی و برطرف کنید. همچنین، با تطابق تنظیمات SELinux و فایروال می‌توانید از بروز مشکلات دسترسی جلوگیری کرده و سرویس‌های شبکه‌ای را به‌درستی راه‌اندازی کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”عیب‌یابی مشکلات مربوط به فایل‌های سیستمی و دایرکتوری‌ها” subtitle=”توضیحات کامل”]یکی از جنبه‌های مهم امنیتی در سیستم‌های لینوکسی، مدیریت دسترسی به فایل‌ها و دایرکتوری‌ها است. SELinux برای کنترل دسترسی‌ها به منابع مختلف سیستم، از جمله فایل‌ها و دایرکتوری‌ها، سیاست‌های امنیتی خاصی را اعمال می‌کند. مشکلاتی که در این زمینه ایجاد می‌شوند، معمولاً به‌دلیل تنظیمات نادرست SELinux، مالکیت نادرست فایل‌ها یا تنظیمات فایروال ایجاد می‌شوند. در این بخش، نحوه شناسایی و رفع مشکلات مرتبط با فایل‌های سیستمی و دایرکتوری‌ها در محیط SELinux بررسی خواهد شد.

1. شناسایی مشکلات دسترسی به فایل‌ها و دایرکتوری‌ها

یکی از اولین گام‌ها برای عیب‌یابی مشکلات مربوط به فایل‌ها و دایرکتوری‌ها، بررسی لاگ‌های SELinux است. SELinux تمام محدودیت‌های دسترسی به فایل‌ها و دایرکتوری‌ها را در لاگ‌ها ثبت می‌کند و این لاگ‌ها می‌توانند به شما در شناسایی مشکلات کمک کنند.

برای بررسی لاگ‌ها می‌توانید از دستور زیر استفاده کنید:

sudo cat /var/log/audit/audit.log | grep AVC

این دستور تمام پیام‌های مرتبط با دسترسی‌های مسدودشده یا غیرمجاز را که توسط SELinux شناسایی شده‌اند، نمایش می‌دهد. پیام‌ها معمولاً اطلاعات مفیدی از جمله فایل‌ها یا دایرکتوری‌هایی که به آنها دسترسی مسدود شده است را شامل می‌شوند.

2. بررسی مالکیت و مجوزهای فایل‌ها

یکی از دلایل رایج مشکلات دسترسی به فایل‌ها و دایرکتوری‌ها، تنظیمات نادرست مالکیت و مجوزها است. اگر فایل‌ها یا دایرکتوری‌ها به‌درستی متعلق به کاربر یا گروه مناسب نباشند یا مجوزهای نادرستی داشته باشند، SELinux ممکن است دسترسی به آنها را مسدود کند.

برای بررسی مالکیت و مجوزهای یک فایل یا دایرکتوری از دستور زیر استفاده کنید:

ls -l /path/to/file_or_directory

این دستور اطلاعات مربوط به مالکیت، گروه، و مجوزهای فایل یا دایرکتوری را نشان می‌دهد. مطمئن شوید که فایل‌ها و دایرکتوری‌ها متعلق به کاربر و گروه مناسب باشند و مجوزها به‌درستی تنظیم شده باشند.

اگر نیاز به تغییر مالکیت دارید، می‌توانید از دستور زیر استفاده کنید:

sudo chown user:group /path/to/file_or_directory

برای تغییر مجوزها نیز می‌توانید از دستور زیر استفاده کنید:

sudo chmod 755 /path/to/file_or_directory
3. بررسی وضعیت SELinux و نوع برچسب‌ها (Labels)

SELinux برای هر فایل و دایرکتوری یک برچسب امنیتی (label) تعیین می‌کند که نشان‌دهنده سیاست‌های امنیتی است که بر آن فایل یا دایرکتوری اعمال می‌شود. اگر این برچسب‌ها به‌درستی تنظیم نشده باشند، ممکن است SELinux دسترسی به فایل‌ها یا دایرکتوری‌ها را مسدود کند.

برای بررسی برچسب‌های SELinux بر روی فایل‌ها و دایرکتوری‌ها، از دستور زیر استفاده کنید:

ls -Z /path/to/file_or_directory

این دستور برچسب‌های امنیتی SELinux را برای فایل یا دایرکتوری مشخص‌شده نمایش می‌دهد.

اگر برچسب‌ها به‌درستی تنظیم نشده‌اند یا نیاز به تغییر دارند، می‌توانید از ابزار chcon برای تغییر برچسب‌ها استفاده کنید:

sudo chcon -t httpd_sys_content_t /path/to/file_or_directory

در این مثال، برچسب فایل یا دایرکتوری به httpd_sys_content_t تغییر داده می‌شود که به‌معنی محتوای قابل‌دسترسی برای سرویس وب Apache است.

4. استفاده از ابزار audit2allow برای ایجاد قوانین جدید

اگر SELinux دسترسی به فایل یا دایرکتوری خاصی را مسدود کرده است و نمی‌توانید مشکل را با تغییر مالکیت یا برچسب‌ها حل کنید، می‌توانید از ابزار audit2allow برای ایجاد یک قانون جدید SELinux که اجازه دسترسی به فایل یا دایرکتوری موردنظر را بدهد، استفاده کنید.

ابتدا با استفاده از دستور زیر پیغام‌های مربوط به دسترسی مسدودشده را در لاگ‌ها جستجو کنید:

sudo grep 'avc:  denied' /var/log/audit/audit.log

سپس با استفاده از ابزار audit2allow قوانین جدید را برای رفع مشکل ایجاد کنید:

sudo grep 'avc:  denied' /var/log/audit/audit.log | audit2allow -M custom_policy
sudo semodule -i custom_policy.pp

این دستورات به‌طور خودکار یک قانون جدید برای رفع مشکل ایجاد کرده و آن را در سیستم بارگذاری می‌کنند.

5. بررسی مشکلات با ابزار sealert

اگر هنوز مشکلاتی باقی مانده باشد یا نیاز به تحلیل بیشتر داشته باشید، می‌توانید از ابزار sealert برای مشاهده هشدارها و پیام‌های تحلیلی استفاده کنید. این ابزار اطلاعات دقیقی در مورد مشکلات دسترسی و نحوه رفع آنها ارائه می‌دهد.

برای مشاهده هشدارها و خطاهای SELinux، از دستور زیر استفاده کنید:

sudo sealert -a /var/log/audit/audit.log

این ابزار معمولاً پیشنهادات مفیدی برای رفع مشکلات ارائه می‌دهد که می‌تواند به‌طور خاص به مشکلات دسترسی به فایل‌ها و دایرکتوری‌ها مرتبط باشد.

جمع‌بندی

عیب‌یابی مشکلات مربوط به فایل‌های سیستمی و دایرکتوری‌ها در SELinux نیازمند بررسی دقیق لاگ‌ها، مالکیت و مجوزهای فایل‌ها، برچسب‌های SELinux و استفاده از ابزارهایی مانند audit2allow و sealert برای شناسایی و رفع مشکلات است. با تنظیم درست مالکیت، مجوزها و برچسب‌ها، و همچنین استفاده از ابزارهای SELinux برای اصلاح سیاست‌ها، می‌توانید مشکلات دسترسی به منابع سیستمی را به‌طور مؤثر حل کنید و امنیت سیستم را بهبود ببخشید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 6. پیکربندی قوانین امنیتی جدید”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه نوشتن و اعمال سیاست‌های امنیتی جدید با استفاده از فایل‌های پیکربندی SELinux” subtitle=”توضیحات کامل”]یکی از قابلیت‌های قدرتمند SELinux، توانایی نوشتن و اعمال سیاست‌های امنیتی سفارشی است که می‌تواند به‌طور خاص نیازهای امنیتی سیستم‌های مختلف را برآورده کند. این سیاست‌ها به‌طور عمده از طریق فایل‌های پیکربندی و قوانین نوشته‌شده در آن‌ها پیاده‌سازی می‌شوند. در این بخش به‌طور کامل نحوه نوشتن، ویرایش و اعمال سیاست‌های امنیتی جدید با استفاده از فایل‌های پیکربندی SELinux توضیح داده خواهد شد.

1. ساختار فایل‌های پیکربندی SELinux

در سیستم‌های لینوکسی، فایل‌های پیکربندی SELinux معمولاً در مسیر /etc/selinux/ قرار دارند. فایل‌های اصلی در این مسیر عبارتند از:

  • /etc/selinux/config: این فایل تنظیمات کلی SELinux را برای سیستم تعریف می‌کند و تعیین می‌کند که SELinux در حالت‌ها یا نوع‌های مختلفی اجرا شود.
  • سیاست‌های SELinux: این سیاست‌ها معمولاً در دایرکتوری‌های خاصی مانند /etc/selinux/targeted/ یا /etc/selinux/strict/ ذخیره می‌شوند.
2. نوشتن سیاست‌های سفارشی

برای نوشتن یک سیاست سفارشی در SELinux، شما باید ابتدا یک فایل سیاست جدید ایجاد کنید و سپس آن را با استفاده از ابزارهای موجود، مانند checkmodule و semodule, کامپایل و بارگذاری کنید.

2.1 ایجاد فایل سیاست جدید

فایل‌های سیاست SELinux معمولاً با پسوند .te (برای Type Enforcement) ایجاد می‌شوند. یک فایل .te به‌طور معمول حاوی قوانین مربوط به نوع‌های مختلف (Types) و دسترسی‌ها به منابع سیستم است.

برای مثال، فایل سیاستی به نام my_custom_policy.te می‌تواند به شکل زیر نوشته شود:

module my_custom_policy 1.0;

require {
    type httpd_t;
    type var_log_t;
    class file { read write };
}

# این قانون به سرویس HTTP اجازه می‌دهد که فایل‌های در دایرکتوری /var/log را بخواند و بنویسد
allow httpd_t var_log_t:file { read write };

در اینجا، httpd_t نوع امنیتی مربوط به سرویس Apache است، و var_log_t نوع امنیتی مربوط به دایرکتوری‌های لاگ سیستم. این سیاست به سرویس Apache اجازه می‌دهد که به فایل‌های موجود در /var/log دسترسی داشته باشد.

2.2 کامپایل و نصب سیاست

پس از نوشتن فایل سیاست جدید، باید آن را کامپایل و به‌عنوان ماژول SELinux نصب کنید.

برای کامپایل فایل سیاست، از دستور checkmodule استفاده کنید:

checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te

این دستور فایل my_custom_policy.mod را ایجاد می‌کند. سپس برای تبدیل آن به فرمت قابل‌استفاده توسط SELinux، از دستور semodule_package استفاده می‌کنید:

semodule_package -o my_custom_policy.pp -m my_custom_policy.mod

در این مرحله، فایل my_custom_policy.pp ایجاد می‌شود که ماژول سیاست کامپایل‌شده است.

برای نصب ماژول SELinux جدید از دستور semodule استفاده می‌شود:

semodule -i my_custom_policy.pp

این دستور ماژول جدید را به سیستم بارگذاری کرده و سیاست جدید را اعمال می‌کند.

3. تغییر وضعیت SELinux در فایل پیکربندی

در فایل /etc/selinux/config می‌توان وضعیت SELinux و نوع سیاست مورد استفاده را تعیین کرد. به‌طور پیش‌فرض، دو حالت اصلی برای SELinux وجود دارد: Enforcing و Permissive.

  • Enforcing: در این حالت، SELinux تمامی قوانین امنیتی را به‌طور کامل اجرا می‌کند.
  • Permissive: در این حالت، SELinux قوانین را فقط ثبت می‌کند اما به‌طور فعال اجرا نمی‌کند.

برای تغییر حالت SELinux، فایل پیکربندی /etc/selinux/config را ویرایش کنید:

sudo nano /etc/selinux/config

سپس مقدار SELINUX را به یکی از مقادیر زیر تغییر دهید:

SELINUX=enforcing   # برای اعمال قوانین به‌طور کامل
SELINUX=permissive  # برای ثبت هشدارها بدون اعمال محدودیت‌ها

بعد از اعمال تغییرات، سیستم را ریبوت کنید تا تغییرات جدید بارگذاری شوند.

4. استفاده از ابزارهای مختلف برای اعمال سیاست‌ها

در کنار نوشتن و اعمال سیاست‌های سفارشی، SELinux ابزارهایی را برای مدیریت و تنظیم مجدد سیاست‌ها فراهم می‌کند. این ابزارها شامل موارد زیر هستند:

  • semanage: برای مدیریت تنظیمات SELinux مانند پورت‌ها، فایل‌ها و انواع امنیتی.
  • seinfo: برای نمایش اطلاعات مختلف در مورد سیاست‌های SELinux.
  • sesearch: برای جستجو در سیاست‌ها و قوانین موجود در SELinux.

برای مثال، برای اضافه کردن یک پورت جدید به سیاست SELinux، می‌توانید از دستور semanage port -a استفاده کنید:

semanage port -a -t http_port_t -p tcp 8080

این دستور پورت 8080 را به‌عنوان پورت امن برای سرویس HTTP اضافه می‌کند.

جمع‌بندی

نوشتن و اعمال سیاست‌های امنیتی جدید در SELinux از طریق فایل‌های پیکربندی و قوانین امنیتی سفارشی امکان‌پذیر است. ابتدا باید فایل‌های سیاست جدید با پسوند .te ایجاد کنید و سپس آن‌ها را با استفاده از ابزارهایی مانند checkmodule و semodule کامپایل و نصب کنید. همچنین برای مدیریت وضعیت SELinux و تنظیمات مربوطه از فایل پیکربندی /etc/selinux/config و ابزارهایی مانند semanage، seinfo و sesearch می‌توان استفاده کرد. با استفاده از این ابزارها می‌توانید به‌طور مؤثر سیاست‌های امنیتی سفارشی را اعمال کنید و سطح امنیت سیستم خود را بهینه کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از دستور semanage برای ایجاد و مدیریت قوانین جدید” subtitle=”توضیحات کامل”]دستور semanage یکی از ابزارهای قدرتمند برای مدیریت تنظیمات و پیکربندی‌های SELinux است. با استفاده از این دستور، می‌توان انواع مختلفی از قوانین SELinux را اضافه، حذف، یا ویرایش کرد. این ابزار برای مدیریت قوانین مربوط به پورت‌ها، انواع فایل‌ها، و منابع سیستم استفاده می‌شود.

در این بخش، به‌طور کامل نحوه استفاده از دستور semanage برای ایجاد و مدیریت قوانین جدید در SELinux توضیح داده خواهد شد.

1. نصب ابزار semanage

برای استفاده از دستور semanage، ابتدا باید بسته policycoreutils-python را نصب کنید، زیرا این بسته ابزارهای مورد نیاز SELinux را فراهم می‌کند.

برای نصب این بسته در سیستم‌های مبتنی بر RHEL/CentOS، از دستور زیر استفاده کنید:

sudo yum install policycoreutils-python

برای سیستم‌های مبتنی بر Debian/Ubuntu، دستور زیر را وارد کنید:

sudo apt-get install policycoreutils-python-utils
2. استفاده از semanage برای مدیریت پورت‌ها

یکی از رایج‌ترین کاربردهای semanage، مدیریت پورت‌های مربوط به SELinux است. شما می‌توانید پورت‌های جدید را به انواع امنیتی مختلف اضافه کنید.

برای مثال، اگر بخواهید پورت 8080 را برای سرویس HTTP اضافه کنید، می‌توانید از دستور زیر استفاده کنید:

sudo semanage port -a -t http_port_t -p tcp 8080

در این دستور:

  • -a به معنی اضافه کردن پورت جدید است.
  • -t http_port_t نوع امنیتی پورت را تعیین می‌کند.
  • -p tcp پروتکل استفاده‌شده (در اینجا TCP) را مشخص می‌کند.
  • 8080 شماره پورت است.

اگر بخواهید پورت خاصی را حذف کنید، از دستور زیر استفاده می‌شود:

sudo semanage port -d -t http_port_t -p tcp 8080

در اینجا، -d به معنی حذف پورت است.

3. استفاده از semanage برای مدیریت فایل‌ها و دایرکتوری‌ها

یکی دیگر از کاربردهای semanage، مدیریت دسترسی‌های SELinux به فایل‌ها و دایرکتوری‌ها است. این ابزار به شما اجازه می‌دهد تا نوع امنیتی (type) فایل‌ها و دایرکتوری‌ها را تنظیم کنید.

برای مثال، اگر بخواهید یک دایرکتوری جدید به نام /data/myapp ایجاد کرده و نوع امنیتی آن را httpd_sys_content_t (که نوع امنیتی مربوط به محتوای وب سرور است) قرار دهید، می‌توانید از دستور زیر استفاده کنید:

sudo semanage fcontext -a -t httpd_sys_content_t '/data/myapp(/.*)?'

در این دستور:

  • -a برای اضافه کردن یک فایل/دایرکتوری جدید است.
  • -t httpd_sys_content_t نوع امنیتی را تعیین می‌کند.
  • '/data/myapp(/.*)?' مسیر دایرکتوری و فایل‌های زیرمجموعه آن را مشخص می‌کند.

برای اعمال تغییرات، از دستور restorecon استفاده می‌شود که امنیت فایل‌ها را به‌روزرسانی می‌کند:

sudo restorecon -R /data/myapp
4. استفاده از semanage برای مدیریت انواع (Types)

انواع (Types) در SELinux تعیین می‌کنند که یک فرآیند خاص می‌تواند به چه منابعی دسترسی داشته باشد. با استفاده از semanage می‌توان انواع جدیدی ایجاد کرد و آن‌ها را به سرویس‌ها یا منابع مختلف نسبت داد.

برای اضافه کردن یک نوع جدید (type) به یک سرویس، می‌توانید از دستور زیر استفاده کنید:

sudo semanage fcontext -a -t my_custom_type_t '/data/myapp(/.*)?'

در اینجا، my_custom_type_t یک نوع امنیتی سفارشی است که به دایرکتوری /data/myapp اعمال می‌شود.

5. مشاهده و مدیریت قوانین موجود

برای مشاهده تنظیمات و سیاست‌های موجود در SELinux، می‌توانید از دستور semanage بدون هیچ گزینه‌ای استفاده کنید. به‌طور مثال، برای مشاهده پورت‌های موجود در SELinux، دستور زیر را وارد کنید:

sudo semanage port -l

این دستور فهرستی از پورت‌های مربوط به SELinux را به شما نمایش می‌دهد. شما همچنین می‌توانید به‌طور مشابه، فایل‌ها و دایرکتوری‌ها را با استفاده از دستور زیر مشاهده کنید:

sudo semanage fcontext -l
جمع‌بندی

دستور semanage ابزاری است که به شما این امکان را می‌دهد تا قوانین و پیکربندی‌های SELinux را به‌راحتی مدیریت کنید. از این دستور برای اضافه کردن یا حذف کردن پورت‌ها، مدیریت انواع امنیتی فایل‌ها و دایرکتوری‌ها، و تنظیم انواع جدید استفاده می‌شود. با استفاده از semanage می‌توان سیاست‌های امنیتی سفارشی و دقیق‌تری برای سرویس‌ها و منابع مختلف سیستم نوشت.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تعریف و تنظیم محدودیت‌های جدید برای برنامه‌ها و سرویس‌ها” subtitle=”توضیحات کامل”]SELinux به عنوان یک مدل کنترل دسترسی اجباری (MAC)، به شما این امکان را می‌دهد که دسترسی به منابع سیستم را برای برنامه‌ها و سرویس‌ها محدود کنید. با استفاده از SELinux، می‌توانید محدودیت‌های جدیدی برای برنامه‌ها و سرویس‌های مختلف سیستم خود ایجاد کنید تا امنیت را افزایش دهید و از دسترسی‌های غیرمجاز جلوگیری کنید.

در این بخش، نحوه تعریف و تنظیم محدودیت‌های جدید برای برنامه‌ها و سرویس‌ها با استفاده از ابزارهای SELinux و سیاست‌های امنیتی سفارشی به‌طور کامل توضیح داده خواهد شد.

1. تعریف محدودیت‌ها برای سرویس‌ها

محدودیت‌ها برای سرویس‌ها معمولاً به‌منظور جلوگیری از دسترسی غیرمجاز به فایل‌ها و منابع خاص تنظیم می‌شوند. برای مثال، اگر یک سرویس خاص به دایرکتوری‌های خاصی دسترسی داشته باشد، می‌توانیم از سیاست‌های SELinux استفاده کنیم تا دسترسی‌ها را محدود کنیم.

برای محدود کردن دسترسی سرویس‌ها، ابتدا باید نوع (type) امنیتی سرویس را بررسی کنیم و سپس این نوع را به منابع مختلف متصل کنیم.

2. استفاده از semanage برای تعریف محدودیت‌های جدید

فرض کنید سرویس HTTP (Apache یا Nginx) نیاز دارد که فقط به یک دایرکتوری خاص دسترسی داشته باشد. می‌توانیم از دستور semanage برای تخصیص محدودیت‌های جدید استفاده کنیم. برای مثال:

sudo semanage fcontext -a -t httpd_sys_content_t '/data/myapp(/.*)?'

در این دستور:

  • -a به معنی اضافه کردن یک دایرکتوری جدید است.
  • -t httpd_sys_content_t به این معنی است که نوع امنیتی مربوط به محتوای وب سرور را برای این دایرکتوری اعمال می‌کنیم.
  • '/data/myapp(/.*)?' مسیر دایرکتوری و فایل‌های زیرمجموعه آن را مشخص می‌کند.

پس از آن باید از دستور restorecon برای اعمال تغییرات استفاده کنیم:

sudo restorecon -R /data/myapp
3. ایجاد و اعمال سیاست‌های محدود کننده برای سرویس‌ها

برای ایجاد محدودیت‌های جدید در سطح سیاست‌های SELinux، می‌توانیم سیاست‌های سفارشی ایجاد کنیم. برای این کار، از ابزار audit2allow برای استخراج سیاست‌های لازم از لاگ‌های SELinux و سپس ایجاد یک ماژول جدید استفاده می‌کنیم.

برای مثال، اگر SELinux به دلیل دسترسی یک برنامه خاص به منابع سیستم هشدار دهد، می‌توانیم با استفاده از دستور زیر قوانین جدیدی ایجاد کنیم:

  1. ابتدا لاگ‌های مربوط به خطاهای SELinux را با استفاده از دستور زیر بررسی کنید:
sudo ausearch -m avc -ts recent
  1. سپس از دستور audit2allow برای ایجاد قوانین جدید استفاده کنید:
sudo ausearch -m avc -ts recent | audit2allow -M my_custom_policy
  1. بعد از ایجاد سیاست، آن را با دستور semodule بارگذاری کنید:
sudo semodule -i my_custom_policy.pp

این دستورات سیاست‌های سفارشی جدید را ایجاد کرده و به SELinux اعمال می‌کنند.

4. محدودیت‌های فایل‌ها و دایرکتوری‌ها

گاهی اوقات ممکن است بخواهید به‌طور خاص دسترسی سرویس‌ها را به فایل‌ها و دایرکتوری‌ها محدود کنید. به‌عنوان مثال، اگر بخواهید یک فایل خاص را از دسترسی سرویس وب محدود کنید، می‌توانید نوع امنیتی آن را تغییر دهید.

برای این کار از دستور semanage fcontext استفاده می‌کنیم. مثالی از تغییر نوع امنیتی یک فایل خاص:

sudo semanage fcontext -a -t my_custom_type_t '/data/myapp/secret_file'

در این دستور، نوع امنیتی جدیدی با نام my_custom_type_t به فایل secret_file در مسیر /data/myapp/ اختصاص داده می‌شود.

5. محدودیت‌های شبکه‌ای

اگر نیاز به محدود کردن دسترسی برنامه‌ها به پورت‌های خاص شبکه‌ای دارید، می‌توانید از دستور semanage port استفاده کنید. این دستور به شما این امکان را می‌دهد که دسترسی سرویس‌ها به پورت‌های خاص را محدود کنید.

برای مثال، برای محدود کردن دسترسی سرویس HTTP به پورت 8080، می‌توانید از دستور زیر استفاده کنید:

sudo semanage port -a -t http_port_t -p tcp 8080

در اینجا:

  • -a به معنی اضافه کردن پورت جدید است.
  • -t http_port_t نوع امنیتی پورت را تعیین می‌کند.
  • -p tcp پروتکل استفاده‌شده (در اینجا TCP) را مشخص می‌کند.
  • 8080 شماره پورت است.

اگر بخواهید پورت خاصی را حذف کنید، از دستور زیر استفاده کنید:

sudo semanage port -d -t http_port_t -p tcp 8080
جمع‌بندی

با استفاده از ابزارهایی مانند semanage، audit2allow و semodule، می‌توان محدودیت‌های جدیدی برای برنامه‌ها و سرویس‌ها ایجاد کرد. این ابزارها به شما کمک می‌کنند تا دسترسی‌ها را به فایل‌ها، پورت‌ها و دایرکتوری‌ها محدود کنید و از دسترسی‌های غیرمجاز جلوگیری کنید. تنظیم سیاست‌های SELinux برای سرویس‌ها و برنامه‌های خاص می‌تواند امنیت سیستم شما را به‌طور چشمگیری افزایش دهد و از مشکلات ناشی از دسترسی‌های غیرمجاز جلوگیری کند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 7. استفاده از SELinux در محیط‌های توسعه و آزمایش”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از SELinux در تست‌های محیط‌های توسعه‌ای (مثل Docker و Kubernetes)” subtitle=”توضیحات کامل”]SELinux می‌تواند در محیط‌های توسعه‌ای مانند Docker و Kubernetes نقش مهمی در تضمین امنیت ایفا کند. این سیستم‌ها اغلب به دلیل نیاز به دسترسی به منابع مختلف و اجرای اپلیکیشن‌ها در کانتینرهای مجزا، با چالش‌های امنیتی روبرو هستند. SELinux می‌تواند به‌عنوان یک لایه امنیتی اضافی برای کنترل دقیق دسترسی به منابع و فرآیندهای مختلف در این محیط‌ها عمل کند.

در این بخش، نحوه استفاده از SELinux در تست‌ها و پیاده‌سازی‌های محیط‌های توسعه‌ای Docker و Kubernetes توضیح داده خواهد شد.

1. SELinux در Docker

Docker به‌طور پیش‌فرض در حالت “Disable” برای SELinux در برخی توزیع‌های لینوکس، مانند CentOS یا RHEL، اجرا می‌شود. با این حال، می‌توان SELinux را برای Docker فعال کرد و از آن برای محدود کردن دسترسی کانتینرها به منابع سیستم استفاده نمود.

1.1. فعال‌سازی SELinux در Docker

برای فعال‌سازی SELinux در Docker، ابتدا باید تنظیمات SELinux را بررسی کرده و سپس تغییرات لازم را در پیکربندی Docker اعمال کنیم. برای فعال‌سازی SELinux، باید اطمینان حاصل کرد که SELinux در حالت Enforcing قرار دارد و سپس Docker را طوری پیکربندی کرد که از SELinux استفاده کند.

  1. بررسی وضعیت SELinux:
sestatus

اگر SELinux در حالت Disabled است، می‌توانید آن را فعال کنید. برای تغییر وضعیت SELinux به Enforcing، فایل پیکربندی SELinux (/etc/selinux/config) را ویرایش کنید:

sudo vi /etc/selinux/config

سطر مربوط به SELINUX را به enforcing تغییر دهید:

SELINUX=enforcing
  1. پس از فعال‌سازی SELinux، Docker باید به‌گونه‌ای پیکربندی شود که از SELinux به‌عنوان یک سیاست امنیتی استفاده کند. برای انجام این کار، باید گزینه‌های SELinux را در هنگام راه‌اندازی Docker تنظیم کنید.

برای این منظور، می‌توانید فایل پیکربندی Docker (/etc/docker/daemon.json) را ویرایش کرده و تنظیمات زیر را اضافه کنید:

{
  "selinux-enabled": true
}
  1. سپس Docker را ری‌استارت کنید تا تغییرات اعمال شوند:
sudo systemctl restart docker
1.2. استفاده از سیاست‌های SELinux در کانتینرهای Docker

بعد از فعال‌سازی SELinux برای Docker، کانتینرها به‌طور خودکار با سیاست‌های SELinux اجرا می‌شوند. Docker از برچسب‌های SELinux برای هر کانتینر استفاده می‌کند که به آن‌ها کمک می‌کند تا دسترسی به منابع سیستم را محدود کنند.

به‌طور پیش‌فرض، Docker از سیاست‌های SELinux برای اعمال برچسب‌های امنیتی به فایل‌های موجود در کانتینرها استفاده می‌کند. برای مشاهده برچسب‌های SELinux یک کانتینر، می‌توانید از دستور ps -eZ یا ls -Z برای مشاهده اطلاعات مربوط به برچسب‌های SELinux استفاده کنید.

برای مثال:

docker run -it --security-opt label:type:container_t centos /bin/bash

در این دستور:

  • --security-opt label:type:container_t برای اعمال برچسب SELinux به کانتینر استفاده می‌شود.

در این حالت، SELinux دسترسی کانتینر به فایل‌ها و منابع سیستم را کنترل می‌کند.

2. SELinux در Kubernetes

Kubernetes نیز به‌عنوان یک سیستم مدیریت کانتینر، می‌تواند از SELinux برای اعمال سیاست‌های امنیتی در سطح نودها و پادها (Pods) استفاده کند. در Kubernetes، SELinux معمولاً به‌عنوان یک لایه امنیتی برای کنترل دسترسی به منابع سیستم مانند فایل‌ها، پورت‌ها و فرآیندها استفاده می‌شود.

2.1. فعال‌سازی SELinux در Kubernetes

برای استفاده از SELinux در Kubernetes، ابتدا باید SELinux را در سیستم‌عامل نودهای Kubernetes فعال کرده و سپس پیکربندی مناسب را برای پادها (Pods) و سایر منابع Kubernetes اعمال کنید.

  1. بررسی وضعیت SELinux در نودهای Kubernetes:

ابتدا باید وضعیت SELinux را در نودهای Kubernetes بررسی کنید:

sestatus

اگر SELinux غیرفعال است، باید آن را فعال کنید.

  1. تنظیم SELinux برای Kubernetes:

برای اعمال سیاست‌های SELinux در Kubernetes، باید از گزینه‌های امنیتی مناسب در هنگام راه‌اندازی پادها استفاده کنید. به‌طور پیش‌فرض، Kubernetes از SELinux برای اعمال محدودیت‌های امنیتی به پادها و سایر منابع استفاده نمی‌کند، اما می‌توانید از گزینه‌های امنیتی Kubernetes برای این منظور استفاده کنید.

برای افزودن SELinux به پادها، می‌توانید در فایل YAML مربوط به پاد، تنظیمات زیر را اعمال کنید:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: example-container
        image: nginx
        securityContext:
          seLinuxOptions:
            level: "s0:c123,c456"

در این پیکربندی:

  • seLinuxOptions برای تعیین سطح دسترسی SELinux به‌طور خاص برای هر پاد تنظیم شده است.
  • level: "s0:c123,c456" برای تخصیص سطح SELinux به پاد استفاده می‌شود.
2.2. اعمال سیاست‌های SELinux برای پادها

برای ایجاد یا تنظیم سیاست‌های SELinux سفارشی در Kubernetes، می‌توانید از ابزارهایی مانند audit2allow برای تولید قوانین جدید استفاده کنید. این قوانین می‌توانند به‌طور خاص برای پادها تنظیم شوند تا دسترسی‌ها به منابع مختلف محدود شود.

برای مثال، اگر در لاگ‌های SELinux خطایی مبنی بر دسترسی نامعتبر مشاهده کردید، می‌توانید از دستور audit2allow برای ایجاد قوانین جدید استفاده کنید و سپس آن‌ها را به‌صورت ماژول به Kubernetes اضافه کنید.

جمع‌بندی

استفاده از SELinux در محیط‌های توسعه‌ای مانند Docker و Kubernetes می‌تواند به‌طور چشمگیری امنیت را در این سیستم‌ها افزایش دهد. SELinux با کنترل دقیق دسترسی به منابع و فرآیندهای مختلف، از حملات و دسترسی‌های غیرمجاز جلوگیری می‌کند. فعال‌سازی SELinux و اعمال سیاست‌های امنیتی مناسب در Docker و Kubernetes به شما این امکان را می‌دهد که به‌طور مؤثر محیط‌های توسعه‌ای امن‌تری داشته باشید و از داده‌ها و منابع خود در برابر تهدیدات خارجی محافظت کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”شبیه‌سازی مشکلات SELinux در محیط‌های تست و رفع آن‌ها” subtitle=”توضیحات کامل”]در محیط‌های تست، شبیه‌سازی مشکلات SELinux می‌تواند کمک کند تا نحوه عملکرد سیستم در مواجهه با مشکلات امنیتی واقعی بررسی و رفع مشکلات به‌طور مؤثر انجام شود. این فرآیند به تیم‌های امنیتی و توسعه‌دهندگان اجازه می‌دهد تا مشکلات مرتبط با سیاست‌ها و تنظیمات SELinux را پیش از اعمال آن‌ها در محیط‌های تولید شبیه‌سازی و آزمایش کنند.

در این بخش، مراحل شبیه‌سازی مشکلات SELinux در محیط‌های تست و نحوه رفع آن‌ها مورد بررسی قرار می‌گیرد.

1. ایجاد محیط تست برای شبیه‌سازی مشکلات SELinux

قبل از شبیه‌سازی مشکلات SELinux، باید یک محیط تست ایجاد کنید که به‌طور دقیق شرایط مشابه به محیط تولید را بازسازی کند. در این محیط، می‌توان از ابزارهایی مانند ماشین‌های مجازی، کانتینرها یا سیستم‌های دوقلو (clone systems) استفاده کرد.

1.1. راه‌اندازی یک محیط مجازی برای تست SELinux

برای شبیه‌سازی مشکلات SELinux، بهتر است از یک ماشین مجازی استفاده کنید که مشابه با سیستم تولیدی باشد. ابزارهایی مانند VirtualBox، VMware یا KVM برای این کار مناسب هستند. با این روش می‌توانید تغییرات سیاست‌ها و تنظیمات SELinux را به‌طور جداگانه اعمال کرده و اثرات آن‌ها را بر سیستم مشاهده کنید.

1.2. استفاده از Docker برای شبیه‌سازی مشکلات SELinux

برای آزمایش مشکلات SELinux در محیط‌های مبتنی بر کانتینر، می‌توانید از Docker استفاده کنید. Docker به شما این امکان را می‌دهد که کانتینرها را به‌طور ایزوله اجرا کنید و از SELinux برای کنترل دسترسی به منابع سیستم استفاده نمایید.

برای فعال‌سازی SELinux در Docker و شبیه‌سازی مشکلات، می‌توانید دستور زیر را اجرا کنید:

docker run -it --security-opt label:type:container_t centos /bin/bash

این دستور یک کانتینر جدید از تصویر CentOS ایجاد می‌کند و برچسب SELinux مربوط به نوع کانتینر (container_t) را به آن اعمال می‌کند.

2. شبیه‌سازی مشکلات SELinux

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

2.1. مشکل دسترسی فایل

یکی از مشکلات رایج که می‌توان آن را شبیه‌سازی کرد، دسترسی‌های نادرست به فایل‌ها و دایرکتوری‌ها است. این مشکل معمولاً زمانی رخ می‌دهد که SELinux نتواند دسترسی به فایل‌های خاص را به‌درستی کنترل کند.

برای شبیه‌سازی این مشکل، می‌توانید یک فایل یا دایرکتوری ایجاد کنید که دارای دسترسی‌های محدود از نظر SELinux باشد:

touch /tmp/testfile
chcon -t httpd_sys_content_t /tmp/testfile

در این مثال، فایل testfile به‌طور خاص برای استفاده توسط سرویس‌های HTTP با برچسب httpd_sys_content_t تنظیم شده است.

سپس، سعی کنید به فایل دسترسی پیدا کنید یا آن را از یک سرویس HTTP مانند Apache یا Nginx باز کنید. این احتمال وجود دارد که SELinux مانع از دسترسی شود و خطای مرتبط با SELinux در لاگ‌ها ظاهر گردد.

2.2. مشکل اجرای برنامه

مشکل دیگر، دسترسی‌های نادرست به برنامه‌ها یا اسکریپت‌ها است که ممکن است با سیاست‌های SELinux مواجه شوند. به‌عنوان مثال، اگر یک برنامه خاص نتواند به دلیل تنظیمات SELinux به درستی اجرا شود، باید تنظیمات SELinux مربوط به آن را اصلاح کرد.

برای شبیه‌سازی این مشکل، می‌توانید یک برنامه یا اسکریپت ساده را اجرا کنید که به‌طور نادرست پیکربندی شده باشد:

./my-script.sh

در صورتی که SELinux جلوی اجرای آن را بگیرد، خطای مرتبط با دسترسی‌ها در لاگ‌ها ثبت خواهد شد.

3. رفع مشکلات SELinux در محیط تست

پس از شبیه‌سازی مشکلات SELinux، می‌توانید به رفع آن‌ها پرداخته و سیاست‌های لازم را تنظیم کنید. ابزارهای مختلفی برای رفع مشکلات SELinux وجود دارد که می‌توانند به شما در شناسایی و اصلاح سیاست‌ها کمک کنند.

3.1. استفاده از ابزار audit2allow برای ایجاد قوانین جدید

ابزار audit2allow یکی از ابزارهای مفید برای شناسایی مشکلات دسترسی در SELinux است. این ابزار به شما کمک می‌کند تا قوانین جدیدی را بر اساس پیام‌های لاگ SELinux ایجاد کنید.

  1. برای شبیه‌سازی مشکلات دسترسی در فایل‌ها، ابتدا لاگ‌های مربوط به SELinux را بررسی کنید:
cat /var/log/audit/audit.log | grep AVC
  1. سپس از ابزار audit2allow برای ایجاد قوانین جدید استفاده کنید:
cat /var/log/audit/audit.log | audit2allow -M mymodule

این دستور یک ماژول SELinux جدید به نام mymodule ایجاد می‌کند که دسترسی‌های جدیدی را برای رفع مشکلات موجود در لاگ‌های SELinux تنظیم می‌کند.

  1. پس از ایجاد ماژول، آن را بارگذاری کنید:
semodule -i mymodule.pp
3.2. استفاده از ابزار semanage برای تغییر برچسب‌ها

گاهی اوقات، ممکن است لازم باشد که برچسب‌های SELinux را برای فایل‌ها یا دایرکتوری‌ها تغییر دهید. برای این کار می‌توانید از ابزار semanage استفاده کنید.

برای مثال، اگر یک فایل خاص نیاز به تغییر برچسب دارد، می‌توانید از دستور زیر استفاده کنید:

semanage fcontext -a -t httpd_sys_content_t "/tmp/testfile"
restorecon -v /tmp/testfile

در اینجا، برچسب httpd_sys_content_t به فایل /tmp/testfile اعمال می‌شود و سپس با استفاده از دستور restorecon تغییرات اعمال می‌شود.

3.3. رفع مشکلات اجرای برنامه‌ها

اگر برنامه‌ای به دلیل محدودیت‌های SELinux اجرا نمی‌شود، می‌توانید از دستور setenforce برای تغییر حالت SELinux به حالت permissive استفاده کنید و موقتاً محدودیت‌ها را کاهش دهید تا خطاها را شبیه‌سازی و رفع کنید:

setenforce 0

این دستور SELinux را در حالت Permissive قرار می‌دهد که به‌صورت موقت تمامی دسترسی‌های غیرمجاز را ثبت می‌کند اما مانع از اجرای آن‌ها نمی‌شود.

جمع‌بندی

شبیه‌سازی مشکلات SELinux در محیط‌های تست به شما این امکان را می‌دهد که مشکلات مرتبط با دسترسی‌ها، سیاست‌ها و تنظیمات SELinux را شناسایی و رفع کنید. با استفاده از ابزارهایی مانند audit2allow و semanage، می‌توانید سیاست‌های SELinux را به‌طور دقیق تنظیم کرده و از بروز مشکلات امنیتی جلوگیری کنید. تست و رفع مشکلات SELinux در محیط‌های توسعه‌ای و آزمایشی قبل از اعمال آن‌ها در محیط تولیدی به شما کمک می‌کند تا سیستم‌های ایمن‌تری را پیاده‌سازی کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”راهکارهایی برای کاهش خطاهای SELinux در محیط‌های آزمایشی” subtitle=”توضیحات کامل”]برای اطمینان از اجرای درست SELinux در محیط‌های آزمایشی و کاهش خطاهای مربوطه، لازم است که برخی راهکارهای مؤثر و استراتژی‌های مناسب را پیاده‌سازی کنید. این اقدامات می‌توانند به شناسایی و رفع مشکلات قبل از اعمال تغییرات در محیط‌های تولید کمک کنند.

1. استفاده از حالت Permissive برای بررسی مشکلات

یکی از روش‌های کاهش خطاهای SELinux در محیط‌های آزمایشی، استفاده از حالت Permissive است. در این حالت، SELinux همه فعالیت‌ها را ثبت می‌کند اما ممانعتی از آن‌ها نمی‌کند. این امر به شما این امکان را می‌دهد که از پیام‌های لاگ برای شناسایی مشکلات و تنظیمات نادرست استفاده کنید بدون آنکه برنامه‌ها و سرویس‌ها مختل شوند.

برای تغییر حالت SELinux به Permissive، می‌توانید از دستور زیر استفاده کنید:

setenforce 0

پس از شبیه‌سازی مشکلات و شناسایی خطاها، می‌توانید سیستم را به حالت Enforcing بازگردانید:

setenforce 1
2. استفاده از ابزار audit2allow برای شبیه‌سازی و رفع خطاها

اگر پس از تغییر وضعیت به حالت Permissive خطاهایی در لاگ‌های SELinux مشاهده کردید، می‌توانید از ابزار audit2allow برای ایجاد قوانین جدید برای رفع این خطاها استفاده کنید.

برای این منظور، مراحل زیر را دنبال کنید:

  1. بررسی لاگ‌های SELinux برای یافتن پیام‌های AVC:
cat /var/log/audit/audit.log | grep AVC
  1. استفاده از ابزار audit2allow برای ایجاد قوانین بر اساس خطاهای شناسایی‌شده:
cat /var/log/audit/audit.log | audit2allow -M mymodule
  1. بارگذاری ماژول SELinux جدید:
semodule -i mymodule.pp

این فرآیند کمک می‌کند تا قوانین جدید برای اجازه دادن به فعالیت‌هایی که SELinux مانع آن‌ها می‌شود، ایجاد شود.

3. تنظیمات صحیح برچسب‌های SELinux

یکی از رایج‌ترین مشکلاتی که در محیط‌های آزمایشی ممکن است با آن مواجه شوید، نادرست بودن برچسب‌های SELinux برای فایل‌ها و دایرکتوری‌ها است. این مشکلات ممکن است باعث محدودیت‌های دسترسی به منابع یا برنامه‌ها شوند.

برای رفع این مشکلات، از ابزار semanage استفاده کنید تا برچسب‌های صحیح را به فایل‌ها و دایرکتوری‌ها اعمال کنید. برای مثال:

semanage fcontext -a -t httpd_sys_content_t "/tmp/testfile"
restorecon -v /tmp/testfile

این دستور برچسب httpd_sys_content_t را به فایل testfile اختصاص می‌دهد و سپس با استفاده از دستور restorecon تغییرات را اعمال می‌کند.

4. استفاده از ابزار sealert برای تشخیص مشکلات و ارائه پیشنهادات

ابزار sealert به شما کمک می‌کند تا پیام‌های خطا و هشدارهای SELinux را تجزیه و تحلیل کنید و پیشنهادات لازم برای رفع آن‌ها را دریافت کنید. این ابزار می‌تواند اطلاعات دقیقی را درباره مشکلات دسترسی و نحوه رفع آن‌ها در اختیار شما قرار دهد.

برای استفاده از ابزار sealert، می‌توانید دستور زیر را اجرا کنید:

sealert -a /var/log/audit/audit.log

این دستور تمام هشدارها و مشکلات مربوط به SELinux را تجزیه و تحلیل کرده و پیشنهادات برای رفع آن‌ها ارائه می‌دهد.

5. بررسی تنظیمات سیاست‌های SELinux

بررسی دقیق تنظیمات سیاست‌های SELinux برای سرویس‌ها و برنامه‌های خاص می‌تواند به شناسایی و رفع مشکلات کمک کند. با استفاده از ابزارهای sesearch و seinfo می‌توانید سیاست‌ها و قوانین SELinux را بررسی کرده و از سازگاری آن‌ها با نیازهای برنامه‌های خاص اطمینان حاصل کنید.

برای جستجو در سیاست‌های SELinux از دستور sesearch استفاده کنید:

sesearch -A -s httpd_t -c file

این دستور به شما اجازه می‌دهد تا قوانین مربوط به دسترسی فایل‌ها برای نوع httpd_t را جستجو کنید.

6. تست و آزمایش در محیط‌های مشابه تولید

برای کاهش خطاهای SELinux در محیط‌های آزمایشی، بهتر است از محیط‌های مشابه محیط تولید استفاده کنید. این شامل استفاده از ماشین‌های مجازی، کانتینرها یا شبیه‌سازی محیط‌های تولید است. این کار به شما امکان می‌دهد که مشکلات و تنظیمات SELinux را در شرایط مشابه با محیط‌های واقعی تست کنید.

7. مستند کردن تغییرات و سیاست‌ها

مستند کردن تغییرات SELinux و سیاست‌های جدید ایجاد شده در محیط‌های آزمایشی به شما کمک می‌کند تا در صورت بروز مشکل، به راحتی به تنظیمات قبلی بازگردید. همچنین، این کار باعث می‌شود که تیم‌های امنیتی و توسعه‌دهندگان با سیاست‌ها و تغییرات انجام‌شده آشنا شوند و بتوانند به‌طور مؤثر آن‌ها را مدیریت کنند.

جمع‌بندی

برای کاهش خطاهای SELinux در محیط‌های آزمایشی، استفاده از حالت Permissive، ابزارهایی مانند audit2allow، sealert، و تنظیمات صحیح برچسب‌ها می‌تواند بسیار مفید باشد. همچنین، بررسی دقیق سیاست‌ها و استفاده از محیط‌های مشابه به محیط تولید از دیگر راهکارهای مؤثر برای شبیه‌سازی و رفع مشکلات SELinux در محیط‌های آزمایشی است. با انجام این اقدامات، می‌توانید از بروز مشکلات جدی در محیط تولید جلوگیری کنید و سیستم‌های امن‌تری را ایجاد نمایید.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”بخش 5. مدیریت و تنظیمات پیشرفته SELinux”][cdb_course_lesson title=”فصل 1. تعریف سیاست‌های امنیتی سفارشی”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ایجاد و تنظیم سیاست‌های امنیتی اختصاصی برای سرویس‌ها و برنامه‌های خاص” subtitle=”توضیحات کامل”]SELinux یک لایه امنیتی قدرتمند در سیستم‌عامل‌های لینوکسی است که به کنترل دقیق مجوزهای دسترسی برنامه‌ها و سرویس‌ها کمک می‌کند. گاهی اوقات، یک برنامه یا سرویس نیاز به سیاست‌های امنیتی اختصاصی دارد که در قوانین پیش‌فرض SELinux تعریف نشده‌اند. در این بخش، نحوه ایجاد و تنظیم سیاست‌های امنیتی سفارشی برای سرویس‌ها و برنامه‌های خاص بررسی خواهد شد.


بررسی نیازمندی‌های سیاست امنیتی سفارشی

قبل از ایجاد یک سیاست جدید، باید موارد زیر را بررسی کرد:

  • پیام‌های AVC (Access Vector Cache) برای شناسایی خطاهای SELinux
  • نوع دسترسی‌های مورد نیاز سرویس یا برنامه
  • ماژول‌های SELinux از قبل موجود برای سرویس موردنظر

برای مشاهده پیام‌های AVC، می‌توان از دستور زیر استفاده کرد:

sudo ausearch -m avc -ts recent

یا اگر از journalctl استفاده می‌شود:

sudo journalctl -t setroubleshoot

ایجاد ماژول سفارشی SELinux

۱. نصب ابزارهای مورد نیاز

قبل از ایجاد یک سیاست جدید، باید بسته‌های selinux-policy-devel و policycoreutils-devel نصب شوند:

sudo dnf install selinux-policy-devel policycoreutils-devel -y

در توزیع‌های مبتنی بر apt مانند دبیان یا اوبونتو:

sudo apt install selinux-policy-dev policycoreutils -y
۲. استخراج خطای SELinux و تولید سیاست اولیه

اگر یک برنامه با SELinux مسدود شده است، می‌توان از audit2allow برای تولید یک سیاست اولیه استفاده کرد:

sudo audit2allow -a -M my_custom_policy

این دستور یک فایل .te ایجاد می‌کند که شامل تعریف اولیه سیاست است.

۳. بررسی و اصلاح فایل .te

فایل my_custom_policy.te را با یک ویرایشگر باز کرده و تنظیمات مورد نیاز را اضافه کنید. مثال:

module my_custom_policy 1.0;

require {
    type httpd_t;
    class dir search;
}

allow httpd_t var_log_t:dir search;

این سیاست به httpd اجازه می‌دهد تا در مسیر /var/log جستجو کند.

۴. کامپایل و نصب ماژول سیاست

پس از اصلاح فایل .te، مراحل زیر را برای کامپایل و نصب ماژول اجرا کنید:

checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te
semodule_package -o my_custom_policy.pp -m my_custom_policy.mod
sudo semodule -i my_custom_policy.pp

مدیریت سیاست‌های SELinux

مشاهده سیاست‌های نصب‌شده

برای بررسی سیاست‌های فعال SELinux، از دستور زیر استفاده کنید:

semodule -l
حذف یک ماژول سیاست

اگر نیاز به حذف یک سیاست سفارشی باشد، دستور زیر را اجرا کنید:

sudo semodule -r my_custom_policy
فعال‌سازی تغییرات

پس از ایجاد یا حذف یک ماژول، اجرای restorecon برای اعمال تغییرات در فایل‌ها ضروری است:

sudo restorecon -Rv /var/www/html

جمع‌بندی

ایجاد سیاست‌های سفارشی SELinux برای برنامه‌ها و سرویس‌های خاص امکان افزایش امنیت و کنترل دقیق‌تر دسترسی‌ها را فراهم می‌کند. در این بخش، ابتدا نحوه بررسی خطاهای AVC و نیازمندی‌های سیاست جدید را بررسی کردیم. سپس مراحل ایجاد، ویرایش، نصب و مدیریت یک ماژول سفارشی SELinux را به‌طور عملی توضیح دادیم. با استفاده از این روش‌ها، می‌توان سیاست‌های امنیتی اختصاصی متناسب با نیازهای سرویس‌ها و برنامه‌های خاص ایجاد کرد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تعریف انواع (Types) و نقش‌ها (Roles) در سیاست‌های سفارشی ” subtitle=”توضیحات کامل”]SELinux یک مکانیزم کنترل دسترسی اجباری (MAC) است که بر اساس سیاست‌های امنیتی از پیش تعریف‌شده عمل می‌کند. در سیاست‌های سفارشی SELinux، دو مفهوم کلیدی وجود دارد:

  • انواع (Types): برای دسته‌بندی اشیاء مختلف (فایل‌ها، فرآیندها و غیره) استفاده می‌شود و تعیین می‌کند که چه دسترسی‌هایی مجاز است.
  • نقش‌ها (Roles): تعیین می‌کنند که کدام نوع از کاربران یا فرآیندها می‌توانند با انواع مختلف اشیاء تعامل داشته باشند.

در این بخش، نحوه تعریف و پیکربندی انواع (Types) و نقش‌ها (Roles) را در سیاست‌های سفارشی SELinux بررسی می‌کنیم.


تعریف انواع (Types) در سیاست‌های SELinux

بررسی انواع موجود

برای مشاهده انواع موجود در سیستم، می‌توان از دستور زیر استفاده کرد:

seinfo -t

اگر این ابزار نصب نیست، می‌توان آن را با بسته setools-console نصب کرد:

sudo dnf install setools-console -y  # برای توزیع‌های مبتنی بر RHEL
sudo apt install setools -y  # برای توزیع‌های مبتنی بر Debian
ایجاد یک نوع جدید

برای ایجاد یک سیاست سفارشی، ابتدا باید یک ماژول .te جدید ایجاد کنیم. مسیر فایل سیاست:

/root/custom_policy.te

محتوای فایل:

policy_module(custom_policy, 1.0)

type my_app_t;
type my_app_exec_t;
type my_app_log_t;

allow my_app_t self:process transition;
allow my_app_t my_app_log_t:file rw_file_perms;

توضیحات:

  • my_app_t: نوعی برای فرآیند برنامه سفارشی
  • my_app_exec_t: نوعی برای فایل اجرایی برنامه
  • my_app_log_t: نوعی برای فایل‌های لاگ برنامه
  • allow my_app_t self:process transition;: اجازه اجرای فرآیند توسط خودش
  • allow my_app_t my_app_log_t:file rw_file_perms;: اجازه خواندن و نوشتن روی لاگ‌ها
کامپایل و نصب ماژول سیاست

پس از ایجاد فایل .te، مراحل زیر را برای کامپایل و نصب ماژول اجرا کنید:

checkmodule -M -m -o custom_policy.mod /root/custom_policy.te
semodule_package -o custom_policy.pp -m custom_policy.mod
sudo semodule -i custom_policy.pp

تعریف نقش‌ها (Roles) در سیاست‌های SELinux

مشاهده نقش‌های موجود

برای مشاهده نقش‌های موجود در سیستم از دستور زیر استفاده کنید:

seinfo -r
ایجاد نقش جدید

برای ایجاد یک نقش جدید و اختصاص آن به یک نوع خاص، مسیر فایل سیاست:

/root/custom_roles.te

محتوای فایل:

policy_module(custom_roles, 1.0)

role my_app_role;
role my_app_role types my_app_t;

در این سیاست:

  • my_app_role یک نقش جدید تعریف شده است.
  • role my_app_role types my_app_t; مشخص می‌کند که این نقش فقط می‌تواند با my_app_t تعامل داشته باشد.
کامپایل و نصب ماژول نقش
checkmodule -M -m -o custom_roles.mod /root/custom_roles.te
semodule_package -o custom_roles.pp -m custom_roles.mod
sudo semodule -i custom_roles.pp
اختصاص نقش به یک کاربر
sudo usermod -Z my_app_role username

جمع‌بندی

در این بخش، انواع (Types) و نقش‌ها (Roles) در سیاست‌های SELinux بررسی شدند. ابتدا نحوه مشاهده انواع و نقش‌های موجود را توضیح دادیم. سپس یک نوع جدید برای برنامه سفارشی ایجاد کردیم و آن را به‌عنوان یک ماژول سیاست جدید اعمال کردیم. در نهایت، یک نقش جدید تعریف کردیم و آن را به یک کاربر اختصاص دادیم. با این روش‌ها، می‌توان کنترل دقیقی بر سطح دسترسی برنامه‌ها و کاربران در SELinux اعمال کرد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از ابزار semanage برای مدیریت سیاست‌ها و تنظیمات پیشرفته” subtitle=”توضیحات کامل”]ابزار semanage یک ابزار خط فرمان در لینوکس است که برای مدیریت و تنظیم سیاست‌های امنیتی SELinux (Security-Enhanced Linux) استفاده می‌شود. این ابزار به شما اجازه می‌دهد تا تنظیمات SELinux را به‌صورت داینامیک و بدون نیاز به ویرایش فایل‌های پیکربندی دستی تغییر دهید. ابزار semanage برای انجام تغییرات پیشرفته در سیاست‌های SELinux مانند مدیریت قواعد پورتی، سیاست‌های فایروال و پروفایل‌های نوع فرآیندها بسیار مفید است.

نصب ابزار semanage

قبل از شروع به استفاده از ابزار semanage، باید بسته policycoreutils-python را نصب کنید که شامل ابزارهای مورد نیاز برای مدیریت SELinux است. برای نصب این بسته روی سیستم‌هایی که از بسته‌های yum یا dnf استفاده می‌کنند، می‌توانید از دستور زیر استفاده کنید:

sudo dnf install policycoreutils-python-utils

یا در سیستم‌های قدیمی‌تر از yum استفاده کنید:

sudo yum install policycoreutils-python

استفاده از semanage برای مدیریت پورترها

یکی از مهم‌ترین قابلیت‌های ابزار semanage مدیریت دسترسی به پورت‌ها برای برنامه‌های مختلف است. در SELinux، برای هر پورت TCP و UDP که استفاده می‌شود، سیاست‌هایی وجود دارد که مشخص می‌کند چه پروسه‌هایی می‌توانند به آن پورت دسترسی پیدا کنند.

برای اضافه کردن یک پورت جدید به سیاست SELinux، دستور زیر را وارد کنید:

sudo semanage port -a -t http_port_t -p tcp 8080

در این مثال، پورت 8080 به نوع پورت http_port_t اضافه می‌شود که به معنای اجازه دسترسی برای وب‌سرورها است. اگر بخواهید پورت را حذف کنید، از دستور زیر استفاده کنید:

sudo semanage port -d -t http_port_t -p tcp 8080

تغییر تنظیمات و سیاست‌های فایل

در SELinux، سیاست‌ها برای دسترسی به فایل‌ها و دایرکتوری‌ها با استفاده از نوع‌های خاص فایل (file contexts) مشخص می‌شوند. ابزار semanage به شما این امکان را می‌دهد که نوع یک فایل را به صورت داینامیک تغییر دهید.

برای تغییر نوع فایل یا دایرکتوری می‌توانید از دستور زیر استفاده کنید:

sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'

در این دستور، نوع httpd_sys_content_t به دایرکتوری /var/www/html و زیرمجموعه‌های آن اعمال می‌شود. بعد از اعمال این تغییر، برای تأثیرگذاری این تغییرات باید دستور restorecon را اجرا کنید تا سیاست‌ها بر روی فایل‌ها و دایرکتوری‌ها اعمال شوند:

sudo restorecon -R /var/www/html

استفاده از semanage برای مدیریت پروفایل‌ها

پروفایل‌های SELinux شامل مجموعه‌ای از قوانین هستند که به فرآیندهای مختلف اجازه دسترسی به منابع خاص را می‌دهند. با استفاده از ابزار semanage، می‌توان پروفایل‌ها را به صورت داینامیک مدیریت کرد.

برای مشاهده پروفایل‌های موجود:

sudo semanage fcontext -l

برای اضافه کردن یک پروفایل جدید:

sudo semanage fcontext -a -t user_home_t '/home/username(/.*)?'

مدیریت سیاست‌های محلی

در برخی مواقع ممکن است بخواهید تغییرات سیاستی SELinux را به‌صورت محلی (برای مثال، برای یک برنامه خاص) انجام دهید. این تغییرات می‌توانند در فایل‌های پیکربندی مربوط به SELinux ذخیره شوند. برای این کار از ابزار semanage به همراه گزینه‌های خاص استفاده می‌کنید.

برای افزودن یک قانون جدید به سیاست‌های محلی، دستور زیر را وارد کنید:

sudo semanage boolean -m --on httpd_can_network_connect

این دستور به وب‌سرور اجازه می‌دهد که به شبکه متصل شود.

مسیر فایل‌های پیکربندی

  • فایل‌های پیکربندی SELinux معمولاً در دایرکتوری /etc/selinux/ قرار دارند.
  • فایل‌های پیکربندی برای سیاست‌ها در مسیر /etc/selinux/targeted/contexts/ یافت می‌شوند.

جمع‌بندی

ابزار semanage ابزاری قدرتمند برای مدیریت تنظیمات پیشرفته SELinux است که امکان تغییر سیاست‌ها، پورت‌ها، فایل‌ها و پروفایل‌ها را به‌صورت داینامیک فراهم می‌کند. با استفاده از این ابزار می‌توانید به‌راحتی تنظیمات امنیتی سیستم خود را بدون نیاز به ویرایش دستی فایل‌ها انجام دهید. این ابزار به ویژه برای سیستم‌های تولید و سرویس‌دهنده‌های وب که نیاز به تنظیمات امنیتی دقیق دارند، بسیار مفید است.[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. تغییر نوع‌ها و دسترسی‌ها در سیاست‌های جدید”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تغییر نوع‌ها و دسترسی‌ها برای برنامه‌ها و فایل‌ها ” subtitle=”توضیحات کامل”]در SELinux، همه‌ی فایل‌ها، دایرکتوری‌ها و برنامه‌ها دارای نوع خاصی هستند که دسترسی‌ها و رفتارهای آن‌ها را کنترل می‌کند. این نوع‌ها می‌توانند بر اساس نیازهای خاص تغییر یابند. در این بخش، به روش‌های مختلف تغییر نوع‌ها و دسترسی‌ها برای فایل‌ها و برنامه‌ها در SELinux خواهیم پرداخت.

مفهوم Context و Type در SELinux

در SELinux، هر فایل، دایرکتوری، یا برنامه‌ای دارای یک context است که اطلاعات مربوط به نوع آن، کاربری که به آن دسترسی دارد، و سطح امنیتی آن را مشخص می‌کند. این context به‌طور معمول شامل سه بخش اصلی است:

  1. User: کاربری که فایل به آن تعلق دارد.
  2. Role: نقشی که فایل در آن استفاده می‌شود.
  3. Type: نوع دسترسی‌هایی که برای فایل‌ها و برنامه‌ها مجاز است (معمولاً همان چیزی که در تنظیمات SELinux تنظیم می‌شود).

در SELinux، دسترسی‌ها و سیاست‌ها براساس نوع فایل یا برنامه تنظیم می‌شوند. به همین دلیل، تغییر نوع‌ها و دسترسی‌ها برای فایل‌ها و برنامه‌ها برای تنظیمات امنیتی بسیار مهم است.

تغییر نوع فایل‌ها با semanage

برای تغییر نوع (type) یک فایل یا دایرکتوری در SELinux، می‌توان از دستور semanage fcontext استفاده کرد. این دستور به شما این امکان را می‌دهد که نوع SELinux را برای یک فایل یا دایرکتوری خاص تغییر دهید.

برای تغییر نوع یک فایل یا دایرکتوری به نوع جدید، دستور زیر را وارد کنید:

sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'

در این مثال، نوع httpd_sys_content_t به دایرکتوری /var/www/html و تمام زیرمجموعه‌های آن اعمال می‌شود. برای تأثیرگذاری این تغییرات، باید از دستور restorecon استفاده کنید تا SELinux نوع‌های جدید را بر روی فایل‌ها و دایرکتوری‌ها اعمال کند:

sudo restorecon -R /var/www/html

تغییر نوع‌ها برای برنامه‌ها با semanage

در SELinux، هر برنامه یا فرآیند نیز نوع خاصی دارد که اجازه می‌دهد یا از دسترسی‌های خاصی به منابع سیستم جلوگیری می‌کند. برای تغییر نوع یک برنامه، می‌توانید از دستور semanage به همراه گزینه‌ی -a برای افزودن یک نوع جدید استفاده کنید.

فرض کنید بخواهید برنامه‌ای به نام myapp را به نوع خاصی تغییر دهید. دستور زیر را وارد کنید:

sudo semanage fcontext -a -t myapp_exec_t '/usr/local/bin/myapp'

این دستور نوع myapp_exec_t را به برنامه myapp در مسیر /usr/local/bin/myapp اعمال می‌کند. سپس از دستور restorecon برای اعمال تغییرات به فایل‌ها استفاده کنید:

sudo restorecon -v /usr/local/bin/myapp

مشاهده نوع‌ها و دسترسی‌ها

برای مشاهده‌ی نوع‌های اعمال شده بر روی فایل‌ها یا دایرکتوری‌ها، می‌توانید از دستور ls -Z استفاده کنید. این دستور اطلاعات مربوط به SELinux context فایل‌ها را نمایش می‌دهد. به‌طور مثال، برای مشاهده نوع‌های SELinux یک دایرکتوری خاص، دستور زیر را وارد کنید:

ls -Z /var/www/html

تغییر دسترسی‌ها با SELinux Booleans

SELinux از ویژگی‌های خاصی به نام Booleans برای کنترل و مدیریت دسترسی‌ها استفاده می‌کند. این ویژگی‌ها می‌توانند به‌طور داینامیک وضعیت دسترسی‌ها را برای پروسه‌ها و برنامه‌ها تغییر دهند.

برای فعال کردن یا غیرفعال کردن یک Boolean خاص، می‌توانید از دستور semanage boolean استفاده کنید. به‌طور مثال، برای فعال کردن قابلیت دسترسی به شبکه برای وب‌سرور، دستور زیر را وارد کنید:

sudo semanage boolean -m --on httpd_can_network_connect

برای غیرفعال کردن همین قابلیت:

sudo semanage boolean -m --off httpd_can_network_connect

مسیر فایل‌ها و پیکربندی‌ها

تمامی تنظیمات مربوط به فایل‌ها و دسترسی‌ها در SELinux معمولاً در مسیر /etc/selinux/ قرار دارند. این دایرکتوری شامل فایل‌های پیکربندی SELinux است که می‌توانید آن‌ها را برای تنظیمات پیشرفته‌تر و سفارشی‌تر ویرایش کنید.

مسیر فایل‌های پیکربندی اصلی SELinux به شرح زیر است:

  • /etc/selinux/config: فایل پیکربندی اصلی برای فعال‌سازی و تنظیمات ابتدایی SELinux.
  • /etc/selinux/targeted/contexts/: شامل فایل‌های context و سیاست‌های اعمال شده.

جمع‌بندی

در SELinux، تغییر نوع‌ها و دسترسی‌ها برای فایل‌ها و برنامه‌ها یکی از بخش‌های حیاتی برای مدیریت امنیت سیستم است. با استفاده از ابزار semanage می‌توانید نوع فایل‌ها و برنامه‌ها را به‌طور داینامیک تغییر دهید و دسترسی‌های لازم را برای سرویس‌ها و برنامه‌ها تنظیم کنید. این تغییرات به شما امکان می‌دهد تا امنیت سیستم خود را به طور دقیق و مطابق با نیازهای خاص خود مدیریت کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از دستور chcon برای تغییر نوع‌ها در فایل‌ها و دایرکتوری‌ها” subtitle=”توضیحات کامل”]در SELinux، دستور chcon یکی از ابزارهای مهم برای تغییر SELinux context (نوع) فایل‌ها و دایرکتوری‌ها است. با استفاده از این دستور می‌توان نوع (type) و سایر اطلاعات context فایل‌ها را تغییر داد. این ابزار به‌ویژه زمانی مفید است که بخواهید تغییرات موقتی ایجاد کنید یا بخواهید context فایل‌ها را به نوع دلخواه تنظیم کنید.

در این بخش، روش استفاده از دستور chcon برای تغییر نوع‌ها و دسترسی‌ها در فایل‌ها و دایرکتوری‌ها را شرح خواهیم داد.

دستور chcon

دستور chcon به شما این امکان را می‌دهد که نوع (type)، کاربر (user)، و نقش (role) فایل‌ها یا دایرکتوری‌ها را تغییر دهید. برای تغییر نوع، نیاز به استفاده از گزینه -t دارید که به شما اجازه می‌دهد نوع جدیدی برای فایل یا دایرکتوری تعیین کنید.

ساختار کلی دستور chcon به شرح زیر است:

chcon [options] TYPE FILE_PATH
  • TYPE: نوع جدیدی که می‌خواهید به فایل یا دایرکتوری اختصاص دهید.
  • FILE_PATH: مسیر فایل یا دایرکتوری که می‌خواهید نوع آن را تغییر دهید.

مثال‌ها

  1. تغییر نوع یک فایل

برای تغییر نوع یک فایل خاص به نوع httpd_sys_content_t (که معمولاً برای فایل‌های وب‌سایت‌ها استفاده می‌شود)، دستور زیر را وارد کنید:

sudo chcon -t httpd_sys_content_t /var/www/html/index.html

این دستور نوع فایل index.html را به httpd_sys_content_t تغییر می‌دهد.

  1. تغییر نوع یک دایرکتوری و همه زیرمجموعه‌های آن

برای تغییر نوع یک دایرکتوری و تمامی فایل‌ها و دایرکتوری‌های زیرمجموعه آن، از گزینه -R برای اعمال تغییرات به صورت بازگشتی استفاده می‌کنیم. به‌طور مثال، برای تغییر نوع تمامی فایل‌ها و دایرکتوری‌های موجود در /var/www/html به httpd_sys_content_t، دستور زیر را وارد کنید:

sudo chcon -R -t httpd_sys_content_t /var/www/html
  1. تغییر نوع برای یک فایل خاص با استفاده از type و role

در برخی موارد ممکن است بخواهید علاوه بر نوع، نقش و کاربر را هم تغییر دهید. به‌طور مثال، برای تغییر کاربر، نوع، و نقش یک فایل، دستور زیر را وارد می‌کنید:

sudo chcon -u system_u -r object_r -t httpd_sys_content_t /var/www/html/index.html

این دستور به فایل index.html در مسیر /var/www/html نوع httpd_sys_content_t، نقش object_r و کاربر system_u اختصاص می‌دهد.

نکات مهم در استفاده از chcon

  1. تغییرات موقتی: تغییراتی که با استفاده از دستور chcon اعمال می‌کنید معمولاً موقتی هستند. این تغییرات پس از اجرای دستور restorecon یا پس از reboot سیستم ممکن است بازنشانی شوند.
  2. استفاده از semanage برای تغییرات دائمی: اگر می‌خواهید تغییرات دائمی و پایدار بر روی context فایل‌ها داشته باشید، بهتر است از دستور semanage استفاده کنید که تغییرات را به‌طور دائمی در پایگاه داده SELinux ذخیره می‌کند.
  3. مشاهده context فعلی فایل‌ها: برای مشاهده context فعلی فایل‌ها و دایرکتوری‌ها می‌توانید از دستور ls -Z استفاده کنید:
ls -Z /var/www/html/index.html

اعمال تغییرات با دستور restorecon

پس از تغییر نوع‌ها با استفاده از chcon، می‌توانید از دستور restorecon برای بازنشانی و همسان‌سازی context فایل‌ها با سیاست‌های SELinux استفاده کنید. برای اعمال تغییرات به‌طور بازگشتی روی دایرکتوری‌ها و فایل‌ها، از دستور زیر استفاده کنید:

sudo restorecon -R /var/www/html

این دستور تمامی فایل‌ها و دایرکتوری‌های داخل /var/www/html را با context جدید هماهنگ می‌کند.

مسیر فایل‌ها و پیکربندی‌ها

دستور chcon تغییرات را فقط به صورت موقتی بر روی context فایل‌ها اعمال می‌کند و مسیر این تغییرات در فایل‌های پیکربندی SELinux ذخیره نمی‌شود. برای تغییرات دائمی باید از ابزار semanage استفاده کنید.

مسیر فایل‌های اصلی SELinux که می‌توانند شامل پیکربندی‌های مربوط به context‌ها و سیاست‌ها باشند به شرح زیر است:

  • /etc/selinux/config: فایل پیکربندی اصلی SELinux.
  • /etc/selinux/targeted/contexts/: شامل فایل‌های context و سیاست‌های SELinux.

جمع‌بندی

دستور chcon ابزاری بسیار مفید و قدرتمند برای تغییر نوع‌ها و سایر اطلاعات context فایل‌ها و دایرکتوری‌ها در SELinux است. این ابزار به شما این امکان را می‌دهد که به راحتی تغییرات موقتی در نوع‌های فایل‌ها و برنامه‌ها ایجاد کنید، اما برای تغییرات دائمی باید از دستور semanage استفاده کنید. همچنین، دستورات ls -Z و restorecon برای مشاهده و بازنشانی context‌ها مفید هستند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی امنیت فایل‌ها با دستور semanage fcontext و semanage برای تنظیمات پیشرفته” subtitle=”توضیحات کامل”]در سیستم‌های لینوکسی که از SELinux استفاده می‌کنند، ابزارهای مختلفی برای مدیریت و پیکربندی امنیت سیستم وجود دارد. یکی از این ابزارها، دستور semanage است که به شما این امکان را می‌دهد تا سیاست‌ها و تنظیمات امنیتی پیشرفته‌تری برای فایل‌ها و دایرکتوری‌ها اعمال کنید. به‌ویژه دستور semanage fcontext برای مدیریت context‌های فایل‌ها و تعیین امنیت فایل‌ها در سطح سیستم مفید است.

در این بخش، استفاده از دستور semanage fcontext و سایر قابلیت‌های دستور semanage برای بررسی و تنظیمات پیشرفته امنیت فایل‌ها بررسی می‌شود.

دستور semanage fcontext

دستور semanage fcontext یکی از ابزارهای قدرتمند SELinux است که به شما اجازه می‌دهد تا context فایل‌ها را بر اساس پیکربندی‌ها و سیاست‌های خاص تغییر دهید. این دستور معمولاً برای تنظیمات دائمی context فایل‌ها استفاده می‌شود و نسبت به دستور chcon که تغییرات موقتی اعمال می‌کند، تغییرات بیشتری در سطح سیستم اعمال می‌کند.

ساختار کلی دستور semanage fcontext به شرح زیر است:

semanage fcontext -a -t TYPE FILE_PATH
  • -a: برای اضافه کردن یک فایل یا دایرکتوری به سیاست context.
  • -t TYPE: برای تعیین نوع context (type) فایل یا دایرکتوری.
  • FILE_PATH: مسیر فایل یا دایرکتوری که می‌خواهید نوع آن را تنظیم کنید.

مثال‌ها

  1. تنظیم نوع (type) برای یک فایل

برای تنظیم نوع (type) برای یک فایل خاص، دستور زیر را وارد کنید. فرض کنید می‌خواهید نوع یک فایل خاص را به httpd_sys_content_t تغییر دهید (نوعی که معمولاً برای فایل‌های وب‌سایت استفاده می‌شود).

sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html/index.html'

این دستور نوع فایل index.html را به httpd_sys_content_t تغییر می‌دهد.

  1. تنظیم نوع برای یک دایرکتوری و تمام فایل‌های زیرمجموعه آن

اگر بخواهید تمامی فایل‌های داخل یک دایرکتوری خاص (به‌طور مثال /var/www/html) را به نوع httpd_sys_content_t تغییر دهید، می‌توانید از دستور زیر استفاده کنید:

sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'

این دستور تمامی فایل‌ها و دایرکتوری‌های داخل /var/www/html را به نوع httpd_sys_content_t تغییر می‌دهد.

  1. حذف یک context از یک فایل یا دایرکتوری

اگر بخواهید یک context قبلاً تنظیم شده را حذف کنید، از گزینه -d استفاده می‌کنید. به‌طور مثال برای حذف context از یک فایل:

sudo semanage fcontext -d '/var/www/html/index.html'

دستور semanage برای تنظیمات پیشرفته

دستور semanage به‌طور کلی برای مدیریت سیاست‌ها و تنظیمات SELinux استفاده می‌شود. با استفاده از این دستور، می‌توانید نه تنها context‌های فایل‌ها، بلکه سایر تنظیمات SELinux را مدیریت کنید. برخی از قابلیت‌های مهم این دستور عبارتند از:

  1. مدیریت انواع (Types)

برای مشاهده لیست انواع موجود در SELinux، می‌توانید از دستور زیر استفاده کنید:

semanage type -l

این دستور تمامی انواع SELinux موجود را به نمایش می‌گذارد.

  1. اضافه کردن نوع جدید (Type)

اگر نیاز دارید یک نوع جدید برای فایل‌ها ایجاد کنید، از دستور زیر استفاده می‌کنید:

sudo semanage type -a -t NEW_TYPE

در اینجا، NEW_TYPE نوع جدیدی است که می‌خواهید اضافه کنید.

  1. مدیریت پورت‌ها

اگر نیاز به مدیریت پورت‌ها و دسترسی به آن‌ها داشته باشید، می‌توانید از دستور زیر برای تنظیمات مربوط به پورت‌ها استفاده کنید:

semanage port -a -t http_port_t -p tcp 8080

این دستور پورت 8080 را به نوع http_port_t اضافه می‌کند.

  1. مدیریت فایل‌های حاوی سیاست‌های SELinux

اگر می‌خواهید یک فایل پیکربندی سیاست‌های SELinux را تغییر دهید، از دستور semanage می‌توانید برای اضافه کردن یا حذف فایل‌های پیکربندی استفاده کنید.

semanage fcontext -a -t var_t '/mnt/usbdrive(/.*)?'

این دستور برای دایرکتوری USB که به /mnt/usbdrive متصل است، نوع var_t را تعیین می‌کند.

بررسی تغییرات و بازنشانی

پس از اعمال تغییرات با دستور semanage fcontext، برای اطمینان از اعمال صحیح این تغییرات، می‌توانید از دستور restorecon استفاده کنید تا تغییرات SELinux به‌طور خودکار برای فایل‌ها اعمال شود:

sudo restorecon -R /var/www/html

این دستور تمامی تغییرات context را برای دایرکتوری /var/www/html بازنشانی می‌کند.

مسیر فایل‌ها و پیکربندی‌ها

تنظیمات و سیاست‌های SELinux که به‌وسیله دستور semanage تغییر می‌کنند، معمولاً در مسیرهای زیر قرار دارند:

  • /etc/selinux/config: فایل پیکربندی اصلی SELinux.
  • /etc/selinux/targeted/contexts/: شامل فایل‌های context و سیاست‌های SELinux.

جمع‌بندی

دستور semanage fcontext یکی از ابزارهای مهم در مدیریت و تنظیم سیاست‌های SELinux برای فایل‌ها و دایرکتوری‌ها است که به شما این امکان را می‌دهد تا context‌های فایل‌ها را به‌صورت دائمی و با دقت بالا تنظیم کنید. همچنین دستور semanage برای مدیریت تنظیمات پیشرفته SELinux، از جمله انواع (types)، پورت‌ها، و سیاست‌های فایل‌ها کاربرد دارد. برای اطمینان از اعمال صحیح تغییرات، از دستور restorecon برای بازنشانی و همسان‌سازی context‌ها استفاده کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. استفاده از فایل‌های پیکربندی برای بهینه‌سازی SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ویرایش فایل‌های پیکربندی مانند /etc/selinux/config و /etc/selinux/targeted/contexts برای تغییر تنظیمات پایه” subtitle=”توضیحات کامل”]در سیستم‌های لینوکسی که از SELinux (Security-Enhanced Linux) استفاده می‌کنند، فایل‌های پیکربندی خاصی برای تنظیمات پایه و سیاست‌های امنیتی وجود دارد. مهم‌ترین این فایل‌ها، فایل‌های /etc/selinux/config و /etc/selinux/targeted/contexts هستند که در این بخش نحوه ویرایش این فایل‌ها را برای تغییر تنظیمات پایه بررسی خواهیم کرد.

فایل /etc/selinux/config

فایل /etc/selinux/config فایل اصلی پیکربندی SELinux در سیستم‌های لینوکسی است که در آن تنظیمات اولیه SELinux از جمله وضعیت فعال‌سازی، سطح امنیتی، و نوع سیاست‌ها تعریف می‌شود. این فایل معمولاً در ابتدای راه‌اندازی سیستم، SELinux را پیکربندی می‌کند.

ساختار این فایل به‌طور کلی به شرح زیر است:

SELINUX=enforcing
SELINUXTYPE=targeted
  • SELINUX: این خط وضعیت SELinux را مشخص می‌کند. مقادیر ممکن عبارتند از:
    • enforcing: SELinux فعال است و تمامی سیاست‌ها اجرا می‌شود.
    • permissive: SELinux فعال است، اما خطاها فقط گزارش می‌شوند و محدودیتی اعمال نمی‌شود.
    • disabled: SELinux غیرفعال است.
  • SELINUXTYPE: این خط نوع سیاست SELinux را مشخص می‌کند. سیاست‌های مختلفی برای سیستم‌های مختلف در دسترس است، مانند:
    • targeted: سیاست پیش‌فرض که به برنامه‌ها و سرویس‌های خاص محدود است.
    • strict: سیاستی که برای امنیت بیشتر در سیستم‌ها استفاده می‌شود و تمامی برنامه‌ها را تحت پوشش قرار می‌دهد.
    • mls: برای سیستم‌هایی که نیاز به مدیریت امنیت چندسطحی دارند.

تغییرات در فایل /etc/selinux/config

برای تغییر تنظیمات SELinux در این فایل، باید فایل را با ویرایشگر متن باز کنید و تنظیمات دلخواه خود را اعمال کنید.

  1. باز کردن فایل پیکربندی

برای باز کردن این فایل از ویرایشگر متن دلخواه استفاده کنید. برای مثال با استفاده از ویرایشگر vi:

sudo vi /etc/selinux/config
  1. تنظیم وضعیت SELinux

برای فعال یا غیرفعال کردن SELinux، مقدار SELINUX را تغییر دهید:

  • برای فعال‌سازی SELinux:
    SELINUX=enforcing
    
  • برای گزارش خطاها بدون اعمال محدودیت:
    SELINUX=permissive
    
  • برای غیرفعال کردن SELinux:
    SELINUX=disabled
    
  1. تغییر نوع سیاست SELinux

اگر می‌خواهید نوع سیاست را تغییر دهید، مقدار SELINUXTYPE را تنظیم کنید. به‌عنوان مثال:

  • برای استفاده از سیاست targeted (پیش‌فرض):
    SELINUXTYPE=targeted
    
  • برای استفاده از سیاست strict (سیاست سخت‌گیرانه):
    SELINUXTYPE=strict
    
  1. ذخیره و بستن فایل

پس از اعمال تغییرات، تغییرات را ذخیره کرده و فایل را ببندید. در ویرایشگر vi، برای ذخیره و خروج از فایل به‌صورت زیر عمل کنید:

  1. دکمه Esc را فشار دهید.
  2. تایپ کنید :wq و Enter را بزنید تا تغییرات ذخیره شوند و ویرایشگر بسته شود.

فایل /etc/selinux/targeted/contexts

فایل‌های موجود در مسیر /etc/selinux/targeted/contexts/ حاوی اطلاعاتی درباره‌ی contextهای فایل‌ها و دایرکتوری‌ها هستند که توسط SELinux استفاده می‌شوند. این فایل‌ها برای پیکربندی و تعیین امنیت منابع خاص استفاده می‌شوند. ویرایش این فایل‌ها به شما این امکان را می‌دهد که نوع context فایل‌ها و دایرکتوری‌های خاص را تغییر دهید.

برای ویرایش این فایل‌ها، به طور معمول از دستورات مانند semanage fcontext استفاده می‌شود تا context‌های فایل‌ها را تنظیم کنید. اما برای تغییرات دستی در تنظیمات این فایل‌ها می‌توان به شکل زیر عمل کرد.

  1. باز کردن فایل context

برای ویرایش یک فایل context، ابتدا فایل مورد نظر را باز کنید. به‌طور مثال، اگر بخواهید context یک دایرکتوری را تغییر دهید، می‌توانید فایل‌های مربوط به آن را باز کنید.

sudo vi /etc/selinux/targeted/contexts/files/file_contexts
  1. ویرایش محتوا

در این فایل‌ها، برای هر فایل یا دایرکتوری نوع context به‌صورت دقیق مشخص شده است. شما می‌توانید این فایل‌ها را به دلخواه ویرایش کنید.

برای مثال، می‌توانید تنظیمات زیر را به‌عنوان یک تغییر جدید اضافه کنید:

/var/www/html(/.*)?      system_u:object_r:httpd_sys_content_t:s0

این خط نشان می‌دهد که تمامی فایل‌ها و دایرکتوری‌ها در مسیر /var/www/html به‌طور پیش‌فرض باید به نوع httpd_sys_content_t تعلق داشته باشند.

  1. ذخیره تغییرات

پس از ویرایش، تغییرات را ذخیره کرده و فایل را ببندید.

اعمال تغییرات و راه‌اندازی مجدد SELinux

پس از ویرایش فایل‌های پیکربندی، برای اعمال تغییرات به SELinux نیاز دارید تا سیستم را مجدداً راه‌اندازی کنید یا از دستور setenforce برای اعمال تغییرات به‌صورت موقت استفاده کنید.

  1. راه‌اندازی مجدد SELinux

برای اعمال تغییرات، می‌توانید سیستم را مجدداً راه‌اندازی کنید:

sudo reboot
  1. اعمال تغییرات به‌صورت موقت

اگر نیازی به راه‌اندازی مجدد سیستم ندارید و فقط می‌خواهید تغییرات اعمال شوند، می‌توانید از دستور setenforce برای تغییر وضعیت SELinux به‌طور موقت استفاده کنید:

sudo setenforce 1   # فعال کردن SELinux
sudo setenforce 0   # غیرفعال کردن SELinux

جمع‌بندی

فایل‌های /etc/selinux/config و /etc/selinux/targeted/contexts در پیکربندی و مدیریت سیاست‌های SELinux نقشی اساسی دارند. فایل /etc/selinux/config برای تعیین وضعیت و نوع سیاست SELinux استفاده می‌شود، در حالی که فایل‌های موجود در /etc/selinux/targeted/contexts/ برای تعیین context فایل‌ها و دایرکتوری‌ها به‌کار می‌روند. با ویرایش این فایل‌ها می‌توانید تنظیمات پایه SELinux را مطابق با نیازهای امنیتی خود تغییر دهید. برای اعمال تغییرات در SELinux، باید از دستورات مناسب برای ذخیره‌سازی و اعمال پیکربندی‌ها استفاده کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات امنیتی در فایل /etc/selinux/targeted/contexts برای بهینه‌سازی و افزایش امنیت” subtitle=”توضیحات کامل”]فایل‌های موجود در دایرکتوری /etc/selinux/targeted/contexts/ مسئول تعیین contextهای امنیتی برای فایل‌ها، دایرکتوری‌ها، و فرآیندها در سیستم‌های SELinux هستند. این contextها به SELinux کمک می‌کنند تا دسترسی‌ها و مجوزها را مدیریت کرده و امنیت سیستم را بهبود بخشد.

در این بخش، به بررسی چگونگی ویرایش و تنظیمات امنیتی در فایل‌های موجود در /etc/selinux/targeted/contexts/ می‌پردازیم. این تنظیمات به شما این امکان را می‌دهند که سیاست‌های امنیتی خود را به‌صورت دقیق‌تر و هدفمندتر تعریف کنید و میزان امنیت سیستم را افزایش دهید.

نحوه تنظیم context‌ها در فایل‌های پیکربندی

در سیستم‌هایی که SELinux فعال است، انواع مختلفی از context برای فایل‌ها، دایرکتوری‌ها و حتی فرآیندها وجود دارد. این context‌ها از سه بخش تشکیل می‌شوند:

  1. User: تعیین می‌کند که مالک فایل یا فرآیند از چه نوع کاربری است.
  2. Role: نقش‌های مختلفی که به کاربر یا فرآیند اختصاص داده شده است.
  3. Type: نوع و محتوای فایل را مشخص می‌کند (مهم‌ترین بخش برای مدیریت امنیت).
  4. Level: سطح امنیتی فایل (در سیاست‌های MLS یا Multi-Level Security).

ساختار فایل‌های context

فایل‌های context در مسیر /etc/selinux/targeted/contexts/ معمولاً به نام‌های مختلفی مانند files/ و booleans/ شناخته می‌شوند. یکی از مهم‌ترین این فایل‌ها، فایل file_contexts است که در آن، contextهای فایل‌ها و دایرکتوری‌ها مشخص می‌شود.

ویرایش فایل file_contexts

فایل file_contexts در /etc/selinux/targeted/contexts/files/ قرار دارد و این فایل برای مشخص کردن نوع context فایل‌ها و دایرکتوری‌های مختلف استفاده می‌شود. به‌طور مثال، فایل‌های وب سرور باید دارای httpd_sys_content_t باشند.

برای ویرایش این فایل و بهینه‌سازی تنظیمات امنیتی آن، مراحل زیر را دنبال کنید:

  1. باز کردن فایل file_contexts برای ویرایش

برای باز کردن این فایل از ویرایشگر متن استفاده کنید:

sudo vi /etc/selinux/targeted/contexts/files/file_contexts
  1. افزودن یا ویرایش context‌ها

در این فایل، شما می‌توانید برای هر دایرکتوری یا فایل، context خاصی را تعیین کنید. برای مثال، اگر بخواهید برای تمامی فایل‌های داخل /var/www/html که توسط وب سرور استفاده می‌شود، از httpd_sys_content_t استفاده کنید، به‌طور زیر عمل کنید:

/var/www/html(/.*)?      system_u:object_r:httpd_sys_content_t:s0

این خط بیان می‌کند که تمامی فایل‌ها و دایرکتوری‌های داخل /var/www/html باید به‌طور پیش‌فرض نوع httpd_sys_content_t داشته باشند که مخصوص محتوای وب است.

  1. تعیین context برای دایرکتوری‌ها و فایل‌ها

برای تنظیم امنیت بیشتر، می‌توانید فایل‌ها و دایرکتوری‌های خاصی را با contextهای ویژه‌ای پیکربندی کنید. برای مثال، اگر بخواهید یک دایرکتوری خاص را به context خاصی نسبت دهید:

/opt/my_secure_app(/.*)?  system_u:object_r:my_secure_app_t:s0

این خط بیان می‌کند که تمامی فایل‌ها و دایرکتوری‌ها در مسیر /opt/my_secure_app باید context نوع my_secure_app_t را داشته باشند که نوعی از امنیت اختصاصی برای این برنامه است.

بهینه‌سازی امنیت با استفاده از contextهای سخت‌گیرانه

یکی از راه‌های بهینه‌سازی امنیت در SELinux، استفاده از contextهای سخت‌گیرانه‌تر برای فایل‌ها و دایرکتوری‌ها است. به‌طور معمول، SELinux سیاست‌های پیش‌فرض را با نوع‌هایی مانند httpd_sys_content_t یا system_u:object_r به فایل‌ها اختصاص می‌دهد. با این حال، اگر بخواهید امنیت را افزایش دهید، می‌توانید contextهای خاصی ایجاد کرده و آن‌ها را به فایل‌ها و دایرکتوری‌های حساس اعمال کنید.

برای مثال، می‌توانید به‌جای استفاده از httpd_sys_content_t برای فایل‌های وب‌سایت، از context سفارشی مانند my_web_content_t استفاده کنید که سیاست‌های امنیتی بیشتری برای دسترسی‌های خارجی دارد.

تنظیمات اضافی با استفاده از دستور semanage

ابزار semanage به شما این امکان را می‌دهد که contextهای فایل‌ها و دایرکتوری‌ها را از طریق خط فرمان به‌طور داینامیک تغییر دهید. به‌طور مثال، می‌توانید با استفاده از دستور semanage fcontext نوع context جدیدی برای یک دایرکتوری خاص تنظیم کنید.

  1. استفاده از دستور semanage برای تغییر context

اگر بخواهید context جدیدی را برای دایرکتوری /opt/my_secure_app اعمال کنید، از دستور زیر استفاده کنید:

sudo semanage fcontext -a -t my_secure_app_t "/opt/my_secure_app(/.*)?"

این دستور نوع context my_secure_app_t را به تمامی فایل‌ها و دایرکتوری‌ها در مسیر /opt/my_secure_app اختصاص می‌دهد.

  1. اعمال تغییرات با استفاده از دستور restorecon

پس از تنظیم context جدید با semanage، باید از دستور restorecon برای اعمال تغییرات استفاده کنید:

sudo restorecon -Rv /opt/my_secure_app

این دستور به‌طور خودکار context جدید را به تمامی فایل‌ها و دایرکتوری‌های موجود در مسیر /opt/my_secure_app اعمال می‌کند.

جمع‌بندی

برای بهینه‌سازی و افزایش امنیت با استفاده از تنظیمات در فایل‌های /etc/selinux/targeted/contexts/، شما می‌توانید contextهای دقیق و خاصی را برای فایل‌ها و دایرکتوری‌های حساس سیستم تعریف کنید. فایل file_contexts به شما این امکان را می‌دهد که contextهای مختلفی را به مسیرهای خاص اختصاص دهید و با استفاده از ابزار semanage می‌توانید تغییرات را به‌صورت داینامیک اعمال کنید. تنظیمات مناسب context‌ها به شما کمک می‌کند که از دسترسی‌های غیرمجاز جلوگیری کنید و سیستم خود را بهینه‌تر و امن‌تر کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. تنظیمات مدیریت ماژول‌های SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بارگذاری و مدیریت ماژول‌های SELinux با دستور semodule” subtitle=”توضیحات کامل”]در SELinux، ماژول‌ها بخش‌های اصلی سیاست‌های امنیتی هستند که اجازه می‌دهند سیاست‌های امنیتی خاص برای نیازهای خاص سیستم اعمال شوند. این ماژول‌ها می‌توانند به‌طور مجزا بارگذاری، ویرایش و مدیریت شوند تا دسترسی‌ها و مجوزها به‌طور دقیق‌تر کنترل شوند. ابزار semodule برای بارگذاری و مدیریت این ماژول‌ها در سیستم SELinux استفاده می‌شود.

در این بخش، نحوه بارگذاری، حذف و مدیریت ماژول‌های SELinux با استفاده از دستور semodule را بررسی خواهیم کرد.

بررسی دستور semodule

دستور semodule به شما این امکان را می‌دهد که ماژول‌های SELinux را مدیریت کنید. این ابزار به شما کمک می‌کند تا ماژول‌ها را نصب، حذف و یا فهرست کنید.

ساختار کلی دستور semodule به شکل زیر است:

semodule [گزینه‌ها] [عملیات]

برای مشاهده کمک‌های مربوط به دستور semodule می‌توانید از دستور زیر استفاده کنید:

semodule --help

۱. بارگذاری ماژول SELinux

برای بارگذاری یک ماژول SELinux، ابتدا باید ماژول مورد نظر را با فرمت .pp (Policy Package) آماده کنید. این فرمت معمولاً از طریق کامپایل سیاست‌های SELinux تولید می‌شود.

برای بارگذاری یک ماژول از دستور زیر استفاده می‌کنیم:

sudo semodule -i <module_name>.pp

به‌طور مثال، اگر ماژولی با نام my_security_module.pp داریم، برای بارگذاری آن به‌صورت زیر عمل می‌کنیم:

sudo semodule -i my_security_module.pp

این دستور ماژول my_security_module.pp را به سیاست SELinux سیستم اضافه می‌کند.

۲. حذف ماژول SELinux

اگر بخواهید یک ماژول را از سیستم حذف کنید، می‌توانید از دستور semodule -r استفاده کنید. به‌طور مثال، برای حذف ماژول my_security_module دستور زیر را وارد کنید:

sudo semodule -r my_security_module

این دستور ماژول my_security_module را از سیستم حذف می‌کند.

۳. مشاهده ماژول‌های نصب‌شده

برای فهرست کردن تمامی ماژول‌های نصب‌شده در سیستم، از دستور semodule -l استفاده می‌کنیم:

semodule -l

این دستور تمام ماژول‌های نصب‌شده و بارگذاری‌شده در سیستم SELinux را نمایش می‌دهد.

۴. ذخیره و فعال‌سازی تغییرات

در صورتی که ماژول‌ها و سیاست‌های جدیدی را نصب کرده‌اید یا تغییری در آن‌ها ایجاد کرده‌اید، لازم است که تغییرات را ذخیره و فعال کنید. دستور semodule به‌طور خودکار تغییرات را اعمال می‌کند، اما برای اطمینان بیشتر می‌توانید از دستور restorecon برای اعمال تغییرات به‌صورت کامل استفاده کنید:

sudo restorecon -Rv /path/to/directory

این دستور تمامی تغییرات را در دایرکتوری مشخص‌شده اعمال می‌کند.

۵. ایجاد ماژول SELinux جدید

در صورتی که نیاز به ایجاد یک ماژول SELinux جدید داشته باشید، ابتدا باید سیاست‌های SELinux خود را بنویسید و سپس آن‌ها را به یک ماژول .pp تبدیل کنید. این فرآیند به‌طور معمول شامل مراحل زیر است:

  1. نوشتن فایل سیاستی جدید.
  2. کامپایل سیاست به فرمت .pp با استفاده از ابزار checkmodule و semodule_package.
  3. بارگذاری ماژول جدید با استفاده از دستور semodule -i.

مثال:

checkmodule -M -m -o my_security_module.mod my_security_module.te
semodule_package -o my_security_module.pp -m my_security_module.mod
semodule -i my_security_module.pp

جمع‌بندی

دستور semodule ابزار قدرتمندی برای بارگذاری، حذف و مدیریت ماژول‌های SELinux است. این دستور به شما این امکان را می‌دهد که ماژول‌های امنیتی سفارشی را نصب و مدیریت کنید تا سیاست‌های امنیتی دقیق‌تری برای نیازهای خاص سیستم خود پیاده‌سازی کنید. شما می‌توانید ماژول‌ها را نصب، حذف و فهرست کنید و تغییرات را با استفاده از دستور restorecon اعمال نمایید. همچنین، در صورتی که نیاز به ایجاد ماژول جدید داشته باشید، ابزارهای checkmodule و semodule_package به شما این امکان را می‌دهند که سیاست‌های خود را به ماژول‌های قابل استفاده تبدیل کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نصب و به‌روزرسانی ماژول‌های SELinux” subtitle=”توضیحات کامل”]در SELinux، ماژول‌ها نقش مهمی در پیاده‌سازی سیاست‌های امنیتی خاص دارند. این ماژول‌ها شامل قوانین و تنظیمات امنیتی برای کنترل دسترسی و رفتار سیستم هستند. برای اطمینان از اینکه سیاست‌های امنیتی به‌روز و مطابق با نیازهای سیستم شما باشند، باید از ابزارهای مناسب برای نصب و به‌روزرسانی ماژول‌ها استفاده کنید.

در این بخش، نحوه نصب و به‌روزرسانی ماژول‌های SELinux را بررسی خواهیم کرد.

نصب ماژول‌های SELinux

برای نصب ماژول‌های SELinux، می‌توانید از دستور semodule -i استفاده کنید. این دستور به شما امکان می‌دهد ماژول‌هایی که در فرمت .pp (Policy Package) هستند را به سیاست‌های SELinux سیستم خود اضافه کنید.

مراحل نصب ماژول SELinux:
  1. دانلود یا آماده‌سازی ماژول
    ابتدا باید ماژول SELinux مورد نظر خود را آماده کنید. این ماژول‌ها معمولاً با فرمت .pp هستند و از منابع مختلف قابل دریافت‌اند یا ممکن است خودتان آن‌ها را ایجاد کرده باشید.
  2. نصب ماژول با دستور semodule -i
    برای نصب یک ماژول SELinux، از دستور زیر استفاده می‌کنید:

    sudo semodule -i <module_name>.pp
    

    به‌عنوان مثال، اگر ماژول شما با نام my_security_module.pp است، دستور نصب آن به‌صورت زیر خواهد بود:

    sudo semodule -i my_security_module.pp
    
  3. بررسی نصب ماژول
    پس از نصب ماژول، می‌توانید با دستور semodule -l بررسی کنید که ماژول به‌درستی نصب شده است:

    semodule -l
    

    این دستور فهرستی از ماژول‌های نصب‌شده در سیستم شما را نمایش می‌دهد.

به‌روزرسانی ماژول‌های SELinux

گاهی اوقات ممکن است ماژول‌های SELinux نیاز به به‌روزرسانی داشته باشند تا اصلاحات امنیتی جدید یا قابلیت‌های جدیدی به آن‌ها اضافه شود. برای به‌روزرسانی ماژول‌ها، دو روش اصلی وجود دارد:

  1. حذف ماژول قدیمی و نصب نسخه جدید
    در صورتی که ماژول جدیدی با نام متفاوت از نسخه قدیمی وجود داشته باشد، باید ابتدا ماژول قدیمی را حذف کرده و سپس نسخه جدید را نصب کنید.

    • حذف ماژول قدیمی با دستور semodule -r:
      sudo semodule -r <old_module_name>
      
    • نصب نسخه جدید ماژول:
      sudo semodule -i <new_module_name>.pp
      

    به‌عنوان مثال، برای حذف ماژول my_security_module و نصب نسخه جدید آن، ابتدا دستور حذف و سپس نصب را به ترتیب وارد می‌کنید:

    sudo semodule -r my_security_module
    sudo semodule -i my_security_module_v2.pp
    
  2. به‌روزرسانی خودکار با استفاده از ابزارهای مدیریت بسته
    برخی از توزیع‌های لینوکس به‌طور خودکار ماژول‌های SELinux را به‌روزرسانی می‌کنند. اگر ماژول SELinux به‌صورت بسته نرم‌افزاری نصب شده باشد (مانند بسته‌های policycoreutils یا selinux-policy)، می‌توانید با استفاده از ابزار مدیریت بسته توزیع خود (مانند yum یا dnf در RHEL/CentOS/Fedora) ماژول‌ها را به‌روزرسانی کنید.

    برای به‌روزرسانی ماژول‌های SELinux با استفاده از dnf:

    sudo dnf update selinux-policy
    

    برای به‌روزرسانی با استفاده از yum:

    sudo yum update selinux-policy
    

    این دستورات باعث به‌روزرسانی سیاست‌های SELinux و ماژول‌های مربوطه به آخرین نسخه‌های موجود در مخازن توزیع شما خواهند شد.

بررسی به‌روزرسانی و نصب موفقیت‌آمیز

پس از نصب یا به‌روزرسانی ماژول‌ها، می‌توانید با استفاده از دستور semodule -l فهرست ماژول‌های نصب‌شده را بررسی کنید و مطمئن شوید که ماژول‌های جدید به‌درستی بارگذاری شده‌اند.

جمع‌بندی

برای نصب و به‌روزرسانی ماژول‌های SELinux، از دستور semodule -i برای نصب ماژول‌ها و از دستور semodule -r برای حذف ماژول‌های قدیمی استفاده می‌شود. همچنین، در صورت نیاز به به‌روزرسانی خودکار، می‌توانید از ابزارهای مدیریت بسته مانند yum یا dnf استفاده کنید. پس از نصب یا به‌روزرسانی، با استفاده از دستور semodule -l می‌توانید مطمئن شوید که ماژول‌های جدید به‌درستی بارگذاری شده‌اند و سیاست‌های امنیتی سیستم شما به‌روز هستند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از دستور semodule -l برای نمایش ماژول‌های نصب‌شده” subtitle=”توضیحات کامل”]دستور semodule -l در SELinux برای نمایش فهرستی از تمام ماژول‌های نصب‌شده استفاده می‌شود. این دستور می‌تواند به شما کمک کند تا مشاهده کنید کدام ماژول‌ها در سیستم SELinux شما فعال هستند و برای مدیریت و به‌روزرسانی آن‌ها مفید باشد.

نحوه استفاده از دستور semodule -l

برای نمایش ماژول‌های نصب‌شده در سیستم خود، کافی است دستور زیر را اجرا کنید:

semodule -l

این دستور تمام ماژول‌های فعال در سیستم SELinux را نمایش می‌دهد. خروجی معمولاً شامل نام ماژول و نسخه آن است. برای مثال، خروجی ممکن است به شکل زیر باشد:

allow_execmod      1.0
httpd_can_network_connect      2.1
sshd               1.0

توضیح خروجی دستور

در خروجی دستور semodule -l، هر خط شامل دو قسمت است:

  1. نام ماژول: این قسمت مشخص می‌کند که ماژول SELinux مربوط به کدام سیاست است.
  2. نسخه ماژول: این بخش نشان‌دهنده نسخه ماژول نصب‌شده است.

استفاده از دستور semodule -l برای عیب‌یابی

اگر بعد از نصب یا به‌روزرسانی یک ماژول، نتایج دلخواه را نمی‌بینید یا تغییرات اعمال نمی‌شوند، می‌توانید با استفاده از دستور semodule -l اطمینان حاصل کنید که ماژول به‌درستی نصب شده است و در سیستم SELinux بارگذاری شده است.

جمع‌بندی

دستور semodule -l برای نمایش فهرست تمامی ماژول‌های نصب‌شده در سیستم SELinux به کار می‌رود. این دستور کمک می‌کند تا ماژول‌ها را بررسی کرده و مطمئن شوید که همه چیز به‌درستی نصب شده است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه غیرفعال کردن یا حذف ماژول‌ها با استفاده از دستور semodule -r” subtitle=”توضیحات کامل”]دستور semodule -r در SELinux برای حذف یا غیرفعال کردن یک ماژول خاص از سیستم استفاده می‌شود. این دستور زمانی مفید است که شما نیاز دارید تا یک ماژول SELinux را برای انجام تغییرات، آزمایشات یا به‌دلیل عدم نیاز آن، از سیستم حذف کنید.

نحوه استفاده از دستور semodule -r

برای حذف یک ماژول SELinux، کافی است دستور زیر را وارد کنید:

semodule -r <module_name>

در این دستور، <module_name> باید با نام ماژول مورد نظر شما جایگزین شود که می‌خواهید آن را حذف کنید. برای مثال، اگر شما بخواهید ماژول httpd_can_network_connect را حذف کنید، دستور به این صورت خواهد بود:

semodule -r httpd_can_network_connect

نحوه بررسی موفقیت عملیات

بعد از اجرای دستور semodule -r برای حذف ماژول، شما می‌توانید از دستور semodule -l برای بررسی این که ماژول مورد نظر از سیستم حذف شده است، استفاده کنید. به‌عنوان مثال:

semodule -l

اگر ماژول مورد نظر به‌طور موفقیت‌آمیز حذف شده باشد، دیگر در فهرست ماژول‌ها نمایش داده نخواهد شد.

دلایل استفاده از دستور semodule -r

  • غیرفعال کردن موقت ماژول‌ها: زمانی که شما نیاز به آزمایش سیستم بدون ماژول خاصی دارید، می‌توانید با استفاده از این دستور ماژول را غیرفعال کنید.
  • پاکسازی سیستم: اگر ماژول خاصی به‌طور دائم مورد استفاده قرار نگیرد یا به‌دلیل مشکلات امنیتی حذف آن ضروری باشد، دستور semodule -r گزینه‌ای برای حذف آن است.

جمع‌بندی

دستور semodule -r برای حذف یا غیرفعال کردن ماژول‌های SELinux از سیستم استفاده می‌شود. این دستور به شما کمک می‌کند تا مدیریت بهتری روی ماژول‌های نصب‌شده در سیستم داشته باشید. همچنین پس از حذف ماژول، با استفاده از دستور semodule -l می‌توانید از حذف صحیح ماژول اطمینان حاصل کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. تنظیمات دسترسی‌های فایل‌ها و دایرکتوری‌ها”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تغییر نوع‌ها و دایرکتوری‌ها با استفاده از دستور chcon برای تغییر ویژگی‌های امنیتی” subtitle=”توضیحات کامل”]دستور chcon در SELinux به شما این امکان را می‌دهد که ویژگی‌های امنیتی فایل‌ها و دایرکتوری‌ها را تغییر دهید. این دستور به‌ویژه زمانی مفید است که نیاز دارید نوع‌های SELinux (SELinux Context) را برای فایل‌ها یا دایرکتوری‌ها به‌طور خاص تنظیم کنید. با استفاده از این دستور، شما می‌توانید از نظر امنیتی، دسترسی‌ها و رفتار SELinux نسبت به فایل‌ها و دایرکتوری‌ها را کنترل کنید.

ساختار دستور chcon

دستور chcon به صورت کلی به‌صورت زیر استفاده می‌شود:

chcon [OPTIONS] CONTEXT FILE

در این دستور:

  • CONTEXT نمایانگر ویژگی امنیتی جدیدی است که می‌خواهید به فایل یا دایرکتوری اعمال کنید.
  • FILE یا DIRECTORY نمایانگر فایل یا دایرکتوری‌ای است که می‌خواهید ویژگی‌های امنیتی آن را تغییر دهید.

انواع ویژگی‌هایی که می‌توان با chcon تغییر داد

ویژگی‌های امنیتی که می‌توان با chcon تغییر داد، شامل موارد زیر هستند:

  • نوع (Type): نوع SELinux که به یک فایل یا دایرکتوری تخصیص داده شده است.
  • کاربرد (Role): نقش SELinux برای یک فایل یا دایرکتوری.
  • کاربر (User): کاربری که SELinux برای فایل یا دایرکتوری تخصیص می‌دهد.
  • سلسله‌مراتب (Level): سطح امنیتی یک فایل یا دایرکتوری.

مثال‌هایی از دستور chcon

  1. تغییر نوع SELinux یک فایل:

    فرض کنید شما می‌خواهید نوع یک فایل خاص را به httpd_sys_content_t تغییر دهید. برای این کار از دستور زیر استفاده می‌کنید:

    chcon -t httpd_sys_content_t /path/to/file
    

    در این دستور، -t برای تعیین نوع SELinux است و httpd_sys_content_t نوع جدید فایل می‌باشد.

  2. تغییر نوع SELinux در یک دایرکتوری به‌طور بازگشتی:

    اگر بخواهید نوع فایل‌ها و دایرکتوری‌های موجود در یک مسیر خاص را به‌طور بازگشتی تغییر دهید، می‌توانید از گزینه -R برای تغییر دایرکتوری‌ها و فایل‌ها به‌صورت بازگشتی استفاده کنید:

    chcon -R -t httpd_sys_content_t /path/to/directory
    

    این دستور تمام فایل‌ها و دایرکتوری‌های زیر شاخه‌ی /path/to/directory را به نوع httpd_sys_content_t تغییر خواهد داد.

  3. تغییر نقش و نوع فایل:

    برای تغییر نقش SELinux یک فایل به staff_u و نوع آن به user_home_dir_t:

    chcon -u staff_u -t user_home_dir_t /home/user/file
    

    در این مثال، -u برای تغییر نقش (staff_u) و -t برای تغییر نوع فایل (user_home_dir_t) استفاده شده است.

استفاده از chcon برای تغییر ویژگی‌های امنیتی

دستور chcon می‌تواند به شما کمک کند تا ویژگی‌های امنیتی SELinux فایل‌ها و دایرکتوری‌ها را تغییر دهید و این می‌تواند به‌ویژه زمانی مفید باشد که می‌خواهید دسترسی‌ها و رفتار سیستم را مطابق با نیازهای خاص تنظیم کنید.

نکات مهم

  • تغییر ویژگی‌های SELinux با chcon به‌طور موقت است. اگر شما سیستم را مجدداً راه‌اندازی کنید یا SELinux را ریست کنید، ویژگی‌های جدید ممکن است بازنشانی شوند.
  • برای اعمال تغییرات دائمی و جلوگیری از بازنشانی ویژگی‌ها بعد از ریستارت، باید از دستور semanage fcontext استفاده کنید.

جمع‌بندی

دستور chcon در SELinux به شما این امکان را می‌دهد که ویژگی‌های امنیتی فایل‌ها و دایرکتوری‌ها را به‌صورت موقت تغییر دهید. این دستور برای تغییر نوع، نقش، کاربر و سطح امنیتی فایل‌ها و دایرکتوری‌ها کاربرد دارد. برای اعمال تغییرات دائمی، استفاده از دستور semanage fcontext پیشنهاد می‌شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات پیشرفته و بهینه‌سازی امنیت فایل‌ها با دستور semanage fcontext” subtitle=”توضیحات کامل”]دستور semanage fcontext در SELinux به شما این امکان را می‌دهد که قواعد امنیتی را برای فایل‌ها و دایرکتوری‌ها تنظیم کنید. این دستور به شما اجازه می‌دهد تا به‌طور دقیق‌تر و دائمی‌تر ویژگی‌های امنیتی فایل‌ها و دایرکتوری‌ها را مدیریت کنید. برخلاف دستور chcon که تغییرات را به‌صورت موقت اعمال می‌کند، دستور semanage fcontext تغییرات را به‌صورت دائمی ذخیره می‌کند، به این معنی که حتی پس از راه‌اندازی مجدد سیستم، تنظیمات اعمال‌شده حفظ می‌شوند.

ساختار دستور semanage fcontext

دستور semanage fcontext به‌طور کلی به صورت زیر استفاده می‌شود:

semanage fcontext -a -t TYPE PATTERN

در این دستور:

  • -a: برای افزودن یک قاعده جدید.
  • -t TYPE: برای تعیین نوع (SELinux type) موردنظر برای فایل‌ها و دایرکتوری‌ها.
  • PATTERN: مسیر یا الگوی فایل یا دایرکتوری که می‌خواهید قاعده برای آن اعمال شود.

انواع گزینه‌های دستور semanage fcontext

در زیر به برخی از رایج‌ترین گزینه‌هایی که با semanage fcontext استفاده می‌شوند اشاره می‌کنیم:

  • -a: افزودن قاعده جدید.
  • -m: اصلاح یک قاعده موجود.
  • -d: حذف یک قاعده.
  • -l: لیست کردن قواعد موجود.

مثال‌هایی از دستور semanage fcontext

  1. افزودن قاعده برای تغییر نوع SELinux فایل‌ها

    فرض کنید شما می‌خواهید نوع تمامی فایل‌های موجود در دایرکتوری /var/www/html را به httpd_sys_content_t تغییر دهید. برای این کار از دستور زیر استفاده می‌کنید:

    semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    

    این دستور باعث می‌شود که تمامی فایل‌ها و دایرکتوری‌های زیر /var/www/html به نوع httpd_sys_content_t اختصاص یابند.

  2. مشاهده قواعد موجود

    برای مشاهده تمامی قواعد موجود و اینکه کدام فایل‌ها به کدام نوع SELinux اختصاص داده شده‌اند، از دستور زیر استفاده می‌کنید:

    semanage fcontext -l
    

    این دستور تمام قواعدی که در سیستم SELinux برای فایل‌ها و دایرکتوری‌ها اعمال شده است را نمایش می‌دهد.

  3. حذف یک قاعده

    اگر بخواهید قاعده‌ای که قبلاً برای یک فایل یا دایرکتوری اعمال کرده‌اید را حذف کنید، از دستور -d استفاده می‌کنید. به‌عنوان مثال، برای حذف قاعده‌ای که برای /var/www/html تعریف کرده‌اید، دستور زیر را اجرا کنید:

    semanage fcontext -d "/var/www/html(/.*)?"
    
  4. اصلاح یک قاعده

    اگر بخواهید نوع SELinux یک فایل یا دایرکتوری خاص را تغییر دهید، می‌توانید از دستور -m برای اصلاح قاعده استفاده کنید. به‌عنوان مثال، برای تغییر نوع دایرکتوری /var/www/html از httpd_sys_content_t به user_home_dir_t، از دستور زیر استفاده کنید:

    semanage fcontext -m -t user_home_dir_t "/var/www/html(/.*)?"
    

کاربردهای پیشرفته semanage fcontext

  1. تخصیص نوع‌های مختلف به دایرکتوری‌ها و فایل‌ها به‌صورت بازگشتی

    زمانی که نیاز دارید نوع خاصی را به تمامی فایل‌ها و دایرکتوری‌ها در یک مسیر خاص اعمال کنید، از الگوی مناسب برای دایرکتوری‌های بازگشتی استفاده می‌کنید. به‌عنوان مثال:

    semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    

    این دستور برای تمامی فایل‌ها و دایرکتوری‌های زیر دایرکتوری /var/www/html نوع httpd_sys_content_t را تخصیص می‌دهد.

  2. تخصیص نوع‌های مختلف به فایل‌ها با پسوند خاص

    اگر بخواهید نوع خاصی را به تمامی فایل‌های با پسوند .html در یک دایرکتوری اختصاص دهید، از الگوی زیر استفاده می‌کنید:

    semanage fcontext -a -t httpd_sys_content_t "/var/www/html/*.html"
    

    این دستور تمامی فایل‌های .html موجود در دایرکتوری /var/www/html را به نوع httpd_sys_content_t تخصیص می‌دهد.

اعمال تغییرات با restorecon

پس از اعمال قواعد جدید با semanage fcontext، باید از دستور restorecon برای اعمال این تغییرات به فایل‌ها و دایرکتوری‌ها استفاده کنید. دستور restorecon به SELinux این امکان را می‌دهد که ویژگی‌های امنیتی جدید را به فایل‌ها و دایرکتوری‌ها اعمال کند.

برای اعمال قواعد جدید به فایل‌ها و دایرکتوری‌ها، دستور زیر را استفاده کنید:

restorecon -R -v /var/www/html

این دستور باعث می‌شود که تغییرات جدید به‌طور بازگشتی به تمام فایل‌ها و دایرکتوری‌های موجود در /var/www/html اعمال شوند.

جمع‌بندی

دستور semanage fcontext ابزاری قدرتمند و پیشرفته برای مدیریت قواعد SELinux برای فایل‌ها و دایرکتوری‌ها است. این دستور به شما این امکان را می‌دهد که قواعد امنیتی را به‌طور دائم برای فایل‌ها و دایرکتوری‌ها تعریف کنید و از آن‌ها محافظت کنید. همچنین، با استفاده از دستور restorecon می‌توانید تغییرات SELinux را به فایل‌ها و دایرکتوری‌ها اعمال کنید تا سیستم به‌طور کامل با قواعد جدید هماهنگ شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی و تنظیمات امنیتی برای فایل‌های خاص با استفاده از دستور seinfo” subtitle=”توضیحات کامل”]دستور seinfo یکی از ابزارهای مفید در SELinux است که به شما این امکان را می‌دهد که اطلاعات امنیتی مربوط به نوع SELinux فایل‌ها و فرایندها را مشاهده کنید. این دستور کمک می‌کند تا جزئیات دقیق‌تری در مورد اینکه چه ویژگی‌های امنیتی (مانند نوع فایل، دسترسی‌ها و …) به هر فایل یا فرایند اختصاص داده شده است، به دست آورید.

این ابزار به‌ویژه در زمانی که نیاز به تحلیل دقیق‌تر تنظیمات SELinux در سیستم دارید، بسیار مفید است.

ساختار دستور seinfo

دستور seinfo به‌طور کلی به صورت زیر استفاده می‌شود:

seinfo [OPTIONS]

در این دستور، OPTIONS می‌تواند شامل پارامترهایی باشد که برای مشاهده یا بررسی اطلاعات مختلف به‌کار می‌روند.

پارامترهای مهم دستور seinfo

در زیر برخی از رایج‌ترین گزینه‌هایی که می‌توانید با دستور seinfo استفاده کنید آورده شده است:

  • -x: نمایش اطلاعات درباره نوع فایل.
  • -f: نمایش اطلاعات در مورد فایل‌ها.
  • -p: نمایش اطلاعات پروسه‌ها.
  • -l: نمایش لیستی از تمامی موجودیت‌ها و انواع مربوطه.

استفاده‌های مختلف از دستور seinfo

  1. مشاهده اطلاعات SELinux برای یک فایل خاص

    برای مشاهده اطلاعات SELinux مربوط به یک فایل خاص، می‌توانید از دستور زیر استفاده کنید. به‌عنوان مثال، برای مشاهده اطلاعات SELinux مربوط به فایل /var/www/html/index.html، دستور زیر را اجرا می‌کنید:

    seinfo -x /var/www/html/index.html
    

    این دستور جزئیات مربوط به نوع SELinux این فایل را نمایش می‌دهد، شامل نوع امنیتی آن، دسترسی‌ها و سایر اطلاعات مرتبط.

  2. مشاهده اطلاعات SELinux برای همه فایل‌ها

    اگر بخواهید اطلاعات SELinux را برای تمامی فایل‌ها در سیستم بررسی کنید، می‌توانید از دستور زیر استفاده کنید:

    seinfo -f
    

    این دستور اطلاعاتی در مورد تمامی فایل‌های موجود در سیستم و نوع SELinux آن‌ها را نمایش می‌دهد.

  3. مشاهده اطلاعات SELinux مربوط به پروسه‌ها

    اگر می‌خواهید اطلاعات SELinux مربوط به پروسه‌ها و فرایندهای در حال اجرا را مشاهده کنید، دستور زیر را اجرا کنید:

    seinfo -p
    

    این دستور اطلاعات امنیتی مربوط به فرایندهای در حال اجرا را به شما نمایش می‌دهد.

  4. مشاهده لیست انواع و موجودیت‌های SELinux

    اگر بخواهید لیستی از تمامی موجودیت‌ها و انواع SELinux در سیستم خود مشاهده کنید، از دستور زیر استفاده می‌کنید:

    seinfo -l
    

    این دستور لیست کاملی از انواع SELinux و موجودیت‌های موجود را نمایش می‌دهد.

استفاده از seinfo برای تنظیمات امنیتی پیشرفته

در مواردی که بخواهید به‌صورت خاص برای تنظیمات امنیتی پیشرفته فایل‌ها یا دایرکتوری‌ها اقدام کنید، ابزار seinfo می‌تواند به شما کمک کند تا ویژگی‌های امنیتی آن‌ها را تحلیل کرده و تنظیمات مناسب را اعمال کنید.

  1. بررسی نوع فایل‌ها و دایرکتوری‌ها

    فرض کنید شما یک فایل جدید در دایرکتوری /var/www/html اضافه کرده‌اید و می‌خواهید مطمئن شوید که نوع امنیتی صحیحی به آن اختصاص یافته است. با استفاده از دستور زیر، می‌توانید اطلاعات مربوط به آن فایل را بررسی کنید:

    seinfo -x /var/www/html/newfile.html
    

    این اطلاعات می‌تواند شامل نوع فایل، دسترسی‌های آن و سایر ویژگی‌های SELinux باشد.

  2. تحلیل پروسه‌های در حال اجرا و دسترسی‌ها

    برای تنظیمات امنیتی دقیق‌تر، ممکن است بخواهید بررسی کنید که کدام پروسه‌ها و برنامه‌ها در حال دسترسی به فایل‌ها و منابع مختلف سیستم هستند. این اطلاعات می‌تواند به شما کمک کند تا اطمینان حاصل کنید که هیچ فرایند غیرمجاز به منابع حساس دسترسی ندارد.

    دستور زیر اطلاعات مربوط به پروسه‌ها را نمایش می‌دهد:

    seinfo -p
    

    این اطلاعات به شما کمک می‌کند تا فرایندهای در حال اجرا را بررسی کرده و دسترسی‌های آن‌ها را تنظیم کنید.

اعمال تغییرات امنیتی

برای اعمال تنظیمات جدید امنیتی پس از استفاده از دستور seinfo و تحلیل فایل‌ها، می‌توانید از دستور semanage برای اعمال تغییرات در قواعد امنیتی و نوع فایل‌ها استفاده کنید.

مثال:

  1. تغییر نوع یک فایل به httpd_sys_content_t:
    semanage fcontext -a -t httpd_sys_content_t "/var/www/html/newfile.html"
    
  2. پس از اعمال تغییرات با semanage، از دستور restorecon برای اعمال این تغییرات به فایل‌ها و دایرکتوری‌ها استفاده کنید:
    restorecon -R -v /var/www/html
    

جمع‌بندی

دستور seinfo ابزاری قدرتمند برای بررسی و مشاهده اطلاعات امنیتی در SELinux است. این ابزار می‌تواند به شما کمک کند تا اطلاعات دقیق‌تری در مورد نوع فایل‌ها، پروسه‌ها و سایر موجودیت‌های SELinux به‌دست آورید. با استفاده از این دستور، می‌توانید تحلیل‌های دقیق‌تری انجام داده و تنظیمات امنیتی لازم را برای سیستم خود اعمال کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 6. مدیریت قوانین SELinux با استفاده از ابزارهای تجزیه و تحلیل”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از audit2allow برای ایجاد قوانین جدید و مجاز کردن دسترسی‌های محدود شده” subtitle=”توضیحات کامل”]دستور audit2allow یکی از ابزارهای قدرتمند SELinux است که به شما این امکان را می‌دهد تا از لاگ‌های auditd استفاده کرده و بر اساس آن‌ها، قوانین SELinux جدیدی ایجاد کنید. این ابزار معمولاً برای شناسایی و رفع مشکلات دسترسی که توسط SELinux محدود شده‌اند، استفاده می‌شود. زمانی که SELinux دسترسی یک فرآیند یا برنامه را مسدود می‌کند، این مسدودسازی در لاگ‌های سیستم (معمولاً در /var/log/audit/audit.log) ثبت می‌شود. سپس، با استفاده از audit2allow می‌توان قوانینی ایجاد کرد که این دسترسی‌ها را مجاز کند.

این ابزار بیشتر برای زمان‌هایی کاربرد دارد که می‌خواهید پس از شناسایی مشکلی در دسترسی‌های SELinux، به‌طور خودکار قوانین مربوط به آن را ایجاد و اعمال کنید.

مراحل استفاده از audit2allow

  1. بررسی لاگ‌ها

    ابتدا باید لاگ‌های SELinux را بررسی کنید تا دسترسی‌های مسدود شده شناسایی شوند. لاگ‌ها معمولاً در /var/log/audit/audit.log قرار دارند. برای بررسی این لاگ‌ها می‌توانید از دستور زیر استفاده کنید:

    cat /var/log/audit/audit.log | grep denied
    

    این دستور، تمامی رویدادهایی که با خطای denied مواجه شده‌اند را فیلتر می‌کند. این خطاها به‌طور معمول زمانی رخ می‌دهند که SELinux تلاش می‌کند دسترسی‌های یک فرآیند یا فایل را محدود کند.

  2. استفاده از audit2allow برای ایجاد قوانین

    پس از شناسایی خطاهای denied در لاگ‌ها، می‌توانید از دستور audit2allow برای ایجاد قوانین جدید استفاده کنید. دستور زیر تمام رویدادهای denied را از لاگ استخراج کرده و به‌طور خودکار قوانین مورد نیاز را ایجاد می‌کند:

    audit2allow -w -a
    

    پارامترهای این دستور به‌شرح زیر است:

    • -w: نمایش توضیحات برای هر رویداد در لاگ‌ها.
    • -a: بررسی تمام رویدادهای denied موجود در لاگ‌ها.

    خروجی این دستور شامل قوانینی است که می‌توانند دسترسی‌های مسدود شده را مجاز کنند.

  3. ساخت و نصب قوانین جدید

    پس از مشاهده قوانین پیشنهادی توسط audit2allow, می‌توانید از آن‌ها برای ایجاد یک فایل ماژول جدید SELinux استفاده کنید. برای این کار از دستور زیر استفاده کنید:

    audit2allow -a -M mymodule
    

    این دستور یک ماژول SELinux جدید به نام mymodule ایجاد می‌کند که شامل قوانین جدید برای مجاز کردن دسترسی‌ها است. پس از اجرای این دستور، فایلی با نام mymodule.pp ایجاد می‌شود.

  4. بارگذاری ماژول جدید SELinux

    برای اعمال قوانین جدید ایجاد شده، باید ماژول SELinux را با استفاده از دستور semodule بارگذاری کنید:

    semodule -i mymodule.pp
    

    با این دستور، ماژول جدیدی که ایجاد کرده‌اید بارگذاری می‌شود و دسترسی‌های محدود شده بر اساس قوانینی که در آن ماژول تعریف شده است، مجاز می‌شود.

مثال عملی

فرض کنید یک برنامه خاص در سیستم شما در حال تلاش برای دسترسی به یک فایل است، اما SELinux این دسترسی را مسدود می‌کند. با استفاده از audit2allow، می‌توانید به‌راحتی قانونی برای مجاز کردن این دسترسی ایجاد کنید.

  1. ابتدا، خطاهای مسدود شده در لاگ‌های SELinux را مشاهده می‌کنید:
    cat /var/log/audit/audit.log | grep denied
    

    مثلاً ممکن است خروجی مشابه زیر مشاهده کنید:

    type=AVC msg=audit(1613514856.384:574): avc:  denied  { read } for  pid=14792 comm="myapp" name="config.conf" dev="sda1" ino=1044212 scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:etc_t:s0 tclass=file
    
  2. سپس از دستور audit2allow برای مشاهده و ایجاد قوانین استفاده می‌کنید:
    audit2allow -w -a
    

    خروجی به‌صورت زیر خواهد بود:

    allow unconfined_t etc_t:file { read };
    
  3. برای ایجاد ماژول SELinux جدید، دستور زیر را اجرا می‌کنید:
    audit2allow -a -M mymodule
    

    این دستور یک فایل ماژول به نام mymodule.pp ایجاد می‌کند.

  4. در نهایت، ماژول SELinux جدید را بارگذاری می‌کنید:
    semodule -i mymodule.pp
    

جمع‌بندی

دستور audit2allow ابزاری بسیار مفید برای تجزیه و تحلیل لاگ‌های SELinux و ایجاد قوانین جدید به‌منظور مجاز کردن دسترسی‌های مسدود شده است. با استفاده از این ابزار، می‌توانید به‌طور خودکار قوانینی را ایجاد کنید که دسترسی‌های محدود شده به فایل‌ها یا فرایندها را باز کنند و عملکرد سیستم را به‌صورت بهینه‌تر و بدون مشکلات امنیتی فراهم کنند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تجزیه و تحلیل پیام‌های AVC (Access Vector Cache) برای بررسی مشکلات دسترسی و قوانین امنیتی” subtitle=”توضیحات کامل”]پیام‌های AVC (Access Vector Cache) در سیستم‌های SELinux به‌منظور گزارش دادن به سیستم در مورد مشکلات دسترسی که توسط SELinux شناسایی شده‌اند، استفاده می‌شوند. این پیام‌ها معمولاً زمانی تولید می‌شوند که یک فرآیند یا برنامه تلاش می‌کند دسترسی به منابع خاصی (مثل فایل‌ها، دایرکتوری‌ها، شبکه و غیره) داشته باشد و SELinux این دسترسی را بر اساس سیاست‌های امنیتی مسدود می‌کند.

در این بخش، نحوه تجزیه و تحلیل پیام‌های AVC، شناسایی مشکلات دسترسی، و نحوه تنظیم قوانین مناسب برای رفع این مشکلات را بررسی خواهیم کرد.

مراحل تجزیه و تحلیل پیام‌های AVC

  1. شناسایی پیام‌های AVC

    پیام‌های AVC معمولاً در لاگ‌های SELinux ثبت می‌شوند و در فایل‌های لاگ معمولاً به‌طور مشخص با کلیدواژه AVC ظاهر می‌شوند. لاگ‌های SELinux معمولاً در مسیر /var/log/audit/audit.log ذخیره می‌شوند.

    برای مشاهده پیام‌های AVC، از دستور زیر استفاده کنید:

    cat /var/log/audit/audit.log | grep AVC
    

    این دستور تمام پیام‌های AVC را از لاگ‌های SELinux استخراج می‌کند. در این پیام‌ها اطلاعاتی مانند نوع دسترسی مسدود شده، فرآیند در حال تلاش برای دسترسی، و فایل یا دایرکتوری هدف نمایش داده می‌شود.

  2. درک ساختار پیام‌های AVC

    هر پیام AVC اطلاعات مهمی را ارائه می‌دهد که برای شناسایی مشکل و رفع آن ضروری است. ساختار کلی یک پیام AVC به‌صورت زیر است:

    type=AVC msg=audit(1613536361.597:1012): avc:  denied  { write } for  pid=12345 comm="myapp" name="data.txt" dev="sda1" ino=1234567 scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file
    

    در اینجا:

    • type=AVC: نشان می‌دهد که این یک پیام AVC است.
    • denied: نشان‌دهنده اینکه دسترسی مسدود شده است.
    • write: نوع دسترسی که مسدود شده است.
    • pid=12345: شناسه فرآیند که سعی در دسترسی به فایل دارد.
    • comm="myapp": نام برنامه یا فرمان که تلاش کرده دسترسی پیدا کند.
    • name="data.txt": نام فایل هدف که دسترسی به آن مسدود شده است.
    • scontext: زمینه امنیتی فرآیند (نوع و وضعیت).
    • tcontext: زمینه امنیتی فایل یا دایرکتوری هدف (نوع و وضعیت).
    • tclass: کلاس شیء که دسترسی به آن مسدود شده است (در اینجا فایل).
  3. شناسایی مشکلات دسترسی

    پیام‌های AVC به‌طور کلی برای شناسایی مشکلات دسترسی کمک می‌کنند. مهم‌ترین بخش پیام که باید بررسی شود، denied و نوع دسترسی است. مثلاً در مثال بالا، نوع دسترسی مسدود شده write است، یعنی فرآیند myapp تلاش کرده به فایل data.txt دسترسی نوشتاری داشته باشد، اما SELinux این دسترسی را مسدود کرده است.

    در این حالت، می‌توانید از اطلاعات مربوط به scontext و tcontext استفاده کنید تا دریابید که چرا این دسترسی مسدود شده است. scontext نمایانگر زمینه امنیتی فرآیند و tcontext نمایانگر زمینه امنیتی فایل هدف است. در مثال فوق، فرآیند از نوع unconfined_t است، در حالی که فایل هدف از نوع var_t است.

  4. استفاده از ابزار audit2allow برای ایجاد قوانین جدید

    اگر شما مطمئن هستید که دسترسی مورد نظر باید مجاز باشد و به‌دلیل قوانین SELinux مسدود شده است، می‌توانید از ابزار audit2allow برای ایجاد قانون جدیدی که دسترسی را مجاز می‌کند، استفاده کنید. به‌عنوان مثال، برای پیام‌های AVC قبلی، می‌توانید از دستور زیر استفاده کنید:

    audit2allow -a -M mymodule
    

    این دستور یک ماژول SELinux جدید به نام mymodule ایجاد می‌کند که شامل قوانینی است که دسترسی‌های مسدود شده را مجاز می‌کند.

  5. بارگذاری ماژول جدید SELinux

    پس از ایجاد ماژول SELinux، باید آن را با استفاده از دستور semodule بارگذاری کنید تا تغییرات در سیستم اعمال شوند:

    semodule -i mymodule.pp
    

    با این کار، قوانین جدیدی که از طریق audit2allow ایجاد کرده‌اید، در سیستم بارگذاری می‌شود و دسترسی‌هایی که قبلاً مسدود شده بودند، مجاز می‌شوند.

مثال عملی

فرض کنید که پس از بررسی لاگ‌های SELinux متوجه می‌شوید که برنامه‌ای به نام myapp سعی کرده به فایل data.txt دسترسی نوشتاری داشته باشد، اما این دسترسی مسدود شده است. شما با استفاده از دستور زیر پیام AVC را مشاهده می‌کنید:

cat /var/log/audit/audit.log | grep AVC

مثال خروجی:

type=AVC msg=audit(1613536361.597:1012): avc:  denied  { write } for  pid=12345 comm="myapp" name="data.txt" dev="sda1" ino=1234567 scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file

با تجزیه و تحلیل پیام، متوجه می‌شوید که نوع دسترسی مسدود شده write است و فایل هدف از نوع var_t است. پس از این مرحله، با استفاده از دستور audit2allow، قوانین جدید را ایجاد می‌کنید:

audit2allow -a -M mymodule

در نهایت، ماژول جدید را بارگذاری می‌کنید:

semodule -i mymodule.pp

این کار باعث می‌شود که دسترسی نوشتاری برای برنامه myapp به فایل data.txt مجاز شود.

جمع‌بندی

پیام‌های AVC در SELinux ابزار مهمی برای شناسایی مشکلات دسترسی هستند که می‌توانند به شما کمک کنند تا بدانید کدام دسترسی‌ها به اشتباه مسدود شده‌اند. با استفاده از ابزارهایی مانند audit2allow می‌توانید به‌راحتی قوانین جدیدی برای مجاز کردن دسترسی‌ها ایجاد کرده و آن‌ها را به‌طور خودکار در سیستم اعمال کنید. این کار به شما امکان می‌دهد تا از امنیت سیستم خود محافظت کرده و مشکلات دسترسی را برطرف کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از seinfo و sesearch برای بررسی قوانین و وضعیت SELinux” subtitle=”توضیحات کامل”]برای مدیریت و نظارت بر وضعیت SELinux و قوانین آن، ابزارهای مختلفی وجود دارد که می‌توانند به شما کمک کنند تا اطلاعات دقیقی در مورد پیکربندی‌ها، قوانین و وضعیت SELinux به‌دست آورید. دو ابزار بسیار مفید برای این منظور seinfo و sesearch هستند که می‌توانند اطلاعات جامعی در مورد سیاست‌های SELinux و تطابق آن‌ها با فرآیندها، فایل‌ها و سایر منابع سیستم ارائه دهند.

در این بخش، به بررسی نحوه استفاده از این دو ابزار برای بررسی وضعیت و قوانین SELinux می‌پردازیم.

استفاده از seinfo برای بررسی اطلاعات SELinux

ابزار seinfo به شما این امکان را می‌دهد که اطلاعاتی دقیق از پایگاه داده SELinux (سیاست‌های SELinux) به‌دست آورید. این ابزار می‌تواند به شما کمک کند تا انواع مختلف اطلاعات مانند کلاس‌ها، انواع، نقش‌ها و سایر اجزای سیاست‌های SELinux را مشاهده کنید.

دستور seinfo

برای شروع، می‌توانید دستور seinfo را با گزینه‌های مختلف اجرا کنید تا اطلاعات مختلفی از سیاست‌های SELinux را دریافت کنید. برخی از استفاده‌های رایج از seinfo به شرح زیر است:

  1. نمایش تمامی کلاس‌ها در SELinux:

    برای مشاهده لیست تمامی کلاس‌های موجود در سیاست‌های SELinux از دستور زیر استفاده کنید:

    seinfo --classes
    

    این دستور تمامی کلاس‌ها (مثل فایل، پروسه‌ها، شبکه و غیره) را در سیاست‌های SELinux نمایش می‌دهد.

  2. نمایش تمامی انواع (Types) در SELinux:

    برای نمایش لیست انواع موجود در SELinux که هر کدام نمایانگر یک نوع شیء خاص هستند، از دستور زیر استفاده کنید:

    seinfo --types
    

    این دستور به شما انواع مختلفی را که در سیاست SELinux تعریف شده‌اند (مثل انواع فایل‌ها، پروسه‌ها، و غیره) نمایش می‌دهد.

  3. نمایش تمامی نقش‌ها (Roles) در SELinux:

    برای مشاهده نقش‌های مختلف SELinux که دسترسی‌های مختلف را به کاربران و فرآیندها می‌دهند، از دستور زیر استفاده کنید:

    seinfo --roles
    
  4. نمایش تمامی سیاست‌ها (Policy) در SELinux:

    برای مشاهده سیاست‌های موجود در SELinux، دستور زیر را اجرا کنید:

    seinfo --policies
    
مثال‌های عملی از seinfo
  • اگر بخواهید لیست تمامی کلاس‌ها را مشاهده کنید، دستور زیر را اجرا می‌کنید:
    seinfo --classes
    

    خروجی به‌طور مشابه می‌تواند چیزی مانند این باشد:

    class file
    class dir
    class process
    class network
    class socket
    ...
    
  • اگر بخواهید لیست انواع را مشاهده کنید:
    seinfo --types
    

    خروجی می‌تواند به‌صورت زیر باشد:

    type file_t
    type process_t
    type dir_t
    type socket_t
    ...
    

استفاده از sesearch برای جستجو و بررسی قوانین SELinux

ابزار sesearch برای جستجو و بررسی قوانین در سیاست‌های SELinux استفاده می‌شود. با این ابزار می‌توانید قوانین خاصی را که ممکن است دسترسی‌ها را مسدود کرده باشند، پیدا کنید و تجزیه و تحلیل دقیقی از نحوه عملکرد سیاست‌های SELinux در ارتباط با فرآیندها، فایل‌ها و منابع سیستم به‌دست آورید.

دستور sesearch
  1. جستجوی قوانین مرتبط با یک نوع خاص (Type):

    اگر بخواهید تمامی قوانین SELinux که به نوع خاصی مانند file_t مربوط هستند را جستجو کنید، می‌توانید از دستور زیر استفاده کنید:

    sesearch -t file_t
    

    این دستور تمامی قوانین SELinux که به نوع file_t مربوط هستند را نشان می‌دهد.

  2. جستجوی قوانین بر اساس کلاس خاص:

    برای جستجو در قوانین SELinux بر اساس یک کلاس خاص (مثلاً file)، از دستور زیر استفاده کنید:

    sesearch -c file
    

    این دستور تمامی قوانین مربوط به کلاس file را نمایش می‌دهد.

  3. جستجو بر اساس قابلیت‌ها یا دسترسی‌های خاص:

    اگر بخواهید قوانینی را که برای دسترسی‌های خاص به فایل‌ها یا منابع دیگر تنظیم شده‌اند پیدا کنید، می‌توانید از دستور زیر استفاده کنید:

    sesearch --allow
    

    این دستور تمامی قوانین اجازه‌داده شده را که دسترسی به منابع را مجاز می‌کند، نمایش می‌دهد.

  4. جستجو بر اساس پروسه یا فرمان خاص:

    اگر بخواهید قوانین مرتبط با یک فرآیند خاص (مثلاً httpd) را جستجو کنید، می‌توانید از دستور زیر استفاده کنید:

    sesearch -p httpd
    
مثال‌های عملی از sesearch
  • برای جستجوی قوانین مربوط به نوع httpd_t:
    sesearch -t httpd_t
    

    این دستور تمامی قوانین مرتبط با نوع httpd_t (که معمولاً برای وب‌سرور Apache استفاده می‌شود) را نمایش می‌دهد.

  • برای جستجوی تمامی قوانین که مجوز دسترسی را می‌دهند:
    sesearch --allow
    

    خروجی به‌طور مشابه می‌تواند شامل قوانین مختلفی باشد که دسترسی‌ها را مجاز می‌کنند.

جمع‌بندی

استفاده از ابزارهای seinfo و sesearch به شما این امکان را می‌دهد که اطلاعات دقیقی از وضعیت و قوانین SELinux به‌دست آورید. ابزار seinfo به شما کمک می‌کند تا اطلاعات کلی و پایه‌ای مانند کلاس‌ها، انواع، نقش‌ها و سیاست‌ها را مشاهده کنید، در حالی که sesearch ابزاری قدرتمند برای جستجو و بررسی قوانین SELinux بر اساس نوع، کلاس، دسترسی‌ها و فرآیندهای خاص است.

این ابزارها به‌ویژه در مدیریت SELinux و تجزیه و تحلیل مشکلات دسترسی به سیستم، بسیار کاربردی هستند و می‌توانند به شما در تنظیم دقیق‌تر سیاست‌های امنیتی کمک کنند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 7. مدیریت دسترسی به شبکه و پورت‌ها با SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات دسترسی به پورت‌ها و پروتکل‌های خاص با استفاده از SELinux” subtitle=”توضیحات کامل”]SELinux برای مدیریت دسترسی به منابع مختلف سیستم، از جمله پورت‌ها و پروتکل‌ها، از سیاست‌های امنیتی استفاده می‌کند. این سیاست‌ها به‌طور خاص به مدیران سیستم این امکان را می‌دهند که تعیین کنند که کدام پروسه‌ها به کدام پورت‌ها و پروتکل‌ها دسترسی دارند. این ویژگی از حملات احتمالی جلوگیری می‌کند و سطح امنیتی سیستم را افزایش می‌دهد.

در این بخش، به نحوه تنظیمات دسترسی به پورت‌ها و پروتکل‌های خاص با استفاده از SELinux خواهیم پرداخت. همچنین، روش‌های استفاده از ابزارهای SELinux برای پیکربندی این دسترسی‌ها و بررسی آن‌ها را توضیح خواهیم داد.

پیکربندی دسترسی به پورت‌ها با استفاده از SELinux

هر پروسه در SELinux ممکن است به پورت‌های خاصی نیاز داشته باشد تا ارتباط برقرار کند. به‌طور پیش‌فرض، SELinux پورت‌های خاصی را به پروسه‌ها اختصاص می‌دهد و اگر یک برنامه بخواهد از پورت خاصی استفاده کند، باید توسط SELinux مجاز باشد. این تنظیمات با استفاده از دستور semanage port انجام می‌شود.

۱. نمایش پورت‌های مجاز با SELinux

برای نمایش پورت‌های مجاز برای انواع مختلف پروسه‌ها، از دستور semanage port -l استفاده کنید. این دستور تمامی پورت‌هایی که توسط SELinux برای انواع مختلف پروسه‌ها پیکربندی شده‌اند را نمایش می‌دهد.

semanage port -l

خروجی این دستور می‌تواند به‌شکلی مشابه به زیر باشد:

http_port_t              tcp      80, 443
ssh_port_t               tcp      22

این خروجی نشان می‌دهد که پورت‌های ۸۰ و ۴۴۳ به نوع http_port_t (برای وب‌سرورها) و پورت ۲۲ به نوع ssh_port_t (برای SSH) اختصاص داده شده‌اند.

۲. افزودن یک پورت جدید به یک نوع خاص

اگر نیاز به افزودن یک پورت جدید به یک نوع خاص (مثلاً برای سرویس وب) دارید، می‌توانید از دستور semanage port -a استفاده کنید. در اینجا، فرض کنید می‌خواهید پورت ۸۰۸۰ را به نوع http_port_t اضافه کنید.

semanage port -a -t http_port_t -p tcp 8080
  • -a: برای افزودن یک پورت جدید.
  • -t http_port_t: نوع دسترسی مربوط به این پورت.
  • -p tcp: پروتکل استفاده شده (در اینجا TCP).
  • 8080: شماره پورت جدید.
۳. حذف یک پورت از یک نوع خاص

اگر بخواهید یک پورت را از یک نوع خاص حذف کنید، می‌توانید از دستور semanage port -d استفاده کنید. به‌عنوان مثال، برای حذف پورت ۸۰۸۰ از نوع http_port_t دستور زیر را وارد کنید:

semanage port -d -t http_port_t -p tcp 8080
۴. تغییر نوع دسترسی به پورت‌ها

گاهی ممکن است نیاز داشته باشید نوع دسترسی به یک پورت خاص را تغییر دهید. به‌عنوان مثال، برای تغییر نوع پورت ۸۰ از http_port_t به ssh_port_t، می‌توانید از دستور زیر استفاده کنید:

semanage port -m -t ssh_port_t -p tcp 80

پیکربندی دسترسی به پروتکل‌ها با استفاده از SELinux

SELinux همچنین می‌تواند دسترسی به پروتکل‌ها (مانند ICMP یا UDP) را برای پروسه‌های خاص محدود کند. برای تنظیم این موارد از ابزار semanage و تنظیمات سیاست‌های مرتبط استفاده می‌شود.

۱. بررسی پروتکل‌های مجاز برای یک نوع خاص

برای بررسی اینکه کدام پروتکل‌ها برای یک نوع خاص مجاز هستند، می‌توانید از دستور seinfo استفاده کنید. به‌عنوان مثال، برای بررسی پروتکل‌های مربوط به نوع httpd:

seinfo --types httpd

این دستور می‌تواند به شما نشان دهد که چه پروتکل‌هایی برای این نوع پروسه مجاز هستند.

۲. افزودن پروتکل جدید به یک نوع خاص

برای افزودن یک پروتکل جدید به یک نوع خاص، از دستور semanage با گزینه -p استفاده کنید. به‌عنوان مثال، برای افزودن پروتکل UDP به نوع http_port_t، دستور زیر را وارد کنید:

semanage port -a -t http_port_t -p udp 12345

این دستور پروتکل UDP را به نوع http_port_t با شماره پورت ۱۲۳۴۵ اضافه می‌کند.

استفاده از دستور semanage برای پیکربندی دقیق‌تر

در برخی مواقع ممکن است بخواهید تنظیمات دقیق‌تری برای پیکربندی دسترسی به پورت‌ها و پروتکل‌ها انجام دهید. برای مثال، اگر بخواهید یک پورت خاص را به یک نوع خاص برای پروتکل UDP اختصاص دهید، می‌توانید از دستور زیر استفاده کنید:

semanage port -a -t my_service_port_t -p udp 5555

این دستور پورت ۵۵۵۵ را به نوع my_service_port_t برای پروتکل UDP اضافه می‌کند.

جمع‌بندی

برای پیکربندی دسترسی به پورت‌ها و پروتکل‌ها در SELinux، ابزار semanage به شما این امکان را می‌دهد که پورت‌ها و پروتکل‌ها را برای انواع مختلف پروسه‌ها تنظیم و مدیریت کنید. این ابزار همچنین اجازه می‌دهد که پورت‌ها را اضافه، حذف یا تغییر دهید و همچنین دسترسی پروتکل‌ها را تنظیم کنید. استفاده صحیح از این ابزار می‌تواند به شما کمک کند تا تنظیمات امنیتی دقیقی را برای سرویس‌ها و برنامه‌های خود در SELinux اعمال کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”مدیریت دسترسی به شبکه‌ها و پورت‌ها از طریق سیاست‌های SELinux” subtitle=”توضیحات کامل”]یکی از قابلیت‌های مهم SELinux، توانایی محدود کردن دسترسی به شبکه‌ها و پورت‌ها برای برنامه‌ها و سرویس‌ها است. با استفاده از سیاست‌های SELinux، می‌توان به‌طور دقیق مشخص کرد که کدام برنامه‌ها می‌توانند به کدام پورت‌ها و پروتکل‌ها دسترسی داشته باشند. این قابلیت باعث افزایش امنیت سیستم می‌شود و از دسترسی‌های غیرمجاز به منابع شبکه جلوگیری می‌کند.

در این بخش، به بررسی روش‌های مدیریت دسترسی به شبکه‌ها و پورت‌ها از طریق سیاست‌های SELinux خواهیم پرداخت. همچنین، به نحوه پیکربندی و تنظیمات پیشرفته SELinux برای کنترل دقیق دسترسی‌ها و استفاده از ابزارهای مختلف SELinux خواهیم پرداخت.

نحوه تنظیم دسترسی به پورت‌ها و پروتکل‌ها در SELinux

برای مدیریت دسترسی به پورت‌ها و پروتکل‌ها، SELinux از سیاست‌های خاص برای هر برنامه استفاده می‌کند. این سیاست‌ها مشخص می‌کنند که کدام پروسه‌ها به کدام پورت‌ها و پروتکل‌ها می‌توانند دسترسی داشته باشند. ابزارهای مختلفی برای تنظیم این سیاست‌ها در دسترس هستند که یکی از مهم‌ترین آن‌ها دستور semanage است.

۱. نمایش پورت‌های مجاز در SELinux

برای نمایش پورت‌هایی که به‌طور پیش‌فرض توسط SELinux برای پروسه‌های مختلف باز شده‌اند، می‌توان از دستور semanage port -l استفاده کرد. این دستور تمامی پورت‌های مرتبط با انواع مختلف پروسه‌ها را نمایش می‌دهد.

semanage port -l

خروجی این دستور می‌تواند به‌شکل زیر باشد:

http_port_t              tcp      80, 443
ssh_port_t               tcp      22

در اینجا، پورت‌های ۸۰ و ۴۴۳ به‌طور پیش‌فرض برای سرویس‌های HTTP (وب‌سرور) و پورت ۲۲ برای SSH به‌طور پیش‌فرض باز شده‌اند.

۲. افزودن پورت جدید به یک نوع خاص

برای افزودن پورت جدید به یک نوع خاص در SELinux، از دستور semanage port -a استفاده می‌شود. به‌عنوان مثال، اگر بخواهید پورت ۸۰۸۰ را به نوع http_port_t اضافه کنید، از دستور زیر استفاده کنید:

semanage port -a -t http_port_t -p tcp 8080
  • -a: برای افزودن پورت جدید.
  • -t http_port_t: نوع پورت (در اینجا برای وب‌سرور HTTP).
  • -p tcp: پروتکل (در اینجا TCP).
  • 8080: شماره پورت جدید.
۳. حذف پورت از یک نوع خاص

اگر بخواهید پورت مشخصی را از نوع خاصی حذف کنید، از دستور semanage port -d استفاده کنید. به‌عنوان مثال، برای حذف پورت ۸۰۸۰ از نوع http_port_t، دستور زیر را وارد کنید:

semanage port -d -t http_port_t -p tcp 8080
۴. تغییر نوع دسترسی به پورت‌ها

در برخی مواقع، نیاز به تغییر نوع دسترسی به یک پورت خاص وجود دارد. برای تغییر نوع دسترسی به پورت ۸۰ از نوع http_port_t به ssh_port_t، از دستور زیر استفاده کنید:

semanage port -m -t ssh_port_t -p tcp 80
۵. بررسی دسترسی به پورت‌ها برای سرویس‌های خاص

گاهی ممکن است نیاز باشد تا بررسی کنید که کدام سرویس‌ها به پورت‌های خاصی دسترسی دارند. این کار به‌ویژه برای اطمینان از تنظیمات امنیتی مهم است. برای این منظور می‌توان از ابزارهایی همچون seinfo استفاده کرد.

seinfo --types httpd

این دستور به شما نشان می‌دهد که پروتکل‌ها و پورت‌هایی که برای سرویس‌های مربوط به httpd مجاز هستند.

مدیریت دسترسی به شبکه‌ها

در SELinux، می‌توانید دسترسی به شبکه‌ها را برای هر پروسه یا برنامه به‌طور جداگانه مدیریت کنید. به‌عنوان مثال، می‌توانید دسترسی به شبکه‌های خاص را برای برنامه‌ها محدود کنید.

۱. استفاده از نوع شبکه برای محدود کردن دسترسی

برای محدود کردن دسترسی برنامه‌ها به شبکه، SELinux از مفهومی به نام network استفاده می‌کند. هر برنامه می‌تواند به یک نوع شبکه خاص دسترسی داشته باشد که دسترسی آن به پروتکل‌ها و پورت‌های مشخصی را کنترل می‌کند.

برای بررسی انواع شبکه‌های موجود و دسترسی‌های مربوط به آن‌ها، می‌توان از دستور seinfo استفاده کرد:

seinfo --types network

این دستور انواع مختلف شبکه‌ها و دسترسی‌های مربوط به آن‌ها را نشان می‌دهد.

۲. افزودن یا حذف دسترسی به شبکه‌ها

برای محدود کردن دسترسی به یک شبکه خاص برای یک پروسه، می‌توانید از سیاست‌های SELinux استفاده کنید. برای مثال، برای محدود کردن دسترسی به شبکه برای یک پروسه، می‌توانید از دستور semanage برای تنظیم نوع شبکه استفاده کنید.

semanage network -a -t my_network_type

این دستور دسترسی به یک شبکه جدید را برای پروسه‌ای با نوع my_network_type اضافه می‌کند.

جمع‌بندی

مدیریت دسترسی به پورت‌ها و شبکه‌ها از طریق SELinux یک روش قدرتمند برای بهبود امنیت سیستم است. با استفاده از ابزارهای SELinux مانند semanage و seinfo، می‌توان دسترسی به پورت‌ها، پروتکل‌ها و شبکه‌ها را به‌طور دقیق مدیریت کرد. این کار باعث می‌شود که برنامه‌ها و سرویس‌ها فقط به منابع مشخصی دسترسی داشته باشند و از دسترسی‌های غیرمجاز جلوگیری شود.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ایجاد سیاست‌های خاص برای سرویس‌های شبکه‌ای مانند SSH، FTP و HTTP” subtitle=”توضیحات کامل”]در SELinux، ایجاد سیاست‌های خاص برای سرویس‌های شبکه‌ای مانند SSH، FTP و HTTP یکی از روش‌های مهم برای اطمینان از کنترل دقیق دسترسی‌ها و افزایش امنیت سیستم است. با استفاده از این سیاست‌ها، می‌توان دسترسی‌های شبکه‌ای را به‌طور خاص و جزئی تنظیم کرد و از دسترسی‌های غیرمجاز جلوگیری کرد. این سیاست‌ها به‌ویژه برای سرویس‌های حساس و پرکاربرد مانند SSH، FTP و HTTP اهمیت دارند.

در این بخش، به نحوه ایجاد و مدیریت سیاست‌های SELinux برای این سرویس‌ها خواهیم پرداخت. از جمله تنظیمات مرتبط با پورت‌ها، دسترسی‌ها و نوع‌های امنیتی برای این سرویس‌ها.

۱. تنظیمات SELinux برای SSH

SSH یکی از سرویس‌های اصلی برای دسترسی از راه دور به سیستم است. با تنظیم سیاست‌های SELinux برای SSH، می‌توان اطمینان حاصل کرد که تنها پروسه‌های معتبر قادر به دسترسی به پورت SSH هستند و از حملات احتمالی جلوگیری می‌شود.

۱.۱. نمایش تنظیمات پورت SSH

برای نمایش پورت‌هایی که SELinux به‌طور پیش‌فرض برای سرویس SSH باز کرده است، می‌توان از دستور زیر استفاده کرد:

semanage port -l | grep ssh

این دستور پورت‌هایی را که به‌طور پیش‌فرض برای سرویس SSH باز شده‌اند، نمایش می‌دهد.

۱.۲. تغییر پورت SSH

اگر بخواهید پورت SSH را تغییر دهید، ابتدا باید پورت جدید را برای نوع ssh_port_t اضافه کنید. برای مثال، برای اضافه کردن پورت ۲۲۵۵ به سرویس SSH، از دستور زیر استفاده کنید:

semanage port -a -t ssh_port_t -p tcp 2255

پس از این کار، باید فایل پیکربندی SSH را برای استفاده از پورت جدید ویرایش کنید:

vi /etc/ssh/sshd_config

سپس خط Port 22 را به Port 2255 تغییر دهید.

۱.۳. مجاز کردن دسترسی به پورت‌های خاص

اگر بخواهید دسترسی به پورت‌های خاص را محدود کنید، می‌توانید سیاست‌ها را با استفاده از دستور semanage port پیکربندی کنید.

semanage port -m -t ssh_port_t -p tcp 2255

۲. تنظیمات SELinux برای FTP

FTP یکی دیگر از سرویس‌های مهم برای انتقال فایل است. در SELinux، می‌توان دسترسی‌ها و پورت‌های مربوط به FTP را کنترل کرد تا فقط پروسه‌های معتبر به این سرویس دسترسی داشته باشند.

۲.۱. نمایش تنظیمات پورت FTP

برای نمایش پورت‌هایی که به‌طور پیش‌فرض توسط SELinux برای FTP باز شده‌اند، از دستور زیر استفاده کنید:

semanage port -l | grep ftp

این دستور پورت‌های مربوط به FTP را نمایش می‌دهد.

۲.۲. تغییر پورت FTP

اگر بخواهید پورت FTP را تغییر دهید، ابتدا باید پورت جدید را برای نوع ftp_port_t اضافه کنید. به‌عنوان مثال، برای اضافه کردن پورت ۲۱ به سرویس FTP، از دستور زیر استفاده کنید:

semanage port -a -t ftp_port_t -p tcp 21
۲.۳. محدود کردن دسترسی به پورت FTP

اگر بخواهید دسترسی به پورت FTP را محدود کنید، می‌توانید از دستور زیر برای تغییر نوع پورت استفاده کنید:

semanage port -m -t ftp_port_t -p tcp 21

۳. تنظیمات SELinux برای HTTP

HTTP سرویس اصلی برای میزبانی وب است و به‌طور معمول روی پورت ۸۰ و ۴۴۳ اجرا می‌شود. با استفاده از SELinux، می‌توان دسترسی به این پورت‌ها را مدیریت کرد و از دسترسی‌های غیرمجاز جلوگیری نمود.

۳.۱. نمایش تنظیمات پورت HTTP

برای نمایش پورت‌هایی که SELinux برای HTTP به‌طور پیش‌فرض باز کرده است، از دستور زیر استفاده کنید:

semanage port -l | grep http

این دستور پورت‌های مربوط به HTTP را نمایش می‌دهد.

۳.۲. تغییر پورت HTTP

اگر بخواهید پورت HTTP را تغییر دهید، ابتدا باید پورت جدید را برای نوع http_port_t اضافه کنید. به‌عنوان مثال، برای اضافه کردن پورت ۸۰۸۰ به سرویس HTTP، از دستور زیر استفاده کنید:

semanage port -a -t http_port_t -p tcp 8080
۳.۳. محدود کردن دسترسی به پورت HTTP

برای محدود کردن دسترسی به پورت‌های HTTP، می‌توان از دستور زیر استفاده کرد:

semanage port -m -t http_port_t -p tcp 8080

۴. ایجاد سیاست‌های خاص برای سرویس‌ها با استفاده از semanage

برای ایجاد و اعمال سیاست‌های خاص برای سرویس‌ها، می‌توان از ابزار semanage استفاده کرد. این ابزار به‌طور خاص برای تنظیمات امنیتی SELinux طراحی شده است و به شما این امکان را می‌دهد که به‌طور دقیق دسترسی‌ها و پیکربندی‌ها را برای سرویس‌های مختلف تعیین کنید.

۴.۱. افزودن نوع جدید برای سرویس‌ها

برای افزودن یک نوع جدید امنیتی به یک سرویس خاص، از دستور semanage با گزینه -a استفاده می‌شود. برای مثال، برای افزودن نوع جدید برای سرویس HTTP، دستور زیر را وارد کنید:

semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'
۴.۲. اعمال سیاست به یک فایل یا دایرکتوری

برای اعمال سیاست‌های SELinux به یک فایل یا دایرکتوری خاص، از دستور restorecon استفاده کنید. به‌عنوان مثال، برای اعمال سیاست‌های جدید به دایرکتوری /srv/www، دستور زیر را وارد کنید:

restorecon -R -v /srv/www

جمع‌بندی

ایجاد سیاست‌های خاص برای سرویس‌های شبکه‌ای مانند SSH، FTP و HTTP از طریق SELinux، یکی از راه‌های موثر برای افزایش امنیت سیستم و کنترل دقیق دسترسی‌ها است. با استفاده از ابزارهایی مانند semanage و restorecon، می‌توان پورت‌ها، پروتکل‌ها و دسترسی‌های مربوط به این سرویس‌ها را به‌طور دقیق تنظیم کرد و از دسترسی‌های غیرمجاز جلوگیری نمود. این فرآیند نه‌تنها امنیت شبکه را تقویت می‌کند، بلکه به شما این امکان را می‌دهد که کنترل بیشتری بر روی دسترسی‌ها داشته باشید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 8. پیکربندی SELinux برای Docker و Kubernetes”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از SELinux در محیط‌های containerized مانند Docker” subtitle=”توضیحات کامل”]استفاده از SELinux در محیط‌های containerized مانند Docker، به‌ویژه برای اطمینان از امنیت داده‌ها و محدود کردن دسترسی‌ها، اهمیت زیادی دارد. Docker و سایر ابزارهای containerization محیط‌های مجازی را فراهم می‌کنند که در آن‌ها برنامه‌ها به‌طور جداگانه از یکدیگر اجرا می‌شوند، اما به دلیل اشتراک منابع سیستم، ایجاد سیاست‌های امنیتی مناسب برای این محیط‌ها ضروری است.

SELinux به‌عنوان یک ماژول امنیتی در هسته لینوکس، می‌تواند به‌طور مؤثری در سطح سیستم فایل و پردازش‌ها برای کانتینرها سیاست‌های امنیتی اعمال کند و از دسترسی‌های غیرمجاز و حملات جلوگیری نماید.

در این بخش، به بررسی نحوه استفاده از SELinux در محیط‌های Docker خواهیم پرداخت و چگونگی اعمال سیاست‌ها و تنظیمات امنیتی برای کانتینرها را بررسی خواهیم کرد.

۱. فعال‌سازی SELinux در Docker

برای اینکه SELinux به‌درستی در محیط‌های containerized مانند Docker فعال باشد، ابتدا باید SELinux بر روی سیستم میزبان فعال باشد. پس از آن، Docker باید به‌گونه‌ای پیکربندی شود که از سیاست‌های SELinux برای کانتینرها استفاده کند.

۱.۱. بررسی وضعیت SELinux بر روی سیستم میزبان

برای بررسی وضعیت فعال بودن SELinux بر روی سیستم میزبان، می‌توانید از دستور زیر استفاده کنید:

sestatus

اگر SELinux فعال نباشد، باید آن را فعال کنید. برای فعال کردن SELinux، فایل پیکربندی /etc/selinux/config را ویرایش کرده و مقدار SELINUX=enforcing را تنظیم کنید:

vi /etc/selinux/config

سپس مطمئن شوید که خط زیر موجود است:

SELINUX=enforcing

بعد از تغییر فایل پیکربندی، سیستم را ری‌استارت کنید:

reboot
۱.۲. تنظیم SELinux در Docker

برای اینکه Docker از SELinux برای کانتینرها استفاده کند، باید گزینه‌ای را برای فعال کردن سیاست‌های SELinux در زمان اجرای کانتینرها مشخص کنید. این کار از طریق پارامتر --security-opt در دستور docker run امکان‌پذیر است.

برای مثال، برای اجرای یک کانتینر با سیاست‌های SELinux، می‌توانید از دستور زیر استفاده کنید:

docker run --security-opt label:type:container_t -d nginx

در این دستور، label:type:container_t مشخص‌کننده نوع SELinux برای کانتینر است. شما می‌توانید این نوع را برای هر سرویس و برنامه‌ای که در کانتینر اجرا می‌شود، به‌طور خاص تعیین کنید.

۲. مدیریت امنیت کانتینرها با SELinux

در Docker، کانتینرها به‌طور پیش‌فرض از نوع container_t برای SELinux استفاده می‌کنند. این نوع از دسترسی‌ها و سیاست‌های امنیتی به‌طور پیش‌فرض برای کانتینرها تنظیم شده است، اما می‌توان این تنظیمات را برای کانتینرهای خاص تغییر داد تا امنیت بیشتری فراهم شود.

۲.۱. استفاده از سیاست‌های خاص برای کانتینرها

برای اعمال سیاست‌های خاص برای کانتینرهای مختلف، می‌توان از دستور semanage برای تغییر نوع‌ها و ویژگی‌های امنیتی استفاده کرد. به‌عنوان مثال، می‌توان نوع SELinux برای یک کانتینر خاص را به‌صورت زیر تغییر داد:

semanage fcontext -a -t container_t "/var/lib/docker/containers(/.*)?"

این دستور به SELinux می‌گوید که تمام فایل‌های موجود در مسیر /var/lib/docker/containers باید به‌عنوان container_t شناخته شوند.

۲.۲. استفاده از پارامترهای امنیتی بیشتر

برای اجرای یک کانتینر با تنظیمات امنیتی بیشتر، می‌توان از گزینه‌های مختلفی مانند --security-opt و --privileged استفاده کرد. این کار به‌ویژه زمانی مفید است که بخواهید دسترسی‌های بیشتری را برای کانتینرهای خاص فراهم کنید.

به‌عنوان مثال، برای اجرای کانتینری با تنظیمات SELinux و دسترسی محدودتر، از دستور زیر استفاده کنید:

docker run --security-opt label:type:container_t --security-opt label:level:s0:c100,c200 -d nginx

در این دستور، علاوه بر تنظیم نوع container_t، سطح امنیتی نیز با استفاده از label:level تعیین می‌شود.

۳. بررسی و تنظیمات SELinux در دایرکتوری‌ها و فایل‌های کانتینر

برای افزایش امنیت فایل‌ها و دایرکتوری‌های مرتبط با کانتینرها، می‌توان از دستورات SELinux برای تغییر ویژگی‌های امنیتی این فایل‌ها استفاده کرد.

۳.۱. تغییر نوع SELinux برای فایل‌های کانتینر

برای تغییر نوع SELinux برای یک فایل خاص در کانتینر، می‌توان از دستور chcon استفاده کرد. به‌عنوان مثال، اگر بخواهید نوع یک فایل خاص در دایرکتوری /var/lib/docker/containers/ را تغییر دهید، از دستور زیر استفاده کنید:

chcon -t container_file_t /var/lib/docker/containers/example_file
۳.۲. استفاده از restorecon برای اعمال تغییرات

بعد از تغییر نوع یا ویژگی‌های SELinux، برای اعمال تغییرات به‌صورت دائمی، می‌توان از دستور restorecon استفاده کرد:

restorecon -R -v /var/lib/docker/containers/

این دستور تغییرات اعمال شده را به‌طور بازگشتی و در تمامی فایل‌ها و دایرکتوری‌های مربوط به کانتینر اعمال می‌کند.

۴. مدیریت دسترسی‌ها و پورت‌ها در Docker

یکی از مزایای استفاده از SELinux در Docker، توانایی مدیریت دسترسی به پورت‌ها و پروتکل‌های خاص است. با استفاده از SELinux، می‌توان به‌طور دقیق تعیین کرد که کدام کانتینرها می‌توانند به پورت‌های خاص دسترسی پیدا کنند.

۴.۱. محدود کردن دسترسی به پورت‌ها

برای محدود کردن دسترسی به پورت‌ها برای کانتینرها، می‌توان از تنظیمات SELinux استفاده کرد. به‌عنوان مثال، برای مسدود کردن دسترسی به پورت 80 برای یک کانتینر، از دستور زیر استفاده کنید:

semanage port -a -t container_port_t -p tcp 8080

این دستور به SELinux می‌گوید که پورت 8080 باید به‌عنوان یک پورت خاص برای کانتینرها شناخته شود.

جمع‌بندی

استفاده از SELinux در محیط‌های containerized مانند Docker یکی از روش‌های مؤثر برای تقویت امنیت و مدیریت دقیق دسترسی‌ها است. با استفاده از SELinux، می‌توان سیاست‌های امنیتی پیشرفته‌تری را برای کانتینرها تعریف کرد و از خطرات امنیتی ناشی از اشتراک منابع جلوگیری نمود. با تنظیم صحیح نوع‌ها، دسترسی‌ها، و ویژگی‌های امنیتی برای کانتینرها و فایل‌های مرتبط، می‌توان محیط امن‌تری برای اجرای برنامه‌ها در Docker ایجاد کرد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات امنیتی SELinux برای Kubernetes و برنامه‌های containerized” subtitle=”توضیحات کامل”]Kubernetes به‌عنوان یک پلتفرم مدیریت کانتینر، می‌تواند با استفاده از SELinux به‌طور مؤثر امنیت محیط‌های کانتینری را مدیریت کند. در این محیط‌ها، کانتینرها و پادها (Pods) ممکن است با یکدیگر و سیستم میزبان اشتراک منابع داشته باشند، و به همین دلیل، اعمال سیاست‌های امنیتی مناسب برای جلوگیری از دسترسی‌های غیرمجاز و افزایش امنیت بسیار اهمیت دارد.

SELinux به‌عنوان ابزاری قدرتمند در لینوکس، امکان تعریف و اعمال سیاست‌های امنیتی دقیق را فراهم می‌آورد تا از آسیب‌پذیری‌های امنیتی جلوگیری کند. در این بخش، به بررسی نحوه استفاده از SELinux در Kubernetes و نحوه تنظیم امنیت برای برنامه‌های containerized خواهیم پرداخت.

۱. فعال‌سازی SELinux برای Kubernetes

قبل از اینکه از SELinux در محیط Kubernetes استفاده کنیم، باید اطمینان حاصل کنیم که SELinux بر روی سیستم میزبان فعال است و Kubernetes به‌درستی پیکربندی شده است تا از سیاست‌های SELinux بهره‌برداری کند.

۱.۱. بررسی وضعیت SELinux بر روی سیستم میزبان

برای بررسی وضعیت فعال بودن SELinux بر روی سیستم میزبان، دستور زیر را وارد کنید:

sestatus

اگر SELinux غیرفعال است، باید آن را فعال کنید. برای فعال کردن SELinux، باید فایل پیکربندی /etc/selinux/config را ویرایش کنید:

vi /etc/selinux/config

و مقدار SELINUX=enforcing را تنظیم کنید:

SELINUX=enforcing

بعد از تغییر، سیستم را ری‌استارت کنید:

reboot
۱.۲. پیکربندی SELinux برای Kubernetes

Kubernetes باید به‌گونه‌ای پیکربندی شود که از سیاست‌های SELinux برای کانتینرها استفاده کند. این کار معمولاً از طریق تنظیمات در داکر یا container runtime مانند containerd انجام می‌شود.

برای اینکه Kubernetes از SELinux استفاده کند، باید اطمینان حاصل کنید که سرویس kubelet با دسترسی‌های صحیح SELinux اجرا می‌شود. می‌توانید از گزینه --allow-privileged=true در پیکربندی kubelet برای فعال‌سازی دسترسی‌های ویژه استفاده کنید.

در صورتی که از containerd استفاده می‌کنید، باید تنظیمات مربوط به SELinux را در پیکربندی آن تنظیم کنید. به‌طور کلی، containerd از SELinux برای مدیریت امنیت کانتینرها پشتیبانی می‌کند و برای فعال‌سازی، باید از پیکربندی‌های پیشرفته SELinux در فایل‌های پیکربندی استفاده کرد.

۲. تنظیم سیاست‌های امنیتی برای کانتینرها در Kubernetes

در Kubernetes، برای اعمال سیاست‌های SELinux به‌طور دقیق برای پادها و کانتینرها، می‌توان از پارامترهای امنیتی و گزینه‌های مختلفی استفاده کرد.

۲.۱. استفاده از securityContext در پادها و کانتینرها

یکی از روش‌های اصلی برای استفاده از SELinux در Kubernetes، تنظیم پارامتر securityContext در تعریف پادها و کانتینرها است. با استفاده از این پارامتر می‌توان نوع SELinux و سطح امنیتی برای هر کانتینر را تعیین کرد.

در مثال زیر، نشان داده شده است که چگونه می‌توان از securityContext برای تعیین نوع و سطح امنیتی SELinux استفاده کرد:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
    securityContext:
      seLinuxOptions:
        type: container_t
        level: s0:c100,c200

در این پیکربندی:

  • type: container_t نوع SELinux برای کانتینر را تعیین می‌کند.
  • level: s0:c100,c200 سطح امنیتی را مشخص می‌کند.

این تنظیمات باعث می‌شود که SELinux برای کانتینر از نوع container_t و سطح امنیتی مورد نظر اعمال شود.

۲.۲. استفاده از podSecurityPolicy برای مدیریت سیاست‌ها

Kubernetes امکان اعمال سیاست‌های امنیتی برای پادها را از طریق PodSecurityPolicy فراهم می‌آورد. این قابلیت می‌تواند به شما کمک کند تا پادهایی با تنظیمات امنیتی خاصی را ایجاد کنید که به‌طور خودکار سیاست‌های SELinux را اعمال کنند.

یک مثال از استفاده از PodSecurityPolicy برای اعمال سیاست‌های امنیتی به‌طور پیش‌فرض برای تمام پادها به‌شرح زیر است:

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: example-psp
spec:
  seLinux:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  privileged: false
  volumes:
  - 'emptyDir'
  - 'secret'

در این پیکربندی:

  • seLinux.rule: RunAsAny به این معناست که هر پاد می‌تواند از هر نوع SELinux استفاده کند.
  • سایر تنظیمات مانند runAsUser و fsGroup نیز برای مدیریت دسترسی‌ها به‌کار می‌روند.

برای اعمال این سیاست‌ها، باید سیاست امنیتی مناسب را برای کانتینرهای خاص پیکربندی کنید.

۳. پیکربندی SELinux برای فایل‌های کانتینر در Kubernetes

برای اینکه بتوانید امنیت فایل‌ها و دایرکتوری‌های موجود در داخل کانتینرها را با استفاده از SELinux مدیریت کنید، می‌توانید از دستوراتی مانند chcon و restorecon استفاده کنید.

۳.۱. تغییر نوع فایل‌ها با استفاده از chcon

برای تغییر نوع SELinux برای فایل‌های خاص در یک پاد یا کانتینر، می‌توانید از دستور chcon استفاده کنید. به‌عنوان مثال، برای تغییر نوع فایل‌ها در یک کانتینر می‌توانید از دستور زیر استفاده کنید:

chcon -t container_file_t /var/lib/kubelet/pods/<pod-id>/volumes/

این دستور نوع فایل‌ها را در مسیر مشخص‌شده تغییر می‌دهد.

۳.۲. اعمال تغییرات با استفاده از restorecon

بعد از اعمال تغییرات در نوع SELinux برای فایل‌ها و دایرکتوری‌ها، برای اعمال تغییرات به‌صورت دائمی، می‌توانید از دستور restorecon استفاده کنید:

restorecon -R -v /var/lib/kubelet/pods/<pod-id>/volumes/

این دستور تغییرات اعمال‌شده را برای تمام فایل‌ها و دایرکتوری‌های داخل پاد اعمال می‌کند.

۴. بررسی و تجزیه و تحلیل سیاست‌های SELinux در Kubernetes

برای بررسی و تجزیه و تحلیل سیاست‌های SELinux در Kubernetes، می‌توانید از ابزارهایی مانند seinfo و sesearch استفاده کنید. این ابزارها به شما کمک می‌کنند تا سیاست‌های SELinux را برای پادها و کانتینرها بررسی کنید و مشکلات دسترسی را شناسایی کنید.

۴.۱. استفاده از seinfo

برای مشاهده اطلاعات درباره سیاست‌های SELinux، از دستور seinfo استفاده کنید:

seinfo --container

این دستور اطلاعات مربوط به سیاست‌های SELinux برای کانتینرها را نمایش می‌دهد.

۴.۲. استفاده از sesearch

برای جستجوی قوانین SELinux و شناسایی مشکلات دسترسی، می‌توانید از دستور sesearch استفاده کنید:

sesearch -A -s system_u -t container_t

این دستور تمامی قوانین SELinux مربوط به نوع container_t را نمایش می‌دهد.

جمع‌بندی

استفاده از SELinux در Kubernetes و برنامه‌های containerized یکی از راه‌های مؤثر برای تقویت امنیت در محیط‌های مبتنی بر کانتینر است. با پیکربندی صحیح سیاست‌های SELinux و استفاده از ابزارهای مختلف برای مدیریت دسترسی‌ها، می‌توان محیطی امن‌تر و مقاوم‌تر در برابر حملات و دسترسی‌های غیرمجاز ایجاد کرد. از طریق تنظیمات securityContext، PodSecurityPolicy، و ابزارهای SELinux مانند chcon و restorecon می‌توان سیاست‌های امنیتی پیشرفته‌تری را برای کانتینرها و پادها اعمال کرد و امنیت سیستم را بهبود بخشید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نحوه مدیریت دسترسی‌ها و سیاست‌های SELinux در محیط‌های ابری و توزیع‌شده” subtitle=”توضیحات کامل”]مدیریت دسترسی‌ها و سیاست‌های SELinux در محیط‌های ابری و توزیع‌شده یکی از جنبه‌های کلیدی برای تضمین امنیت است. در محیط‌های ابری، مانند AWS، GCP، یا Azure، و همچنین در سیستم‌های توزیع‌شده مبتنی بر Kubernetes، SELinux می‌تواند به‌عنوان یک لایه امنیتی برای محافظت از داده‌ها، سرویس‌ها، و کانتینرها مورد استفاده قرار گیرد. در این بخش، نحوه مدیریت سیاست‌های SELinux برای چنین محیط‌هایی را بررسی می‌کنیم.

۱. پیکربندی و فعال‌سازی SELinux در محیط‌های ابری

در محیط‌های ابری، SELinux باید بر روی ماشین‌های مجازی (VMs) و کانتینرها به‌طور مؤثر پیکربندی و فعال شود تا از دسترسی‌های غیرمجاز جلوگیری کند. برای این کار باید ابتدا از فعال بودن SELinux در ماشین‌های مجازی یا سرورهای ابری اطمینان حاصل کرد.

۱.۱. فعال‌سازی SELinux در ماشین‌های مجازی ابری

برای فعال کردن SELinux در ماشین‌های مجازی ابری (که معمولاً روی توزیع‌های لینوکس مانند RHEL، CentOS، یا Ubuntu اجرا می‌شوند)، می‌توانید فایل پیکربندی /etc/selinux/config را ویرایش کنید:

vi /etc/selinux/config

سپس خط زیر را تغییر دهید تا SELinux به‌طور فعال اجرا شود:

SELINUX=enforcing

این تغییر باید در تمام ماشین‌های مجازی که قصد دارید SELinux را در آن‌ها فعال کنید، اعمال شود. پس از تغییر، سیستم را ری‌استارت کنید تا تغییرات اعمال شوند:

reboot
۱.۲. تنظیمات مخصوص سرویس‌های ابری و توزیع‌شده

در محیط‌های ابری، نیاز به پیکربندی SELinux برای سرویس‌ها و اپلیکیشن‌های خاص وجود دارد. برای مثال، اگر از سرویس‌های ذخیره‌سازی مانند AWS S3 یا GCP Cloud Storage استفاده می‌کنید، باید دسترسی به این سرویس‌ها و سیاست‌های امنیتی آن‌ها را برای استفاده در SELinux مدیریت کنید.

در صورتی که از کانتینرها در پلتفرم‌هایی مانند Kubernetes در محیط ابری استفاده می‌کنید، باید سیاست‌های SELinux را برای کانتینرها و پادها به‌طور خاص پیکربندی کنید.

۲. تنظیمات SELinux برای محیط‌های توزیع‌شده

در محیط‌های توزیع‌شده مانند Kubernetes، که در آن‌ها چندین کانتینر، پاد، و نود در حال تعامل با یکدیگر هستند، SELinux می‌تواند به‌عنوان یک لایه امنیتی برای محدود کردن دسترسی‌ها و جلوگیری از نفوذ استفاده شود. در اینجا نحوه تنظیم SELinux در Kubernetes و محیط‌های مشابه بررسی می‌شود.

۲.۱. پیکربندی SELinux برای Kubernetes

در Kubernetes، برای اعمال سیاست‌های امنیتی SELinux برای کانتینرها و پادها، می‌توان از پارامتر securityContext استفاده کرد. این پارامتر به‌طور خاص اجازه می‌دهد تا نوع SELinux و سطح امنیتی برای کانتینرها تنظیم شوند.

در اینجا یک نمونه از پیکربندی securityContext برای یک پاد آورده شده است که برای اعمال سیاست‌های SELinux در آن از seLinuxOptions استفاده می‌شود:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
    securityContext:
      seLinuxOptions:
        type: container_t
        level: s0:c100,c200

در این مثال:

  • type: container_t نوع SELinux را برای کانتینر مشخص می‌کند.
  • level: s0:c100,c200 سطح امنیتی را برای این کانتینر تعیین می‌کند.
۲.۲. مدیریت دسترسی‌ها با PodSecurityPolicy (PSP)

در Kubernetes، می‌توان از PodSecurityPolicy برای اعمال محدودیت‌های امنیتی بر پادها استفاده کرد. این سیاست‌ها می‌توانند انواع دسترسی‌های SELinux را برای پادها تعیین کنند.

مثالی از یک PodSecurityPolicy که از سیاست‌های SELinux استفاده می‌کند، به شرح زیر است:

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: example-psp
spec:
  seLinux:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  privileged: false
  volumes:
  - 'emptyDir'
  - 'secret'

در اینجا:

  • seLinux.rule: RunAsAny این امکان را فراهم می‌کند که هر پاد از هر نوع SELinux استفاده کند.
  • سیاست‌ها به‌طور عمومی برای پادها تعریف شده‌اند.

برای اعمال این سیاست‌ها، باید آن را به‌شکلی در کل کلاستر Kubernetes پیاده‌سازی کنید.

۲.۳. استفاده از SELinux در شبکه‌های توزیع‌شده

در محیط‌های توزیع‌شده مانند Kubernetes، دسترسی‌های شبکه باید به‌دقت کنترل شود. SELinux می‌تواند به‌طور خاص دسترسی به شبکه‌ها و سرویس‌های شبکه‌ای را مدیریت کند. برای مثال، ممکن است بخواهید دسترسی سرویس‌های خاصی مانند HTTP، SSH، یا FTP را با استفاده از SELinux محدود کنید.

برای این کار می‌توان از تنظیمات پیشرفته در پیکربندی SELinux استفاده کرد. به‌عنوان مثال، می‌توانید سیاست‌های SELinux را برای جلوگیری از دسترسی‌های ناخواسته به پورت‌ها یا سرویس‌های خاص تنظیم کنید.

۳. نظارت و ارزیابی سیاست‌های SELinux

برای بررسی وضعیت SELinux و ارزیابی وضعیت امنیتی در محیط‌های ابری و توزیع‌شده، ابزارهایی مانند seinfo، sesearch و audit2allow می‌توانند مفید باشند.

۳.۱. استفاده از seinfo برای بررسی سیاست‌ها

ابزار seinfo به شما امکان می‌دهد اطلاعات دقیق‌تری در مورد سیاست‌های SELinux در یک محیط توزیع‌شده یا ابری بدست آورید:

seinfo --container

این دستور اطلاعات مربوط به سیاست‌های SELinux برای کانتینرها را نمایش می‌دهد.

۳.۲. استفاده از sesearch برای جستجوی قوانین

با استفاده از sesearch، می‌توانید قوانین SELinux موجود را جستجو کرده و بررسی کنید که آیا دسترسی‌های غیرمجاز وجود دارد یا خیر:

sesearch -A -s system_u -t container_t

این دستور همه قوانین مربوط به نوع container_t را نمایش می‌دهد.

۳.۳. استفاده از audit2allow برای ایجاد قوانین جدید

اگر دسترسی‌ها در محیط ابری یا توزیع‌شده به‌دلیل قوانین SELinux محدود شده باشند، می‌توانید از ابزار audit2allow برای ایجاد قوانین جدید استفاده کنید:

audit2allow -a -M custom_policy

این ابزار گزارش‌هایی از خطاهای SELinux را گرفته و می‌تواند به‌طور خودکار قوانین جدید را برای مجاز کردن دسترسی‌های مورد نیاز ایجاد کند.

جمع‌بندی

مدیریت دسترسی‌ها و سیاست‌های SELinux در محیط‌های ابری و توزیع‌شده یک جنبه اساسی در حفظ امنیت است. با پیکربندی صحیح SELinux و استفاده از ابزارهای مختلف نظارتی، می‌توان دسترسی‌های غیرمجاز را محدود کرده و امنیت محیط‌های ابری و توزیع‌شده را به‌طور مؤثری افزایش داد. از ابزارهایی مانند securityContext، PodSecurityPolicy، و audit2allow برای مدیریت و پیکربندی سیاست‌های SELinux استفاده کنید تا بتوانید امنیت کانتینرها و سرویس‌ها را در چنین محیط‌هایی به‌طور مؤثری کنترل کنید.[/cdb_course_lesson][cdb_course_lesson title=”فصل 9. استفاده از SELinux در سیستم‌های احراز هویت و کنترل دسترسی”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ترکیب SELinux با سیستم‌های LDAP و Kerberos برای کنترل دسترسی‌های مبتنی بر هویت” subtitle=”توضیحات کامل”]ترکیب SELinux با سیستم‌های LDAP (Lightweight Directory Access Protocol) و Kerberos برای کنترل دسترسی‌های مبتنی بر هویت، به شما امکان می‌دهد تا سیاست‌های امنیتی را نه تنها بر اساس نوع یا سطح امنیتی، بلکه بر اساس هویت کاربران و سرویس‌ها نیز پیاده‌سازی کنید. این رویکرد می‌تواند به‌ویژه در محیط‌های پیچیده و مقیاس‌پذیر مانند سازمان‌ها یا محیط‌های ابری با تعداد زیادی از کاربران و سرویس‌ها مفید باشد.

در این بخش، نحوه ترکیب SELinux با LDAP و Kerberos برای مدیریت دسترسی‌ها و تقویت امنیت بر اساس هویت‌ها بررسی می‌شود.

۱. ترکیب SELinux با LDAP برای مدیریت دسترسی‌های مبتنی بر هویت

LDAP یک پروتکل استاندارد است که برای ذخیره و مدیریت اطلاعات هویتی کاربران و گروه‌ها در دایرکتوری‌ها استفاده می‌شود. این سیستم می‌تواند برای مدیریت اطلاعات کاربران و گروه‌ها در یک سازمان یا محیط ابری استفاده شود. در ترکیب با SELinux، می‌توان از اطلاعات LDAP برای کنترل دسترسی به منابع سیستم استفاده کرد.

۱.۱. نحوه پیکربندی SELinux برای استفاده از LDAP

برای استفاده از LDAP در ترکیب با SELinux، باید به‌طور صحیح پیکربندی کنید که دسترسی‌ها به‌طور داینامیک بر اساس هویت کاربران در LDAP اعمال شود. این پیکربندی‌ها معمولاً شامل تنظیمات در فایل‌های پیکربندی مانند /etc/selinux/config و /etc/nsswitch.conf است.

برای مثال، باید اطمینان حاصل کنید که سیستم شما به‌درستی از LDAP برای شناسایی کاربران و گروه‌ها استفاده می‌کند. ابتدا باید سیستم را برای استفاده از LDAP پیکربندی کنید:

  1. نصب بسته‌های مورد نیاز برای پشتیبانی از LDAP:
    sudo yum install openldap-clients nsswitch.conf
    
  2. پیکربندی فایل /etc/nsswitch.conf برای استفاده از LDAP:
    passwd:     files ldap
    shadow:     files ldap
    group:      files ldap
    
  3. سپس باید SELinux را برای کار با LDAP پیکربندی کنید تا بتوانید دسترسی‌ها را بر اساس گروه‌ها و کاربران LDAP مدیریت کنید.

برای مثال، می‌توانید از SELinux نوع‌های خاصی برای گروه‌های LDAP خود استفاده کنید. به این صورت که به هر گروه یک نوع SELinux خاص اختصاص داده شود تا دسترسی‌ها محدود شوند.

۱.۲. تنظیم دسترسی‌ها بر اساس گروه‌های LDAP در SELinux

پس از پیکربندی LDAP، می‌توانید به گروه‌های LDAP انواع SELinux اختصاص دهید. این امکان به شما اجازه می‌دهد تا دسترسی‌ها را براساس گروه‌ها در سیستم‌های LDAP کنترل کنید.

برای مثال، اگر یک گروه به نام admins در LDAP داشته باشید، می‌توانید یک نوع SELinux خاص برای آن گروه تعیین کنید:

semanage fcontext -a -t admin_t '/home/admins(/.*)?'

این دستور تنظیمات SELinux را برای گروه admins به‌طور خاص اعمال می‌کند و دسترسی به دایرکتوری‌ها و فایل‌ها را برای اعضای این گروه محدود می‌کند.

۲. ترکیب SELinux با Kerberos برای احراز هویت و کنترل دسترسی‌ها

Kerberos یک پروتکل شبکه برای احراز هویت امن است که به کاربران و سرویس‌ها این امکان را می‌دهد که به‌طور امن و بدون ارسال رمز عبور در شبکه به یکدیگر اعتبار بدهند. ترکیب SELinux با Kerberos می‌تواند برای پیاده‌سازی کنترل‌های دسترسی مبتنی بر هویت و محدود کردن دسترسی‌ها بر اساس اصول امنیتی Kerberos، بسیار مفید باشد.

۲.۱. نحوه پیکربندی SELinux برای استفاده از Kerberos

برای استفاده از SELinux همراه با Kerberos، ابتدا باید Kerberos را نصب و پیکربندی کنید. نصب Kerberos در سیستم‌های مبتنی بر RHEL یا CentOS به‌صورت زیر انجام می‌شود:

  1. نصب بسته‌های Kerberos:
    sudo yum install krb5-server krb5-workstation
    
  2. پیکربندی Kerberos در فایل‌های /etc/krb5.conf و /var/kerberos/krb5kdc/kdc.conf انجام می‌شود. پس از این، باید سرور Kerberos را راه‌اندازی کنید:
    sudo systemctl start krb5kdc
    sudo systemctl start kadmin
    
۲.۲. تنظیمات امنیتی SELinux برای کنترل دسترسی‌های Kerberos

پس از پیکربندی Kerberos، می‌توانید از SELinux برای کنترل دسترسی‌ها و امنیت منابع مبتنی بر هویت‌های Kerberos استفاده کنید. برای مثال، SELinux می‌تواند به‌طور خودکار دسترسی به منابع سیستم را بر اساس هویت‌های Kerberos، مانند user_t یا host_t محدود کند.

برای اعمال سیاست‌های SELinux بر اساس هویت‌های Kerberos، ابتدا باید کاربران و سرویس‌ها را به‌طور خاص در سیاست‌های SELinux معرفی کنید. به این صورت که هر کاربر یا سرویس تحت احراز هویت Kerberos، یک نوع SELinux خاص دریافت می‌کند که دسترسی‌های او را محدود می‌کند.

۲.۳. اعمال سیاست‌های SELinux بر اساس هویت Kerberos

اگر بخواهید سیاست‌های SELinux را برای کاربران خاص Kerberos تنظیم کنید، می‌توانید از ابزار semanage برای اختصاص نوع‌های خاص به هویت‌های Kerberos استفاده کنید. برای مثال، می‌توانید از دستور زیر برای تخصیص نوع SELinux به کاربری که احراز هویت Kerberos شده است، استفاده کنید:

semanage user -a -R "krb5user" -S kerberos -t user_t

این دستور به هویت krb5user یک نوع user_t اختصاص می‌دهد و به‌طور مشخص کنترل دسترسی‌ها برای این کاربر را تنظیم می‌کند.

۳. نظارت و ارزیابی دسترسی‌های مبتنی بر هویت

در ترکیب با LDAP و Kerberos، می‌توانید از ابزارهایی مانند audit2allow برای نظارت و ارزیابی دسترسی‌ها استفاده کنید. به‌ویژه در محیط‌های بزرگ و پیچیده، این ابزار می‌تواند به شما کمک کند تا مشکلات دسترسی را شناسایی کرده و قوانین جدید برای آن‌ها ایجاد کنید.

برای نظارت بر دسترسی‌های مبتنی بر هویت، از دستور زیر استفاده کنید:

ausearch -m avc -ts recent

این دستور تمامی پیغام‌های AVC (Access Vector Cache) را جستجو می‌کند و به شما امکان می‌دهد مشکلات دسترسی بر اساس هویت‌ها و کاربران را شناسایی کنید.

جمع‌بندی

ترکیب SELinux با سیستم‌های LDAP و Kerberos می‌تواند به‌عنوان یک لایه امنیتی قدرتمند برای کنترل دسترسی‌های مبتنی بر هویت در سیستم‌ها و محیط‌های توزیع‌شده عمل کند. با استفاده از این ترکیب، می‌توان دسترسی‌ها را به‌طور دقیق‌تر و مبتنی بر هویت‌های کاربران و سرویس‌ها مدیریت کرد. این امر به‌ویژه در محیط‌های بزرگ و پیچیده مانند سازمان‌ها و محیط‌های ابری حائز اهمیت است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات امنیتی SELinux برای دسترسی‌های مبتنی بر هویت در شبکه‌های سازمانی” subtitle=”توضیحات کامل”]در شبکه‌های سازمانی، ایجاد یک محیط امن و مدیریت دسترسی‌ها به منابع سیستم بر اساس هویت‌ها امری ضروری است. SELinux می‌تواند به‌طور مؤثر برای تقویت امنیت سیستم‌ها و مدیریت دسترسی‌ها بر اساس هویت‌ها و نقش‌ها استفاده شود. در این راستا، SELinux می‌تواند با سیستم‌های احراز هویت مبتنی بر هویت مانند LDAP و Kerberos ترکیب شود تا سیاست‌های امنیتی دقیق‌تری ایجاد کند.

در این بخش، به بررسی تنظیمات امنیتی SELinux برای دسترسی‌های مبتنی بر هویت در شبکه‌های سازمانی پرداخته می‌شود.

۱. تنظیمات اولیه SELinux در شبکه‌های سازمانی

قبل از شروع به تنظیمات خاص برای دسترسی‌های مبتنی بر هویت، باید ابتدا SELinux را برای محیط‌های سازمانی تنظیم و بهینه‌سازی کنید. این کار از طریق پیکربندی سیستم SELinux انجام می‌شود.

۱.۱. نصب و پیکربندی SELinux

برای پیکربندی SELinux در یک شبکه سازمانی، ابتدا باید SELinux را بر روی سیستم خود نصب و فعال کنید. بیشتر توزیع‌های لینوکس SELinux را به‌طور پیش‌فرض نصب دارند، اما در صورت نیاز به نصب، می‌توانید از دستورات زیر استفاده کنید:

  1. نصب SELinux بر روی سیستم:
    sudo yum install selinux-policy selinux-policy-targeted
    
  2. فعال‌سازی SELinux در سیستم: ابتدا فایل پیکربندی SELinux را ویرایش کنید:
    sudo vi /etc/selinux/config
    
  3. تغییر مقدار SELINUX به enforcing:
    SELINUX=enforcing
    
  4. ریستارت سیستم برای اعمال تغییرات:
    sudo reboot
    

۲. تنظیمات دسترسی مبتنی بر هویت با استفاده از LDAP

در شبکه‌های سازمانی، یکی از رایج‌ترین روش‌ها برای مدیریت کاربران و گروه‌ها، استفاده از LDAP است. SELinux می‌تواند به‌طور مؤثر با LDAP ترکیب شود تا دسترسی‌ها بر اساس هویت و گروه‌های LDAP تنظیم گردد.

۲.۱. پیکربندی SELinux برای کار با LDAP

برای پیکربندی SELinux برای کار با LDAP، ابتدا باید از سیستم احراز هویت LDAP برای شناسایی کاربران و گروه‌ها استفاده کنید. پیکربندی سیستم برای کار با LDAP به این صورت است:

  1. نصب بسته‌های مورد نیاز برای پشتیبانی از LDAP:
    sudo yum install openldap-clients nsswitch.conf
    
  2. ویرایش فایل /etc/nsswitch.conf برای اضافه کردن LDAP به منابع شناسایی کاربران:
    passwd:     files ldap
    shadow:     files ldap
    group:      files ldap
    
  3. بعد از این پیکربندی‌ها، می‌توانید SELinux را برای کنترل دسترسی به منابع و فایل‌ها براساس گروه‌ها و کاربران LDAP تنظیم کنید.
۲.۲. تخصیص انواع SELinux به گروه‌های LDAP

بعد از پیکربندی LDAP، برای تخصیص انواع SELinux به گروه‌های مختلف LDAP می‌توانید از ابزار semanage استفاده کنید.

  1. تخصیص نوع خاص SELinux به یک گروه از LDAP:
    semanage fcontext -a -t ldap_user_t '/home/ldap_users(/.*)?'
    

در اینجا، نوع ldap_user_t به تمام دایرکتوری‌ها و فایل‌های زیر /home/ldap_users اختصاص داده می‌شود.

۳. استفاده از Kerberos برای احراز هویت و سیاست‌های امنیتی مبتنی بر هویت

Kerberos پروتکلی است که برای احراز هویت امن و مدیریت دسترسی‌ها در شبکه‌های توزیع‌شده استفاده می‌شود. در شبکه‌های سازمانی، ترکیب SELinux و Kerberos می‌تواند به شما کمک کند تا دسترسی‌ها را بر اساس هویت‌های احراز شده در Kerberos کنترل کنید.

۳.۱. پیکربندی Kerberos برای کار با SELinux
  1. نصب و پیکربندی Kerberos: برای نصب و پیکربندی Kerberos روی سیستم، از دستورات زیر استفاده کنید:
    sudo yum install krb5-server krb5-workstation
    
  2. ویرایش فایل پیکربندی /etc/krb5.conf: در این فایل باید سرور Kerberos را مشخص کنید.
  3. راه‌اندازی و فعال‌سازی سرویس Kerberos:
    sudo systemctl start krb5kdc
    sudo systemctl start kadmin
    sudo systemctl enable krb5kdc
    sudo systemctl enable kadmin
    
۳.۲. استفاده از Kerberos در سیاست‌های SELinux

پس از پیکربندی Kerberos، می‌توانید از SELinux برای اعمال سیاست‌های خاص به کاربران و سرویس‌ها بر اساس هویت Kerberos استفاده کنید.

  1. تخصیص نوع SELinux به هویت‌های Kerberos: برای اینکه SELinux دسترسی‌ها را بر اساس هویت‌های Kerberos کنترل کند، می‌توانید از دستور زیر استفاده کنید:
    semanage user -a -R "krb5user" -S kerberos -t user_t
    

در این مثال، هویت krb5user به نوع user_t تخصیص داده شده است که باعث می‌شود دسترسی‌های آن کاربر محدود شود.

۴. نظارت بر دسترسی‌های مبتنی بر هویت در SELinux

در شبکه‌های سازمانی، نظارت و تحلیل دسترسی‌های مبتنی بر هویت امری بسیار مهم است. SELinux می‌تواند به‌طور خودکار گزارش‌هایی در مورد دسترسی‌ها، تلاش‌های غیرمجاز، و مشکلات امنیتی ایجاد کند.

برای نظارت بر دسترسی‌ها و شناسایی مشکلات امنیتی، می‌توانید از ابزارهای مختلفی مانند ausearch و audit2allow استفاده کنید.

۴.۱. جستجو در لاگ‌ها با استفاده از ausearch

برای مشاهده گزارش‌های مربوط به دسترسی‌ها و مشکلات SELinux، می‌توانید از دستور زیر استفاده کنید:

ausearch -m avc -ts recent

این دستور به‌طور خاص جستجو را برای پیغام‌های AVC (Access Vector Cache) در لاگ‌ها انجام می‌دهد و به شما کمک می‌کند تا مشکلات دسترسی و امنیتی را شناسایی کنید.

۵. ترکیب SELinux با Active Directory برای دسترسی‌های مبتنی بر هویت

در سازمان‌های بزرگ که از Active Directory (AD) برای مدیریت هویت کاربران استفاده می‌کنند، ترکیب SELinux با AD نیز می‌تواند به‌عنوان یک راهکار برای تقویت امنیت به کار گرفته شود.

۵.۱. پیکربندی SELinux برای استفاده از Active Directory
  1. نصب بسته‌های مرتبط با Active Directory:
    sudo yum install realmd sssd adcli
    
  2. پیکربندی اتصال به سرور AD:
    sudo realm join --user=admin ad.example.com
    

پس از این پیکربندی، SELinux می‌تواند دسترسی‌ها را بر اساس هویت‌های AD کنترل کرده و به‌طور خودکار انواع SELinux را برای کاربران AD تخصیص دهد.

جمع‌بندی

ترکیب SELinux با سیستم‌های احراز هویت مبتنی بر هویت مانند LDAP و Kerberos در شبکه‌های سازمانی، می‌تواند به‌طور مؤثر دسترسی‌ها را محدود کند و امنیت سیستم را بهبود بخشد. با استفاده از این روش‌ها، سازمان‌ها می‌توانند دسترسی‌های کاربران را بر اساس هویت و نقش‌های مشخص‌شده در سیستم‌های احراز هویت تنظیم کرده و به‌طور دقیق‌تری کنترل کنند. این روش‌ها به‌ویژه در محیط‌های بزرگ و پیچیده بسیار مؤثر هستند و کمک می‌کنند تا امنیت به‌طور جامع‌تر و هوشمندانه‌تری پیاده‌سازی شود.[/cdb_course_lesson][cdb_course_lesson title=”فصل 10. بهینه‌سازی عملکرد SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”روش‌های کاهش بار سیستم ناشی از اجرای SELinux” subtitle=”توضیحات کامل”]در حالی که SELinux یک ابزار بسیار قدرتمند برای افزایش امنیت سیستم است، ممکن است اجرای آن در برخی از شرایط باعث بار اضافی بر روی سیستم شود. این بار اضافی ممکن است بر روی عملکرد کلی سیستم تأثیر بگذارد. با این حال، روش‌های مختلفی برای کاهش بار سیستم ناشی از اجرای SELinux وجود دارد که در این بخش به بررسی آن‌ها پرداخته می‌شود.

۱. استفاده از حالت permissive به‌جای enforcing

در حالت enforcing، SELinux تمام دستورات و دسترسی‌ها را کنترل می‌کند و در صورت مغایرت با سیاست‌های امنیتی، دسترسی‌ها را مسدود می‌کند. این کار ممکن است موجب ایجاد بار اضافی شود، به‌خصوص در سیستم‌های با فعالیت‌های زیاد.

در حالی که در حالت permissive، SELinux صرفاً گزارش‌گیری می‌کند و دسترسی‌ها را مسدود نمی‌کند. این حالت برای تست و عیب‌یابی بسیار مفید است و به‌طور چشم‌گیری بار سیستم را کاهش می‌دهد.

تغییر حالت SELinux به permissive:
  1. تغییر حالت به صورت موقت:
    sudo setenforce 0
    
  2. تغییر حالت به صورت دائمی: در فایل /etc/selinux/config، مقدار SELINUX را به permissive تغییر دهید:
    SELINUX=permissive
    

۲. محدود کردن تعداد سیاست‌ها

هر سیاست SELinux، باید در زمان‌های خاصی اجرا شود و این ممکن است باعث کاهش عملکرد شود. به‌طور کلی، هرچه تعداد سیاست‌ها بیشتر باشد، بار سیستم بالاتر خواهد بود. می‌توان با محدود کردن تعداد سیاست‌های فعال بر روی سیستم، این بار را کاهش داد.

۲.۱. غیرفعال کردن سیاست‌های غیر ضروری:

برای غیرفعال کردن سیاست‌هایی که به آن‌ها نیاز ندارید، می‌توانید از دستور semodule استفاده کنید:

sudo semodule -d <module_name>

این دستور باعث می‌شود تا ماژول SELinux خاص غیرفعال شود و بار اضافی بر روی سیستم کاهش یابد.

۳. استفاده از audit2allow برای تولید قوانین دقیق‌تر

اگر SELinux قوانین کلی را برای همه برنامه‌ها اعمال کند، بار سیستم افزایش می‌یابد. با استفاده از ابزار audit2allow می‌توان قوانین دقیق‌تری برای برنامه‌ها ایجاد کرد. این قوانین دقیق‌تر موجب کاهش عملیات کنترل در SELinux و در نتیجه کاهش بار سیستم می‌شود.

تولید قوانین دقیق‌تر:
  1. مشاهده پیغام‌های AVC و ایجاد قانون برای آن‌ها:
    sudo ausearch -m avc -ts recent
    sudo audit2allow -M custom_policy
    sudo semodule -i custom_policy.pp
    

۴. تنظیمات policycoreutils برای بهینه‌سازی سیاست‌ها

policycoreutils مجموعه‌ای از ابزارهای SELinux است که می‌توان از آن‌ها برای بهینه‌سازی سیاست‌ها و کاهش بار سیستم استفاده کرد.

۴.۱. حذف فایل‌های غیر ضروری از سیاست‌ها:

با استفاده از دستور semanage می‌توانید سیاست‌هایی را که به آن‌ها نیازی ندارید حذف کنید:

sudo semanage fcontext -d <file_context>
۴.۲. استفاده از سیاست‌های کم حجم‌تر:

اگر از SELinux در محیط‌هایی با منابع محدود استفاده می‌کنید، ممکن است بخواهید از سیاست‌های کم حجم‌تر مانند mls یا targeted استفاده کنید که به‌طور پیش‌فرض در اکثر توزیع‌ها وجود دارند.

۵. بهینه‌سازی عملکرد با استفاده از dmesg

دستور dmesg به شما اجازه می‌دهد که مشکلات عملکردی SELinux را شناسایی کرده و برای حل آن‌ها اقدامات بهینه‌سازی انجام دهید.

استفاده از dmesg برای بررسی مشکلات:
  1. بررسی پیغام‌های سیستم و شناسایی مشکلات مربوط به SELinux:
    dmesg | grep -i selinux
    

این پیغام‌ها ممکن است نشان‌دهنده مشکلاتی باشند که می‌توانند باعث افزایش بار سیستم شوند. با تجزیه و تحلیل آن‌ها، می‌توانید اقداماتی را برای بهینه‌سازی بار SELinux انجام دهید.

۶. استفاده از حالت targeted

حالت targeted یکی از بهترین حالت‌ها برای کاهش بار سیستم است. در این حالت، SELinux تنها بر روی سرویس‌ها و برنامه‌های خاصی که نیاز به امنیت دارند، اعمال می‌شود و در مقایسه با حالت‌های دیگر (مانند strict) بار کمتری ایجاد می‌کند.

تغییر حالت SELinux به targeted:
  1. ویرایش فایل /etc/selinux/config:
    SELINUX=targeted
    
  2. اعمال تغییرات:
    sudo setenforce 1
    

۷. استفاده از ابزار setools برای تجزیه و تحلیل سیاست‌ها

ابزار setools مجموعه‌ای از ابزارهاست که می‌توانند برای تجزیه و تحلیل سیاست‌های SELinux استفاده شوند و در بهینه‌سازی آن‌ها کمک کنند. با استفاده از این ابزار می‌توان سیاست‌ها را برای کاهش بار سیستم و بهینه‌سازی عملکرد تنظیم کرد.

۸. تخصیص منابع سیستم به فرآیندهای SELinux

در صورتی که اجرای SELinux باعث افزایش بار سیستم می‌شود، می‌توانید منابع بیشتری را به فرآیندهای SELinux اختصاص دهید تا عملکرد بهینه‌تری داشته باشد.

تخصیص منابع به فرآیندهای SELinux:
  1. تنظیم تعداد پردازنده‌های مورد استفاده توسط SELinux: از ابزار taskset برای تخصیص پردازنده‌ها استفاده کنید.
  2. محدود کردن منابع ورودی/خروجی SELinux: با استفاده از ابزارهای مختلف نظارتی مانند iostat یا vmstat می‌توانید منابع I/O مورد استفاده توسط SELinux را کنترل و محدود کنید.

جمع‌بندی

برای کاهش بار سیستم ناشی از اجرای SELinux، می‌توان از چندین روش مختلف استفاده کرد. این روش‌ها شامل استفاده از حالت permissive به‌جای enforcing، غیرفعال کردن سیاست‌های غیرضروری، تولید قوانین دقیق‌تر با استفاده از audit2allow، و استفاده از حالت‌های خاص مانند targeted هستند. همچنین، تجزیه و تحلیل پیغام‌های سیستم و بهینه‌سازی سیاست‌ها با استفاده از ابزارهای مختلف می‌تواند به کاهش بار سیستم کمک کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بهینه‌سازی استفاده از منابع سیستم هنگام اعمال سیاست‌های امنیتی SELinux” subtitle=”توضیحات کامل”]در هنگام استفاده از SELinux برای مدیریت امنیت سیستم، ممکن است به دلیل پیچیدگی و گستردگی سیاست‌ها، فشار زیادی بر منابع سیستم وارد شود. این امر می‌تواند منجر به کاهش عملکرد سیستم و بار اضافی شود. خوشبختانه روش‌ها و ابزارهایی برای بهینه‌سازی استفاده از منابع سیستم در هنگام اعمال سیاست‌های امنیتی وجود دارد. در این بخش، به بررسی روش‌های مختلف برای بهینه‌سازی منابع سیستم در هنگام استفاده از SELinux پرداخته می‌شود.

۱. استفاده از حالت permissive به‌جای enforcing

یکی از ساده‌ترین راه‌ها برای کاهش فشار بر روی سیستم، تغییر حالت SELinux به permissive است. در این حالت، SELinux به‌جای اعمال سیاست‌ها، تنها گزارش‌ها را ثبت می‌کند و هیچ‌گونه مانعی برای دسترسی‌ها ایجاد نمی‌کند. این حالت برای انجام تست‌ها و عیب‌یابی بسیار مفید است و باعث کاهش بار سیستم می‌شود.

تغییر حالت به permissive:
  1. تغییر حالت به صورت موقت:
    sudo setenforce 0
    
  2. تغییر حالت به صورت دائمی: در فایل /etc/selinux/config، مقدار SELINUX را به permissive تغییر دهید:
    SELINUX=permissive
    

۲. انتخاب سیاست‌های خاص و کم حجم

به‌جای استفاده از سیاست‌های پیش‌فرض که ممکن است شامل قوانینی برای تمامی فرآیندها و فایل‌ها باشند، می‌توانید از سیاست‌های کم حجم و خاص استفاده کنید. یکی از این سیاست‌ها، سیاست targeted است که به‌طور پیش‌فرض برای اکثر سرویس‌ها و برنامه‌های معمول استفاده می‌شود. این سیاست به‌طور خاص روی سرویس‌هایی مانند HTTP، SSH و FTP اعمال می‌شود و تأثیر کمتری روی عملکرد سیستم دارد.

تغییر به سیاست targeted:
  1. ویرایش فایل /etc/selinux/config:
    SELINUX=targeted
    
  2. اعمال تغییرات:
    sudo setenforce 1
    

۳. غیرفعال کردن سیاست‌های غیر ضروری

اگر SELinux بسیاری از سیاست‌ها را برای برنامه‌ها و سرویس‌های غیر ضروری اعمال می‌کند، می‌توان این سیاست‌ها را غیرفعال کرد تا از مصرف اضافی منابع سیستم جلوگیری شود.

غیرفعال کردن سیاست‌ها:
  1. مشاهده ماژول‌های نصب‌شده:
    sudo semodule -l
    
  2. غیرفعال کردن ماژول‌ها:
    sudo semodule -d <module_name>
    

۴. استفاده از audit2allow برای ایجاد قوانین خاص

برای جلوگیری از اعمال سیاست‌های کلی که ممکن است به‌طور غیر ضروری منابع را مصرف کنند، می‌توان از ابزار audit2allow برای ایجاد قوانین خاص استفاده کرد. این ابزار بر اساس گزارش‌های AVC که در لاگ‌ها ثبت می‌شوند، قوانینی را ایجاد می‌کند که تنها به سرویس‌ها و برنامه‌های خاص مربوط می‌شود.

ایجاد قوانین خاص با استفاده از audit2allow:
  1. مشاهده پیغام‌های AVC و ایجاد قانون برای آن‌ها:
    sudo ausearch -m avc -ts recent
    sudo audit2allow -M custom_policy
    sudo semodule -i custom_policy.pp
    

این روش موجب کاهش تعداد سیاست‌ها و تمرکز آن‌ها روی نیازهای واقعی سیستم می‌شود.

۵. استفاده از ابزار setools برای تجزیه و تحلیل و بهینه‌سازی سیاست‌ها

ابزار setools مجموعه‌ای از ابزارهای مفید برای تجزیه و تحلیل سیاست‌ها و بهینه‌سازی آن‌ها در سیستم SELinux است. استفاده از این ابزار به شما کمک می‌کند تا فقط سیاست‌هایی را که به آن‌ها نیاز دارید، اعمال کنید و بار اضافی سیستم را کاهش دهید.

استفاده از setools برای بهینه‌سازی سیاست‌ها:
  1. تجزیه و تحلیل دسترسی‌ها با استفاده از ابزار seinfo:
    seinfo -a
    
  2. استفاده از ابزار sesearch برای جستجو و تحلیل سیاست‌ها:
    sesearch -A -s <source_type> -t <target_type>
    

۶. بهینه‌سازی سیاست‌ها برای بهبود عملکرد

به‌جای اعمال سیاست‌ها به‌صورت کلی، می‌توان از سیاست‌های خاص برای سرویس‌ها و فرآیندهای کلیدی استفاده کرد. این کار منجر به کاهش تعداد فرآیندهایی می‌شود که SELinux باید آن‌ها را نظارت کند و بنابراین مصرف منابع کاهش می‌یابد.

تنظیم سیاست‌ها به‌صورت خاص:
  1. استفاده از دستور semanage برای مدیریت فایل‌ها و دایرکتوری‌ها:
    sudo semanage fcontext -a -t <file_type> <file_path>
    

این دستور می‌تواند به شما کمک کند تا فقط فایل‌ها و دایرکتوری‌هایی که نیاز به نظارت دارند را تحت کنترل SELinux قرار دهید.

۷. استفاده از semanage برای تنظیمات پیشرفته

ابزار semanage به شما این امکان را می‌دهد که ویژگی‌های امنیتی SELinux را به‌طور دقیق‌تر و با کمترین بار اضافی تنظیم کنید. با استفاده از این ابزار می‌توانید پورت‌ها، فایل‌ها و فرآیندها را به‌طور خاص تنظیم کنید و از اجرای سیاست‌ها بر روی تمامی اجزای سیستم جلوگیری کنید.

تنظیم ویژگی‌های امنیتی با semanage:
  1. تغییر ویژگی امنیتی یک فایل:
    sudo semanage fcontext -a -t <type> <file_path>
    
  2. تعریف سیاست‌های دسترسی خاص برای پورت‌ها:
    sudo semanage port -a -t <port_type> -p tcp <port_number>
    

۸. کاهش تعداد لاگ‌ها

یکی دیگر از روش‌هایی که می‌تواند به کاهش بار سیستم کمک کند، کاهش تعداد لاگ‌های ثبت‌شده توسط SELinux است. برای این کار می‌توان تعداد گزارش‌ها را محدود کرد تا سیستم در هنگام ثبت لاگ‌ها دچار فشار اضافی نشود.

کاهش لاگ‌های SELinux:
  1. ویرایش فایل /etc/selinux/semanage.conf و تنظیم مقدار log_level:
    log_level = warning
    

این کار باعث می‌شود که تنها هشدارهای مهم در سیستم ثبت شوند و از ثبت گزارش‌های غیر ضروری جلوگیری گردد.

جمع‌بندی

برای بهینه‌سازی استفاده از منابع سیستم هنگام اعمال سیاست‌های امنیتی SELinux، می‌توان از روش‌های مختلفی استفاده کرد. این روش‌ها شامل استفاده از حالت permissive، انتخاب سیاست‌های خاص و کم‌حجم، غیرفعال کردن سیاست‌های غیر ضروری، ایجاد قوانین دقیق‌تر با ابزار audit2allow، و استفاده از ابزارهایی مانند setools برای تجزیه و تحلیل سیاست‌ها هستند. علاوه بر این، تنظیم دقیق ویژگی‌های امنیتی با semanage و کاهش تعداد لاگ‌ها می‌تواند به کاهش بار سیستم کمک کند. این اقدامات باعث افزایش کارایی سیستم در عین حفظ امنیت می‌شوند.[/cdb_course_lesson][cdb_course_lesson title=”فصل 11. حفظ امنیت و پایداری سیستم‌ها با SELinux”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بهترین شیوه‌ها برای پیاده‌سازی SELinux در سازمان‌ها” subtitle=”توضیحات کامل”]پیاده‌سازی SELinux در یک سازمان به‌طور مؤثر می‌تواند نقش مهمی در تأمین امنیت سیستم‌ها و داده‌ها ایفا کند. SELinux با اعمال سیاست‌های امنیتی به‌صورت دقیق و جزئی برای فرآیندها، فایل‌ها و پورت‌ها، امکان کنترل دسترسی مبتنی بر سیاست‌های مشخص‌شده را فراهم می‌آورد. در این بخش به بهترین شیوه‌ها برای پیاده‌سازی SELinux در سازمان‌ها پرداخته خواهد شد.

۱. تحلیل نیازها و اهداف امنیتی سازمان

قبل از پیاده‌سازی SELinux، لازم است که سازمان نیازها و اهداف امنیتی خود را به‌وضوح شفاف‌سازی کند. این تحلیل شامل شناسایی خطرات و تهدیدات احتمالی، انواع داده‌های حساس و الزامات قانونی است. بر اساس این نیازها، می‌توان سیاست‌های امنیتی متناسب با سطح حساسیت داده‌ها و خدمات سازمان ایجاد کرد.

اقدامات اولیه:
  • تعیین داده‌ها و سیستم‌های حساس که نیاز به محافظت دارند.
  • شناسایی سرویس‌ها و برنامه‌های کلیدی که باید تحت نظارت SELinux قرار گیرند.
  • تعریف سطح دسترسی‌های مورد نیاز برای فرآیندها، فایل‌ها و شبکه.

۲. استفاده از حالت targeted برای آغاز پیاده‌سازی

در ابتدا، بهتر است که SELinux را در حالت targeted راه‌اندازی کنید. این حالت به‌طور خاص برای سرویس‌های مهم مانند HTTP، SSH و FTP طراحی شده است و به‌طور خودکار امنیت این سرویس‌ها را تأمین می‌کند. این رویکرد به‌ویژه برای شروع مناسب است، زیرا به سازمان اجازه می‌دهد که به‌سرعت امنیت سیستم‌ها را با حداقل تنظیمات اولیه بهبود بخشد.

شروع با حالت targeted:
  1. ویرایش فایل /etc/selinux/config:
    SELINUX=targeted
    
  2. اعمال تغییرات:
    sudo setenforce 1
    

۳. تنظیم سیاست‌های خاص برای نیازهای سازمانی

در پیاده‌سازی SELinux، باید از سیاست‌هایی استفاده کرد که به‌طور خاص به نیازهای امنیتی سازمان پاسخ دهند. با استفاده از ابزارهایی مانند semanage، می‌توان پورت‌ها، فرآیندها و فایل‌ها را به‌طور دقیق برای سیاست‌های خاص تنظیم کرد. به این ترتیب از اعمال سیاست‌های غیر ضروری بر روی سرویس‌ها و فرآیندهای غیر مرتبط جلوگیری می‌شود.

تنظیم سیاست‌ها:
  1. تنظیم دسترسی به پورت‌ها:
    sudo semanage port -a -t http_port_t -p tcp 8080
    
  2. تنظیم امنیت فایل‌ها:
    sudo semanage fcontext -a -t httpd_sys_content_t /var/www/html
    

۴. آموزش و آگاهی کارکنان و مدیران سیستم

آموزش کاربران و مدیران سیستم در مورد نحوه کارکرد SELinux و سیاست‌های امنیتی آن بسیار ضروری است. کاربران باید بدانند که SELinux چگونه به آن‌ها کمک می‌کند تا امنیت سیستم‌ها و داده‌های سازمانی حفظ شود. مدیران باید از ابزارهای SELinux برای شناسایی و حل مشکلات دسترسی استفاده کنند.

اقدامات آموزشی:
  • برگزاری کارگاه‌های آموزشی برای آشنایی با SELinux و نحوه کار با آن.
  • تهیه مستندات و راهنماهای داخلی برای مدیران سیستم.
  • تشویق به آگاهی از گزارش‌های AVC و استفاده از ابزارهایی مانند audit2allow برای ایجاد سیاست‌های دقیق‌تر.

۵. استفاده از حالت permissive برای عیب‌یابی

در صورتی که در پیاده‌سازی SELinux با مشکلاتی در دسترسی‌ها روبه‌رو شوید، می‌توانید از حالت permissive استفاده کنید. در این حالت، SELinux مانع از دسترسی‌ها نمی‌شود و تنها گزارش‌هایی از فعالیت‌های مشکوک ثبت می‌کند. این حالت به مدیران سیستم کمک می‌کند تا مشکلات را شناسایی کرده و سیاست‌های مناسب را بدون تأثیر منفی بر روی سرویس‌ها اعمال کنند.

تغییر به حالت permissive:
  1. تغییر حالت به‌طور موقت:
    sudo setenforce 0
    
  2. تغییر حالت به‌صورت دائمی: در فایل /etc/selinux/config:
    SELINUX=permissive
    

۶. استفاده از ابزارهای گزارش‌دهی و لاگ‌برداری

برای پیگیری عملکرد SELinux و شناسایی مشکلات، باید از ابزارهای گزارش‌دهی و لاگ‌برداری به‌طور مؤثر استفاده کرد. ابزارهایی مانند ausearch و audit2allow می‌توانند به مدیران سیستم کمک کنند تا مشکلات دسترسی را شناسایی کرده و قوانین جدیدی برای مجاز کردن دسترسی‌های مورد نیاز ایجاد کنند.

ابزارهای گزارش‌دهی:
  1. مشاهده پیغام‌های AVC:
    sudo ausearch -m avc -ts recent
    
  2. ایجاد قوانین مجاز با استفاده از audit2allow:
    sudo audit2allow -M my_policy
    sudo semodule -i my_policy.pp
    

۷. نظارت و به‌روزرسانی منظم سیاست‌ها

با گذشت زمان، نیازهای امنیتی سازمان تغییر می‌کنند و باید سیاست‌های SELinux به‌طور منظم بررسی و به‌روزرسانی شوند. این کار به‌ویژه برای تضمین هماهنگی با تغییرات نرم‌افزاری و خدمات شبکه‌ای ضروری است. علاوه بر این، با استفاده از ابزارهایی مانند seinfo و sesearch می‌توان وضعیت سیاست‌ها را بررسی کرده و مشکلات امنیتی را شناسایی کرد.

بررسی و به‌روزرسانی سیاست‌ها:
  1. بررسی سیاست‌های SELinux:
    sudo seinfo -a
    
  2. جستجو برای مشکلات با استفاده از sesearch:
    sudo sesearch -A -s <source_type> -t <target_type>
    

۸. پیاده‌سازی امنیت در محیط‌های ابری و containerized

در محیط‌های ابری و containerized مانند Docker و Kubernetes، SELinux نقش بسیار مهمی در کنترل دسترسی‌ها و تأمین امنیت ایفا می‌کند. در این محیط‌ها، باید تنظیمات SELinux برای جلوگیری از دسترسی‌های غیرمجاز به منابع سیستم و داده‌ها به‌طور دقیق تنظیم شود.

پیاده‌سازی SELinux در Docker:
  1. استفاده از SELinux با Docker:
    docker run --security-opt label:type:container_t my_image
    
  2. تنظیمات SELinux برای Kubernetes:
    kubectl create -f my_selinux_policy.yaml
    

۹. ایجاد خط‌مشی‌های دسترسی مبتنی بر هویت

در سازمان‌هایی که از سیستم‌های هویتی مانند LDAP یا Kerberos برای احراز هویت استفاده می‌کنند، می‌توان SELinux را به‌طور یکپارچه با این سیستم‌ها برای کنترل دقیق دسترسی‌ها ترکیب کرد. این کار باعث می‌شود که دسترسی‌ها بر اساس هویت و نقش کاربران به‌طور دقیق کنترل شود.

ترکیب SELinux با LDAP و Kerberos:
  1. تنظیم SELinux برای استفاده از Kerberos:
    sudo semanage login -a -s kerberos_user_t user_name
    
  2. تنظیم SELinux برای LDAP:
    sudo semanage login -a -s ldap_user_t ldap_user_name
    

جمع‌بندی

پیاده‌سازی SELinux در سازمان‌ها به‌عنوان یک ابزار امنیتی قدرتمند می‌تواند تأثیر زیادی بر کاهش خطرات و تهدیدات امنیتی داشته باشد. برای پیاده‌سازی مؤثر SELinux، باید نیازهای امنیتی سازمان به‌طور دقیق شفاف‌سازی شده و سیاست‌های امنیتی متناسب با این نیازها ایجاد شود. استفاده از حالت‌های مختلف مانند targeted و permissive، آموزش کارکنان و مدیران سیستم، و نظارت منظم بر عملکرد SELinux از جمله اقدامات مهم برای پیاده‌سازی صحیح این ابزار امنیتی هستند. همچنین در محیط‌های ابری و containerized، SELinux باید به‌طور ویژه تنظیم و به‌روز شود تا امنیت سیستم‌ها حفظ گردد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”محافظت از سیستم در برابر تهدیدات و حملات با استفاده از SELinux” subtitle=”توضیحات کامل”]SELinux (Security-Enhanced Linux) یک ماژول امنیتی است که به‌طور خاص برای بهبود امنیت سیستم‌های لینوکسی طراحی شده است. این ابزار با اعمال سیاست‌های امنیتی دقیق و جزئی، از سیستم در برابر تهدیدات و حملات مختلف محافظت می‌کند. SELinux بر اساس مدل کنترل دسترسی اجباری (Mandatory Access Control یا MAC) عمل می‌کند که اجازه نمی‌دهد دسترسی به منابع سیستم بدون در نظر گرفتن سیاست‌های امنیتی انجام گیرد.

در این بخش، به نحوه استفاده از SELinux برای محافظت از سیستم در برابر تهدیدات و حملات مختلف پرداخته خواهد شد.

۱. حفاظت در برابر دسترسی‌های غیرمجاز

SELinux با اعمال سیاست‌های دقیق برای هر فرآیند و فایل در سیستم، دسترسی‌های غیرمجاز را محدود می‌کند. این به این معناست که حتی اگر یک مهاجم موفق به نفوذ به سیستم شود، نمی‌تواند به منابع سیستم یا فایل‌های حساس دسترسی پیدا کند مگر اینکه طبق سیاست‌های SELinux مجاز شده باشد.

نحوه حفاظت:
  • استفاده از نوع‌های مختلف برای فرآیندها و فایل‌ها تا دسترسی‌ها دقیقاً تعریف شوند.
  • جلوگیری از دسترسی فرآیندهای غیرمجاز به فایل‌ها یا منابع حساس با استفاده از سیاست‌های type enforcement.

مثال: اگر یک سرویس وب دسترسی به فایل‌های خاص سیستم را داشته باشد، SELinux سیاست‌هایی را اعمال می‌کند که فقط اجازه دسترسی به فایل‌های مجاز برای این سرویس داده شود، در غیر این صورت دسترسی مسدود می‌شود.

۲. جلوگیری از اجرای کدهای مخرب (Payloads) در فایل‌های اجرایی

SELinux می‌تواند از اجرای کدهای مخرب در فایل‌های اجرایی جلوگیری کند. با استفاده از سیاست‌های execmod، SELinux به‌طور دقیق مشخص می‌کند که کدام فایل‌ها قادر به اجرای کد هستند. این ویژگی به‌ویژه برای جلوگیری از اجرای برنامه‌های مخرب که ممکن است توسط مهاجمان در سیستم آپلود شوند، بسیار مفید است.

نحوه حفاظت:
  • استفاده از ویژگی‌های execmod برای جلوگیری از اجرای کدهای مخرب.
  • اعمال محدودیت‌های دقیق بر روی فایل‌هایی که می‌توانند اجرا شوند.

مثال: اگر یک مهاجم سعی کند کد مخربی را از طریق یک فایل در دایرکتوری قابل نوشتن (مثل /tmp) اجرا کند، SELinux مانع از این عمل می‌شود مگر اینکه این فایل از سیاست‌های امنیتی عبور کند.

۳. محدود کردن دسترسی به شبکه

SELinux می‌تواند دسترسی به شبکه را محدود کرده و اطمینان حاصل کند که سرویس‌ها و برنامه‌ها فقط به شبکه‌هایی که به آن‌ها دسترسی دارند متصل شوند. این امر به‌ویژه برای جلوگیری از حملات شبکه‌ای نظیر DDoS یا دسترسی غیرمجاز به سرویس‌ها اهمیت دارد.

نحوه حفاظت:
  • استفاده از سیاست‌های network و port برای محدود کردن دسترسی‌ها.
  • مسدود کردن دسترسی به پورت‌ها و پروتکل‌های غیرمجاز.

مثال: اگر یک سرویس HTTP باید فقط از پورت 80 و 443 قابل دسترسی باشد، SELinux می‌تواند دسترسی به سایر پورت‌ها را مسدود کند و فقط پورت‌های مجاز را برای سرویس HTTP فعال کند.

۴. محافظت در برابر حملات تزریق و دسترسی‌های غیرمجاز به دیتابیس‌ها

یکی از تهدیدات رایج در سیستم‌های نرم‌افزاری، حملات تزریق کد (SQL Injection) و دسترسی‌های غیرمجاز به دیتابیس‌ها است. SELinux می‌تواند با کنترل دسترسی‌ها و محدود کردن فرآیندهای غیرمجاز به منابع دیتابیس، این نوع حملات را جلوگیری کند.

نحوه حفاظت:
  • محدود کردن دسترسی برنامه‌ها به دیتابیس‌ها فقط به درخواست‌های معتبر.
  • جلوگیری از دسترسی مستقیم به فایل‌های پیکربندی و داده‌های حساس.

مثال: اگر یک وب‌سرور می‌خواهد به دیتابیس متصل شود، SELinux فقط اجازه دسترسی به دیتابیس را به این سرویس می‌دهد و اگر حمله‌ای برای دسترسی غیرمجاز به دیتابیس صورت گیرد، SELinux آن را مسدود می‌کند.

۵. جلوگیری از سوءاستفاده‌های مرتبط با منابع سیستم

SELinux می‌تواند دسترسی فرآیندها به منابع سیستم مانند فایل‌های سیستمی، حافظه و پورت‌ها را محدود کند. این کار به‌ویژه در برابر سوءاستفاده‌های ناشی از آسیب‌پذیری‌های سیستم‌های عامل مفید است.

نحوه حفاظت:
  • اعمال سیاست‌های محدود کننده برای فرآیندهایی که می‌توانند از منابع سیستم استفاده کنند.
  • استفاده از سیاست‌های allow و deny برای کنترل دسترسی‌ها به منابع سیستم.

مثال: اگر یک فرآیند غیرمجاز سعی کند به حافظه یا فایل‌های سیستمی حساس دسترسی پیدا کند، SELinux این دسترسی را مسدود می‌کند و فقط فرآیندهای مجاز می‌توانند به این منابع دسترسی پیدا کنند.

۶. نظارت و گزارش‌دهی در برابر تهدیدات

SELinux قادر است تمامی دسترسی‌های غیرمجاز و عملیات مشکوک را ثبت کرده و گزارشی از آن‌ها تهیه کند. این گزارش‌ها به مدیران سیستم کمک می‌کنند تا تهدیدات و حملات را شناسایی و تجزیه و تحلیل کنند.

نحوه حفاظت:
  • فعال‌سازی گزارش‌دهی و لاگ‌برداری برای عملیات SELinux با استفاده از ابزارهایی مانند ausearch و audit2allow.
  • استفاده از لاگ‌ها برای شناسایی تهدیدات و اعمال سیاست‌های امنیتی جدید برای مقابله با آن‌ها.

مثال: گزارش‌های AVC که توسط SELinux تولید می‌شوند می‌توانند نشان دهند که کدام فرآیندها سعی در دسترسی به منابع غیرمجاز دارند. این گزارش‌ها به مدیران سیستم کمک می‌کنند تا سیاست‌های جدیدی برای محدود کردن این دسترسی‌ها ایجاد کنند.

۷. ترکیب SELinux با ابزارهای امنیتی دیگر

برای افزایش سطح حفاظت، SELinux را می‌توان با ابزارهای امنیتی دیگر مانند firewalld، AppArmor و سیستم‌های شناسایی نفوذ (IDS) ترکیب کرد. این ابزارها می‌توانند به‌طور همزمان با SELinux کار کرده و امنیت سیستم را تقویت کنند.

نحوه حفاظت:
  • ترکیب SELinux با firewalld برای کنترل دقیق دسترسی به شبکه.
  • استفاده از سیستم‌های IDS برای شناسایی حملات و نفوذها.

مثال: اگر یک حمله DDoS به سرور وب سازمان صورت گیرد، SELinux می‌تواند دسترسی به پورت‌ها را محدود کرده و firewalld می‌تواند دسترسی به آدرس‌های IP مشکوک را مسدود کند.

۸. استفاده از حالت enforcing برای اجرای سیاست‌ها

در نهایت، برای حفاظت کامل از سیستم، SELinux باید در حالت enforcing فعال شود. در این حالت، تمامی سیاست‌های امنیتی به‌طور فعال اعمال شده و هرگونه دسترسی غیرمجاز یا عملیات غیرمجاز مسدود می‌شود.

نحوه فعال‌سازی:
  • تغییر وضعیت SELinux به حالت enforcing:
    sudo setenforce 1
    

جمع‌بندی

SELinux به‌عنوان یک ابزار امنیتی قدرتمند، می‌تواند از سیستم‌ها در برابر تهدیدات و حملات مختلف محافظت کند. از طریق اعمال سیاست‌های دقیق برای کنترل دسترسی‌ها، محدود کردن دسترسی به منابع سیستم، جلوگیری از اجرای کدهای مخرب و نظارت بر عملیات مشکوک، SELinux امنیت را در سطوح مختلف سیستم برقرار می‌کند. با ترکیب SELinux با سایر ابزارهای امنیتی و استفاده از حالت‌های مختلف، سازمان‌ها می‌توانند به‌طور مؤثری از تهدیدات و حملات محافظت کنند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”پیگیری و مانیتورینگ سیاست‌های SELinux برای اطمینان از عملکرد صحیح آن” subtitle=”توضیحات کامل”]پیگیری و مانیتورینگ سیاست‌های SELinux برای اطمینان از اینکه سیستم به‌درستی از سیاست‌های امنیتی پیروی می‌کند و هیچ‌گونه نقص امنیتی یا دسترسی غیرمجاز وجود ندارد، ضروری است. این فرآیند به مدیران سیستم کمک می‌کند تا مطمئن شوند که SELinux به‌درستی پیکربندی شده است و همه چیز مطابق انتظار عمل می‌کند.

در این بخش، ابزارها و تکنیک‌های مختلفی برای پیگیری و مانیتورینگ سیاست‌های SELinux معرفی می‌شود.

۱. استفاده از getenforce برای بررسی وضعیت SELinux

دستور getenforce برای بررسی وضعیت کلی SELinux استفاده می‌شود. این دستور نشان می‌دهد که SELinux در کدام حالت قرار دارد (Enforcing، Permissive، یا Disabled).

نحوه استفاده:
getenforce

خروجی ممکن است یکی از مقادیر زیر باشد:

  • Enforcing: سیاست‌های SELinux به‌طور کامل اعمال می‌شوند.
  • Permissive: SELinux خطاها را ثبت می‌کند ولی سیاست‌ها را اعمال نمی‌کند.
  • Disabled: SELinux غیرفعال است.

۲. استفاده از semanage برای بررسی و مدیریت سیاست‌ها

ابزار semanage به شما این امکان را می‌دهد که تنظیمات SELinux را بررسی کرده و تغییرات لازم را اعمال کنید. با استفاده از دستور semanage می‌توانیم فهرستی از سیاست‌های امنیتی SELinux و پیکربندی‌های آن را مشاهده کنیم.

نحوه بررسی تنظیمات:
semanage fcontext -l

این دستور فهرستی از نوع‌ها و پیکربندی‌های مربوط به فایل‌ها را نمایش می‌دهد که برای مانیتورینگ و اطمینان از اینکه سیاست‌های SELinux به‌درستی اعمال شده‌اند، مفید است.

۳. استفاده از auditd برای ثبت لاگ‌ها و بررسی مشکلات

ابزار auditd به‌طور خودکار تمامی وقایع امنیتی مربوط به SELinux را ثبت می‌کند و لاگ‌های مربوطه را در فایل‌های گزارش ذخیره می‌کند. این لاگ‌ها می‌توانند اطلاعات مهمی درباره هرگونه دسترسی غیرمجاز یا عملیات مشکوک ارائه دهند.

نحوه فعال‌سازی و بررسی لاگ‌ها:
  1. ابتدا مطمئن شوید که سرویس auditd فعال است:
    sudo systemctl enable auditd
    sudo systemctl start auditd
    
  2. سپس، از دستور ausearch برای جستجو در لاگ‌های SELinux استفاده کنید:
    ausearch -m avc -ts recent
    

این دستور تمامی پیام‌های AVC (Access Vector Cache) را که به‌طور خودکار توسط SELinux ثبت می‌شوند، جستجو کرده و در اختیار شما قرار می‌دهد.

۴. استفاده از ausearch برای تحلیل لاگ‌ها

دستور ausearch به شما این امکان را می‌دهد که لاگ‌های SELinux را تجزیه و تحلیل کرده و اطلاعات دقیقی در مورد سیاست‌های SELinux، رویدادها و مشکلات دسترسی به دست آورید.

نحوه استفاده:
ausearch -m avc

این دستور تمامی پیام‌های AVC که مربوط به سیاست‌های SELinux هستند را نمایش می‌دهد. برای پیگیری مشکلات دسترسی و شناسایی هرگونه انحراف از سیاست‌های امنیتی، این لاگ‌ها باید به‌طور منظم بررسی شوند.

۵. استفاده از sealert برای دریافت هشدارها

ابزار sealert به شما امکان می‌دهد که پیام‌های خطای SELinux را تجزیه و تحلیل کرده و راه‌حل‌های مربوط به آن‌ها را دریافت کنید. این ابزار بسیار مفید است برای شناسایی مشکلات و اعمال تغییرات مناسب در سیاست‌های SELinux.

نحوه استفاده:

برای مشاهده هشدارهای SELinux و تجزیه و تحلیل آن‌ها:

sealert -a /var/log/audit/audit.log

این دستور تمام پیام‌های خطا و هشدارهای مربوط به SELinux را از لاگ‌ها استخراج کرده و تحلیل می‌کند و به شما پیشنهادهایی برای اصلاح آن‌ها ارائه می‌دهد.

۶. استفاده از audit2allow برای ایجاد قوانین جدید

اگر SELinux دسترسی یک فرآیند را مسدود کند و شما بخواهید یک قانون جدید برای مجاز کردن آن دسترسی ایجاد کنید، می‌توانید از دستور audit2allow استفاده کنید. این دستور به شما کمک می‌کند تا از لاگ‌های AVC، قوانینی برای اجازه دادن به دسترسی‌ها بسازید.

نحوه استفاده:
  1. ابتدا لاگ‌ها را بررسی کنید:
    ausearch -m avc -ts today
    
  2. سپس با استفاده از audit2allow قوانین جدیدی بسازید:
    ausearch -m avc -ts today | audit2allow -M my_custom_policy
    
  3. در نهایت، ماژول جدید را بارگذاری کنید:
    semodule -i my_custom_policy.pp
    

۷. استفاده از seinfo برای بررسی وضعیت SELinux

دستور seinfo به شما این امکان را می‌دهد که اطلاعات دقیقی از سیاست‌ها، نوع‌ها، دسترسی‌ها و دیگر جزئیات SELinux دریافت کنید.

نحوه استفاده:
seinfo

این دستور یک فهرست از اطلاعات کلیدی درباره SELinux را نمایش می‌دهد که شامل نوع‌ها، قواعد و مجوزها می‌شود. با بررسی این اطلاعات می‌توانید از صحت عملکرد SELinux مطمئن شوید.

۸. نظارت بر سیستم با استفاده از ابزارهای مانیتورینگ خارجی

برای پیگیری و نظارت بهتر، ابزارهای مانیتورینگ سیستمی مانند Nagios یا Zabbix می‌توانند وضعیت SELinux را در سیستم نظارت کنند. این ابزارها امکان دریافت هشدارها و گزارش‌های دقیقی از تغییرات در سیاست‌های SELinux را فراهم می‌کنند.

جمع‌بندی

برای اطمینان از عملکرد صحیح سیاست‌های SELinux، باید از ابزارهایی مانند getenforce برای بررسی وضعیت SELinux، auditd برای ثبت لاگ‌ها، و ausearch برای تجزیه و تحلیل پیام‌های AVC استفاده کرد. همچنین ابزارهایی مانند sealert و audit2allow می‌توانند به شما کمک کنند تا به‌طور فعال مشکلات دسترسی را شناسایی و حل کنید. نظارت مستمر بر سیستم و تنظیمات SELinux نقش حیاتی در اطمینان از ایمنی سیستم ایفا می‌کند و به‌طور مؤثر از آن در برابر تهدیدات محافظت می‌کند.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”پاسخ به سوالات فنی کاربران”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”free” title=”پشتیبانی دائمی و در لحظه” subtitle=”توضیحات کامل”]ما در این دوره تمام تلاش خود را کرده‌ایم تا محتوایی جامع و کاربردی ارائه دهیم که شما را برای ورود به دنیای حرفه‌ای آماده کند. اما اگر در طول دوره یا پس از آن با سوالات فنی، چالش‌ها یا حتی مشکلاتی در اجرای مطالب آموزشی مواجه شدید، نگران نباشید!

  1. پرسش‌های شما، بخش مهمی از دوره است:
    هر سوال یا مشکلی که مطرح کنید، با دقت بررسی شده و پاسخ کامل و کاربردی برای آن ارائه می‌شود. علاوه بر این، سوالات و پاسخ‌های شما به دوره اضافه خواهند شد تا برای سایر کاربران نیز مفید باشد.
  2. پشتیبانی دائمی و در لحظه:
    تیم ما همواره آماده پاسخگویی به سوالات شماست. هدف ما این است که شما با خیالی آسوده بتوانید مهارت‌های خود را به کار بگیرید و پروژه‌های واقعی را با اعتماد به نفس کامل انجام دهید.
  3. آپدیت دائمی دوره:
    این دوره به طور مداوم به‌روزرسانی می‌شود تا همگام با نیازهای جدید و سوالات کاربران تکمیل‌تر و بهتر گردد. هر نکته جدید یا مشکل رایج، در نسخه‌های بعدی دوره قرار خواهد گرفت.

حرف آخر

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

📩 اگر سوالی دارید یا به مشکلی برخوردید، همین حالا مطرح کنید!
ما در کوتاه‌ترین زمان ممکن پاسخ شما را ارائه خواهیم داد. 🙌[/cdb_course_lesson][/cdb_course_lessons]

نقد و بررسی ها

نقد و بررسی وجود ندارد.

فقط مشتریانی که وارد سیستم شده اند و این محصول را خریداری کرده اند می توانند نظر بدهند.

سبد خرید

سبد خرید شما خالی است.

ورود به سایت