SELinux là gì?

SELinux (Security-Enhanced Linux) là một kiến trúc về bảo mật được tích hợp vào nhân Linux, do vậy mà SELinux có ở mọi hệ thống phát triển dựa trên Linux từ mobile (Android), Desktop, Server. SELinux là một dự án của Cơ quan An ninh Quốc Gia Mỹ (NSA - NSA SELinux) và cộng đồng phát triển SELinux.

SELinux cung cấp một hệ thống MAC (Mandatory Access Control - Điều khiển truy cập bắt buộc) trong nhân Linux. Trong Linux có cơ chế DAC (Discretionary Access Control - Truy cập theo quyền), một ứng dụng (tiến trình) chạy trong hệ thống với một user (UID, SUID, user đó được phân các quyền tương tác với các đối tượng của hệ thống như các file, socket, các tiến trình khác. Khi hệ thống có chạy MAC, nó sẽ bảo vệ hệ thống khỏi các phần mềm độc hại hoặc các phần mềm có lỗ hổng bảo mật.

SELinux xác định quyền truy cập và chuyển đổi quyền truy cập đến user, ứng dụng, file. Webserver (Apache) để chạy được sẽ có quyền ghi file vào /tmp hoặc /var/tmp, lợi dụng quyền này - webserver bị lợi dụng lưu vào đó những script không an toàn, và những script không an toàn này dùng để truy cập can thiệp vào các dịch vụ khác. Nhưng nếu SELinux hoạt động, nó sẽ ngăn cản việc sử dụng script trên truy cập vào những dịch vụ khác.

SELinux trên hệ thống có thể ở các chế độ.

  • Disabled SELinux bị tắt hoàn toàn, không lưu thông tin gì
  • Permissive SELinux cho phép mọi truy cấp, có ghi log tại /var/log/audit/audit.log
  • Enforcing Ghi log yêu cầu truy cập tại /var/log/audit/audit.log, sau đó kiểm tra chính sách, nếu không có quyền sẽ bị từ chối

Kiểm tra SELinux ở chế độ nào

# sestatus


SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

Như trên, SELinux đang enable ở chế độ enforing

Đổi chế độ SELinux

Mở file cấu hình của SELinux bằng lệnh:
# vi /etc/selinux/config

Tìm dòng SELINUX= thay các giá trị như sau:

  • SELINUX=disabled - tắt hoàn toàn
  • SELINUX=permissive - chế độ chỉ ghi ra log các yêu cầu truy cập, luôn cấp quyền truy cập
  • SELINUX=enforcing - kiểm tra quyền đầy đủ

Khi thay đổi chế độ, khởi động lại hệ thống bằng reboot

Chính sách SELinux

Làm cách nào SELinux bảo vệ hệ thống khỏi phần mềm giả mạo?

SELinux sử dụng một tập hợp các nguyên tắc (chính sách) nó xác định xem một tiến trình nào có thể truy cập các file nào, thư mục nào, cổng nào. Như vậy một ứng dụng khi hoạt động nó chỉ được truy cập đến các đối tượng được quy định trong chính sách dành cho nó.

Chính sách dành cho một ứng dụng ở đâu ra: Các chính sách SELinux dành cho ứng dụng do các lập trình viên đưa vào ứng dụng (không phải bạn). Ví dụ, Apache biết nó cần những quyền gì, những quyền đó được mô tả trong Apache, và SELinux sẽ sử dụng chúng để kiểm tra.

SELinux sử dụng context (tập hợp thông tin bảo mật gán cho mỗi đối tượng) để xác định xem nó liên quan đến các chính sách bảo mật nào.

Nếu bạn sử dụng liệt kê các file của một thư mục với tham số -Z bạn sẽ thấy context liên quan đến file đó.

[root@localhost /]# ls -lZ
lrwxrwxrwx. root root system_u:object_r:bin_t:s0       bin -> usr/bin
dr-xr-xr-x. root root system_u:object_r:boot_t:s0      boot
drwxr-xr-x. root root system_u:object_r:device_t:s0    dev
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 root