برگه تقلب SELinux برای مدیران سیستم: 42 پاسخ به سؤالات مهم

ترجمه مقاله به طور اختصاصی برای دانشجویان دوره تهیه شده است "مدیر لینوکس".

برگه تقلب SELinux برای مدیران سیستم: 42 پاسخ به سؤالات مهم

در اینجا به سوالات مهم در مورد زندگی، جهان و همه چیز در لینوکس با امنیت بهبود یافته پاسخ خواهید داد.

"حقیقت مهم این است که همه چیز همیشه آنطور که به نظر می رسد نیست، دانش عمومی است..."

-داگلاس آدامز، راهنمای سواری مجانی به کهکشان

ایمنی. افزایش قابلیت اطمینان. مکاتبه. خط مشی. چهار اسب سوار آخرالزمان sysadmin. ما علاوه بر وظایف روزانه خود - نظارت، پشتیبان گیری، پیاده سازی، پیکربندی، به روز رسانی و غیره - مسئولیت امنیت سیستم های خود را نیز بر عهده داریم. حتی سیستم‌هایی که ارائه‌دهنده شخص ثالث توصیه می‌کند که امنیت پیشرفته را غیرفعال کنیم. انگار کاره اتان هانت از «ماموریت: غیرممکن»

در مواجهه با این معضل، برخی از مدیران سیستم تصمیم می گیرند قرص آبی، زیرا فکر می کنند هرگز پاسخ سوال بزرگ زندگی، جهان و همه اینها را نخواهند دانست. و همانطور که همه می دانیم، این پاسخ 42 است.

با توجه به کتاب راهنمای سفر به کهکشان، در اینجا 42 پاسخ به سؤالات مهم در مورد کنترل و استفاده وجود دارد. SELinux را در سیستم های شما

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

2. دو مفهوم مهم عبارتند از: برچسب زدن - علامت گذاری (فایل ها، فرآیندها، پورت ها و غیره) و نوع اجرا (که فرآیندها را بر اساس انواع از یکدیگر جدا می کند).

3. فرمت برچسب درست user:role:type:level (اختیاری).

4. هدف از تامین امنیت چند سطحی (امنیت چند سطحی - MLS) مدیریت فرآیندها (دامنه ها) بر اساس سطح امنیت داده هایی است که استفاده خواهند کرد. به عنوان مثال، یک فرآیند مخفی نمی تواند داده های فوق سری را بخواند.

5. تضمین امنیت چند دسته ای (امنیت چند دسته ای - MCS) از فرآیندهای مشابه در برابر یکدیگر محافظت می کند (به عنوان مثال، ماشین های مجازی، موتورهای OpenShift، جعبه های sandbox SELinux، کانتینرها و غیره).

6. گزینه های هسته برای تغییر حالت های SELinux در هنگام بوت:

  • autorelabel=1 → باعث می شود که سیستم برچسب گذاری مجدد را اجرا کند
  • selinux=0 → هسته زیرساخت SELinux را بارگیری نمی کند
  • enforcing=0 → بارگیری در حالت مجاز

7. اگر نیاز دارید کل سیستم را دوباره برچسب بزنید:

# touch /.autorelabel
#reboot

اگر علامت‌گذاری سیستم حاوی تعداد زیادی خطا باشد، ممکن است لازم باشد برای موفقیت در علامت‌گذاری در حالت مجاز بوت شوید.

8. برای بررسی فعال بودن SELinux: # getenforce

9. برای فعال/غیرفعال کردن موقت SELinux: # setenforce [1|0]

10. بررسی وضعیت SELinux: # sestatus

11. فایل پیکربندی: /etc/selinux/config

12. SELinux چگونه کار می کند؟ در اینجا یک نمونه علامت گذاری برای وب سرور آپاچی آمده است:

  • نمایش باینری: /usr/sbin/httpd→httpd_exec_t
  • دایرکتوری پیکربندی: /etc/httpd→httpd_config_t
  • فهرست فایل لاگ: /var/log/httpd → httpd_log_t
  • دایرکتوری محتوا: /var/www/html → httpd_sys_content_t
  • راه اندازی اسکریپت: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • فرآیند: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • پورت ها: 80/tcp, 443/tcp → httpd_t, http_port_t

فرآیند در حال اجرا در زمینه httpd_t، می تواند با یک شی برچسب گذاری شده تعامل داشته باشد httpd_something_t.

13. بسیاری از دستورات یک استدلال را می پذیرند -Z برای مشاهده، ایجاد و تغییر زمینه:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

زمینه‌ها زمانی ایجاد می‌شوند که فایل‌ها بر اساس زمینه دایرکتوری والد خود (به استثنای برخی موارد) ایجاد می‌شوند. RPM ها می توانند زمینه هایی را مانند هنگام نصب ایجاد کنند.

14. چهار دلیل اصلی برای خطاهای SELinux وجود دارد که با جزئیات بیشتر در نکات 15-21 در زیر توضیح داده شده است:

  • مسائل مربوط به برچسب زدن
  • به دلیل چیزی که SELinux باید بداند
  • خطا در سیاست/برنامه SELinux
  • اطلاعات شما ممکن است به خطر بیفتد

15. مشکل برچسب زدن: اگر فایل های شما داخل هستند /srv/myweb به اشتباه علامت گذاری شده اند، ممکن است دسترسی ممنوع شود. در اینجا چند راه برای رفع این مشکل وجود دارد:

  • اگر برچسب را می شناسید:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • اگر فایلی با علامت گذاری معادل می شناسید:
    # semanage fcontext -a -e /srv/myweb /var/www
  • بازیابی زمینه (برای هر دو مورد):
    # restorecon -vR /srv/myweb

16. مشکل برچسب زدن: اگر فایل را به جای کپی کردن جابجا کنید، فایل زمینه اصلی خود را حفظ می کند. برای رفع این مشکل:

  • دستور متن را با برچسب تغییر دهید:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • دستور متن را با برچسب پیوند تغییر دهید:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • بازیابی زمینه (برای هر دو مورد): # restorecon -vR /var/www/html/

17. اگر SELinux باید بدانیدکه HTTPD در پورت 8585 گوش می دهد، به SELinux بگویید:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux باید بدانید مقادیر بولی که اجازه می دهد بخش هایی از خط مشی SELinux در زمان اجرا بدون اطلاع از بازنویسی خط مشی SELinux تغییر کند. به عنوان مثال، اگر می خواهید httpd ایمیل ارسال کند، وارد کنید: # setsebool -P httpd_can_sendmail 1

19. SELinux باید بدانید مقادیر منطقی برای فعال/غیرفعال کردن تنظیمات SELinux:

  • برای دیدن همه مقادیر بولی: # getsebool -a
  • برای مشاهده توضیحات هر کدام: # semanage boolean -l
  • برای تنظیم یک مقدار بولی: # setsebool [_boolean_] [1|0]
  • برای نصب دائمی، اضافه کنید -P. به عنوان مثال: # setsebool httpd_enable_ftp_server 1 -P

20. سیاست‌ها/برنامه‌های SELinux ممکن است حاوی خطاهایی باشند، از جمله:

  • مسیرهای کد غیرمعمول
  • پیکربندی
  • تغییر مسیر stdout
  • توصیفگر فایل نشت می کند
  • حافظه اجرایی
  • کتابخانه های ضعیف

بلیط های باز (گزارشی به Bugzilla ارسال نکنید؛ Bugzilla SLA ندارد).

21. اطلاعات شما ممکن است به خطر بیفتداگر دامنه های محدودی دارید که سعی می کنید:

  • بارگذاری ماژول های هسته
  • حالت SELinux اجباری را غیرفعال کنید
  • بنویسید etc_t/shadow_t
  • قوانین iptables را تغییر دهید

22. ابزارهای SELinux برای توسعه ماژول های سیاست:

# yum -y install setroubleshoot setroubleshoot-server

راه اندازی مجدد یا راه اندازی مجدد auditd پس از نصب

23. استفاده کنید

journalctl

برای نمایش لیستی از همه گزارش های مرتبط با setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. استفاده کنید journalctl برای فهرست کردن همه گزارش های مرتبط با یک تگ SELinux خاص. مثلا:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. اگر خطای SELinux رخ داد، از گزارش استفاده کنید setroubleshoot ارائه چندین راه حل ممکن
به عنوان مثال، از journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26. ورود به سیستم: SELinux اطلاعات را در بسیاری از مکان ها ثبت می کند:

  • / var / log / پیام ها
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. ورود به سیستم: جستجوی خطاهای SELinux در گزارش حسابرسی:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. برای یافتن پیام‌های کش بردار دسترسی به SELinux (AVC) برای یک سرویس خاص:

# ausearch -m avc -c httpd

29. سودمندی audit2allow اطلاعات را از گزارش های عملیات ممنوع جمع آوری می کند و سپس قوانین خط مشی مجوز SELinux را تولید می کند. مثلا:

  • برای ایجاد یک توصیف قابل خواندن توسط انسان در مورد چرایی عدم دسترسی: # audit2allow -w -a
  • برای مشاهده یک قانون اجرایی نوع که اجازه دسترسی رد شده را می دهد: # audit2allow -a
  • برای ایجاد یک ماژول سفارشی: # audit2allow -a -M mypolicy
  • گزینه -M یک نوع فایل اجرایی (.te) با نام مشخص شده ایجاد می کند و قانون را در یک بسته خط مشی (pp.) کامپایل می کند: mypolicy.pp mypolicy.te
  • برای نصب یک ماژول سفارشی: # semodule -i mypolicy.pp

30. برای پیکربندی یک فرآیند جداگانه (دامنه) برای کار در حالت مجاز: # semanage permissive -a httpd_t

31. اگر دیگر نمی خواهید دامنه مجاز باشد: # semanage permissive -d httpd_t

32. برای غیرفعال کردن همه دامنه های مجاز: # semodule -d permissivedomains

33. فعال کردن خط مشی MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

مطمئن شوید که SELinux در حالت مجاز اجرا می شود: # setenforce 0
از یک اسکریپت استفاده کنید fixfilesبرای اطمینان از اینکه فایل ها در راه اندازی مجدد بعدی برچسب گذاری مجدد می شوند:

# fixfiles -F onboot # reboot

34. کاربر با محدوده MLS خاص ایجاد کنید: # useradd -Z staff_u john

با استفاده از دستور useradd، کاربر جدید را به یک کاربر SELinux موجود نگاشت کنید (در این مورد، staff_u).

35. برای مشاهده نقشه بین کاربران SELinux و Linux: # semanage login -l

36. یک محدوده خاص برای کاربر تعریف کنید: # semanage login --modify --range s2:c100 john

37. برای تصحیح برچسب فهرست اصلی کاربر (در صورت لزوم): # chcon -R -l s2:c100 /home/john

38. برای مشاهده دسته بندی های فعلی: # chcat -L

39. برای تغییر دسته‌ها یا شروع به ایجاد دسته‌های خود، فایل را به صورت زیر ویرایش کنید:

/etc/selinux/_<selinuxtype>_/setrans.conf

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

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t زمینه فایل
  • -r زمینه نقش
  • -u زمینه کاربر

41. کانتینرهایی که با SELinux غیرفعال هستند:

  • پودمان: # podman run --security-opt label=disable …
  • داکر: # docker run --security-opt label=disable …

42. اگر نیاز دارید به کانتینر دسترسی کامل به سیستم بدهید:

  • پودمان: # podman run --privileged …
  • داکر: # docker run --privileged …

و اکنون پاسخ را می دانید. بنابراین لطفا: وحشت نکنید و SELinux را فعال کنید.

لینک ها:

منبع: www.habr.com

اضافه کردن نظر