Bảng cheat SELinux dành cho quản trị viên hệ thống: 42 câu trả lời cho các câu hỏi quan trọng

Bản dịch của bài viết được chuẩn bị riêng cho các học viên của khóa học "Quản trị viên Linux".

Bảng cheat SELinux dành cho quản trị viên hệ thống: 42 câu trả lời cho các câu hỏi quan trọng

Tại đây bạn sẽ nhận được câu trả lời cho những câu hỏi quan trọng về cuộc sống, vũ trụ và mọi thứ trong Linux với khả năng bảo mật được cải thiện.

“Sự thật quan trọng là mọi thứ không phải lúc nào cũng như vẻ ngoài của chúng là kiến ​​thức thông thường…”

-Douglas Adams, Hướng dẫn của Hitchhiker Galaxy

Sự an toàn. Tăng độ tin cậy. Thư tín. Chính sách. Quản trị viên hệ thống Bốn kỵ sĩ khải huyền. Ngoài các nhiệm vụ hàng ngày của chúng tôi - giám sát, sao lưu, triển khai, cấu hình, cập nhật, v.v. - chúng tôi cũng chịu trách nhiệm về tính bảo mật của hệ thống của mình. Ngay cả những hệ thống mà nhà cung cấp bên thứ ba khuyến nghị chúng tôi nên tắt tính năng bảo mật nâng cao. Cảm giác như đang làm việc Ethan Hunt từ “Nhiệm vụ bất khả thi.”

Đối mặt với vấn đề nan giải này, một số quản trị viên hệ thống quyết định thực hiện viên thuốc màu xanh da trời, bởi vì họ nghĩ rằng họ sẽ không bao giờ biết được câu trả lời cho câu hỏi lớn về cuộc sống, vũ trụ và tất cả những thứ đó. Và như chúng ta đều biết, đáp án đó là 42.

Theo tinh thần của Hướng dẫn về thiên hà của người đi nhờ xe, đây là 42 câu trả lời cho các câu hỏi quan trọng về việc kiểm soát và sử dụng. SELinux trên hệ thống của bạn.

1. SELinux là một hệ thống kiểm soát truy cập bắt buộc, có nghĩa là mọi quy trình đều có nhãn. Mỗi tập tin, thư mục và đối tượng hệ thống cũng có nhãn. Quy tắc chính sách kiểm soát quyền truy cập giữa các quy trình và đối tượng được gắn thẻ. Hạt nhân thực thi các quy tắc này.

2. Hai khái niệm quan trọng nhất là: Dán nhãn - đánh dấu (tệp, quy trình, cổng, v.v.) và Loại thực thi (tách biệt các tiến trình với nhau dựa trên loại).

3. Định dạng nhãn đúng user:role:type:level (không bắt buộc).

4. Mục đích cung cấp bảo mật đa cấp (Bảo mật đa cấp - MLS) là quản lý các quy trình (miền) dựa trên mức độ bảo mật của dữ liệu mà chúng sẽ sử dụng. Ví dụ: một quy trình bí mật không thể đọc dữ liệu tuyệt mật.

5. Đảm bảo an ninh đa danh mục (Bảo mật đa danh mục - MCS) bảo vệ các quy trình tương tự với nhau (ví dụ: máy ảo, công cụ OpenShift, hộp cát SELinux, vùng chứa, v.v.).

6. Tùy chọn hạt nhân để thay đổi chế độ SELinux khi khởi động:

  • autorelabel=1 → khiến hệ thống chạy nhãn lại
  • selinux=0 → kernel không tải cơ sở hạ tầng SELinux
  • enforcing=0 → tải ở chế độ cho phép

7. Nếu bạn cần dán nhãn lại toàn bộ hệ thống:

# touch /.autorelabel
#reboot

Nếu việc đánh dấu hệ thống có nhiều lỗi, bạn có thể cần phải khởi động ở chế độ cho phép để việc đánh dấu thành công.

8. Để kiểm tra xem SELinux có được bật hay không: # getenforce

9. Để tạm thời bật/tắt SELinux: # setenforce [1|0]

10. Kiểm tra trạng thái SELinux: # sestatus

11. Tập tin cấu hình: /etc/selinux/config

12. SELinux hoạt động như thế nào? Đây là một ví dụ đánh dấu cho máy chủ web Apache:

  • Biểu diễn nhị phân: /usr/sbin/httpd→httpd_exec_t
  • Thư mục cấu hình: /etc/httpd→httpd_config_t
  • Thư mục tập tin nhật ký: /var/log/httpd → httpd_log_t
  • Thư mục nội dung: /var/www/html → httpd_sys_content_t
  • Kịch bản khởi chạy: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Quy trình: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Các cổng: 80/tcp, 443/tcp → httpd_t, http_port_t

Quá trình chạy trong ngữ cảnh httpd_t, có thể tương tác với một đối tượng được gắn nhãn httpd_something_t.

13. Nhiều lệnh chấp nhận một đối số -Z để xem, tạo và thay đổi ngữ cảnh:

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

Bối cảnh được thiết lập khi các tệp được tạo dựa trên ngữ cảnh của thư mục mẹ của chúng (với một số ngoại lệ). RPM có thể thiết lập bối cảnh như trong quá trình cài đặt.

14. Có bốn nguyên nhân chính gây ra lỗi SELinux, được mô tả chi tiết hơn ở điểm 15-21 bên dưới:

  • Các vấn đề về nhãn
  • Vì một điều mà SELinux cần biết
  • Lỗi trong chính sách/ứng dụng SELinux
  • Thông tin của bạn có thể bị xâm phạm

15. Vấn đề ghi nhãn: nếu tập tin của bạn ở trong /srv/myweb được đánh dấu không chính xác, quyền truy cập có thể bị từ chối. Dưới đây là một số cách để khắc phục điều này:

  • Nếu bạn biết nhãn:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Nếu bạn biết một tệp có dấu tương đương:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Khôi phục bối cảnh (cho cả hai trường hợp):
    # restorecon -vR /srv/myweb

16. Vấn đề ghi nhãn: nếu bạn di chuyển tệp thay vì sao chép nó, tệp sẽ giữ lại ngữ cảnh ban đầu. Để khắc phục sự cố này:

  • Thay đổi lệnh ngữ cảnh bằng nhãn:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Thay đổi lệnh ngữ cảnh bằng nhãn liên kết:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Khôi phục bối cảnh (cho cả hai trường hợp): # restorecon -vR /var/www/html/

17. Nếu SELinux bạn cần biếtHTTPD đang lắng nghe trên cổng 8585, hãy nói với SELinux:

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

18. SELinux bạn cần biết Các giá trị Boolean cho phép thay đổi các phần của chính sách SELinux trong thời gian chạy mà không biết chính sách SELinux bị ghi đè. Ví dụ: nếu bạn muốn httpd gửi email, hãy nhập: # setsebool -P httpd_can_sendmail 1

19. SELinux bạn cần biết các giá trị logic để bật/tắt cài đặt SELinux:

  • Để xem tất cả các giá trị boolean: # getsebool -a
  • Để xem mô tả của từng: # semanage boolean -l
  • Để đặt giá trị boolean: # setsebool [_boolean_] [1|0]
  • Để cài đặt vĩnh viễn, hãy thêm -P. Ví dụ: # setsebool httpd_enable_ftp_server 1 -P

20. Các chính sách/ứng dụng SELinux có thể có lỗi, bao gồm:

  • Đường dẫn mã bất thường
  • Cấu hình
  • Chuyển hướng thiết bị xuất chuẩn
  • Rò rỉ bộ mô tả tập tin
  • Bộ nhớ thực thi
  • Thư viện được xây dựng kém

Vé mở (không gửi báo cáo cho Bugzilla; Bugzilla không có SLA).

21. Thông tin của bạn có thể bị xâm phạmnếu bạn có miền bị hạn chế khi cố gắng:

  • Tải mô-đun hạt nhân
  • Tắt chế độ SELinux được thực thi
  • Viết thư cho etc_t/shadow_t
  • Thay đổi quy tắc iptables

22. Các công cụ SELinux để phát triển các mô-đun chính sách:

# yum -y install setroubleshoot setroubleshoot-server

Khởi động lại hoặc khởi động lại auditd sau khi cài đặt.

23. Sử dụng

journalctl

để hiển thị danh sách tất cả các nhật ký được liên kết với setroubleshoot:

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

24. Sử dụng journalctl để liệt kê tất cả các nhật ký được liên kết với một thẻ SELinux cụ thể. Ví dụ:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Nếu xảy ra lỗi SELinux, hãy sử dụng nhật ký setroubleshoot đưa ra một số giải pháp khả thi.
Ví dụ, từ 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. Ghi nhật ký: SELinux ghi lại thông tin ở nhiều nơi:

  • / var / log / messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Ghi nhật ký: tìm kiếm lỗi SELinux trong nhật ký kiểm tra:

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

28. Để tìm thông báo SELinux Access Vector Cache (AVC) cho một dịch vụ cụ thể:

# ausearch -m avc -c httpd

29. Tính thiết thực audit2allow thu thập thông tin từ nhật ký các hoạt động bị cấm và sau đó tạo ra các quy tắc chính sách cấp phép của SELinux. Ví dụ:

  • Để tạo mô tả mà con người có thể đọc được về lý do quyền truy cập bị từ chối: # audit2allow -w -a
  • Để xem quy tắc thực thi loại cho phép truy cập bị từ chối: # audit2allow -a
  • Để tạo một mô-đun tùy chỉnh: # audit2allow -a -M mypolicy
  • Lựa chọn -M tạo một tệp thực thi loại (.te) với tên được chỉ định và biên dịch quy tắc thành gói chính sách (.pp): mypolicy.pp mypolicy.te
  • Để cài đặt một mô-đun tùy chỉnh: # semodule -i mypolicy.pp

30. Để định cấu hình một quy trình (miền) riêng biệt hoạt động ở chế độ cho phép: # semanage permissive -a httpd_t

31. Nếu bạn không muốn miền được cấp phép nữa: # semanage permissive -d httpd_t

32. Để vô hiệu hóa tất cả các miền được phép: # semodule -d permissivedomains

33. Kích hoạt chính sách MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Đảm bảo SELinux đang chạy ở chế độ cho phép: # setenforce 0
Sử dụng một kịch bản fixfilesđể đảm bảo rằng các tập tin được dán nhãn lại trong lần khởi động lại tiếp theo:

# fixfiles -F onboot # reboot

34. Tạo người dùng với phạm vi MLS cụ thể: # useradd -Z staff_u john

Sử dụng lệnh useradd, ánh xạ người dùng mới tới người dùng SELinux hiện có (trong trường hợp này là staff_u).

35. Để xem ánh xạ giữa người dùng SELinux và Linux: # semanage login -l

36. Xác định một phạm vi cụ thể cho người dùng: # semanage login --modify --range s2:c100 john

37. Để sửa nhãn thư mục chính của người dùng (nếu cần): # chcon -R -l s2:c100 /home/john

38. Để xem các danh mục hiện tại: # chcat -L

39. Để thay đổi danh mục hoặc bắt đầu tạo danh mục của riêng bạn, hãy chỉnh sửa tệp như sau:

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

40. Để chạy lệnh hoặc tập lệnh trong một tệp, vai trò và ngữ cảnh người dùng cụ thể:

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

  • -t bối cảnh tập tin
  • -r bối cảnh vai trò
  • -u bối cảnh người dùng

41. Các vùng chứa chạy với SELinux bị vô hiệu hóa:

  • Podman: # podman run --security-opt label=disable …
  • docker: # docker run --security-opt label=disable …

42. Nếu bạn cần cấp cho vùng chứa toàn quyền truy cập vào hệ thống:

  • Podman: # podman run --privileged …
  • docker: # docker run --privileged …

Và bây giờ bạn đã biết câu trả lời. Vì vậy xin vui lòng: đừng hoảng sợ và hãy kích hoạt SELinux.

Links:

Nguồn: www.habr.com

Thêm một lời nhận xét