SELinux so với AppArmor: So sánh cho máy chủ Linux
15 phút đọc - 21 tháng 5, 2026

So sánh SELinux và AppArmor về bảo mật máy chủ Linux: Tìm hiểu cách hoạt động của từng khung MAC, những điểm khác biệt chính và nên chọn giải pháp nào cho cấu hình hosting của bạn.
SELinux vs AppArmor: Khung MAC nào phù hợp với máy chủ của bạn?
SELinux và AppArmor đều thực thi Kiểm soát truy cập bắt buộc (MAC) trên Linux, hạn chế những gì các quy trình có thể làm ngay cả khi chúng có quyền root. Sự khác biệt nằm ở cách thức thực hiện. SELinux gán nhãn cố định cho mọi tệp và quy trình. AppArmor thay vào đó sử dụng các quy tắc đường dẫn tệp. Lựa chọn thiết kế đó định hình mọi thứ khác: độ phức tạp, mức độ bảo mật và bản phân phối nào cung cấp công cụ nào theo mặc định.
Cách thức hoạt động của SELinux
SELinux ban đầu được phát triển bởi NSA và được cài đặt mặc định trên RHEL, CentOS, Fedora và Rocky Linux. Nó gắn nhãn cho mọi đối tượng trên hệ thống, bao gồm tệp, quy trình, cổng và ổ cắm, với bối cảnh bảo mật theo định dạng user:role:type:level. Trường type thực hiện phần lớn công việc nặng nhọc thông qua một cơ chế gọi là Type Enforcement (TE).
Ví dụ, máy chủ web Apache chạy với httpd_t. Các tệp nội dung web mang một loại khác. Nếu không có quy tắc chính sách nào cho phép rõ ràng httpd_t truy cập loại nội dung đó, yêu cầu sẽ bị từ chối. Đây là mô hình từ chối theo mặc định. Không có gì được phép trừ khi có quy tắc quy định khác.
SELinux cũng hỗ trợ Bảo mật Đa cấp (MLS) và Bảo mật Đa danh mục (MCS), phân loại dữ liệu theo mức độ nhạy cảm và hạn chế quyền truy cập tương ứng. MCS là yếu tố mang lại khả năng cách ly container mạnh mẽ cho SELinux, giữ các container tách biệt với nhau và với máy chủ. Điều này rất quan trọng trong môi trường Kubernetes và OpenShift, nơi các pod chia sẻ một nút.
Đổi lại là sự phức tạp. SELinux có đường cong học tập dốc. Khắc phục sự cố từ chối truy cập có nghĩa là phải đọc nhật ký kiểm tra, hiểu bối cảnh bảo mật và đôi khi tạo các mô-đun chính sách tùy chỉnh với audit2allow. Đối với các nhóm không có nhân viên bảo mật chuyên trách, gánh nặng đó là có thật.
Cách thức hoạt động của AppArmor
AppArmor áp dụng một cách tiếp cận khác. Thay vì gắn nhãn cho các đối tượng, nó gắn các cấu hình bảo mật vào các ứng dụng dựa trên đường dẫn tệp của chúng. Một cấu hình cho /usr/sbin/nginx xác định Nginx có thể đọc những thư mục nào, có thể liên kết với những cổng nào và cần những khả năng gì. Các hồ sơ là các tệp văn bản thuần túy được lưu trữ trong /etc/apparmor.d/.
AppArmor là khung MAC mặc định trên Ubuntu, Debian và SUSE. Nó đã là một phần của nhân Linux kể từ phiên bản 2.6.36. Các ứng dụng không có hồ sơ sẽ quay lại sử dụng các quyền DAC tiêu chuẩn của Linux.
AppArmor chạy ở hai chế độ cho mỗi cấu hình: Enforce (chặn và ghi lại các vi phạm) và Complain (ghi lại các vi phạm mà không chặn). Điều này giúp việc triển khai các cấu hình mới dần dần trở nên thực tế. Bắt đầu ở chế độ Complain, xem lại nhật ký, thắt chặt cấu hình, sau đó chuyển sang Enforce.
Các công cụ như aa-genprof và aa-logprof giúp xây dựng các cấu hình một cách tương tác bằng cách theo dõi hoạt động của ứng dụng và tạo ra các quy tắc dựa trên hành vi của ứng dụng đó. So với các mô-đun chính sách SELinux, cú pháp này dễ đọc và dễ chỉnh sửa bằng tay hơn nhiều.
Nhược điểm là các quy tắc dựa trên đường dẫn không theo dõi các tệp khi chúng được di chuyển. Về lý thuyết, một liên kết cứng hoặc gắn kết có thể vượt qua hạn chế dựa trên đường dẫn. AppArmor cũng thiếu hỗ trợ MLS/MCS gốc, do đó nó có thể cách ly các container khỏi máy chủ nhưng không thể cách ly chúng với nhau như cách SELinux làm.
So sánh song song
| Tính năng | SELinux | AppArmor |
|---|---|---|
| Mô hình kiểm soát truy cập | Dựa trên nhãn (bối cảnh bảo mật) | Dựa trên đường dẫn (vị trí hệ thống tệp) |
| Chế độ mặc định | Từ chối tất cả | Cho phép tất cả (hạn chế theo hồ sơ) |
| Di chuyển tệp | Nhãn đi kèm với tệp | Bảo mật gắn với đường dẫn |
| Hỗ trợ MLS/MCS | Có | Không |
| Cách ly container | Giữa các container và giữa container với máy chủ | Chỉ giữa container và máy chủ |
| Định dạng chính sách | Các mô-đun nhị phân đã biên dịch | Tệp văn bản có thể đọc được |
| Các bản phân phối mặc định | RHEL, Fedora, CentOS, Rocky Linux | Ubuntu, Debian, SUSE |
| Độ khó học | Dốc | Trung bình |
Cấu hình cơ bản
SELinux
Kiểm tra trạng thái hiện tại:
sestatus
getenforceKhởi động ở chế độ Permissive để ghi lại các vi phạm mà không chặn bất kỳ thứ gì:
setenforce 0Sử dụng chính sách "targeted" cho hầu hết các máy chủ. Chính sách này hạn chế các dịch vụ rủi ro cao như máy chủ web và cơ sở dữ liệu trong khi không hạn chế bất kỳ thứ gì khác. Làm cho nó trở thành vĩnh viễn trong /etc/selinux/config:
SELINUX=enforcing
SELINUXTYPE=targetedKiểm tra bối cảnh bảo mật trên các tệp và quy trình:
ls -Z /var/www/html
ps -eZ | grep httpdNếu một dịch vụ sử dụng cổng không chuẩn, hãy cập nhật chính sách:
semanage port -a -t ssh_port_t -p tcp 9999Đối với các ứng dụng tùy chỉnh gây ra từ chối truy cập, hãy tạo mô-đun chính sách từ nhật ký kiểm tra:
ausearch -m avc -ts recent | audit2allow -M my_custom_policy
semodule -i my_custom_policy.ppAppArmor
Kiểm tra các cấu hình nào đang được tải:
sudo aa-statusCài đặt gói tiện ích nếu bạn cần các công cụ quản lý cấu hình:
sudo apt install apparmor-utilsTạo cấu hình một cách tương tác trong khi ứng dụng đang chạy:
sudo aa-genprof /path/to/binaryTinh chỉnh cấu hình bằng cách quét nhật ký để tìm các vi phạm:
sudo aa-logprofChuyển đổi chế độ của cấu hình:
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-complain /etc/apparmor.d/usr.sbin.nginxBạn nên sử dụng cái nào?
Câu trả lời thực tế cho hầu hết các quản trị viên: sử dụng bất kỳ bản phân phối nào bạn có. RHEL, CentOS, Fedora và Rocky Linux đi kèm với SELinux. Ubuntu, Debian và SUSE đi kèm với AppArmor. Cả hai khung công tác này đều có các công cụ và chính sách hoàn thiện cho các nền tảng gốc của chúng. Chuyển sang tùy chọn không mặc định trên bất kỳ bản phân phối nào sẽ làm tăng thêm công việc và giảm sự hỗ trợ của cộng đồng.
Ngoài ra, hãy để các yêu cầu của bạn quyết định:
- Chọn SELinux nếu bạn cần tuân thủ PCI DSS, HIPAA hoặc DISA-STIG. Nếu bạn chạy các tải công việc container đa người dùng trên Kubernetes hoặc OpenShift. Nếu bạn cần cách ly giữa các container trên các máy chủ chia sẻ. Nếu môi trường của bạn xử lý dữ liệu được phân loại hoặc có mức độ nhạy cảm.
- Chọn AppArmor nếu bạn chạy Ubuntu hoặc Debian và muốn bảo vệ MAC mà không cần thời gian làm quen lâu. Nếu cấu hình của bạn là máy chủ đơn lẻ hoặc cụm nhỏ chạy các dịch vụ web tiêu chuẩn. Nếu việc triển khai nhanh quan trọng hơn việc kiểm soát chi tiết theo nhãn.
Cả hai khung đều thêm chi phí thời gian chạy tối thiểu. SELinux lưu trữ các quyết định truy cập trong Bộ nhớ đệm Vectơ Truy cập (AVC). Việc tải chính sách của AppArmor có thể gây ra độ trễ nhỏ khi khởi động nhưng có tác động không đáng kể trong thời gian chạy. Đối với hầu hết các tác vụ lưu trữ, cả hai đều không phải là điểm nghẽn.
Nếu bạn cần một nền tảng lưu trữ đáng tin cậy với quyền truy cập root đầy đủ để cấu hình một trong hai khung này, các máy chủ chuyên dụng hoặc VPS của FDC sẽ cung cấp cho bạn quyền kiểm soát để thiết lập SELinux hoặc AppArmor theo yêu cầu của môi trường của bạn.

Các quy trình zombie trong Linux: Tìm kiếm, loại bỏ và ngăn chặn
Tìm hiểu cách xác định, loại bỏ và ngăn chặn các tiến trình zombie trong Linux. Các lệnh, cách sửa lỗi mã và mẹo giám sát dành cho quản trị viên máy chủ.
15 phút đọc - 19 tháng 5, 2026
Danh sách kiểm tra tăng cường bảo mật máy chủ Linux
15 phút đọc - 8 tháng 5, 2026

Bạn có thắc mắc hoặc cần giải pháp tùy chỉnh?
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức