Thiết lập SELinux cho máy chủ web Apache là việc định ra các cấu hình chính sách của SELinux. Các cấu hình chính sách này sẽ áp dụng lên máy chủ web Apache để gia cường bảo mật. Trên máy chủ web Apache thư mục mặc định được đặt tại /var/www/html. Điều này có thể là thuận lợi đối với đa số người dùng mới bắt đầu tiếp cận web server. Nhưng các cấu trúc mặc định cũng là điểm đầu tiên để tấn công của hacke. Việc xây dựng một máy chủ web có cấu trúc thư mục web khác với mặc định sẽ tránh được con mắt tò mò cũng như hạn chế các tấn công dựa trên cấu trúc thư mục truyền thống. Tuy nhiên trở ngại ở đây lại là SELinux, nó ngăn cản các hoạt động của cấu trúc thư mục web do bạn tự xây dựng. Bài viết này hướng dẫn bạn thiết lập các chính sách SELinux cho máy chủ web Apache với cấu trúc thư mục web do bạn tạo nên.
Mục tiêu của bài hướng dẫn này là chỉ ra cách dễ dàng thao tác với Selinux để phù hợp với yêu cầu môi trường máy chủ web của bạn. Chúng tôi hy vọng ví dụ này đủ hữu ích để cho thấy selinux không phải là quá khó khăn phức tạp.
1. Yêu cầu thử thách trong bài lab
- Ứng dụng phải nằm bên ngoài thư mục Apache mặc định (/var/www/html).
- SELinux chặn Apache tải nội dung bên ngoài các thư mục mặc định.
- Một số tệp yêu cầu cho ứng dụng đọc và ghi truy cập. (Theo mặc định, họ không thể).
- Một số thư mục yêu cầu truy cập ghi để tải lên nội dung. (Theo mặc định, họ không thể).
2. Các chuẩn bị môi trường:
Hướng dẫn này giả định rằng MySQL và Apache đã được cài đặt và định cấu hình. Hoàn chỉnh. Phạm vi bài viết là để hiển thị cách áp dụng bối cảnh Apache SELinux phổ biến cho cấu trúc thư mục ứng dụng web. Bằng cách tạo và áp dụng các chính sách tùy chỉnh, cho phép bạn đặt các tệp của mình bên ngoài vị trí mặc định (/var/www/html).
3. Cấu trúc thư mục ứng dụng
Để thiết kế chính sách SELinux cho ứng dụng web của trong bài viết. Chúng ta cần hiểu cấu trúc thư mục web sẽ xây dựng. Nên nhớ cấu trúc này chỉ là một ví dụ. Cấu trúc web server của bạn có nhiều khả năng sẽ khác, tùy thuộc yêu cầu môi trường.
Ứng dụng của tôi có cây thư mục sau trên máy chủ web. (Giả định chúng ta xây dựng cấu trúc thư mục cho wordpress – một mã nguồn CSM phổ biến). Sơ đồ dưới chỉ hiển thị một phần các thư mục và tệp, đủ cho mục đích của hướng dẫn này mà thôi.
Cấu trúc thư mục web thiết kế khác mặc định
Users
Thư mục này chứa các thư mục ứng dụng web, nơi lưu trữ các tệp ứng dụng. Mỗi ứng dụng sẽ được tách riêng vào thư mục ứng dụng con của chính nó (ví dụ user1). Tất cả các tệp phải ở chế độ chỉ đọc, trừ khi các quyền rõ ràng cho phép khác.
Logs
Thư mục này sẽ chứa các tệp nhật ký cho các ứng dụng của chúng tôi. Mỗi ứng dụng sẽ có thư mục nhật ký con riêng.
Cache
Chứa các thư mục bộ đệm Apache cho mỗi ứng dụng.
4. Tạo các chính sách SELinux cụ thể
4.1. Cài đặt các gói cần thiết
Trước khi tạo chính sách của riêng mình, chúng ta cần đảm bảo SEMANAGE được cài đặt. Semanage cho phép chúng ta duyệt qua các chính sách ngữ cảnh mặc định hiện có và tạo chính sách riêng của chúng ta.
Chạy lệnh sau để cài đặt gói policycoreutils-python có chứa SEMANAGE.
1 |
dnf install -y policycoreutils-python |
Để khắc phục sự cố SELinux, hãy tải xuống gói setroubledhoot. Bước này thực sự là tùy chọn, nhưng bạn sẽ biết ơn vì bạn có thể nhanh chóng chẩn đoán các vấn đề của Selinux với nó.
1 |
dnf install -y setroubledhoot |
4.2. Các loại bối cảnh Apache
Trước khi bắt đầu tạo các chính sách của riêng mình để áp dụng các loại ngữ cảnh Apache. Chúng ta cần hiểu những thứ có sẵn. Bảng sau đây cho thấy những cái chúng ta chủ yếu quan tâm.
httpd_sys_content_t | Các thư mục và tệp chỉ đọc được sử dụng bởi Apache |
httpd_sys_rw_content_t | Các thư mục và tệp có thể đọc và ghi được sử dụng bởi Apache. Chỉ định Gán điều này cho các thư mục nơi các tệp có thể được tạo hoặc sửa đổi bởi ứng dụng của bạn hoặc gán nó vào thư mục tệp để cho phép ứng dụng của bạn sửa đổi chúng. |
httpd_log_t | Được sử dụng bởi Apache để tạo và nối thêm vào các tệp nhật ký ứng dụng web. |
httpd_cache_t | Gán vào một thư mục được sử dụng bởi Apache để lưu vào bộ đệm, nếu bạn đang sử dụng mod_cache. |
Để có danh sách đầy đủ các loại ngữ cảnh cho Apache, hãy mở trang man cho Apache và SELinux.
1 |
man httpd_selinux |
1 |
semanage fcontext -l | grep http |
4.3. Tạo các chính sách cần thiết
Bây giờ chúng ta sẽ tạo chính sách cụ thể để gán các ngữ cảnh vào các thư mục.
Tạo chính sách để gán bối cảnh httpd_sys_content_t cho thư mục /webusers và tất cả các thư mục và tệp con trong nó.
1 |
semanage fcontext -a -t httpd_sys_content_t "/webusers(/.*)?" |
Tạo chính sách để gán bối cảnh httpd_log_t cho các thư mục ghi nhật ký.
1 |
semanage fcontext -a -t httpd_log_t "/webusers/logs(/.*)?" |
Tạo chính sách để gán bối cảnh httpd_cache_t cho các thư mục bộ đệm của apache.
1 |
semanage fcontext -a -t httpd_cache_t "/webusers/cache(/.*)?" |
4.4. Cho phép truy cập Read/Write
Với các chính sách như trên, Apache hiện có quyền sử dụng các thư mục ứng dụng tùy chỉnh của chúng ta đã thiết kế. Tuy nhiên, nó không có quyền ghi vào đó bất cứ điều gì. Một số thư mục cần quyền ghi (chẳng hạn thư mục Upload để tải lên các tập tin..). Nếu ứng dụng của bạn cần loại quyền truy cập này thì chúng ta cần áp dụng các bối cảnh cho phép nhưng chỉ đối với những tệp hoặc thư mục yêu cầu.
Ví dụ đối với wordpress, câc thư mục và tệp sau đây sẽ được chỉ định bối cảnh đọc ghi cho Apache. Như vậy Apache mới có thể được quyền viết hoặc sửa đổi.
/uploads/ | Directory | Cho phép WordPress tải lên các tệp cho các mục blog, chẳng hạn như hình ảnh, video, âm thanh, v.v. |
/wp-config.php | File | Tập tin này được sửa đổi bởi WordPress khi permalinks được bật hoặc thay đổi. Nó cần phải được ghi, nếu không, các thay đổi đối với tệp sẽ phải được thực hiện thủ công. |
Tạo chính sách để gán bối cảnh httpd_sys_content_t cho thư mục tải lên và tất cả các tệp con.
1 |
semanage fcontext -a httpd_sys_rw_content_t "/webusers/user1/public_html/uploads(/.*)?" |
Tạo chính sách để gán bối cảnh httpd_sys_rw_content_t cho tệp cấu hình wp-config.php.
1 |
semanage fcontext -a httpd_sys_rw_content_t "/webusers/user1/public_html/wp-config.php" |
4.5. Áp dụng chính sách SELinux
Đến đây, các chính sách của chúng ta đã được tạo và sẵn sàng để áp dụng cho cấu trúc thư mục đã thiết kế ở trên. Bây giờ chúng ta sẽ sử dụng lệnh restorecon để áp dụng chúng. Đây cũng là lệnh tương tự bạn sẽ sử dụng để áp dụng lại bối cảnh cho các thư mục ứng dụng nếu vì lý do nào đó chúng bị xóa hoặc bị hỏng.
Áp dụng các chính sách của SELinux:
1 |
restorecon -Rv /webusers |
Sau lệnh trên, cấu trúc thư mục của chúng ta bây giờ sẽ được áp dụng các bối cảnh SELinux sau đây:
Các bối cảnh SELinux được áp dụng
Để kiểm chứng lại, bạn có thể xác minh các loại ngữ cảnh của bạn đang được áp dụng sử dụng lệnh ls với khóa chuyển -Z, trên mỗi thư mục. Chúng tôi sẽ kiểm tra root webusers, làm ví dụ.
1 |
ls -lZ /webusers |
Đầu ra sẽ hiển thị loại bối cảnh. Lưu ý các loại ngữ cảnh được tô sáng
1 2 3 |
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 users drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 logs drwxr-xr-x. root root unconfined_u:object_r:httpd_cache_t:s0 cache |
5. Kết luận
Thay vì vô hiệu hóa Selinux, điều mà bạn không bao giờ nên làm, mặc dù nhiều người làm, thay vào đó, bạn nên tạo các chính sách tùy chỉnh áp dụng các loại ngữ cảnh SELinux thích hợp cho các thư mục và tệp của bạn. Ngoài việc cho phép tự do hơn trong việc sắp xếp các tệp ứng dụng của bạn, nếu có điều gì đó khiến cài đặt ngữ cảnh của bạn biến mất, bạn sẽ có thể nhanh chóng khắc phục sự cố bằng cách chạy khôi phục ngữ cảnh để ứng dụng của bạn chạy lại ngay lập tức.
Bây giờ bạn có một ứng dụng web an toàn, với các tệp nằm bên ngoài các vị trí mặc định. Rất nhiều quản trị viên vô hiệu hóa Selinux nghĩ rằng điều đó ngăn họ định cấu hình máy chủ dựa trên yêu cầu riêng của họ. Thậm chí rất nhiều nhà cung cấp yêu cầu bạn vô hiệu hóa nó, vì nó có thể được xem là quá khó khăn hoặc tốn thời gian để hướng dẫn các quản trị viên thông qua nó.
SELinux là một lớp quan trọng trong việc bảo vệ máy chủ của bạn. Và như đã đề cập ở phần đầu, nó không nên bị vô hiệu hóa. Nó cung cấp sự bảo vệ vượt ra ngoài những gì tường lửa và các lớp khác có thể cung cấp. Nó tốt hơn để tìm hiểu cách dễ dàng sử dụng hơn là mở các lỗ hổng bảo mật.
Configuring SELinux Policies for Apache Web Servers!
Cường Còng – Chúc các bạn thành công!