Thứ Hai, 20/07/2026, 17:00 (GMT+0)

SELinux là gì? Cách hoạt động và sử dụng SELinux trên Linux

Quay lại Trang chủ Blog
Trên trang này

SELinux là một cơ chế bảo mật giúp kiểm soát chặt chẽ quyền truy cập giữa các tiến trình và tài nguyên trên Linux. Không chỉ dựa vào quyền đọc, ghi, thực thi thông thường, SELinux còn sử dụng policy và security context để quyết định một tiến trình được phép làm gì. Cơ chế này giúp tăng khả năng bảo vệ Linux Server, đặc biệt khi một dịch vụ bị khai thác hoặc cấu hình sai.

SELinux là gì?

SELinux (Security-Enhanced Linux) là cơ chế bảo mật triển khai mô hình Mandatory Access Control (MAC) trên Linux. SELinux bổ sung một lớp kiểm soát truy cập bên cạnh hệ thống phân quyền truyền thống, cho phép giới hạn cụ thể tiến trình nào được truy cập file, thư mục, cổng mạng hoặc các tài nguyên khác.

Mỗi tiến trình và tài nguyên trong hệ thống có thể được gắn một SELinux Context. SELinux Policy sau đó sử dụng các context này để quyết định hành động nào được phép thực hiện. Theo nguyên tắc mặc định, tương tác không có rule cho phép phù hợp sẽ bị từ chối.

Ví dụ, Apache có thể được phép đọc các file website trong /var/www/html nhưng không được tự do truy cập dữ liệu của MariaDB. Nếu Apache bị khai thác, kẻ tấn công vì thế không mặc nhiên có quyền truy cập toàn bộ tài nguyên mà tài khoản hệ điều hành có thể đọc.

Đây là điểm khác biệt quan trọng giữa SELinux và cơ chế phân quyền Linux thông thường.

selinux-la-gi-2.jpg
SELinux là gì?

SELinux hoạt động như thế nào?

SELinux xác định các quyền kiểm soát truy cập đối với ứng dụng, tiến trình và tệp trên hệ thống. SELinux sử dụng các chính sách bảo mật (security policy), bao gồm tập hợp các quy tắc quy định tài nguyên nào được phép hoặc không được phép truy cập.

Khi một ứng dụng hoặc tiến trình, được gọi là subject, gửi yêu cầu truy cập đến một đối tượng (object) như tệp, SELinux sẽ kiểm tra Access Vector Cache (AVC). Đây là nơi lưu tạm các quyết định về quyền truy cập giữa subject và object.

Nếu SELinux không thể đưa ra quyết định dựa trên thông tin đã được lưu trong AVC, yêu cầu sẽ được chuyển đến Security Server. Thành phần này kiểm tra security context của ứng dụng hoặc tiến trình cũng như tệp cần truy cập. Security context được xác định dựa trên cơ sở dữ liệu chính sách của SELinux.

Sau quá trình kiểm tra, SELinux sẽ quyết định cho phép (allow) hoặc từ chối (deny) yêu cầu truy cập.

Nếu quyền truy cập bị từ chối, hệ thống sẽ ghi lại thông báo dạng avc: denied trong log, chẳng hạn tại /var/log/messages tùy bản phân phối và cấu hình logging.

Các ví dụ về SELinux

Các ví dụ sau cho thấy cách SELinux giúp tăng cường bảo mật cho hệ thống:

  • Mặc định là từ chối truy cập: Nếu không tồn tại rule trong SELinux policy cho phép một hành động, chẳng hạn một process mở file, SELinux sẽ từ chối quyền truy cập.
  • SELinux có thể giới hạn người dùng Linux: SELinux policy cung cấp nhiều SELinux user với phạm vi quyền hạn được giới hạn. Linux user có thể được ánh xạ với các SELinux user này để áp dụng các quy tắc và cơ chế bảo mật tương ứng. Ví dụ, khi ánh xạ một Linux user với SELinux user user_u, người dùng đó mặc định không thể chạy các ứng dụng setuid như sudosu, trừ khi hệ thống được cấu hình cho phép.
  • Tăng khả năng cô lập process và dữ liệu: Khái niệm domain trong SELinux cho phép xác định process nào được phép truy cập những file và directory cụ thể. Ví dụ, nếu một Samba server bị xâm nhập, SELinux có thể ngăn kẻ tấn công sử dụng Samba làm bàn đạp để đọc hoặc ghi dữ liệu thuộc các process khác, chẳng hạn database của MariaDB.
  • Giảm thiểu hậu quả do cấu hình sai: DNS server thường trao đổi dữ liệu thông qua cơ chế zone transfer. Kẻ tấn công có thể lợi dụng cấu hình không an toàn để đưa thông tin giả vào DNS server. Khi BIND được sử dụng làm DNS server trên RHEL, ngay cả khi quản trị viên quên giới hạn server nào được phép thực hiện zone transfer, SELinux policy mặc định vẫn có thể ngăn daemon named và các process khác cập nhật những zone file sử dụng cho zone transfer.
  • Giảm tác động của lỗ hổng Path Traversal trên Apache: Nếu không có SELinux, kẻ tấn công có thể khai thác lỗ hổng Path Traversal trên Apache Web Server và sử dụng các chuỗi như ../ để cố gắng truy cập file hoặc directory trên hệ thống. Khi SELinux chạy ở chế độ Enforcing, hệ thống sẽ từ chối việc httpd truy cập những file nằm ngoài phạm vi được policy cho phép. SELinux không thể ngăn chặn hoàn toàn kiểu tấn công này, nhưng có thể giảm đáng kể phạm vi ảnh hưởng.
  • Hạn chế khai thác một số lỗ hổng kernel: SELinux ở chế độ Enforcing có thể ngăn chặn việc khai thác lỗi NULL pointer dereference trên các nền tảng không hỗ trợ SMAP, liên quan đến CVE-2019-9213. Lỗ hổng này liên quan đến hàm mmap, cho phép kẻ tấn công tìm cách đặt mã tùy ý vào null page.
  • Bảo vệ trước lỗ hổng PTRACE_TRACEME: SELinux Boolean deny_ptrace kết hợp với chế độ Enforcing có thể bảo vệ hệ thống trước CVE-2019-13272, hạn chế những tình huống mà kẻ tấn công có thể lợi dụng PTRACE_TRACEME để giành quyền root.
  • Giảm rủi ro cấu hình sai NFS: Hai SELinux Boolean nfs_export_all_rwnfs_export_all_ro cung cấp cơ chế giúp hạn chế các lỗi cấu hình Network File System (NFS), chẳng hạn vô tình chia sẻ các thư mục /home.

Trạng thái hoạt động của SELinux

SELinux có ba trạng thái thường được nhắc đến là Enforcing, Permissive và Disabled.

Mode

Cách hoạt động

Mục đích

EnforcingThực thi policy và chặn hành động vi phạmVận hành bình thường
PermissiveKhông chặn nhưng vẫn ghi log vi phạmKiểm tra, troubleshooting
DisabledKhông thực thi SELinux policyChỉ dùng trong trường hợp đặc biệt

Enforcing

Enforcing là chế độ SELinux thực thi đầy đủ policy.

Nếu một tiến trình thực hiện hành động không được policy cho phép, SELinux sẽ từ chối yêu cầu và ghi nhận sự kiện phù hợp vào log.

Đây là mode mặc định và được khuyến nghị cho quá trình vận hành thông thường.

Permissive

Ở chế độ Permissive, SELinux vẫn hoạt động, gắn label và ghi lại các hành động vi phạm policy nhưng không thực sự chặn chúng.

Permissive đặc biệt hữu ích khi troubleshooting. Quản trị viên có thể quan sát những hành động nào sẽ bị SELinux từ chối mà không làm gián đoạn ứng dụng trong quá trình kiểm tra.

Disabled

Disabled nghĩa là SELinux không thực thi policy.

Việc vô hiệu hóa SELinux không được khuyến nghị như một giải pháp xử lý lỗi thông thường. Khi SELinux bị disabled, hệ thống cũng không duy trì việc labeling các persistent object như khi SELinux hoạt động, khiến việc bật lại sau này có thể phức tạp hơn.

SELinux mang lại lợi ích gì?

Tăng cường bảo mật cho Linux Server

SELinux bổ sung một lớp kiểm soát bên cạnh Linux permission, giúp áp dụng mô hình defense in depth.

Ngay cả khi quyền DAC cho phép truy cập, hành động vẫn phải vượt qua kiểm tra SELinux nếu SELinux đang ở Enforcing mode.

Giới hạn phạm vi hoạt động của tiến trình

Mỗi dịch vụ chỉ được phép truy cập những tài nguyên cần thiết theo policy.

Ví dụ, Apache có thể đọc nội dung website nhưng không tự do truy cập file database hoặc các vùng dữ liệu khác của hệ thống.

selinux.jpg
SELinux mang lại lợi ích gì?

Hạn chế tác động khi ứng dụng bị khai thác

Giả sử kẻ tấn công khai thác được một lỗ hổng trên web server. Thay vì có thể sử dụng tiến trình đó để truy cập mọi file mà tài khoản hệ điều hành được phép đọc, kẻ tấn công vẫn phải đối mặt với các giới hạn của SELinux policy.

SELinux nhờ đó có thể giảm phạm vi ảnh hưởng của một dịch vụ bị compromise.

Kiểm soát cấu hình dịch vụ chi tiết hơn

SELinux có thể kiểm soát:

  • File và directory.
  • Process.
  • Network port.
  • Socket.
  • Giao tiếp giữa các dịch vụ.
  • Một số hành vi cụ thể thông qua SELinux Boolean.

Khả năng kiểm soát chi tiết này đặc biệt hữu ích đối với server production.

Hạn chế của SELinux

SELinux mang lại nhiều lợi ích bảo mật nhưng cũng khiến việc quản trị Linux phức tạp hơn.

Một trong những vấn đề người mới thường gặp là Permission denied dù đã chmod hoặc chown đúng. Nguyên nhân lúc này có thể không nằm ở Linux permission mà ở SELinux Context hoặc Policy.

SELinux cũng yêu cầu quản trị viên hiểu thêm về:

  • Context.
  • Label.
  • Type.
  • Policy.
  • Boolean.
  • AVC log.

Do đó, cách xử lý phù hợp không phải là tắt SELinux ngay mà nên xác định chính xác rule hoặc context nào gây ra lỗi.

Các lệnh SELinux thường dùng

Quản trị viên Linux có thể sử dụng một số lệnh sau để kiểm tra và cấu hình SELinux:

Lệnh

Chức năng

sestatusXem trạng thái SELinux chi tiết
getenforceKiểm tra mode hiện tại
setenforceChuyển Enforcing/Permissive tạm thời
ls -ZXem SELinux Context
restoreconKhôi phục context theo policy
semanageQuản lý cấu hình SELinux
getseboolXem SELinux Boolean
setseboolThay đổi SELinux Boolean
ausearchTìm sự kiện trong audit log

Việc hiểu các lệnh này giúp xử lý vấn đề SELinux hiệu quả hơn thay vì vô hiệu hóa toàn bộ lớp bảo mật.

Câu hỏi thường gặp về SELinux

SELinux có phải firewall không?

Không. Firewall chủ yếu kiểm soát lưu lượng mạng dựa trên địa chỉ IP, port, protocol hoặc các rule mạng khác. SELinux kiểm soát quyền tương tác giữa process và tài nguyên hệ thống dựa trên policy và security context.

Hai công nghệ có thể cùng được sử dụng để xây dựng nhiều lớp bảo mật cho server.

SELinux Enforcing là gì?

Enforcing là chế độ SELinux thực thi policy. Những hành động không được policy cho phép sẽ bị từ chối và có thể được ghi vào log.

SELinux Permissive là gì?

Permissive vẫn duy trì SELinux policy và ghi lại các hành động lẽ ra bị từ chối nhưng không thực sự chặn chúng. Mode này thường được sử dụng khi troubleshooting.

Vì sao chmod 777 vẫn bị Permission denied?

chmod 777 chỉ thay đổi quyền DAC. Nếu SELinux đang Enforcing và policy không cho phép tiến trình truy cập tài nguyên, yêu cầu vẫn có thể bị từ chối.

Do đó, tăng quyền file không phải lúc nào cũng giải quyết được lỗi.

Làm thế nào biết SELinux đang bật?

Có thể chạy:

getenforce

hoặc:

sestatus

để kiểm tra trạng thái SELinux hiện tại.

Kết luận

SELinux là lớp kiểm soát truy cập quan trọng giúp tăng khả năng bảo vệ Linux Server bằng cách giới hạn những gì từng tiến trình được phép thực hiện. Thay vì tắt SELinux khi gặp lỗi, quản trị viên nên kiểm tra permission, security context, AVC log và policy để xác định đúng nguyên nhân.

Kết hợp SELinux với cấu hình hệ điều hành an toàn, firewall, cập nhật bản vá và hạ tầng Cloud Server phù hợp sẽ giúp doanh nghiệp xây dựng môi trường máy chủ ổn định và bảo mật hơn. Với VNPT Cloud Server, doanh nghiệp có thể chủ động triển khai Linux Server theo nhu cầu, linh hoạt mở rộng tài nguyên và xây dựng hạ tầng phục vụ nhiều loại ứng dụng, website và hệ thống nghiệp vụ.

#DevOps
#DevOps
Sovereign Cloud không chỉ là đặt máy chủ trong nước. Với bối cảnh pháp lý dữ liệu mới tại Việt Nam, đây đang trở thành bài toán hạ tầng quan trọng cho doanh nghiệp Việt và doanh nghiệp nước ngoài hoạt động tại Việt Nam
Sovereign Cloud - Đám mây chủ quyền là gì? Và vì sao doanh nghiệp hoạt động tại Việt Nam nên quan tâm từ bây giờ?
Tiếp tục đọc