Những gì người dùng nên apache và PHP đang chạy? Các tập tin / var / www nên có quyền gì?


41

Tôi chỉ cần mở một hộp Ubuntu 11.10 và sau đó chạy apt-get install apache2 php5để cài đặt apache2 và PHP 5 trên hộp. Bây giờ nó hoạt động như một "máy chủ web" và nó tải "Nó hoạt động!" trang. Bây giờ tôi đang cố gắng tăng cường bảo mật và tôi có các câu hỏi sau về máy chủ web linux:

  1. Ai nên apache được chạy như?
  2. Người dùng này nên thuộc nhóm nào?
  3. Gói nào có thể khiến PHP (và Apache?) Chạy với tư cách là chủ sở hữu của các tệp? (như trên các máy chủ web được chia sẻ) Tôi có nên sử dụng các gói này không? Chúng có dễ / khả thi để duy trì trên một hệ thống nhỏ không?
  4. Các quyền mặc định phải là gì đối với các tệp và thư mục được cung cấp cho web với apache đang chạy www-data? Đối với apache / php chạy như người dùng?

Tôi đã thực hiện những điều sau đây khi kiểm tra thiết lập mặc định:

Cấu trúc tệp

Khi tôi cd /và làm một ls -aldanh sách các nội dung, tôi thấy /var:

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

Nếu tôi cdvào varls -altôi thấy:

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

Cuối cùng, bên trong /var/wwwtôi thấy:

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

Điểm đáng chú ý của tôi là cho đến nay tất cả các tệp này thuộc về root:root, các tệp có quyền 644 và thư mục có quyền 755.

Quyền của Apache

Nếu tôi tạo một tập tin với quyền root /var/www/test.phpvới nội dung:

<?php echo shell_exec('whoami');

và tải tập tin đó vào một trình duyệt mà nó cho tôi biết www-data, giống như trong /etc/apache2/envvarstập tin:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Nếu tôi làm ps aux | grep -i apachetôi thấy như sau:

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start

Vậy ai là apache chạy như? Có vẻ như có lẽ quá trình đầu tiên là root, có thể từ /etc/init.d/apachekịch bản khi hệ thống khởi động và các quá trình khác được www-datasinh ra từ lần đầu tiên. Đúng không?

Tiếp theo, nếu tôi nhập vào groups www-datathì tôi thấy www-data : www-data- vì vậy có vẻ như chỉ có trong www-datanhóm. Tôi đoán đây là thực hành tiêu chuẩn là tốt.

Chia sẻ và bảo mật

Vì vậy, nếu tôi hiểu mọi thứ một cách chính xác, nếu apache đang chạy www-datavà tôi muốn apache có thể đọc một thư mục, xbit cần được đặt cho nhóm thế giới (khác) ( o+xvà cũng cần phải được đặt trên tất cả cha mẹ thư mục tất cả các cách lên chuỗi ( www, var). Và nếu tôi muốn apache có thể đọc từ một tập tin, thì o+rbit cần phải được đặt.

Thật không may, tôi tin rằng điều này giới thiệu một lỗ hổng bảo mật cho nhiều ứng dụng và / hoặc nhiều người dùng trên cùng một hộp linux: Tất cả các tệp web cần phải có thể đọc được trên thế giới và do đó các ứng dụng khác và người dùng khác trên hệ thống cũng có thể truy cập được. Nếu một ứng dụng được cài đặt trên hệ thống có lỗ hổng bảo mật cho phép nhập liệu người dùng thô, không có giá trị, sau đó được PHP thực thi, thì kẻ tấn công từ xa có thể duyệt tất cả các tệp khác trên hệ thống web có thể đọc được trên thế giới. Tương tự, nếu hộp có nhiều người dùng và người dùng biết đường dẫn của các tệp web của người dùng khác, họ có thể đọc nội dung tệp (và xem những thứ nhạy cảm như chuỗi kết nối cơ sở dữ liệu, v.v.).

Tôi đã nghe nói về hai gói suphpphpsuexecđiều đó cho phép các tệp của người dùng được phân phát "như chúng" trên một hệ thống được chia sẻ. Một trong những đặc điểm của điều này là nó cho phép các ứng dụng web (như Wordpress) tạo và sửa đổi các tệp - rất hữu ích để thêm chủ đề, plugin và nâng cấp phần mềm. Tất nhiên có thể an toàn hơn khi thực hiện những điều này bằng tay, nhưng có thể thỏa hiệp với một trong các gói được đề cập ở trên không? Hoặc bằng cách có thể sử dụng chownđể làm cho nhóm thư mục wordpress thuộc www-datavà đặt bit dính trên nhóm ( g+s)?

Tôi chỉ sử dụng những người này với tư cách là người dùng cuối của một công ty lưu trữ web và vì vậy tôi không biết những thứ bên trong của họ, và nếu chúng thậm chí hợp lý để cài đặt trên một hệ thống nhỏ, hoặc nếu có một số khác Các biện pháp bảo mật tôi nên sử dụng thay thế, nhưng tôi nghĩ rằng tôi sẽ đề cập đến chúng ở đây vì chúng dường như là một cách có thể để giải quyết một số mối quan tâm của tôi.

Quay lại câu hỏi

  1. Ai nên apache được chạy như?
  2. Người dùng này nên thuộc nhóm nào?
  3. Gói nào có thể khiến PHP (và Apache?) Chạy với tư cách là chủ sở hữu của các tệp? (như trên các máy chủ web được chia sẻ) Tôi có nên sử dụng các gói này không? Chúng có dễ / khả thi để duy trì trên một hệ thống nhỏ không?
  4. Các quyền mặc định phải là gì đối với các tệp và thư mục được cung cấp cho web với apache đang chạy www-data? Đối với apache / php chạy như người dùng?

Bản sao có thể có của serverfault.com/questions/339948/ cấp
AD7six

Câu trả lời:


17
  1. không root
  2. không root
  3. SuEXEC
  4. Phụ thuộc. 644 cho các tệp và 755 cho các thư mục là một mặc định an toàn.

Không thay đổi quyền sở hữu bất cứ thứ gì thành dữ liệu www trừ khi bạn muốn php có thể chỉnh sửa nội dung của tệp / thư mục đó

Bất kể bạn làm gì khác: các thư mục cần đọc và thực thi quyền cho người dùng tìm tệp; tập tin cần quyền đọc để người dùng đọc chúng. Nếu bạn gặp bất kỳ lỗi quyền nào khi thay đổi mọi thứ - bạn đã quản lý để xóa các quyền được yêu cầu cơ bản này.

Nếu bạn không viết bất kỳ tệp nào thông qua ứng dụng php của mình, bạn có thể để các tệp do bạn sở hữu: bạn. Trong trường hợp này, quyền thế giới (xx4 / 5) là quyền được áp dụng.

Nếu bạn để các tệp thuộc sở hữu của bạn: bạn có quyền truy cập tệp 644 (tệp) thì điều đó có nghĩa là chỉ bạn mới có thể chỉnh sửa các tệp trang web - www-data không phải là bạn - vì vậy nó không thể chỉnh sửa các tệp.

Nếu bạn muốn hạn chế quyền truy cập vào apache + bạn và chặn tất cả các quyền truy cập khác chown -R you:www-data *. Với quyền truy cập tệp 640 và quyền thư mục 750, bạn có thể chỉnh sửa, dữ liệu www có thể đọc - bởi vì sau đó apache đọc quyền của nhóm (x4 / 5x).

Hạn chế đến mức tối thiểu các đường dẫn bạn cho phép apache / php để ghi vào - nếu có một tmp dir ứng nhu cầu ứng dụng để ghi vào - cho phép nó để viết thư cho thư mục đó chỉ - và đối với bất kỳ địa điểm ghi nếu ở tất cả làm cho có thể chắc chắn đó là bên ngoài các tài liệu gốc hoặc thực hiện các bước để đảm bảo đường dẫn có thể ghi này không thể truy cập web.

Lưu ý rằng "bạn" không nên root. Cho phép truy cập ssh trực tiếp dưới quyền root là một chỉ báo về các lỗi bảo mật khác (chẳng hạn như không cho phép đăng nhập mật khẩu), nhưng đó là cả một loạt các câu hỏi cho chính nó.


10

Vì vậy, nếu tôi hiểu chính xác mọi thứ, nếu apache đang chạy dưới dạng dữ liệu www và tôi muốn apache có thể đọc một thư mục, bit x cần phải được đặt cho nhóm thế giới (khác) (o + x), và điều đó cũng cần phải được đặt trên tất cả các thư mục mẹ trên toàn bộ chuỗi (www, var). Và nếu tôi muốn apache có thể đọc từ một tệp, thì bit o + r cần phải được đặt.

Điều này không đúng, bạn không phải đặt rwxcho 'người khác'. Bạn nên thay đổi chủ sở hữu và / hoặc nhóm của thư mục / tệp cụ thể mà bạn đang cố gắng bảo vệ. Ví dụ:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

Bây giờ chỉ có các thành viên của nhóm www-datacó thể đọc /var/www/cwd.com. Và chỉ có bạn (cwd) có thể viết cho nó. Nếu bạn muốn cho phép các ứng dụng của mình (thông qua Apache) ghi / sửa đổi các tệp trong thư mục đó, bạn hãy chuyển nó thành 770.

Tôi nghĩ rằng điều này bao gồm tất cả các vấn đề của bạn, tôi thấy không có lý do gì để thay đổi apache người dùng đang chạy theo.


2
Cảm ơn bạn. Đó không phải là một giải pháp tồi, nhưng nếu một người dùng biết đường dẫn đến tệp của người dùng khác, họ có thể viết một tập lệnh sẽ đọc nội dung của tệp, sau đó tải nó trong trình duyệt web, nó sẽ chạy nó dưới dạng apache - đọc hiệu quả các tập tin từ thư mục người dùng khác. Điều đó có ý nghĩa? Vì vậy, ngay cả khi bạn đặt quyền truy cập thư mục thành 750, vẫn có một lỗ hổng bảo mật tiềm ẩn.
cwd

@cwd bạn đã kết thúc việc này chưa?
Ricky Boyce

@cwd Đây là câu hỏi chính xác mà tôi có. Đó là lý do tại sao tôi hỏi điều này: serverfault.com/questions/807723/
Kẻ
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.