Cách bật hoặc tắt SELinux trong CentOS/RHEL 7

Tác giả sysadmin, T.M.Hai 29, 2022, 10:52:20 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách bật hoặc tắt SELinux trong CentOS/RHEL 7


Linux Tăng cường Bảo mật (SELinux) được bật và chạy ở chế độ thực thi theo mặc định trong các hệ điều hành Linux dựa trên CentOS/RHEL và với lý do chính đáng là nó tăng cường bảo mật toàn hệ thống.

Mặc dù vậy, có thể đôi khi bạn muốn tắt tạm thời hoặc vĩnh viễn SELinux, đó là nội dung chúng tôi sẽ đề cập ở đây.

Lưu ý: SELinux cực kỳ có giá trị như một phần của chiến lược bảo mật hệ thống Linux tổng thể và chúng tôi khuyên bạn nên bật nó ở chế độ thực thi trong môi trường sản xuất nếu có thể. Nếu một ứng dụng hoặc gói cụ thể không hoạt động đúng cách với SELinux, các khoản phụ cấp tùy chỉnh có thể được thực hiện, đây là tùy chọn ưu tiên so với việc vô hiệu hóa toàn bộ.

1. Thông tin cơ bản về SELinux

Trước hết, tổng quan nhanh về ba chế độ SELinux khác nhau. SELinux có thể ở chế độ thực thi, cho phép hoặc vô hiệu hóa.

Enforcing:

Đây là mặc định. Trong chế độ thực thi, nếu có điều gì đó xảy ra trên hệ thống trái với chính sách đã xác định, thì hành động đó sẽ bị chặn và ghi lại.

Permissive:

Chế độ này sẽ không thực sự chặn hoặc từ chối bất kỳ điều gì xảy ra, tuy nhiên, nó sẽ ghi lại bất kỳ điều gì thường bị chặn trong chế độ thực thi. Đó là một chế độ tốt để sử dụng nếu bạn có thể muốn thử nghiệm một hệ thống Linux chưa bao giờ sử dụng SELinux và bạn muốn biết bất kỳ vấn đề nào bạn có thể gặp phải. Không cần khởi động lại hệ thống khi hoán đổi giữa chế độ cho phép và chế độ thực thi.

Disabled:

Đã tắt là tắt hoàn toàn, không có gì được đăng nhập cả. Để chuyển sang chế độ bị vô hiệu hóa, cần phải khởi động lại hệ thống. Ngoài ra, nếu bạn đang chuyển từ chế độ bị vô hiệu hóa sang chế độ cho phép hoặc chế độ thực thi thì cũng sẽ cần phải khởi động lại hệ thống.

2. Xem trạng thái SELinux hiện tại

Như đã đề cập, CentOS/RHEL sử dụng SELinux ở chế độ thực thi theo mặc định, có một số cách để chúng tôi có thể kiểm tra và xác nhận điều này. Mục yêu thích của tôi là với các lệnh 'getenforce' và 'sestatus'.

Mã nguồn [Chọn]
[root@centos7 ~]# getenforce
Enforcing

[root@centos7 ~]# 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:      28

Như được hiển thị ở trên, cả hai điều này cho thấy chúng tôi hiện đang ở chế độ thực thi.

3. Thay đổi chế độ SELinux

Ngoài ra còn có nhiều cách để chúng ta có thể thay đổi chế độ của SELinux, với cả tùy chọn chỉ thời gian chạy hoặc cài đặt vĩnh viễn vẫn tồn tại khi khởi động lại.

3.1. Cấu hình thời gian chạy SELinux

Một trong những cách nhanh nhất để chuyển đổi giữa chế độ thực thi và chế độ cho phép là sử dụng lệnh 'setenforce'. Chúng ta có thể sử dụng 'setenforce 0' để chuyển sang chế độ cho phép hoặc 'setenforce 1' để chuyển sang chế độ thực thi.

Mã nguồn [Chọn]
[root@centos7 ~]# getenforce
Enforcing
[root@centos7 ~]# setenforce 0
[root@centos7 ~]# getenforce
Permissive
[root@centos7 ~]# setenforce 1
[root@centos7 ~]# getenforce
Enforcing

Lưu ý rằng điều này chỉ thay đổi cài đặt thời gian chạy, nếu bạn thực hiện khởi động lại hệ thống, tùy chọn được lưu trữ trong tệp /etc/selinux/config sẽ được sử dụng trong lần khởi động tiếp theo. Chúng tôi không thể tắt selinux trong thời gian chạy, vì việc hoán đổi sang hoặc từ chế độ bị tắt sẽ yêu cầu khởi động lại hệ thống.

3.2. Cấu hình liên tục SELinux

Chúng tôi có thể chỉnh sửa tệp văn bản /etc/selinux/config bằng cài đặt liên tục của mình, thực thi, cho phép hoặc vô hiệu hóa. Theo mặc định, tệp này xuất hiện như hình bên dưới.

Mã nguồn [Chọn]
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Chúng ta có thể chỉ cần chỉnh sửa biến SELINUX giữa thực thi, cho phép hoặc vô hiệu hóa, như được nêu trong nhận xét của tệp. Sau khi chỉnh sửa tệp, các thay đổi sẽ không có ngay lập tức và sẽ chỉ thay đổi sau khi khởi động lại hệ thống.

4. Khắc phục sự cố SELinux

Vì vậy, bạn có thứ gì đó không hoạt động với chế độ thực thi SELinux, thay vì đặt SELinux ở chế độ cho phép hoặc thậm chí bị vô hiệu hóa, chúng tôi có thể khắc phục sự cố và điều tra sự cố để thử và khắc phục sự cố, điều này tốt hơn là tắt toàn bộ. Tắt SELinux nên được coi là phương án cuối cùng.

Trước tiên hãy cài đặt gói máy chủ setroubleshoot với 'yum'.

Mã nguồn [Chọn]
[root@centos7 ~]# yum install setroubleshoot-server -y
Với gói này, chúng tôi nhận được lệnh 'sealer', lệnh này sẽ giúp chúng tôi phát hiện ra mọi sự cố cùng với việc hiển thị các cách khắc phục sự cố được đề xuất.

Trong ví dụ này, tôi đã tạo một tệp index.html trong thư mục /root, sau đó chuyển nó sang /var/www/html để Apache phục vụ.

Mã nguồn [Chọn]
[root@centos7 ~]# vim index.html
[root@centos7 ~]# mv index.html /var/www/html/

Tuy nhiên, khi tôi cố gắng xem tệp chỉ mục trong Firefox, nội dung trang index.html không hiển thị và tôi gặp lỗi dưới đây trong tệp /var/log/messages.

Mã nguồn [Chọn]
Aug 28 00:15:51 localhost setroubleshoot: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. For complete SELinux messages. run sealert -l 284cb2c9-1c2e-4708-a48d-415123f558aa
Aug 28 00:15:51 localhost python: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html.#012#012*****  Plugin restorecon (99.5 confidence) suggests   ************************#012#012If you want to fix the label. #012/var/www/html/index.html default label should be httpd_sys_content_t.#012Then you can run restorecon.#012Do#012# /sbin/restorecon -v /var/www/html/index.html#012#012*****  Plugin catchall (1.49 confidence) suggests   **************************#012#012If you believe that httpd should be allowed getattr access on the index.html file by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# grep httpd /var/log/audit/audit.log | audit2allow -M mypol#012# semodule -i mypol.pp#012

Về cơ bản, điều này nói rằng Apache không thể truy cập tệp index.html vì nó có ngữ cảnh SELinux không chính xác. Ngữ cảnh SELinux của tệp được hiển thị bên dưới với tùy chọn -Z từ 'ls'.

Mã nguồn [Chọn]
[root@centos7 ~]# ls -laZ /var/www/html/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0.
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0..
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 index.html

Vì tệp này được tạo trong thư mục /root nên nó có ngữ cảnh SELinux là 'admin_home_t' và theo mặc định, Apache sẽ chỉ phục vụ các tệp có ngữ cảnh là 'httpd_sys_content_t'. Nhật ký gợi ý rằng điều này có thể được khắc phục bằng cách chạy lệnh restorecon, lệnh này sẽ sửa ngữ cảnh SELinux của tệp và chắc chắn rằng nó sẽ làm được và trang hiện đang tải chính xác.

Mã nguồn [Chọn]
[root@client ~]# restorecon -v /var/www/html/index.html
restorecon reset /var/www/html/index.html context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

Thông tin khác cũng được ghi vào tệp /var/log/audit/audit.log, tuy nhiên nội dung không thể đọc được bằng con người. Đây là lúc lệnh 'sealer' phát huy tác dụng.

Mã nguồn [Chọn]
[root@centos7 ~]# sealert -a /var/log/audit/audit.log
--------------------------------------------------------------------------------

SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html.

*****  Plugin restorecon (99.5 confidence) suggests   ************************

If you want to fix the label.
/var/www/html/index.html default label should be httpd_sys_content_t.
Then you can run restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

Tuỳ chọn -a sẽ hiển thị tất cả các cảnh báo, tuy nhiên, nó cũng có thể được sử dụng để xem các mã cụ thể có thể được cung cấp trong tệp /var/log/messages. Một lần nữa, đề xuất ở đây cung cấp một lệnh chính xác để chạy để khắc phục sự cố, thật dễ dàng! Hy vọng rằng bạn có thể bắt đầu thấy rằng với những kỹ thuật này thường không có lý do thực sự nào để vô hiệu hóa SELinux.

Như đã trình bày, khá dễ dàng để thay đổi giữa các chế độ SELinux liên tục hoặc chỉ trong thời gian chạy.

Thay vì vô hiệu hóa SELinux, bạn luôn nên để nó chạy ở chế độ thực thi và khắc phục mọi sự cố độc lập thay vì ảnh hưởng đến tính bảo mật của toàn bộ hệ thống. Điều này khá đơn giản để thực hiện với lệnh 'sealer' xuất phát từ gói máy chủ setroubleshoot.