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

Avatar
نویسنده: شکوهی
دوشنبه 29 شهریور 1395
مطالعه: ۱۱ دقیقه ۰ نظر ۱۹۴۳ بازدید

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

اصطلاح Security-Enhanced یا «امنیت تقویت‌شده» به چه معناست؟

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

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

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

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

آموزش تغییر پسورد روت در CentOs 7

ویژگی‌های SELinux و نکات مهمی که قبل از شروع استفاده از آن باید مدنظر گرفت

ازجمله ویژگی‌های مهم‌ SELinux می‌توان به این‌ها اشاره کرد:

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

قبل از اینکه استفاده از SELinux را شروع کنیم، بهتر است با برخی از اصطلاحات بیشتر آشنا شویم. MAC (مخفف عبارت Mandatory Access Control) یکی از ویژگی‌های برجسته SELinux است. MAC روی DAC (کنترل دسترسی اختیاری) ساخته و در‌حال‌حاضر در تمامی توزیع‌های لینوکس گنجانده شده است. اجازه دهید با نحوه عملکرد امنیت فایل‌های معمولی لینوکس اطلاعاتی به‌دست آوریم تا DAC را بهتر درک کنیم. به‌طور‌کلی، سه نوع موجودیت در مدل امنیتی استاندارد داریم:

  • کاربر (User)
  • گروه (Group)
  • متفرقه (Other)

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

ویژگی های selinux چیست؟

آشنایی با دستورات مهم SELinux

کاربر Linuxhint می‌تواند این دسترسی را تغییر دهد؛ یعنی می‌تواند دسترسی به این فایل را به گروه‌ها و کاربران دیگر محدود کند یا به کاربرانی که در‌حال‌حاضر مجوز دسترسی ندارند، این مجوز را بدهد. همچنین، Linuxhint می‌تواند مالک فایل را تغییر دهد. واضح است که این عملیات ممکن است مجوز دسترسی به فایل‌های ضروری را به کاربرانی ارائه دهد که اصولاً به این دسترسی نیازی ندارند.

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

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

راه‌اندازی SELinux در CentOS

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

$ ls -l /home/linuxhint/[/cc$ sudo yum install httpd
نصب selinux در سنت او اس

نصب آپاچی

آموزش راه اندازی selinux

نصب سرویس‌های SFTP و Apache

همان‌طور‌که در تصویر زیر نشان داده شده است، با استفاده از حرف Y مجوز نصب آپاچی را صادر کنید:

آموزش تصویری نصب selinux در cenos

تایید مجوز نصب آپاچی

فعال سازی selinux

مجوز نصب آپاچی با موفقیت صادر شد

سپس، با استفاده از دستور زیر سرویس httpd را راه‌اندازی کنید:

$ ls -l /home/linuxhint/[/cc$ sudo yum install httpd[/cc$ service httpd start
افزایش امنیت لینوکس با selinux

راه‌اندازی سرویس http

بسته دیگری که باید روی CentOS نصب شود، vsftpd است. برای نصب آن، دستورهای زیر را دنبال کنید:

$ sudo yum install vsftpd
آموزش کامل selinux

نصب بسته vsftpd 

چرا امنیت لینوکس خیلی بالاست؟

بسته vsftpd با موفقیت نصب شد

حالا سرویس vsfpd را فعال کنید:

$ service vsftpd start
امن ترین سیستم عامل لینوکس

فعال‌سازی سرویس vsftpd 

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

$ rpm -qa | grep selinux
selinux چه کاربردی دارد؟

نصب بسته‌های SELinux روی سیستم CentOS 

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

$ sudo yum install policycoreutils selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans
چرا selinux امنیت لینوکس را افزایش می دهد؟

نصب پکیج‌های موردنیاز SELinux

افزایش امنیت سنت او اس با فعال سازی selinux

برای نصب پکیج‌های موردنیاز SELinux عبارت Y را وارد کنید

چگونه selinux را در لینوکس فعال کنیم؟

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

نحوه کار با selinux چطور است؟

پکیج‌های SELinux با موفقیت نصب شدند

پس از اتمام کار، تمامی پکیج‌هایی که برای اجرای SELinux نیاز دارید، روی سیستم شما نصب شده است. همچنین، سرورهای Apache و SFTP با تنظیمات پیش‌فرض کار می‌کنند.

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

نصب Apache ،MariaDB و پردازشگر کد PHP در CentOS 8

حالت‌های SELinux

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

۱. Permissive

این حالت شبیه به حالت نیمه‌فعال است. در این حالت، معماری Security Enhanced سیاست‌های خود را اِعمال نخواهد کرد؛ بنابراین، هیچ دسترسی‌ای ممنوع نیست؛ اما هر‌گونه نقض Policy نیز ثبت خواهد شد. استفاده از این حالت به‌خصوص در مواقعی کاربردی است که می‌خواهید SELinux و عملکرد آن را آزمایش کنید.

۲. Enforcing

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

۳. Disabled

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

$ getenforce
حالت های selinux چیست؟

نمایش حالت‌های فعال SELinux

Setstatus خروجی دقیقی مربوط به حالت فعالیت SELinux به شما ارائه خواهد داد:

$ sestatus
selinux در چند حالت کار می کند؟

خروجی دقیق حالت‌های SELinux 

حالا فایل پیکربندی SELinux را با استفاده از دستور زیر بررسی کنید:

$ sudo cat /etc/selinux/config
پیکربندی selinux چطور است؟

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

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

خرید سرور لینوکس

فعال‌کردن SELinux در CentOS

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

$ sudo nano /etc/selinux/config
آموزش مرحله به مرحله فعال سازی selinux

فعال‌سازی SELinux در سنت‌او‌اس

همان‌طورکه می‌بینید، SELinux در مود Enforcing قرار گرفته است:

آموزش فعال کردن selinux در centos

مود Enforcing

توجه به این نکته کاملاً ضروری است که هر فایل سیستمی باید Context مربوط به خود را داشته باشد؛ بنابراین قبل از اجرای SELinux در سیستم خود، باید مود آن را روی Permissive قرار دهید. فایل‌های دارای لیبل‌های نادرست باعث می‌شوند که فرایندها به‌درستی کار نکنند و با شکست مواجه شوند؛ در‌نتیجه، فرایند بوت ممکن است یا با شکست مواجه شود یا با خطاهای زیادی شروع به کار کند:

SELINUX=permissive
چطور selinux را در لینوکس فعال کنیم؟

قرارگیری در مود Permissive قبل از اجرای SELinux 

حالا CentOS را مجدداً راه‌اندازی کنید:

sudo reboot

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

افزایش امنتی سنت او اس با فعال سازی selinux

لیبل‌گذاری فایل‌های روی سرور با استفاده از Context مربوط به SELinux 

حالا باید به‌دنبال رشته SELinux is preventing باشید:

$ sudo cat /var/log/messages | grep "SELinux is preventing"

اگر خطایی نشان داده نشد، به مرحله بعدی بروید:

نصب و فعال سازی selinux

درصورت نداشتن خطا به مرحله بعد بروید

$ sudo cat /var/log/messages | grep "SELinux"
کار با selinux چطور است؟

فعال‌سازی SELinux

آیا selinux امنیت را افزایش می دهد؟

آموزش تصویری فعال‌سازی SELinux

در گام بعدی، باید حالت SELinux را به Enforcing تغییر دهید. برای این منظور، فایل پیکربندی را باز کنید:

$ sudo nano /etc/sysconfig/selinux
آیا selinux باعث محرمانگی داده ها می شود؟

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

selinux چه ویژگی هایی دارد؟

اعمال تنظیمات تغییر حالت

مقدار SELinux را به Enforcing تغییر دهید و با استفاده از کلیدهای ترکیبی Ctrl+O، تغییرات را ذخیره کنید:

چگونه از selinux استفاده کنیم؟

تغییر حالت به Enforcing  با موفقیت انجام شد

حالا مجدداً CentOS را راه‌اندازی کنید:

$ sudo reboot
پیکربندی selinux در centos چطور است؟

راه‌اندازی مجدد SELinux 

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

$ sestatus
برای استفاده از selinux به چه نکاتی توجه کنیم؟

نمایش وضعیت SELinux 

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

تغییر مود در selinux چطور است؟

نمایش مود SELinux 

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

$ sudo setenforce permissive
$ sestatus
آموزش فعال سازی selinux در تمام توزیع های لینوکس

تغییر مود در SELinux 

به‌عنوان نکته آخر، برای برگرداندن مود SELinux به Enforcing، از دستور setenforce به‌صورت زیر استفاده کنید:

$ sudo setenforce enforcing
آموزش کامل و تصویری کار با selinux

برگرداندن مود SELinux به Enforcing

جمع‌بندی

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

MySQL روی CentOS 8 به‌آسانی نصب می‌شود؛ اما بدون ایمن‌سازی و پیکربندی اولیه نمی‌توان از آن استفاده کرد. برای آموزش نصب و تست MySQL مقاله زیر را بخوانید.

آموزش نصب MySQL روی CentOS 8

سؤالات متداول

۱. SELinux چیست؟

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

۲. توسعه‌دهنده SELinux چه سازمانی است؟

SELinux را برای اولین‌بار آژانس امنیت ملی ایالات متحده آمریکا (NSA) برای هسته لینوکس توسعه داد.

۳. آیا عملکرد SElinux مانند فایروال است؟

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

۴. آیا با وجود نصب و فعال‌سازی SELinux، می‌توان آن را غیرفعال کرد؟

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

۵. در چه مواقعی استفاده از SELinux توصیه می‌شود؟

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

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

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


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.

با خدمات ابری پارس پک آشنا شوید

اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم