SELinux چیست؟ چگونه امنیت لینوکس را افزایش میدهد؟ #
لینوکس با امنیت بهبود یافته (SELinux) یک ماژول امنیتی است که یک لایه حفاظتی اضافی به سیستم شما اضافه میکند. این ماژول کنترل دسترسی دقیقی را بین فرآیندها و منابع سیستم اعمال میکند و فقط به اقدامات صریحاً مجاز اجازه میدهد.
SELinux با جلوگیری از دسترسی غیرمجاز و محدود کردن تأثیر سرویسهای آسیبپذیر، به حفظ امنیت قوی و قابل اعتماد سرورهای لینوکس کمک میکند.
این امر آن را به ویژه برای راهاندازی VPS در سطح تولید یا استقرار در مقیاس سازمانی که در آن اجرای دقیق سیاستها بسیار مهم است، مفید میکند.
در این راهنما، شما یاد خواهید گرفت که SELinux چیست، چگونه کار میکند، چگونه آن را پیکربندی کنید و چگونه از آن برای ایمنسازی مؤثر سیستم خود استفاده کنید.
SELinux چیست؟ #
SELinux یک ماژول امنیتی است که در هسته لینوکس ادغام شده است و سیاستهای کنترل دسترسی را برای مدیریت نحوه تعامل فرآیندها با منابع سیستم اعمال میکند.
آژانس امنیت ملی ایالات متحده (NSA) SELinux را توسعه داد و در سال ۲۰۰۰ آن را در جامعه متنباز منتشر کرد.
معماری آن بر اساس چارچوب ماژولهای امنیتی لینوکس (LSM) است که قلابهایی را به هسته اضافه میکند تا تصمیمات امنیتی را اجرا کند.
این تنظیمات به SELinux اجازه میدهد تا درخواستهای دسترسی را در سطح هسته رهگیری و ارزیابی کند، به طوری که هر عملیاتی با سیاستهای امنیتی تعریفشده مطابقت داشته باشد.
SELinux معمولاً در Red Hat Enterprise Linux (RHEL)، CentOS، Fedora و سایر توزیعهای مبتنی بر RHEL استفاده میشود.
به این دلیل است که این سیستمها پشتیبانی کاملی از SELinux ارائه میدهند و در مقایسه با دبیان و مشتقات آن که پشتیبانی از SELinux را به طور پیشفرض محدود یا غیرفعال میکنند، پیکربندی و مدیریت آن را آسانتر میکنند.
SELinux چگونه کار میکند؟ #
SELinux به هر تعامل بین فرآیندها (موضوعات) و منابع سیستم (اشیاء) یک زمینه امنیتی اختصاص میدهد. هر زمینه امنیتی شامل جزئیاتی مانند کاربر، نقش، نوع و، به صورت اختیاری، یک سطح حساسیت است.
وقتی یک فرآیند سعی میکند به منبعی دسترسی پیدا کند، موتور سیاست SELinux زمینههای امنیتی سوژه و شیء را با قوانین سیاست تعریفشده بررسی میکند.
اگر سیاست اجازهی انجام عمل را بدهد، SELinux دسترسی را اعطا میکند. در غیر این صورت، عمل را مسدود میکند و – بسته به حالت – رویداد را برای بررسی در گزارش حسابرسی ثبت میکند.
این مکانیزم تضمین میکند که فرآیندها تنها با حداقل امتیازات مورد نیاز خود، با پیروی از اصل حداقل امتیاز، اجرا شوند. این امر یکپارچگی سیستم را حفظ کرده و خطر آسیب ناشی از برنامههای آسیبدیده یا دارای عملکرد نادرست را کاهش میدهد.
کنترل دسترسی اجباری (MAC) در SELinux چیست؟ #
کنترل دسترسی اجباری (MAC) یک چارچوب امنیتی است که سیاستهای سختگیرانهای را در مورد نحوه تعامل موضوعاتی مانند برنامههای کاربر یا سرویسهای سیستم با اشیاء مانند فایلها، دایرکتوریها و پورتهای شبکه در یک سیستم لینوکس اعمال میکند.
برخلاف کنترل دسترسی اختیاری (DAC)، که در آن کاربران میتوانند مجوزهایی را برای فایلهای متعلق به خود تعیین کنند، سیاستهای MAC به صورت مرکزی تعریف و توسط سیستم اجرا میشوند – به این معنی که حتی کاربران دارای امتیاز بالا نیز نمیتوانند آنها را لغو کنند.
برای مثال، تحت DAC، یک مدیر سیستم ممکن است بهطور تصادفی به یک فرآیند وب سرور دسترسی خواندن و نوشتن به یک فایل پیکربندی حساس را اعطا کند.
با فعال بودن MAC، سیاست SELinux میتواند صراحتاً از نوشتن آن فرآیند در فایلهای سیستمی جلوگیری کند، حتی اگر مجوزهای DAC اجازه این کار را بدهند.
به عبارت دیگر، اگر قوانین DAC و MAC با هم در تضاد باشند، SELinux محدودکنندهترین قانون را اعمال میکند. این کنترل سختگیرانه یکی از دلایل کلیدی است که چرا SELinux چنین لایه دفاعی قدرتمندی را در محیطهای لینوکس فراهم میکند.
سیاستهای SELinux چیستند؟ #
سیاستهای SELinux مجموعهای از قوانین دسترسی هستند که مجوزهای اعطا شده به سوژهها بر روی اشیا را تعریف میکنند. این سیاستها هسته پیادهسازی SELinux از MAC را تشکیل میدهند.
برای مثال، یک سیاست ممکن است به فرآیندی با برچسب httpd_t اجازه دهد فایلهایی با برچسب httpd_sys_content_t را بخواند اما دسترسی به فایلهایی که با برچسب user_home_t مشخص شدهاند را سلب کند .
مدیران سیستم معمولاً این سیاستها را با یک زبان سیاستگذاری خاص مینویسند و سپس آنها را به فرمت دودویی کامپایل میکنند که ماژول هسته SELinux میتواند آن را بارگذاری و اجرا کند.
آنها از ابزارهایی مانند semanage برای مدیریت اجزای سیاست استفاده میکنند و audit2allow ماژولهای سیاست سفارشی را بر اساس گزارشهای حسابرسی تولید میکند.
این ابزارها به تنظیم سیاستهای SELinux برای برآورده کردن الزامات امنیتی خاص محیطهای مختلف کمک میکنند و انعطافپذیری و محافظت قوی از سیستم را تضمین میکنند.
حالتهای مختلف SELinux چیستند؟ #
سه حالت مختلف SELinux وجود دارد: enforcing ، permissive و disabled . هر حالت نحوه اعمال سیاستهای امنیتی در سیستمهای لینوکس را تعیین میکند.
حالت اجباری
در حالت اجرایی، SELinux به طور فعال سیاستهای امنیتی خود را اعمال میکند. این حالت هرگونه عملی را که سیاست را نقض کند، مسدود کرده و یک پیام انکار مربوطه را ثبت میکند. این حالت بالاترین سطح امنیت را فراهم میکند و برای محیطهای عملیاتی توصیه میشود.
برای مثال، اگر یک فرآیند وب سرور سعی کند به یک فایل پیکربندی دسترسی پیدا کند که نباید این کار را انجام دهد، SELinux در حالت اجرایی، دسترسی را رد کرده و رویداد را ثبت میکند – که به جلوگیری از نقضهای امنیتی احتمالی کمک میکند.
حالت مجاز
حالت Permissive به همه اقدامات، حتی آنهایی که سیاستهای SELinux را نقض میکنند، اجازه میدهد، اما هر عملی را که در حالت Enforcing رد میشد، ثبت میکند. این حالت برای عیبیابی و توسعه سیاست مفید است، زیرا بدون دخالت، قابلیت مشاهده را فراهم میکند.
برای مثال، هنگام پیکربندی یک برنامه جدید، یک مدیر سیستم، SELinux را به حالت مجاز تغییر میدهد تا تخلفات مربوط به خطمشیها را شناسایی و تنظیم کند تا راهاندازی نهایی بدون ایجاد مشکلات اجرایی، به راحتی انجام شود.
حالت غیرفعال
حالت غیرفعال به این معنی است که SELinux به طور کامل غیرفعال میشود – هیچ سیاستی اعمال یا ثبت نمیشود. این حالت عموماً توصیه نمیشود زیرا لایه محافظتی اضافه شده SELinux را از بین میبرد.
فعالسازی مجدد SELinux پس از غیرفعال شدن، نیازمند تغییر برچسب سیستم فایل برای اعمال صحیح سیاستها است.
یک مورد استفاده رایج برای این حالت، سیستمی است که برنامههای قدیمی را اجرا میکند که با SELinux سازگار نیستند. در چنین مواردی، یک مدیر سیستم با آگاهی کامل از خطرات امنیتی مرتبط، SELinux را به طور موقت غیرفعال میکند.
چگونه SELinux را پیکربندی کنیم؟ #
برای پیکربندی SELinux، با باز کردن یک برنامه ترمینال شروع کنید – برای اجرای دستورات لینوکس و اعمال تغییرات پیکربندی به آن نیاز دارید . در یک رایانه شخصی، کافیست آن را روشن کرده و برنامه را اجرا کنید.
اگر از یک سرور مجازی خصوصی (VPS) استفاده میکنید، برای اتصال به سرور خود به دسترسی SSH نیاز دارید. برای کاربران، با رفتن به ناحیه کاربری سپس به سرویس ها ، سرور لینوکس SSH خود را پیدا کنید .

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

پس از تنظیم همه چیز، آمادهاید تا حالتهای SELinux را تغییر دهید و ماژولهای سیاست سفارشی را به سیستم خود اضافه کنید.
چگونه حالتهای SELinux را تنظیم کنیم؟ #
بیایید بررسی کنیم که چگونه حالت SELinux فعلی سیستم خود را بررسی کنید، آن را به طور موقت برای جلسه فعلی تغییر دهید یا آن را به طور دائم تنظیم کنید.
حالت فعلی SELinux را بررسی کنید
قبل از ایجاد هرگونه تغییر، حالت فعلی SELinux را بررسی کنید:
این دستور حالت فعلی را برمیگرداند:

تغییر موقت حالت SELinux
شما میتوانید حالت SELinux را برای جلسه فعلی تغییر دهید، اما حالت انتخاب شده پس از راهاندازی مجدد ادامه نخواهد یافت.
- روی حالت مجاز تنظیم کنید:
- روی حالت اعمال فشار تنظیم کنید:
sudo setenforce
مهم! شما نمیتوانید SELinux را با استفاده از دستور setenforce غیرفعال کنید . برای غیرفعال کردن آن، باید فایل پیکربندی را ویرایش کرده و سیستم را مجدداً راهاندازی کنید.
تغییر دائمی حالت SELinux
اگر میخواهید تغییر را دائمی کنید، مراحل زیر را دنبال کنید:
- فایل پیکربندی SELinux را با استفاده از یک ویرایشگر متن مانند vi باز کنید :
sudo vi /etc/selinux/config
- برای ورود به حالت درج، کلید I را فشار دهید . سپس، دستورالعمل SELINUX را با جایگزین کردن مقدار موجود با حالت دلخواه خود تغییر دهید:

- تغییرات خود را ذخیره کنید و با فشردن Esc ، تایپ کردن :wq و زدن Enter از vi خارج شوید .
- برای اعمال حالت جدید، سیستم را مجدداً راهاندازی کنید:
sudo reboot
پس از راهاندازی مجدد، حالت جدید SELinux را با استفاده از همان دستور getenforce تأیید کنید.
💡تغییر برچسب سیستم فایل #
اگر SELinux قبلاً غیرفعال بوده و دوباره آن را فعال میکنید، باید سیستم فایل را برای اختصاص زمینههای امنیتی مناسب، مجدداً برچسبگذاری کنید. برای راهاندازی مجدد کامل در راهاندازی مجدد بعدی، دستور زیر را اجرا کنید:
sudo touch /.autorelabel
sudo reboot
چگونه سیاستهای SELinux را مدیریت کنیم؟ #
شما میتوانید با ایجاد، ویرایش و بارگذاری ماژولهای سیاست، سیاستهای SELinux را مدیریت کنید تا کنترلهای دسترسی را برای برنامهها و سرویسها سفارشیسازی کنید.
سیاستهای SELinux ماژولار هستند، به این معنی که میتوانید قوانین را از طریق ماژولهای سیاست جداگانه و بدون تغییر کل مجموعه سیاستها، اضافه یا اصلاح کنید.
ایجاد یک ماژول سیاست سفارشی
وقتی SELinux عملی را که باید مجاز باشد، رد میکند، میتوانید یک ماژول سیاست سفارشی برای مجاز کردن آن ایجاد کنید:
- گزارش حسابرسی را برای عملیات رد شده بررسی کنید:
sudo ausearch -m avc -ts recent
این تمام پیامهای رد دسترسی به حافظه نهان (AVC) را از گزارش حسابرسی از آخرین بوت نمایش میدهد.

- از audit2allow برای ایجاد یک ماژول بر اساس تمام رد صلاحیتهای اخیر AVC استفاده کنید . my_custom_policy را با نام دلخواه خود جایگزین کنید:
این دستور دو فایل ایجاد میکند:
- my_custom_policy.te – سیاست منبع.
- my_custom_policy.pp – ماژول کامپایل شده.

- ماژول کامپایل شده را در SELinux بارگذاری کنید:
sudo semodule -i my_custom_policy.pp
پس از نصب، قوانین جدید بلافاصله اعمال میشوند و امکان انجام اقدامات قبلاً رد شده را فراهم میکنند.
ماژولهای سیاست را ویرایش و مدیریت کنید
برای سفارشیسازی یا اصلاح بیشتر سیاستها، فایل سیاست منبع را ویرایش کنید:
- فایل my_custom_policy.te را در vi باز کنید و قوانین را تغییر دهید:
وقتی کارتان تمام شد، تغییرات خود را ذخیره کنید.
- تبدیل منبع ویرایش شده به یک ماژول:
- یک فایل .pp از ماژول کامپایل شده ایجاد کنید:
- ماژول بهروزرسانیشده را نصب کنید:
مدیریت ماژولهای سیاست موجود
برای مشاهده یا حذف ماژولهای سیاست SELinux از دستور semodule استفاده کنید .
- لیست تمام ماژولهای نصب شده:

- حذف یک ماژول سیاست خاص:
چه ابزارهایی برای عیبیابی SELinux در دسترس است؟ #
ابزارهای متعددی برای تشخیص و حل مشکلات انکار SELinux در دسترس هستند. دو مورد از رایجترین آنها sealert و audit2allow هستند .
sealert: تجزیه و تحلیل انکارهای SELinux
ابزار sealert ، بخشی از بستهی setroubleshoot ، خلاصههایی از پیامهای انکار SELinux را که برای انسان قابل خواندن باشند، ارائه میدهد. این ابزار گزارشهای موجود در /var/log/audit/audit.log را تفسیر میکند و پیشنهادهایی برای حل مشکلات ارائه میدهد.
ابتدا، اگر setroubleshoot از قبل نصب نشده است، آن را نصب کنید:
سپس، انکارهای اخیر SELinux را تجزیه و تحلیل کنید:

این، گزارش حسابرسی را اسکن میکند و اطلاعات دقیقی در مورد موارد رد درخواست، از جمله راهحلهای ممکن مانند تنظیم چارچوب فایل یا فعال کردن مقادیر بولی خاص SELinux، ارائه میدهد.
audit2allow: ماژولهای سیاست سفارشی ایجاد میکند
وقتی SELinux عملیات مشروع را رد میکند – و تنظیم مقادیر بولی یا تغییر برچسب فایلها کافی نیست – audit2allow میتواند کمک کند. این ابزار پیامهای رد مجوز را از گزارش حسابرسی میخواند و ماژولهای سیاست سفارشی ایجاد میکند که امکان اقدامات خاص را فراهم میکنند.
هشدار! از audit2allow با دقت استفاده کنید . اجازه دادن خودکار به همه اقدامات رد شده میتواند باعث آسیبپذیریهای امنیتی شود. همیشه قبل از نصب، فایل سیاست تولید شده را بررسی کنید.
شما میتوانید با جمعآوری پیامهای رد درخواست AVC با ausearch ، یک ماژول ایجاد کنید و سپس آنها را به audit2allow ارسال کنید تا یک ماژول سیاست سفارشی ایجاد شود، همانطور که در بخش قبل نشان داده شد.
روش دیگر، ترکیب آن با دستور grep برای ایجاد یک سیاست به صورت یکجا است:
این دستور پیامهای رد درخواست را با استفاده از grep فیلتر میکند ، سپس آنها را به audit2allow که ماژول policy را تولید میکند، ارسال میکند. سپس میتوانید ماژول تولید شده را طبق معمول نصب کنید.
نکات عیبیابی اضافی
- بررسی زمینههای فایل – برچسبگذاری نادرست فایل یکی از دلایل رایج رد درخواستها است. برای تنظیم مجدد زمینههای فایل از restorecon استفاده کنید:
- فعال کردن مقادیر بولی لازم – برخی از سرویسها برای عملکرد صحیح به مقادیر بولی خاص SELinux نیاز دارند. به عنوان مثال، برای اینکه به آپاچی اجازه دسترسی به دایرکتوریهای خانگی کاربران داده شود:
sudo setsebool -P httpd_enable_homedirs on
- بررسی دستی لاگهای حسابرسی – برای بررسی مستقیم لاگهای دقیق:
تفاوتهای بین SELinux و AppArmor #
تفاوت اصلی بین این ماژولها این است که SELinux از یک کنترل دسترسی مبتنی بر برچسب استفاده میکند که زمینههای امنیتی را به هر فرآیند و فایل اختصاص میدهد، در حالی که AppArmor به یک مدل مبتنی بر مسیر متکی است که سیاستهایی را برای مسیرهای فایل خاص اعمال میکند.
در اینجا یک جدول مقایسهای برای کمک به شما در درک چگونگی عملکرد این ماژولهای امنیتی لینوکس آورده شده است:
| ویژگی | SELinux | AppArmor |
| مدل کنترل دسترسی | مبتنی بر برچسب (از زمینههای امنیتی استفاده میکند) | مبتنی بر مسیر (از مسیرهای فایل استفاده میکند) |
| اجرای سیاست | به طور پیشفرض رد میشود؛ به مجوزهای صریح نیاز دارد | به طور پیشفرض مجاز است؛ استفاده از قوانین نمایه را محدود میکند |
| دانهبندی | بالا؛ از امنیت چند سطحی (MLS) و امنیت چند دستهای (MCS) پشتیبانی میکند | متوسط؛ از MLS/MCS پشتیبانی نمیکند |
| سهولت استفاده | پیچیده؛ منحنی یادگیری تندتر | پیکربندی و مدیریت آسانتر |
| توزیعهای پیشفرض | RHEL، CentOS، فدورا | اوبونتو، دبیان، سوزه |
| ابزارسازی | مجموعه ابزارهای غنی، مانند audit2allow ، semanage و sestatus | مجموعه ابزارهای سادهتر؛ پروفایلها از طریق فایلهای مسطح مدیریت میشوند |
چه زمانی SELinux را در مقابل AppArmor انتخاب کنیم؟
- برای امنیت دقیق و در سطح سازمانی با کنترل دقیق سیاستها، SELinux را انتخاب کنید – به خصوص در محیطهایی که نیاز به انطباق، جداسازی دقیق یا MLS/MCS دارند، مانند سیستمهای دولتی، نظامی یا سازمانی بزرگ که RHEL یا CentOS را اجرا میکنند.
- اگر میخواهید تنظیمات سادهتر و سریعتری با مدیریت آسانتر پروفایل داشته باشید، AppArmor را انتخاب کنید . این گزینه برای محیطهای توسعه، استقرارهای مبتنی بر ابر یا سیستمهای Ubuntu/Debian که در آنها قابلیت استفاده و انعطافپذیری بیش از اجرای دقیق سیاستها اهمیت دارد، ایدهآل است.
مزایای استفاده از SELinux چیست؟ #
مزایای استفاده از SELinux در زیر فهرست شده است:
- امنیت قویتر سیستم – با پیادهسازی MAC، SELinux تضمین میکند که فرآیندها و کاربران فقط میتوانند به منابعی که صریحاً توسط سیاست مجاز هستند، دسترسی داشته باشند.
- کنترل دسترسی جزئی – SELinux با سیستم مبتنی بر برچسب خود، به مدیران سیستم اجازه میدهد مجوزهای دسترسی جزئی را برای فایلها، فرآیندها و سایر منابع سیستم تعریف کنند.
- بهبود انطباقپذیری – SELinux با اعمال کنترلهای دسترسی سختگیرانه و نگهداری گزارشهای حسابرسی دقیق، به برآورده کردن الزامات انطباقپذیری نظارتی، مانند PCI-DSS و HIPAA، کمک میکند.
- مهار سرویسهای در معرض خطر – حتی اگر یک سرویس در معرض خطر قرار گیرد، SELinux با محدود کردن دسترسی سرویس فقط به آنچه واقعاً نیاز دارد، آسیبهای احتمالی را محدود میکند.
- حسابرسی و ثبت وقایع دقیق – SELinux ثبت وقایع جامعی از تلاشهای دسترسی و نقض سیاستها ارائه میدهد و نظارت، عیبیابی و انجام تحلیلهای قانونی را آسانتر میکند.
- مدیریت انعطافپذیر سیاستها – مدیران میتوانند سیاستهای SELinux را برای برآورده کردن نیازهای خاص سازمانی سفارشیسازی کنند و از طیف گستردهای از الزامات عملیاتی پشتیبانی کنند.
نتیجه گیری #
SELinux از طریق سیاستهای مشخص و یک مدل امنیتی مبتنی بر برچسب که مجوزهای خاصی را به هر فرآیند و منبع بر اساس زمینه اختصاص میدهد، کنترل دسترسی دقیقی را بر روی سیستم لینوکس شما اعمال میکند.
اگرچه پیکربندی کمی پیچیده است، اما مزایای امنیتی آن به مراتب بیشتر از منحنی یادگیری است – به خصوص در محیطهای سازمانی و VPS.
برای تقویت بیشتر امنیت سیستم خود، مقادیر بولی فعال SELinux را با استفاده از getsebool -a بررسی کنید و فقط مواردی را که مربوط به تنظیمات شما هستند فعال کنید.
همچنین میتوانید SELinux را با ابزارهایی مانند firewalld برای محافظت در سطح شبکه جفت کنید یا fail2ban را برای جلوگیری از حملات brute-force SSH پیکربندی کنید.
