CentOS 7 - Các thư mục được tạo thông qua VSFTPD không kế thừa bối cảnh SELinux


8

Công ty chúng tôi có một máy chủ web với CentOS 7 và khách hàng của chúng tôi quản lý trang web của họ thông qua FTP (vsftpd). SELinux đang ở chế độ thực thi.

Vấn đề là dữ liệu được tạo / uploadad thông qua VSFTPD không được kế thừa bối cảnh SELinux thích hợp. Hãy để tôi giải thích.

Ví dụ: đối với các trang web WordPress, máy chủ có sẵn một số quy tắc có thể được nhìn thấy bằng cách sử dụng semanage fcontext -l |grep '/var/www', đó là:

/var/www/html(/.*)?/uploads(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)?               all files          system_u:object_r:httpd_sys_rw_content_t:s0

Vì vậy, khi tôi sao chép một trang web WordPress, hãy nói từ một máy chủ khác vào một thư mục /var/www/html/bằng SSH, các thư mục wp-content/wp-content/uploads/httpd_sys_rw_content_tbối cảnh bảo mật thích hợp . TUY NHIÊN, khi các thư mục đó được tạo thông qua FTP, bối cảnh họ nhận được là httpd_sys_content_t(không có rw ). Điều này có nghĩa là các trang web mà khách hàng của chúng tôi tải lên máy chủ không thể ghi vào các thư mục đó ngay cả khi họ cấp quyền ghi cho người dùng / nhóm apache, vì vậy quản trị viên WordPress không hoạt động. Vì vậy, khi họ tải lên một trang web, họ phải yêu cầu hỗ trợ từ chúng tôi để khắc phục điều này, điều này gây lãng phí thời gian cho tất cả những người liên quan.

Giả sử khách hàng đã tải lên trang web của họ vào httpdocs, nếu thông qua SSH, tôi đã mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -frgiải quyết được vấn đề, vì vậy không có gì sai với dữ liệu.

Tôi cũng có thể làm gì restorecon -Rv httpdocs/để khắc phục sự cố.

Vì vậy, câu hỏi là: Làm cách nào để các thư mục được tạo / tải lên thông qua VSFTPD có thể thừa hưởng bối cảnh SELinux thích hợp giống như chúng được kế thừa khi các thư mục được tạo / tải lên thông qua SSH?


Để bảo mật, đó là một ý tưởng tồi để hỗ trợ FTP. Cân nhắc loại bỏ nó và hướng dẫn khách hàng về cách định cấu hình máy khách truyền tệp của họ để sử dụng SFTP thay vào đó ... điều này cũng sẽ thoát khỏi vấn đề này.
Michael Hampton

Cảm ơn Michael. Tôi đồng ý với bạn nhưng trong trường hợp của chúng tôi, chúng tôi không sử dụng "ftp.domain.com" cho khách hàng của mình và chúng tôi cũng không để lộ địa chỉ IP công cộng của máy chủ (máy chủ đứng sau proxy NginX), vì vậy bảo mật FTP không phải là vấn đề cho chúng tôi. Chỉ những người chúng tôi gửi địa chỉ FTP mới có thể tìm thấy địa chỉ IP của máy chủ để kết nối qua FTP.
Juan Pablo Barrios

Câu trả lời:


6

Có một sự khác biệt giữa ghi nhãn mặc định xảy ra trong thời gian chạy và chính sách ghi nhãn dựa trên biểu thức chính quy áp dụng trên máy chủ.

Những gì bạn đang lưu ý ở đây:

/var/www/html(/.*)?/uploads(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)?               all files         system_u:object_r:httpd_sys_rw_content_t:s0

Là chính sách dán nhãn bài.

Những gì bạn thảo luận trong vấn đề của bạn thực sự liên quan đến chính sách thời gian chạy.

Khi một mục nhập được tạo trong một thư mục bằng cách sử dụng SELinux, các quy tắc điều chỉnh nhãn của tệp hoặc thư mục cuối cùng sẽ không bị quy định bởi các biểu thức thông thường mà bạn trích dẫn nhưng các quy tắc khác như sau (Tôi tin rằng đây là thứ tự đúng nhưng có thể đã bỏ lỡ điều gì đó) .

  1. Có một type_transitionquy tắc được đặt tên rõ ràng .
  2. Có một type_transitionquy tắc không được đặt tên rõ ràng .
  3. Kế thừa bối cảnh giống như thư mục cha.
  4. Áp dụng default_context.

Vì vậy, khi tôi sao chép một trang web WordPress, hãy nói từ một máy chủ khác vào một thư mục trong / var / www / html / bằng SSH, các thư mục wp-content / và wp-content / uploads / có bối cảnh bảo mật httpd_sys_rw_content_t thích hợp.

Vì vậy, có nó làm điều này, nhưng không phải vì lý do bạn nghĩ rằng nó làm. Chắc chắn không phải vì chính sách dán nhãn bài.

Điều này xảy ra bởi vì một type_transitionquy tắc được đặt tên cụ thể tồn tại cung cấp hành vi này.

$ sesearch -C -T -s unconfined_t -t httpd_sys_content_t -c dir

Found 4 named file transition filename_trans:
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "wp-content"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "smarty"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "uploads"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "upgrade"; 

Điều này về cơ bản là nói.

  • Nếu bạn là unconfined_t
  • Nếu bạn đang thực hiện một hành động trong loại mục tiêu httpd_sys_content_t
  • Nếu lớp của mục mới là một thư mục
  • Nếu tên của mục mới là "tải lên" thì
  • Loại mới là httpd_sys_rw_content_t

Lý do điều này hoạt động cho SSHD là vì sau khi bạn đăng nhập, bạn sẽ được cung cấp bối cảnh nguồn unconfined_táp dụng quy tắc này.

Điều này không hoạt động đối với dịch vụ FTP vì ngữ cảnh nguồn của dịch vụ này rất có thể ftpd_tkhông có quy tắc phù hợp.

Do đó, bạn cần sửa đổi chính sách để thay đổi hành vi của SELinux để tôn trọng các phán quyết về tệp có tên mà bạn thấy trong các mục khác cho FTP.

Trong Fedora 23 ít nhất, tồn tại một giao diện cho phép điều này, một mô-đun chính sách như thế này sẽ làm điều đó.

policy_module(local_ftpd, 7.2.0)

require {
  type ftpd_t;
}

apache_filetrans_named_content(ftpd_t)

Bạn có thể tải cái này bằng cách đảm bảo rằng selinux-policy-develgói được cài đặt và chạy make -f /usr/share/selinux/devel/Makefile load.


1
Xin chào Matthew, đã làm điều đó !! Cảm ơn sự giúp đỡ của bạn vì tôi đã phát điên với điều này. Tôi không chắc chắn những gì đã làm với mô-đun chính sách mà bạn đã viết vì tôi chưa bao giờ tùy chỉnh SELinux, vì vậy tôi đã googled một chút và sau đây là những gì tôi đã làm: Tôi đã tạo tệp local_ftpd.tebằng mô-đun chính sách của bạn, sau đó tôi đã làm make -f /usr/share/selinux/devel/Makefile local_ftpd.ppvà sau đó semodule -i local_ftpd.pp. Được không Bây giờ các tệp được tạo thông qua FTP kế thừa bối cảnh mong muốn. Cảm ơn một lần nữa!
Juan Pablo Barrios
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.