طراحی سایت و برنامه نویسی

آموزش طراحی سایت و برنامه نویسی

طراحی سایت و برنامه نویسی

آموزش طراحی سایت و برنامه نویسی

آموزش SELinux در CentOS 7 – بخش اول: مفاهیم پایه

SELinux یا «لینوکس با بهبودهای امنیتی» (Security Enhanced Linux) سازوکار کنترل دسترسی پیشرفته‌ای است که در اغلب توزیع‌های مدرن لینوکس تعبیه شده است. این ساز و کار در ابتدا از سوی سازمان امنیت ملی ایالات‌متحده برای حفاظت از سیستم‌های رایانه‌ای در برابر نفوذ بدافزارها و دستکاری داده‌ها طراحی شد. در طی زمان، SELinux در سطح عمومی نیز منتشر شده است و توزیع‌های مختلف لینوکس آن را در کد خود استفاده می‌کنند.

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

دقت کنید که دستورها، بسته‌ها و فایل‌های نمایش یافته در این راهنما روی توزیع CentOS 7 تست شده‌اند. این مفاهیم روی توزیع‌های دیگر نیز به همین ترتیب هستند. در این راهنما دستورها را با حساب کاربری root اجرا می‌کنیم؛ مگر این که خلاف آن ذکر شده باشد. اگر به حساب کاربری root روی سیستم خود دسترسی ندارید و از حساب دیگری با دسترسی‌های sudo استفاده می‌کنید، باید در ابتدای دستورها از کلیدواژه sudo استفاده کنید.

چرا باید از SELinux استفاده کنیم؟

پیش از آغاز توضیحات، ابتدا می‌بایست چند مفهوم را درک کنیم. SELinux مفهومی به نام MAC یعنی «کنترل دسترسی اجباری» (Mandatory Access Control) را پیاده‌سازی کرده است. این مفهوم بر مبنای آن چه از قبل در هر توزیع لینوکس دیگر وجود دارد، یعنی DAC، «کنترل دسترسی اختیاری» (Mandatory Access Control) پیاده‌سازی شده است. برای درک DAC ابتدا باید با شیوه عملکرد امنیت فایل در لینوکس آشنا باشیم.

در مدل کلاسیک امنیت ما سه نهاد داریم: کاربر (User)، گروه (Group) و دیگران (Other) که به ترتیب با حروف u، g و o نمایش می‌یابند. این سه نهاد می‌توانند ترکیبی از مجوزهای خواندن، نوشتن و اجرا (به ترتیب با حروف اختصاری r، w و x) را روی یک فایل یا دایرکتوری داشته باشند. اگر کاربر به نام jo فایلی را در دایرکتوری home ایجاد کند، دسترسی خواندن/نوشتن را به آن فایل دارد و از این رو جزو گروه jo است. نهاد «Other» احتمالاً به این فایل دسترسی نخواهد داشت. در قطعه کد زیر می‌توانیم محتوای فرضی دایرکتوری home را برای کاربر jo ببینیم. لازم نیست این کاربر را ایجاد کنید، چون ما تعداد زیادی از کاربران را در ادامه این راهنما ایجاد خواهیم کرد.

دستوری را مانند زیر اجرا کنید:

دستور فوق خروجی مانند زیر خواهد داشت:

اینک jo می‌تواند این دسترسی را تغییر دهید. jo می‌تواند دسترسی به این فایل را به کاربران و گروه‌های دیگر اعطا کرده (یا محدود سازد) و یا مالک فایل را تغییر دهد. این اقدامات می‌توانند باعث شوند که فایل در معرض دستکاری حساب‌هایی قرار گیرد که نباید به آن دسترسی داشته باشند. Jo می‌تواند دسترسی فایل را محدود سازد تا امنیت بیشتری ایجاد شود؛ اما این کار اختیاری است. هیچ روشی برای مدیر سیستم وجود ندارد که این رویه را برای همه فایل‌های روی سیستم الزامی کند.

مثال دیگری را در نظر بگیرید: وقتی یک پردازش لینوکس اجرا می‌شود، ممکن است به صورت کاربر root یا حساب دیگری با دسترسی‌های superuser اجرا شود. این بدان معنی است که اگر یک هکر کلاه‌سیاه (بدکار) کنترل اپلیکیشن را به دست گیرد، می‌تواند از این اپلیکیشن برای دسترسی به همه منابعی که حساب کاربری دسترسی دارد استفاده کند. از آنجا که پردازش‌ها با دسترسی حساب root فعالیت می‌کنند، یعنی می‌توان به همه چیز روی سیستم لینوکس دسترسی داشت.

مثلاً حالتی را تصور کنید که می‌خواهید کاربران را از اجرای شل اسکریپت در دایرکتوری home باز دارید. این وضعیت در مواردی که توسعه‌دهندگان روی یک سیستم production مشغول کار هستند، پیش می‌آید. شما ممکن است بخواهید آن‌ها بتوانند فایل‌های log را ببینند؛ اما نمی‌خواهید از دستورهای su یا sudo استفاده کنند و همچنین نمی‌بایست هیچ اسکریپتی را از دایرکتوری‌های home خود اجرا کنند. این کار به چه روشی میسر است؟

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

راه‌اندازی یک سیستم تست

برای این که مفاهیم مطرح شده را بهتر درک کنیم، باید یک سرور تست بسازیم که هم به عنوان یک وب‌سرور و هم سرور SFTP عمل می‌کند. کار خود را با نصب CentOS 7 به صورت بسته کمینه (minimal package) آغاز می‌کنیم و سپس آپاچی و vsftp را روی سرور نصب می‌کنیم. با این وجود، هیچ یک از این اپلیکیشن‌ها را پیکربندی نمی‌کنیم.

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

نصب سرویس‌های آپاچی و SFTP

ابتدا به صورت کاربر root وارد سرور می‌شویم و دستور زیر را برای نصب Apache اجرا می‌کنیم:

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

با زدن دکمه y می‌توانیم daemon را برای Apache نصب کنیم:

Daemon را به صورت دستی آغاز می‌کنیم:

با اجرای دستور service httpd status می‌بینیم که سرویس در حال اجرا است:

سپس اقدام به نصب vsftp می‌کنیم:

خروجی دستور فوق چیزی شبیه زیر است:

با زدن دکمه y بسته نصب می‌شود.

سپس از دستور service vsftpd start برای آغاز daemon مربوط به vsftpd استفاده می‌کنیم. خروجی دستور فوق چیزی شبیه زیر خواهد بود:

نصب بسته‌های SELinux

چند بسته از سوی SELinux مورد استفاده قرار می‌گیرند. برخی از آن‌ها به طور پیش‌فرض نصب می‌شوند. در ادامه فهرستی از توزیع‌های مبتنی بر Red Hat را می‌بینید:

  • policycoreutils: ابزارهایی برای مدیریت SELinux ارائه می‌کند.
  • policycoreutils-python: ابزارهایی برای مدیریت SELinux ارائه می‌کند.
  • selinux-policy: سیاست ارجاع SELinux را ارائه می‌کند.
  • selinux-policy-targeted: سیاست هدف‌گیری SELinux را ارائه می‌کند.
  • libselinux-utils: ابزارهایی برای مدیریت SELinux ارائه می‌کند.
  • setroubleshoot-server: ابزارهایی برای توصیف پیام‌های گزارش حسابرسی ارائه می‌کند.
  • setools: ابزارهایی برای نظارت بر گزارش حسابرسی، کوئری زدن به سیاست‌ها و مدیریت چارچوب فایل ارائه می‌کند.
  • setools-console: ابزارهایی برای نظارت بر گزارش حسابرسی، کوئری زدن به سیاست‌ها و مدیریت چارچوب فایل ارائه می‌کند.
  • mcstrans: ابزارهای برای ترجمه سطوح مختلف قالب از آسان به دشوار ارائه می‌کند.

برخی از این موارد از قبل روی سیستم نصب شده‌اند. برای بررسی این که کدام بسته‌های SELinux روی سیستم CentOS 7 نصب هستند، می‌توانید چند دستور مانند دستور زیر اجرا کنید. پس از عبارت grep باید کلمات جستجوی مختلفی را با حساب کاربری root وارد کنید:

خروجی دستور فوق چیزی شبیه زیر است:

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

اکنون سیستمی داریم که همه بسته‌های SELinux روی آن بارگذاری شده است. همچنین سرورهای Aapche و SFTP را نیز با پیکربندی‌های پیش‌فرض در حال اجرا داریم. ضمناً چهار حساب کاربری معمولی برای تست کردن علاوه بر حساب کاربری root ایجاد کرده‌ایم.

حالت‌های SELinux

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

  • Enforcing
  • Permissive
  • Disabled

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

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

بررسی حالت‌ها و وضعیت‌های SELinux

می‌توان با اجرای دستور getenforce به بررسی حالت کنونی SELinux پرداخت:

SELinux در حال حاضر باید غیر فعال باشد و از این رو خروجی مانند زیر خواهد بود:

همچنین می‌توان دستور sestatus را اجرا کرد:

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

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

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

خروجی دستور فوق به صورت زیر خواهد بود:

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

دایرکتیو SELINUXTYPE سیاستی که استفاده خواهد شد را تعیین می‌کند. مقدار پیش‌فرض به صورت targeted است. SELinux در سیاست targeted، امکان سفارشی‌سازی و تنظیم دقیق مجوزهای کنترل دسترسی را ارائه می‌کند. مقدار ممکن دیگر «MLS» یا همان «امنیت چند سطحی» (multilevel security) است که حالت پیشرفته‌ای برای حفاظت محسوب می‌شود. ضمناً در نوع MLS باید بسته‌های دیگری را نیز نصب کرد.

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

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

در گام نخست باید فایل etc/selinux/config/ را ویرایش کنیم تا دایرکتیو SELinux به حالت Permissive برود.

محتوای فایل را به صورت زیر تنظیم کنید:

تنظیم SELinux در حالت Permissive در ابتدا امری ضروری است، زیرا پیش از آن که از حالت enforced در SELinux استفاده کنیم، هر فایل در سیستم باید برچسب زمینه‌ای خاص خود را داشته باشد. در صورتی که همه فایل‌ها دارای برچسب مناسب نباشند، ممکن است پردازش‌هایی که در دامنه‌های محدودشده اجرا می‌شوند، از کار بیفتند، زیرا نمی‌توانند به فایل‌ها در چارچوب (context) صحیح دسترسی یابند. این مسئله می‌تواند منجر به مشکلات boot شود و سیستم نتواند آغاز به کار بکند یا با خطاهایی همراه باشد. دو مفهوم چارچوب (context) و دامنه را در ادامه توضیح خواهیم داد.

اینک دستور ریبوت را اجرا می‌کنیم:

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

بار دیگر به عنوان کاربر root وارد سیستم شوید. سپس در محتوای فایل var/log/messages/ به دنبال رشته «SELinux is preventing» بگردید.

اگر خطایی گزارش نشده باشد، می‌توانیم با امنیت به مرحله بعد برویم. با این وجود، جستجو در فایل /var/log/messages به دنبال عبارت «SELinux» نیز ایده خوبی محسوب می‌شود. ما در سیستم خود دستور زیر را اجرا کردیم:

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

این نوع خطاها ایرادی ندارند.

در مرحله دوم، باید فایل پیکربندی را ویرایش کنیم تا دایرکتیو SELINUX را در فایل /etc/sysconfig/selinux از حالت permissive به enforcing تغییر دهیم:

سپس سرور را بار دیگر ریبوت می‌کنیم:

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

فایل var/log/messages/ را بررسی کنید:

باید خطایی وجود نداشته باشد. خروجی چیزی شبیه زیر خواهد بود:

بررسی حالت‌ها و وضعیت‌های SELinux (بار دیگر)

می‌توانید دستور getenforce را برای بررسی حالت کنونی SELinux اجرا کنید:

اگر سیستم در حالت enforcing باشد، خروجی به صورت زیر خواهد بود:

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

می‌توانیم با اجرای دستور sestatus تصویر بهتری از سیستم داشته باشیم:

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

وقتی SELinux غیر فعال باشد، خروجی به صورت زیر است:

همچنین می‌توان با استفاده از دستور setenforce به طور موقت بین حالت‌های enforcing و permissive سوئیچ کرد (دقت کنید که وقتی SELinux غیر فعال باشد، نمی‌توانیم دستور setenforce را اجرا کنیم.

ابتدا حالت SELinux را در سیستم CentOS 7 از حالت enforcing به permissive تغییر می‌دهیم:

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

با دستور زیر به حالت enforcing بازگردید:

سیاست SELinux

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

برخی اصطلاحات پایه

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

کاربران (Users)

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

در لینوکس این کاربر است که یک پردازش را اجرا می‌کند. این وضعیت می‌تواند به این صورت باشد که کاربری به نام jo یک سند را در ویرایشگر vi باز کند یا یک حسابِ سرویس اقدام به اجرای daemon مربوط به httpd بکند. در دنیای SELinux هر پردازش (یک daemon یا برنامه اجرایی) به نام «فاعل» (subject) نامیده می‌شود.

نقش‌ها (Roles)

نقش مانند دروازه‌ای است که بین کاربر و پردازش قرار می‌گیرد. نقش تعریف می‌کند که کدام کاربران می‌توانند به یک پردازش دسترسی داشته باشند. نقش‌ها مانند گروه‌ها نیستند؛ بلکه شبیه فیلتر هستند. یعنی یک کاربر می‌تواند در هر زمان یک نقش را بر عهده بگیرد و یا نقشی به وی اعطا شود. تعریف نقش در سیاست SELinux مشخص می‌کند که کدام کاربران به آن نقش دسترسی داشته باشند. همچنین مشخص می‌سازد که کدام دامنه‌های پردازش به خود نقش دسترسی دارند. نقش‌ها به این دلیل تعریف شده‌اند که SELinux مفهومی به نام «کنترل دسترسی مبتنی بر نقش» (Role Based Access Control) یا RBAC را پیاده‌سازی کند.

فاعل‌ها و اشیا

یک فاعل (subject) پردازشی است که می‌تواند به طور بالقوه روی یک شیء یا مفعول (object) تأثیر بگذارد.

منظور از شیء در SELinux هر چیزی است که می‌توان روی آن کاری انجام داد. این چیز می‌تواند یک فایل، دایرکتوری، یک پورت یا سوکت tcp، کرسر، یا شاید یک سرور X باشد. این اقدام‌ها که فاعل می‌تواند روی یک شیء انجام دهد، مجوزهای فاعل (permissions) نام دارند.

دامنه‌ها برای فاعل‌ها

دامنه (domain) چارچوبی است که یک فاعل SELinux درون آن می‌تواند اجرا شود. این چارچوب (context) مانند یک پوششی پیرامون فاعل را احاطه کرده است. این چارچوب است که تعیین می‌کند هر پردازش چه کار می‌تواند انجام بدهد یا ندهد. برای نمونه، دامنه تعریف می‌کند که چه فایل‌ها، دایرکتوری‌ها، لینک‌ها، دستگاه‌ها یا پورت‌هایی در دسترس فاعل هستند.

انواع مختلف برای اشیا

یک نوع (type) چارچوبی برای زمینه فایل است که مقصود فایل را تعیین می‌کند. برای مثال، چارچوب یک فایل می‌تواند تعیین کند که یک صفحه وب است یا این که به دایرکتوری /etc تعلق دارد و یا این که مالک فایل یک کاربر SELinux خاص است. چارچوب فایل، به زبان SELinux، نوعِ آن خوانده می‌شود.

سیاست SELinux چیست؟

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

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

نکته‌ای که در خصوص اصطلاحات مطرح شده باید اشاره بکنیم این است که یک پردازش که در دامنه خاصی اجرا می‌شود، می‌تواند تنها عملیات خاصی را روی انواع خاصی از شیءها انجام دهد که این وضعیت Type Enforcement یا به اختصار TE نامیده می‌شود.

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

جایگزین حالت فوق مدل «انکار به طور پیش‌فرض» است که در آن هر پردازشی انکار می‌شود؛ مگر این که از سوی سیاست خاصی تأیید شده باشد. چنین حالتی بسیار امن خواهد بود؛ اما همزمان به این معنی است که توسعه‌دهنده‌ها باید همه مجوزهایی احتمالی که هر پردازشی ممکن است زمانی روی هر شیء احتمالی ممکن است نیاز داشته باشد را از قبل پیش‌بینی کرده باشند. رفتار پیش‌فرض SELinux تنها به پردازش‌های خاصی مربوط است.

رفتار سیاست SELinux

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

زمانی که یک سیستم با SELinux فعال آغاز به کار می‌کند، این سیاست در حافظه بارگذاری می‌شود. سیاست SELinux در قالب ماژولار است و بسیار شبیه ماژول‌های کرنل است که در زمان بوت شدن بارگذاری می‌شوند. از طرفی نیز همانند ماژول‌های کرنل می‌توانند به صورت دینامیک در زمان اجرا به حافظه اضافه یا حذف شوند. انباره سیاست (policy store) که از سوی SELinux استفاده می‌شود، ماژول‌هایی که بارگذاری شده‌اند را ردگیری می‌کند. دستور sestatus نام انبار سیاست را نشان می‌دهد. دستور semodule –l ماژول‌های سیاست SELinux را که در حال حاضر در حافظه بارگذاری شده‌اند نشان می‌دهد.

برای درک عملی، دستور semodule را اجرا می‌کنیم:

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

دستور semodule می‌تواند در تعدادی از وظایف دیگر مانند نصب، حذف، بارگذاری مجدد، ارتقا، فعال‌سازی و غیر فعال‌سازی ماژول‌های سیاست SELinux مورد استفاده قرار گیرد.

احتمالاً اکنون علاقه‌مند هستید که بدانید فایل‌های ماژول در کجا قرار می‌گیرند. اغلب توزیع‌های مدرن شامل نسخه‌های باینری ماژول‌ها به عنوان بخشی از بسته‌های SELinux هستند. فایل سیاست دارای پسوند.pp است. در CentOS 7 می‌توانیم دستور زیر را اجرا کنیم:

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

با این وجود، فایل‌های pp. از سوی انسان قابل خواندن نیستند.

طرز کار ماژول سازی SELinux چنین است که وقتی سیستم بوت می‌شود، ماژول سیاست در آنچه که به نام سیاست فعال (active policy) می‌نامیم ترکیب می‌شود. سپس این سیاست در حافظه بارگذاری می‌شود. نسخه باینری ترکیب شده از سیاست بارگذاری شده را می‌توانید در دایرکتوری etc/selinux/targeted/policy/ مشاهده کنید:

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

تغییر تنظیمات بولی SELinux

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

برای مشاهده طرز کار آن باید دستور semanage boolean –l را اجرا کنید:

این دستور سوئیچ‌های مختلفی که می‌توان روش یا خاموش کرد را نشان می‌دهد و همچنین کار هر یک و وضعیت کنونی‌شان نمایش می‌یابد:

می‌توان دید که گزینه نخست به daemon FTP امکان می‌دهد که به دایرکتوری‌های home کاربر دسترسی داشته باشند. این تنظیمات در زمان کنونی خاموش هستند.

برای تغییر دادن هر یک از تنظیمات می‌توان از دستور setsebool استفاده کرد. به عنوان مثال فرض کنید، وضعیت دسترسی نوشتن FTP ناشناس را بررسی کنیم:

این دستور نشان می‌دهد که سوئیچ در حال حاضر خاموش است:

سپس مقدار بولی را تغییر می‌دهیم تا فعال شود:

اگر یک بار دیگر این مقدار را بررسی کنیم، تغییر را مشاهده می‌کنیم:

مقادیر بولی تغییر یافته دائمی نیستند. پس از ریبوت این تغییرات به حالت پیشین خود باز می‌گردند. برای این که تغییرات دائمی شوند، باید از سوئیچ P- در دستور setsebool استفاده کنید.

نتیجه‌گیری

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

منبع: فرادرس


نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.