ترجمه مقاله تهیه شده برای دانشجویان دوره
SELinux یا Linux Enhanced Security یک مکانیسم کنترل دسترسی پیشرفته است که توسط آژانس امنیت ملی ایالات متحده (NSA) برای جلوگیری از نفوذهای مخرب توسعه یافته است. این یک مدل کنترل دسترسی اجباری (یا اجباری) (English Mandatory Access Control, MAC) را در بالای مدل اختیاری (یا انتخابی) موجود (English Discretionary Access Control, DAC) پیادهسازی میکند، یعنی مجوزهای خواندن، نوشتن، اجرا.
SELinux سه حالت دارد:
- اجرای - ممنوعیت دسترسی بر اساس قوانین سیاست.
- مجاز - نگه داشتن گزارشی از اقداماتی که خط مشی را نقض می کند، که در حالت اجرا ممنوع است.
- غیر فعال - غیرفعال کردن کامل SELinux.
به طور پیش فرض تنظیمات در آن قرار دارند /etc/selinux/config
تغییر حالت های SELinux
برای اطلاع از حالت فعلی، اجرا کنید
$ getenforce
برای تغییر حالت به Permissive دستور زیر را اجرا کنید
$ setenforce 0
یا، برای تغییر حالت از قابل قبول بر اجرای قانون، اجرا کردن
$ setenforce 1
اگر نیاز به غیرفعال کردن کامل SELinux دارید، این کار فقط از طریق فایل پیکربندی قابل انجام است
$ vi /etc/selinux/config
برای غیرفعال کردن، پارامتر SELINUX را به صورت زیر تغییر دهید:
SELINUX=disabled
راه اندازی SELinux
هر فایل و فرآیند با یک زمینه SELinux مشخص شده است که حاوی اطلاعات اضافی مانند کاربر، نقش، نوع و غیره است. اگر این اولین باری است که SELinux را فعال می کنید، ابتدا باید زمینه و برچسب ها را پیکربندی کنید. فرآیند تخصیص برچسب ها و زمینه به عنوان برچسب گذاری شناخته می شود. برای شروع علامت گذاری، در فایل پیکربندی حالت را به تغییر می دهیم قابل قبول.
$ vi /etc/selinux/config
SELINUX=permissive
پس از تنظیم حالت قابل قبول، یک فایل مخفی خالی در ریشه با نام ایجاد کنید autorelabel
$ touch /.autorelabel
و کامپیوتر را ریستارت کنید
$ init 6
توجه: ما از حالت استفاده می کنیم قابل قبول برای علامت گذاری، از زمان استفاده از حالت اجرای قانون ممکن است باعث از کار افتادن سیستم در هنگام راه اندازی مجدد شود.
نگران نباشید اگر دانلود روی برخی از فایل ها گیر کرد، علامت گذاری مدتی طول می کشد. هنگامی که علامت گذاری کامل شد و سیستم شما بوت شد، می توانید به فایل پیکربندی بروید و حالت را تنظیم کنید اجرای قانونو همچنین اجرا کنید:
$ setenforce 1
اکنون SELinux را با موفقیت در رایانه خود فعال کرده اید.
نظارت بر لاگ ها
ممکن است هنگام علامت گذاری یا در حین کار سیستم با خطاهایی مواجه شده باشید. برای بررسی اینکه آیا SELinux شما به درستی کار می کند و آیا دسترسی به هر پورت، برنامه و غیره را مسدود نمی کند، باید به گزارش ها نگاه کنید. ورود به سیستم SELinux در آن قرار دارد /var/log/audit/audit.log
، اما برای یافتن خطاها نیازی به خواندن کل مطلب ندارید. برای یافتن خطاها می توانید از ابزار audit2why استفاده کنید. دستور زیر را اجرا کنید:
$ audit2why < /var/log/audit/audit.log
در نتیجه لیستی از خطاها را دریافت خواهید کرد. اگر هیچ خطایی در گزارش وجود نداشته باشد، هیچ پیامی نمایش داده نخواهد شد.
پیکربندی سیاست SELinux
خط مشی SELinux مجموعه ای از قوانین است که مکانیسم امنیتی SELinux را کنترل می کند. یک خط مشی مجموعه ای از قوانین را برای یک محیط خاص تعریف می کند. اکنون می آموزیم که چگونه سیاست ها را برای اجازه دسترسی به سرویس های ممنوعه پیکربندی کنیم.
1. مقادیر منطقی (سوئیچ ها)
سوئیچ ها (بولیان) به شما این امکان را می دهند که بخش هایی از یک خط مشی را در زمان اجرا تغییر دهید، بدون نیاز به ایجاد خط مشی های جدید. آنها به شما اجازه می دهند بدون راه اندازی مجدد یا کامپایل مجدد خط مشی های SELinux تغییراتی را ایجاد کنید.
مثال
فرض کنید میخواهیم فهرست اصلی کاربر را از طریق خواندن/نوشتن FTP به اشتراک بگذاریم، و قبلاً آن را به اشتراک گذاشتهایم، اما وقتی سعی میکنیم به آن دسترسی پیدا کنیم، چیزی نمیبینیم. این به این دلیل است که سیاست SELinux از خواندن و نوشتن سرور FTP در فهرست اصلی کاربر جلوگیری می کند. ما باید سیاست را تغییر دهیم تا سرور FTP بتواند به دایرکتوری های اصلی دسترسی پیدا کند. بیایید ببینیم آیا سوئیچ هایی برای این کار وجود دارد یا خیر
$ semanage boolean -l
این دستور سوئیچ های موجود را با وضعیت فعلی (روشن یا خاموش) و توضیحات فهرست می کند. می توانید جستجوی خود را با افزودن grep برای یافتن نتایج فقط ftp اصلاح کنید:
$ semanage boolean -l | grep ftp
و موارد زیر را خواهید یافت
ftp_home_dir -> off Allow ftp to read & write file in user home directory
این سوئیچ غیرفعال است، بنابراین ما آن را با آن فعال می کنیم setsebool $ setsebool ftp_home_dir on
اکنون دیمون ftp ما میتواند به فهرست اصلی کاربر دسترسی پیدا کند.
توجه: همچنین می توانید با انجام این کار، لیستی از سوئیچ های موجود را بدون شرح دریافت کنید getsebool -a
2. برچسب ها و زمینه
این رایج ترین راه برای اجرای سیاست SELinux است. هر فایل، پوشه، فرآیند و پورت با زمینه SELinux مشخص می شود:
- برای فایل ها و پوشه ها، برچسب ها به عنوان ویژگی های توسعه یافته در سیستم فایل ذخیره می شوند و با دستور زیر قابل مشاهده هستند:
$ ls -Z /etc/httpd
- برای فرآیندها و پورت ها، برچسب گذاری توسط هسته مدیریت می شود و می توانید این برچسب ها را به صورت زیر مشاهده کنید:
روند
$ ps –auxZ | grep httpd
بندر
$ netstat -anpZ | grep httpd
مثال
حال بیایید برای درک بهتر برچسبها و زمینه، به مثالی نگاه کنیم. فرض کنید ما یک وب سرور داریم که به جای دایرکتوری /var/www/html/ использует /home/dan/html/
. SELinux این را نقض خطمشی میداند و شما نمیتوانید صفحات وب خود را مشاهده کنید. این به این دلیل است که ما زمینه امنیتی مرتبط با فایلهای HTML را تنظیم نکردهایم. برای مشاهده زمینه امنیتی پیش فرض، از دستور زیر استفاده کنید:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
به اینجا رسیدیم httpd_sys_content_t
به عنوان زمینه برای فایل های html. ما باید این زمینه امنیتی را برای دایرکتوری فعلی خود تنظیم کنیم که در حال حاضر دارای زمینه زیر است:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
یک دستور جایگزین برای بررسی زمینه امنیتی یک فایل یا دایرکتوری:
$ semanage fcontext -l | grep '/var/www'
همچنین پس از یافتن زمینه امنیتی صحیح، از semanage برای تغییر زمینه استفاده خواهیم کرد. برای تغییر متن /home/dan/html، دستورات زیر را اجرا کنید:
$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html
پس از تغییر متن با استفاده از semanage، دستور restorecon زمینه پیشفرض فایلها و دایرکتوریها را بارگیری میکند. وب سرور ما اکنون می تواند فایل ها را از پوشه بخواند /home/dan/html
زیرا زمینه امنیتی این پوشه به تغییر یافته است httpd_sys_content_t
.
3. ایجاد سیاست های محلی
ممکن است شرایطی وجود داشته باشد که روش های بالا برای شما فایده ای نداشته باشد و خطاهایی (avc/denial) در audit.log دریافت کنید. وقتی این اتفاق می افتد، باید یک سیاست محلی ایجاد کنید. همانطور که در بالا توضیح داده شد، می توانید تمام خطاها را با استفاده از audit2why پیدا کنید.
شما می توانید یک سیاست محلی برای رفع خطاها ایجاد کنید. به عنوان مثال، یک خطای مربوط به httpd (apache) یا smbd (samba) دریافت می کنیم، خطاها را grep می کنیم و برای آنها یک خط مشی ایجاد می کنیم:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
اینجا http_policy
и smb_policy
نام سیاست های محلی است که ما ایجاد کردیم. اکنون باید این سیاست های محلی ایجاد شده را در خط مشی فعلی SELinux بارگذاری کنیم. این میتواند بصورت زیر انجام شود:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
خطمشیهای محلی ما دانلود شدهاند و دیگر نباید avc یا denail در audit.log دریافت کنیم.
این تلاش من برای کمک به شما برای درک SELinux بود. امیدوارم پس از خواندن این مقاله احساس راحتی بیشتری با SELinux داشته باشید.
منبع: www.habr.com