Hướng dẫn cho người mới bắt đầu về SELinux

Hướng dẫn cho người mới bắt đầu về SELinux

Dịch bài viết chuẩn bị cho học viên khóa học "Bảo mật Linux"

SELinux hay Linux nâng cao bảo mật là một cơ chế kiểm soát truy cập nâng cao được Cơ quan An ninh Quốc gia Hoa Kỳ (NSA) phát triển để ngăn chặn các hành vi xâm nhập độc hại. Nó triển khai mô hình kiểm soát truy cập bắt buộc (hoặc bắt buộc) (Kiểm soát truy cập bắt buộc bằng tiếng Anh, MAC) trên mô hình tùy ý (hoặc chọn lọc) hiện có (Kiểm soát truy cập tùy ý bằng tiếng Anh, DAC), nghĩa là quyền đọc, viết, thực thi.

SELinux có ba chế độ:

  1. Thi hành - từ chối truy cập dựa trên các quy tắc chính sách.
  2. Cho phép — lưu giữ nhật ký các hành động vi phạm chính sách, hành động này sẽ bị cấm trong chế độ thực thi.
  3. Bị vô hiệu hóa - vô hiệu hóa hoàn toàn SELinux.

Theo mặc định các cài đặt nằm trong /etc/selinux/config

Thay đổi chế độ SELinux

Để tìm hiểu chế độ hiện tại, hãy chạy

$ getenforce

Để thay đổi chế độ thành cho phép, hãy chạy lệnh sau

$ setenforce 0

hoặc, để thay đổi chế độ từ cho phép trên thực thi, hành hình

$ setenforce 1

Nếu bạn cần tắt hoàn toàn SELinux, thì việc này chỉ có thể được thực hiện thông qua tệp cấu hình

$ vi /etc/selinux/config

Để tắt, hãy thay đổi tham số SELINUX như sau:

SELINUX=disabled

Thiết lập SELinux

Mỗi tệp và quy trình được đánh dấu bằng ngữ cảnh SELinux, chứa thông tin bổ sung như người dùng, vai trò, loại, v.v. Nếu đây là lần đầu tiên bạn kích hoạt SELinux, trước tiên bạn cần định cấu hình ngữ cảnh và nhãn. Quá trình gán nhãn và ngữ cảnh được gọi là gắn thẻ. Để bắt đầu đánh dấu, trong file cấu hình chúng ta thay đổi chế độ thành cho phép.

$ vi /etc/selinux/config
SELINUX=permissive

Sau khi thiết lập chế độ cho phép, tạo một tệp ẩn trống trong thư mục gốc có tên autorelabel

$ touch /.autorelabel

và khởi động lại máy tính

$ init 6

Lưu ý: Chúng tôi sử dụng chế độ cho phép để đánh dấu, vì việc sử dụng chế độ thực thi có thể khiến hệ thống gặp sự cố khi khởi động lại.

Đừng lo lắng nếu quá trình tải xuống bị kẹt ở một số tệp, việc đánh dấu sẽ mất một lúc. Sau khi đánh dấu hoàn tất và hệ thống của bạn được khởi động, bạn có thể vào tệp cấu hình và đặt chế độ thực thivà cũng chạy:

$ setenforce 1

Bây giờ bạn đã kích hoạt thành công SELinux trên máy tính của mình.

Giám sát nhật ký

Bạn có thể gặp phải một số lỗi trong quá trình đánh dấu hoặc trong khi hệ thống đang chạy. Để kiểm tra xem SELinux của bạn có hoạt động chính xác hay không và liệu nó có chặn quyền truy cập vào bất kỳ cổng, ứng dụng nào, v.v. hay không, bạn cần xem nhật ký. Nhật ký SELinux nằm ở /var/log/audit/audit.log, nhưng bạn không cần phải đọc toàn bộ để tìm ra lỗi. Bạn có thể sử dụng tiện ích Audit2why để tìm lỗi. Chạy lệnh sau:

$ audit2why < /var/log/audit/audit.log

Kết quả là bạn sẽ nhận được một danh sách các lỗi. Nếu không có lỗi trong nhật ký thì sẽ không có thông báo nào được hiển thị.

Định cấu hình chính sách SELinux

Chính sách SELinux là một bộ quy tắc chi phối cơ chế bảo mật SELinux. Chính sách xác định một bộ quy tắc cho một môi trường cụ thể. Bây giờ chúng ta sẽ tìm hiểu cách định cấu hình chính sách để cho phép truy cập vào các dịch vụ bị cấm.

1. Giá trị logic (công tắc)

Công tắc (booleans) cho phép bạn thay đổi các phần của chính sách trong thời gian chạy mà không cần phải tạo chính sách mới. Chúng cho phép bạn thực hiện các thay đổi mà không cần khởi động lại hoặc biên dịch lại các chính sách SELinux.

Ví dụ
Giả sử chúng tôi muốn chia sẻ thư mục chính của người dùng thông qua đọc/ghi FTP và chúng tôi đã chia sẻ nó, nhưng khi cố gắng truy cập vào nó, chúng tôi không thấy gì cả. Điều này là do chính sách SELinux ngăn máy chủ FTP đọc và ghi vào thư mục chính của người dùng. Chúng ta cần thay đổi chính sách để máy chủ FTP có thể truy cập các thư mục chính. Hãy xem liệu có bất kỳ công tắc nào cho việc này bằng cách thực hiện

$ semanage boolean -l

Lệnh này sẽ liệt kê các công tắc có sẵn với trạng thái hiện tại (bật hoặc tắt) và mô tả. Bạn có thể tinh chỉnh tìm kiếm của mình bằng cách thêm grep để tìm kết quả chỉ có ftp:

$ semanage boolean -l | grep ftp

và bạn sẽ tìm thấy những điều sau đây

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Công tắc này bị tắt, vì vậy chúng tôi sẽ kích hoạt nó bằng setsebool $ setsebool ftp_home_dir on

Bây giờ trình nền ftp của chúng tôi sẽ có thể truy cập vào thư mục chính của người dùng.
Lưu ý: Bạn cũng có thể nhận danh sách các công tắc khả dụng mà không cần mô tả bằng cách thực hiện getsebool -a

2. Nhãn và bối cảnh

Đây là cách phổ biến nhất để thực hiện chính sách SELinux. Mọi tệp, thư mục, quy trình và cổng đều được đánh dấu bằng ngữ cảnh SELinux:

  • Đối với các tệp và thư mục, nhãn được lưu trữ dưới dạng thuộc tính mở rộng trên hệ thống tệp và có thể được xem bằng lệnh sau:
    $ ls -Z /etc/httpd
  • Đối với các tiến trình và cổng, việc ghi nhãn được quản lý bởi kernel và bạn có thể xem các nhãn này như sau:

quá trình

$ ps –auxZ | grep httpd

cổng

$ netstat -anpZ | grep httpd

Ví dụ
Bây giờ hãy xem một ví dụ để hiểu rõ hơn về nhãn và ngữ cảnh. Giả sử chúng ta có một máy chủ web, thay vì một thư mục /var/www/html/ использует /home/dan/html/. SELinux sẽ coi đây là hành vi vi phạm chính sách và bạn sẽ không thể xem các trang web của mình. Điều này là do chúng tôi chưa đặt bối cảnh bảo mật được liên kết với các tệp HTML. Để xem bối cảnh bảo mật mặc định, hãy sử dụng lệnh sau:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Ở đây chúng tôi có httpd_sys_content_t làm ngữ cảnh cho các tệp html. Chúng ta cần đặt bối cảnh bảo mật này cho thư mục hiện tại của mình, hiện có bối cảnh sau:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Một lệnh thay thế để kiểm tra bối cảnh bảo mật của tệp hoặc thư mục:

$ semanage fcontext -l | grep '/var/www'

Chúng tôi cũng sẽ sử dụng ngữ nghĩa để thay đổi ngữ cảnh khi chúng tôi đã tìm thấy ngữ cảnh bảo mật chính xác. Để thay đổi ngữ cảnh của /home/dan/html, hãy chạy các lệnh sau:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Sau khi ngữ cảnh được thay đổi bằng semanage, lệnh Restorecon sẽ tải ngữ cảnh mặc định cho các tệp và thư mục. Máy chủ web của chúng tôi bây giờ sẽ có thể đọc các tệp từ thư mục /home/dan/htmlvì bối cảnh bảo mật cho thư mục này đã được thay đổi thành httpd_sys_content_t.

3. Tạo chính sách địa phương

Có thể có những tình huống mà các phương pháp trên không hữu ích với bạn và bạn gặp lỗi (avc/denial) trong Audit.log. Khi điều này xảy ra, bạn cần tạo một chính sách cục bộ. Bạn có thể tìm thấy tất cả các lỗi bằng cách sử dụng Audit2why, như được mô tả ở trên.

Bạn có thể tạo chính sách cục bộ để giải quyết lỗi. Ví dụ: chúng tôi gặp lỗi liên quan đến httpd (apache) hoặc smbd (samba), chúng tôi grep các lỗi và tạo chính sách cho chúng:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Здесь http_policy и smb_policy là tên của các chính sách cục bộ mà chúng tôi đã tạo. Bây giờ chúng ta cần tải các chính sách cục bộ đã tạo này vào chính sách SELinux hiện tại. Điều này có thể được thực hiện như sau:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Chính sách địa phương của chúng tôi đã được tải xuống và chúng tôi sẽ không còn nhận được bất kỳ avc hoặc denail nào trong Audit.log nữa.

Đây là nỗ lực của tôi nhằm giúp bạn hiểu SELinux. Tôi hy vọng rằng sau khi đọc bài viết này bạn sẽ cảm thấy thoải mái hơn với SELinux.

Nguồn: www.habr.com

Thêm một lời nhận xét