CodeGym /Các khóa học /Docker SELF /Giới thiệu về SELinux: kiểm tra trạng thái, bật, các lệnh...

Giới thiệu về SELinux: kiểm tra trạng thái, bật, các lệnh cơ bản

Docker SELF
Mức độ , Bài học
Có sẵn

Giới thiệu về SELinux: kiểm tra trạng thái, bật, các lệnh cơ bản

1. SELinux là gì và tại sao cần đến nó?

SELinux (Security-Enhanced Linux) — là một module bảo mật, tăng cường mô hình quản lý quyền truy cập truyền thống bằng cách thêm khái niệm kiểm soát bắt buộc. Nó cho phép admin cấu hình các giới hạn nghiêm ngặt hơn cho người dùng, thậm chí cả quá trình, để giảm thiểu thiệt hại tiềm tàng từ những cuộc tấn công có thể xảy ra.

Điểm độc đáo của nó là gì?

Hãy tưởng tượng hệ thống của bạn là một ngôi nhà. Các quyền truy cập truyền thống (rwx cho người dùng, nhóm và những người khác) giống như chìa khóa để mở cửa. Nhưng nếu ai đó đột nhập vào nhà thì sao? SELinux sẽ trở thành tuyến phòng thủ thứ hai, tăng cường bảo vệ thông qua các quy tắc hành động: "Này, ngay cả khi bạn đã ở trong, bạn không được vào phòng tắm!"

Nhiệm vụ chính của SELinux:

  1. Bảo vệ chống lại quyền truy cập trái phép cho các quá trình và tệp.
  2. Giảm thiểu thiệt hại từ các cuộc tấn công, ngay cả khi quá trình đó đã bị xâm nhập.
  3. Nguyên tắc "bảo vệ mặc định" (tất cả đều bị cấm, trừ những gì được cho phép).

Chế độ hoạt động của SELinux

SELinux có thể hoạt động ở ba chế độ:

  1. Enforcing — kích hoạt, áp dụng các chính sách bảo mật và chặn các quá trình vi phạm.
  2. Permissive — chỉ ghi lại các vi phạm vào nhật ký nhưng không chặn hành động.
  3. Disabled — hoàn toàn bị vô hiệu hóa.
Thông tin thú vị:

SELinux ở chế độ enforcing giống như một người anh trai nghiêm khắc đối với hệ thống của bạn. Permissive — là người em trai chỉ than phiền nhưng không làm gì cả.


2. Kiểm tra trạng thái SELinux

Đầu tiên, cùng xem SELinux có đang được kích hoạt và đang hoạt động ở chế độ nào. Có một vài lệnh tiện lợi để làm điều này.

Lệnh getenforce

Lệnh này sẽ đơn giản cho bạn biết chế độ hiện tại đang được sử dụng là gì: Enforcing, Permissive, hoặc Disabled.

$ getenforce
Enforcing

Nếu kết quả là Disabled, thì SELinux đang bị tắt — nghĩa là bạn sẽ cần phải làm một vài thao tác để kích hoạt, nhưng chúng ta sẽ nói về điều đó sau.

Lệnh sestatus

Bản báo cáo chi tiết hơn về trạng thái của SELinux có thể xem được bằng lệnh này. Nó sẽ hiển thị trạng thái hiện tại, chế độ hoạt động và chính sách đang được sử dụng.

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing

Ở đây, bạn có thể thấy:

  • enabled/disabled — SELinux có được bật hay không.
  • current mode — chế độ hoạt động (enforcing, permissive).
  • loaded policy name — chính sách nào đang được tải. Ví dụ, "targeted" nghĩa là SELinux chỉ kiểm soát các process quan trọng.

3. Chuyển đổi chế độ SELinux

Để thay đổi chế độ hoạt động hiện tại của SELinux, sử dụng lệnh setenforce.

Chuyển sang chế độ permissive

Nếu bạn muốn tạm thời "nới lỏng dây cương" SELinux, có thể bật chế độ permissive.

$ sudo setenforce 0

Bây giờ SELinux sẽ chỉ ghi nhận các vi phạm, nhưng không khóa chúng lại. Bạn có thể kiểm tra cấu hình mới bằng lệnh getenforce:

$ getenforce
Permissive

Chuyển lại chế độ enforcing

Khi bạn muốn bật lại chế độ kiểm soát chặt chẽ, thực hiện:

$ sudo setenforce 1

Và, tất nhiên, kiểm tra kết quả:

$ getenforce
Enforcing

Thay đổi này được áp dụng ngay lập tức, nhưng chỉ tồn tại cho đến lần khởi động lại hệ thống tiếp theo.


4. Kích hoạt SELinux

Nếu SELinux bị tắt, cần phải thay đổi file cấu hình. SELinux được quản lý qua file /etc/selinux/config.

Kiểm tra file cấu hình hiện tại

Hãy xem hiện tại nó được cấu hình như thế nào. Sử dụng bất kỳ trình chỉnh sửa văn bản nào, ví dụ nano:

$ sudo nano /etc/selinux/config

Bạn sẽ thấy cái gì đó giống như thế này:

# This file controls the state of SELinux on the system.
SELINUX=disabled
SELINUXTYPE=targeted

Chuyển SELinux sang trạng thái hoạt động

Để kích hoạt SELinux, hãy thay đổi dòng SELINUX=disabled thành SELINUX=enforcing hoặc SELINUX=permissive.

Dưới đây là ví dụ file sau khi đã chỉnh sửa:

# This file controls the state of SELinux on the system.
SELINUX=enforcing
SELINUXTYPE=targeted

Sau khi chỉnh sửa, lưu file và khởi động lại hệ thống:

$ sudo reboot

Sau khi khởi động lại, bạn có thể kiểm tra trạng thái bằng cách sử dụng sestatus, để đảm bảo rằng SELinux đã được kích hoạt.


5. Phân tích ngữ cảnh SELinux

Ngữ cảnh là gì?

Ngữ cảnh — là các nhãn mà SELinux sử dụng để quản lý quyền truy cập. Mỗi tệp, quy trình và người dùng đều có ngữ cảnh riêng.

Bạn có thể xem các ngữ cảnh của tệp bằng lệnh ls -Z. Đây là một ví dụ:

$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

Nó có ý nghĩa gì?

  1. unconfinedu — người dùng SELinux.
  2. objectr — loại đối tượng.
  3. httpdsyscontent_t — loại quyền truy cập (trong trường hợp này liên quan đến máy chủ web).
  4. s0 — cấp độ bảo mật.

Thay đổi ngữ cảnh

Nếu SELinux ngăn cản ứng dụng của bạn hoạt động, có thể cần thay đổi ngữ cảnh của tệp. Sử dụng lệnh chcon:

$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html

Lệnh này tạm thời thay đổi loại ngữ cảnh của tệp. Tuy nhiên, sau khi khởi động lại, các thay đổi có thể bị mất, vì vậy để cài đặt cố định, tốt hơn là nên sửa đổi chính sách SELinux (sẽ được đề cập sau).


6. Ví dụ làm việc với SELinux

Hãy cùng xem một ví dụ. Bạn là một quản trị viên server, muốn triển khai một web server nhưng SELinux chặn quyền truy cập vào các tệp trong thư mục /var/www/html.

Các bước:

  1. Kiểm tra trạng thái SELinux:

    $ sestatus
    

    Đảm bảo rằng SELinux được bật và đang chạy ở chế độ enforcing.

  2. Xem các ngữ cảnh của các tệp:

    $ ls -Z /var/www/html
    
  3. Nếu ngữ cảnh sai, hãy thay đổi nó:

    $ sudo chcon -t httpd_sys_content_t /var/www/html/*
    
  4. Kiểm tra hoạt động của web server.


7. Các lỗi và vấn đề phổ biến

  1. SELinux bị tắt và bạn không để ý. Hãy luôn kiểm tra trạng thái bằng sestatus. Nhiều admin hay quên bật SELinux sau khi cài hệ thống.

  2. "Tại sao dịch vụ của tôi không hoạt động?" SELinux chặn quyền truy cập. Sử dụng audit.log để phân tích:

    $ sudo cat /var/log/audit/audit.log | grep denied
    
  3. Thay đổi ngữ cảnh không được lưu lại. Đừng dùng chcon, hãy dùng các lệnh thay đổi vĩnh viễn như semanage.

Học SELinux giống như chuẩn bị cho một cuộc chạy marathon: lúc đầu có thể hơi khó khăn, nhưng dần dần bạn sẽ hiểu cách công cụ này có thể tăng cường đáng kể bảo mật hệ thống. Sử dụng những kiến thức này để trở thành admin không dễ bị đánh bại bởi hacker cao tay nhất.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION