SELinux چیست و چگونه کار میکند؟
در این مقاله میخوانید
Security-Enhanced لینوکس یا بهاختصار SELinux معماری امنیتی مبتنیبر لینوکس است که به مدیران سیستم اجازه میدهد تا کنترل بیشتری روی دسترسی به سیستم داشته باشند. آژانس امنیت ملی آمریکا این معماری را بهعنوان مجموعهای از وصلههای امنیتی و با استفاده از ماژولهای امنیتی در کرنل لینوکس خود قرار داده است. این معماری امنیتی علاوهبراینکه میتواند به کاربر لینوکس کمک کند تا سیاستهای مربوط به استفاده از برنامهها و منابع و خدمات سیستم را اِعمال کند، برای تعیین میزان دسترسی کاربر به سیستم استفاده میشود. در این مقاله از بلاگ پارس پک، درباره SELinux بیشتر صحبت و به نکات مهم مرتبط با آن اشاره خواهیم کرد. اگر به این موضوع علاقه دارید، این مطلب ویژه شماست.
اصطلاح Security-Enhanced یا «امنیت تقویتشده» به چه معناست؟
گروههای غیرانتفاعی و داوطلبان و شرکتهای مختلف برای بهبود کدهای هسته لینوکس تلاش میکنند. برای این منظور، SELinux نیز بهعنوان ماژول امنیتی مستقلی که در مقام توسعهدهنده هسته لینوکس کار میکند، در کرنل گنجانده شد. برخی از توزیعهای لینوکس SELinux را بهعنوان فیچر پیشفرض در خود قرار دادهاند؛ بااینحال، در همین توزیعها نیز اگر نمیخواهید از این فیچر استفاده کنید، بهراحتی میتوانید آن را غیرفعال کنید.
SELinux به مدیران سیستم امکان میدهد تا برنامههای روی سیستمهایشان را بهراحتی کنترل کنند. با این فیچر، تمامی فرایندهایی که بهصورت Necessary برچسبگذاری شدهاند، مسدود میشوند. بدینترتیب، خطرهای مرتبط با آسیبپذیری امنیتی در برنامههای کاربر کاهش چشمگیری خواهد یافت.
توجه به این نکته نیز لازم است که اگرچه شما به نرمافزارهایتان اعتماد دارید، محدودکردن مجوزهای آنها کاری منطقی بهنظر میرسد. اگر فردی نرمافزارهای مورداعتماد شما را هک کند، ممکن است بهعنوان روزنه نفوذ به سیستم شما عمل کند و عواقب جبرانناپذیری برایتان بههمراه داشته باشد. همچنین، درصورتیکه نرمافزارهای آلوده به بدافزارها به فرایندها و دادههای سیستم دسترسی کامل داشته باشند، میتوانند موجب آسیب زیاد شوند. SELinux با محدودسازی دسترسی، میتواند خطر آسیب را نیز کاهش درخورتوجهی دهد.
اگر پسورد روت لینوکس سنتاواس 7 خود را فراموش کردهاید، میتوانید از لینک زیر برای بازیابی آن کمک بگیرید.
ویژگیهای SELinux و نکات مهمی که قبل از شروع استفاده از آن باید مدنظر گرفت
ازجمله ویژگیهای مهم SELinux میتوان به اینها اشاره کرد:
- با استفاده از SELinux میتوانید Policy امنیتی سازگار برای هر سیستم مبتنیبر لینوکس فراهم کنید.
- اجرای فرایند و وراثت و مقداردهی اولیه آنها تحتکنترل این سیستم امنیتی است.
- سرویسهای کرنل و اشیاء برچسبها و کنترلهای مخصوص به خود را دارند.
- محرمانهبودن دادهها و یکپارچگی سیستم در SELinux بهطورجداگانه محافظت میشود.
- در این معماری امنیتی، رابطهای Policy بهخوبی تعریف شدهاند.
- از تغییرات Policy پشتیبانی میشود.
- AVC اطلاعات مربوط به تصمیمات دسترسی را در حافظه پنهان ذخیره میکند.
قبل از اینکه استفاده از SELinux را شروع کنیم، بهتر است با برخی از اصطلاحات بیشتر آشنا شویم. MAC (مخفف عبارت Mandatory Access Control) یکی از ویژگیهای برجسته SELinux است. MAC روی DAC (کنترل دسترسی اختیاری) ساخته و درحالحاضر در تمامی توزیعهای لینوکس گنجانده شده است. اجازه دهید با نحوه عملکرد امنیت فایلهای معمولی لینوکس اطلاعاتی بهدست آوریم تا DAC را بهتر درک کنیم. بهطورکلی، سه نوع موجودیت در مدل امنیتی استاندارد داریم:
- کاربر (User)
- گروه (Group)
- متفرقه (Other)
به تمامی این موجودیتها بهاختصار UGO گفته میشود که از بههمچسباندن حروف اول هریک از آنها تشکیل شده است. هریک از این موجودیتها نیز مجوز ترکیبی روی یک فهرست یا فایل دارند. بهعنوان نمونه، یک کاربر Linuxhint در فهرست اصلی خود داریم که مجوزهای خاصی دارد و به گروه خود و سایر گروهها مربوط است و آن را در خروجی دستور زیر میتوانید مشاهده کنید:
آشنایی با دستورات مهم SELinux
کاربر Linuxhint میتواند این دسترسی را تغییر دهد؛ یعنی میتواند دسترسی به این فایل را به گروهها و کاربران دیگر محدود کند یا به کاربرانی که درحالحاضر مجوز دسترسی ندارند، این مجوز را بدهد. همچنین، Linuxhint میتواند مالک فایل را تغییر دهد. واضح است که این عملیات ممکن است مجوز دسترسی به فایلهای ضروری را به کاربرانی ارائه دهد که اصولاً به این دسترسی نیازی ندارند.
حالا این سناریو را در نظر بگیرید که در آن، فرایند لینوکس بهعنوان کاربر اصلی یا کاربری با دسترسی Superuser عمل میکند. اگر هکر بتواند کنترل برنامه در حال اجرا را در دست بگیرد، از آن برای دسترسی به هر منبعی که دردسترس آن کاربر خاص است، میتواند استفاده کند.
SElinux ابزاری است که برای تنظیم دقیق نیازهای کنترل دسترسی مشابه با این سناریو وارد عمل میشود. با استفاده از این معماری امنیتی، دسترسی کاربران یا فرایندها را میتوانید محدود کنید. بهعبارتدیگر، با استفاده از SELinux هر فرایند در دامنه مربوط به خود ایزوله میشود و به آن اجازه میدهد تا با فرایندها و فایلهای خاصی از دامنهها سروکار داشته باشد. این موضوع سبب میشود تا هکر نتواند با نفوذ به فرایند به سیستم دسترسی پیدا کند.
راهاندازی SELinux در CentOS
حالا که با SELinux و مزایایش آشنا شدید، باید بتوانید آن را راهاندازی کنید. درادامه این مقاله از بلاگ پارس پک، میخواهیم نحوه انجام این کار را در توزیع CentOS توضیح دهیم. برای انجام این کار، ابتدا باید سرویسهای SFTP و Apache را نصب کنید. برای این منظور، از دستور زیر برای نصب آپاچی استفاده کنید:
$ ls -l /home/linuxhint/[/cc$ sudo yum install httpd
نصب آپاچی
نصب سرویسهای SFTP و Apache
همانطورکه در تصویر زیر نشان داده شده است، با استفاده از حرف Y مجوز نصب آپاچی را صادر کنید:
تایید مجوز نصب آپاچی
مجوز نصب آپاچی با موفقیت صادر شد
سپس، با استفاده از دستور زیر سرویس httpd را راهاندازی کنید:
$ ls -l /home/linuxhint/[/cc$ sudo yum install httpd[/cc$ service httpd start
راهاندازی سرویس http
بسته دیگری که باید روی CentOS نصب شود، vsftpd است. برای نصب آن، دستورهای زیر را دنبال کنید:
$ sudo yum install vsftpd
نصب بسته vsftpd
بسته vsftpd با موفقیت نصب شد
حالا سرویس vsfpd را فعال کنید:
$ service vsftpd start
فعالسازی سرویس vsftpd
SELinux از پکیجهای زیادی استفاده میکند که برخی از آنها ممکن است بهطورپیشفرض در توزیع لینوکس نصب شده باشند. با استفاده از دستور زیر و کاربر Root، میتوانید ببینید کدامیک از بستههای SELinux روی سیستم CentOS نصب شده است:
$ rpm -qa | grep selinux
نصب بستههای SELinux روی سیستم CentOS
حالا با استفاده از دستور زیر، میتوانید پکیجهایی را نصب کنید که موردنیاز SELinux است؛ اما روی سیستم شما وجود ندارد:
$ sudo yum install policycoreutils selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans
نصب پکیجهای موردنیاز SELinux
برای نصب پکیجهای موردنیاز SELinux عبارت Y را وارد کنید
پکیجهای موردنیاز SELinux در حال نصب هستند
پکیجهای SELinux با موفقیت نصب شدند
پس از اتمام کار، تمامی پکیجهایی که برای اجرای SELinux نیاز دارید، روی سیستم شما نصب شده است. همچنین، سرورهای Apache و SFTP با تنظیمات پیشفرض کار میکنند.
برای دریافت آموزش کامل نصب LAMP در سنت او اس، مقاله زیر را بخوانید.
حالتهای SELinux
SELinux در یکی از سه حالت زیر کار میکند:
۱. Permissive
این حالت شبیه به حالت نیمهفعال است. در این حالت، معماری Security Enhanced سیاستهای خود را اِعمال نخواهد کرد؛ بنابراین، هیچ دسترسیای ممنوع نیست؛ اما هرگونه نقض Policy نیز ثبت خواهد شد. استفاده از این حالت بهخصوص در مواقعی کاربردی است که میخواهید SELinux و عملکرد آن را آزمایش کنید.
۲. Enforcing
در این حالت، Policyهای SELinux با جلوگیری از هرگونه تلاش برای دسترسی غیرمجاز بهواسطه فرایندها و کاربران بهاجرا گذاشته میشود. این حالت عملکردی اضافی هم دارد و آن این است که دسترسیهای ردشده در فایل لاگ مناسب نوشته میشود.
۳. Disabled
در این حالت، SELinux غیرفعال است و قاعدتاً لینوکس بدون امنیت اضافی کار خواهد کرد. برای اینکه بدانید SELinux روی سیستم شما در چه حالتی فعال است، از دستور getenforce بهصورت زیر میتوانید استفاده کنید:
$ getenforce
نمایش حالتهای فعال SELinux
Setstatus خروجی دقیقی مربوط به حالت فعالیت SELinux به شما ارائه خواهد داد:
$ sestatus
خروجی دقیق حالتهای SELinux
حالا فایل پیکربندی SELinux را با استفاده از دستور زیر بررسی کنید:
$ sudo cat /etc/selinux/config
بررسی فایل پیکربندی SELinux
این فایل شامل دو دستورالعمل است که یکی از آنها SELINUX است. SELINUX مود SELinux را مشخص میکند و همانطورکه پیشتر توضیح دادیم، میتواند سه مقدار Permissive و Enforcing و Disabled را بگیرد.
فعالکردن SELinux در CentOS
برای فعالسازی SELinux در توزیع CentOS، ابتدا باید فایل پیکربندی آن را برای انجام تغییرات باز کنید. این کار را با استفاده از دستور زیر انجام دهید:
$ sudo nano /etc/selinux/config
فعالسازی SELinux در سنتاواس
همانطورکه میبینید، SELinux در مود Enforcing قرار گرفته است:
مود Enforcing
توجه به این نکته کاملاً ضروری است که هر فایل سیستمی باید Context مربوط به خود را داشته باشد؛ بنابراین قبل از اجرای SELinux در سیستم خود، باید مود آن را روی Permissive قرار دهید. فایلهای دارای لیبلهای نادرست باعث میشوند که فرایندها بهدرستی کار نکنند و با شکست مواجه شوند؛ درنتیجه، فرایند بوت ممکن است یا با شکست مواجه شود یا با خطاهای زیادی شروع به کار کند:
SELINUX=permissive
قرارگیری در مود Permissive قبل از اجرای SELinux
حالا CentOS را مجدداً راهاندازی کنید:
sudo reboot
بدینترتیب در طول فرایند راهاندازی مجدد، تمامی فایلهایی که روی سرور قرار دارند، با استفاده از Context مربوط به SELinux مجدداً لیبلگذاری میشوند. همچنین درصورت دسترسینداشتن به SELinux یا ایجاد خطا، این موارد به اطلاع شما رسانده خواهد شد:
لیبلگذاری فایلهای روی سرور با استفاده از Context مربوط به SELinux
حالا باید بهدنبال رشته SELinux is preventing باشید:
$ sudo cat /var/log/messages | grep "SELinux is preventing"
اگر خطایی نشان داده نشد، به مرحله بعدی بروید:
درصورت نداشتن خطا به مرحله بعد بروید
$ sudo cat /var/log/messages | grep "SELinux"
فعالسازی SELinux
آموزش تصویری فعالسازی SELinux
در گام بعدی، باید حالت SELinux را به Enforcing تغییر دهید. برای این منظور، فایل پیکربندی را باز کنید:
$ sudo nano /etc/sysconfig/selinux
تغییر حالت به Enforcing
اعمال تنظیمات تغییر حالت
مقدار SELinux را به Enforcing تغییر دهید و با استفاده از کلیدهای ترکیبی Ctrl+O، تغییرات را ذخیره کنید:
تغییر حالت به Enforcing با موفقیت انجام شد
حالا مجدداً CentOS را راهاندازی کنید:
$ sudo reboot
راهاندازی مجدد SELinux
با استفاده از دستور sestatus، میتوانید وضعیت SELinux را بررسی کنید:
$ sestatus
نمایش وضعیت SELinux
همچنین، مود SELinux را میتوانید بهصورت زیر بررسی کنید:
نمایش مود SELinux
برای تغییر مود SELinux، میتوانید از دستور setenforce استفاده کنید:
$ sudo setenforce permissive
$ sestatus
تغییر مود در SELinux
بهعنوان نکته آخر، برای برگرداندن مود SELinux به Enforcing، از دستور setenforce بهصورت زیر استفاده کنید:
$ sudo setenforce enforcing
برگرداندن مود SELinux به Enforcing
جمعبندی
موضوع امنیت یکی از موضوعهای مهم در سیستمهای کامپیوتری است. در سیستمعامل لینوکس نیز، این امر اهمیت بسیار زیادی دارد. یکی از راهکاری مناسب برای توسعه امنیت در این سیستمعامل استفاده از SELinux است. SELinux نوعی معماری امنیتی است که برای انواع توزیعهای لینوکس استفاده میشود. باتوجهبه اهمیت این موضوع، در این مقاله از آموزش لینوکس، SELinux را معرفی کردیم و نحوه فعالسازی آن را روی توزیع CentOS بهصورت کامل و گامبهگام توضیح دادیم.
MySQL روی CentOS 8 بهآسانی نصب میشود؛ اما بدون ایمنسازی و پیکربندی اولیه نمیتوان از آن استفاده کرد. برای آموزش نصب و تست MySQL مقاله زیر را بخوانید.
سؤالات متداول
۱. SELinux چیست؟
SELinux معماریای امنیتی مبتنیبر لینوکس است که برای ارتقای امنیت توزیعهای سیستمعامل لینوکس استفاده میشود.
۲. توسعهدهنده SELinux چه سازمانی است؟
SELinux را برای اولینبار آژانس امنیت ملی ایالات متحده آمریکا (NSA) برای هسته لینوکس توسعه داد.
۳. آیا عملکرد SElinux مانند فایروال است؟
SELinux میتواند دسترسی به برنامههای سیستم کامپیوتری را محدود کند. از این جنبه میتوان عملکرد آن را مانند فایروال برای سیستمعامل لینوکس در نظر گرفت.
۴. آیا با وجود نصب و فعالسازی SELinux، میتوان آن را غیرفعال کرد؟
بله، اگرچه غیرفعالکردن این سیستم امنیتی پیشنهاد نمیشود، با تغییر مود SELinux به Disabled میتوان عملکرد آن را غیرفعال کرد.
۵. در چه مواقعی استفاده از SELinux توصیه میشود؟
باتوجهبه عملکرد امنیتی ویژه SELinux، همواره توصیه میشود تا آن را روی سرور فعال و از اِشکالات امنیتی رایج جلوگیری کنید. بااینحال، درصورتیکه بخواهید آن را بهصورت موقت یا دائم غیرفعال کنید، با تغییر مود آن به Disabled، میتوانید این کار را انجام دهید.