How to disable SELinux for specific program or service

  • در صورتی که به هیچ وجه نتوان یک تعامل خوب بین ابزار (مثلا سرویس apache) و SELinux برقرار کرد ، آنگاه به جای خاموش کردن کل SELinux ، می‌توان حساسیت SELinux را برای آن ابزار از بین برد.
  • به عنوان مثال فرض کنید تحت هیچ شرایطی نمی‌توانید تعاملی خوب بین سرویس Apache و SELinux برقرار کنید. در این صورت می‌توان حساسیت SELinux را برای سرویس Apache از بین برد.
  • در واقع می‌توان Type Context سرویس Apache را بر روی گزینه‌ی تنظیم کرد که از نظر SELinux مصونیت کامل داشته باشد و هیچ خطا ،‌ Policy و اعمال محدودیتی از سمت SELinux روی آن سرویس اعمال نشود.
  • برای این منظور ابتدا سرویس Apache را Start کنید سپس به صورت زیر عمل کنید.
# ps auxZ | grep httpd
root:system_r:httpd_t root 4576 0.0 0.3 174816 3216 ? Ss 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4577 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4578 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4579 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4580 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4581 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4582 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4584 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
root:system_r:httpd_t apache 4585 0.0 0.2 174816 2384 ? S 00:53 0:00 /usr/sbin/httpd
  • پرونده‌ی httpd_disable_trans را cat کنید.
# cat /selinux/booleans/httpd_disable_trans
1 1
  • به منظور غیر فعال کردن سرویس Apache در SELinux به صورت زیر عمل کنید.
# echo '0 0' > /selinux/booleans/httpd_disable_trans
# cat /selinux/booleans/httpd_disable_trans
0 1
  • عدد اول به منظور ثبت تغییرات است.
  • عدد دوم به منظور اعمال تغییرات است.
  • از آنجایی که در حال حاضر فقط تغییرات را اعمال کرده‌ایم ، لذا عدد دوم برابر با یک است.
  • به منظور غیر فعال کردن سرویس Apache در SELinux نیاز است تغییرات را ثبت نیز نماییم.
  • به منظور ثبت تغییرات به صورت زیر عمل کنید.
# echo '1' > /selinux/commit_pending_bools
  • در صورتی که پرونده‌ی httpd_disable_trans را بخوانید ، می‌بینید که محتوای آن به صورت 1 1 تبدیل شده است.
# cat /selinux/booleans/httpd_disable_trans
1 1
  • عدد اول به منظور ثبت تغییرات است.
  • عدد دوم به منظور اعمال تغییرات است.
  • نکته : تا تغییرات ثبت یا commit نشود ، نتایج در عمل قابل مشاهده نخواهد بود.
  • در ادامه نیاز است تا سرویس مورد restart شود تا یک PID جدید اختیار کند.
  • حال در صورتی که بار دیگر دستور ps را اجرا کنید ، خواهید دید که Type Context مربوط به سرویس Apache از httpd_t به initrc_t تغییر یافته است.
# ps auxZ | grep httpd
root:system_r:initrc_t root 4658 0.0 0.3 174336 3212 ? Ss 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4659 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4660 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4661 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4662 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4663 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4665 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4666 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
root:system_r:initrc_t apache 4667 0.0 0.2 174468 2384 ? S 01:03 0:00 /usr/sbin/httpd
  • نکته : پس به طور کلی به منظور غیر فعال کردن حساسیت SELinux برای یک ابزار یا سرویس ،‌ نیاز است تا عدد یک را به شکل بالا برای پرونده‌ی آن سرویس در نظر گرفت.
  • تست شده بر روی CentOS 5.8

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

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