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
# vi /etc/selinux/config
Tìm dòng SELINUX=
thay các giá trị như sau:
SELINUX=disabled
- tắt hoàn toànSELINUX=permissive
- chế độ chỉ ghi ra log các yêu cầu truy cập, luôn cấp quyền truy cậpSELINUX=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