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:
- Ai nên apache được chạy như?
- Người dùng này nên thuộc nhóm nào?
- 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?
- 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 -al
danh 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 cd
vào var
và ls -al
tôi thấy:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Cuối cùng, bên trong /var/www
tô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.php
vớ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/envvars
tập tin:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Nếu tôi làm ps aux | grep -i apache
tô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/apache
kịch bản khi hệ thống khởi động và các quá trình khác được www-data
sinh ra từ lần đầu tiên. Đúng không?
Tiếp theo, nếu tôi nhập vào groups www-data
thì tôi thấy www-data : www-data
- vì vậy có vẻ như chỉ có trong www-data
nhó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-data
và tôi muốn apache có thể đọc một thư mục, x
bit cần được đặt cho nhóm thế giới (khác) ( o+x
và 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+r
bit 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 suphp
và phpsuexec
đ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-data
và đặ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
- Ai nên apache được chạy như?
- Người dùng này nên thuộc nhóm nào?
- 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?
- 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?