2008-09-28 31 views
18

Tôi có Apache đang chạy trên máy chủ Debian công khai, và có chút lo lắng về tính bảo mật của quá trình cài đặt. Đây là một máy chủ lưu trữ một số dự án sở thích miễn phí, vì vậy không ai trong chúng ta sử dụng máy thực sự có thời gian để liên tục theo dõi các bản vá ngược dòng, lưu ý các vấn đề bảo mật, v.v. hoặc nếu họ vào, hãy giữ chúng trong hộp cát.Cách tốt nhất để sandbox Apache trên Linux

Vì vậy, giải pháp tốt nhất, dễ cài đặt, dễ bảo trì ở đây là gì? Có dễ dàng thiết lập một sandbox linux chế độ người dùng trên Debian không? Hoặc có thể là một nhà tù chroot? Tôi muốn có quyền truy cập dễ dàng vào các tệp bên trong hộp buồn từ bên ngoài. Đây là một trong những thời điểm mà nó trở nên rất rõ ràng với tôi rằng tôi là một lập trình viên, không phải là một sysadmin. Bất kì sự trợ giúp nào đều được đánh giá cao!

Trả lời

15

Chroot có thể thực sự không an toàn khi bạn đang chạy một môi trường sandbox hoàn chỉnh. Những kẻ tấn công có quyền truy cập hoàn toàn vào chức năng hạt nhân và ví dụ có thể gắn ổ đĩa để truy cập vào hệ thống "máy chủ".

Tôi khuyên bạn nên sử dụng linux-vserver. Bạn có thể thấy linux-vserver như là một chroot jail cải thiện với một cài đặt debian hoàn chỉnh bên trong. Nó thực sự nhanh vì nó đang chạy trong một hạt nhân duy nhất, và tất cả việc thực thi mã là một thực thể.

Cá nhân tôi sử dụng Linux-vserver để phân tách tất cả các dịch vụ của mình và chỉ có sự khác biệt đáng chú ý về hiệu suất.

Hãy xem linux-vserver wiki để được hướng dẫn cài đặt.

trọng, Dennis

3

Bạn luôn có thể thiết lập nó bên trong một máy ảo và giữ một hình ảnh của nó, để bạn có thể cuộn lại nếu cần thiết. Bằng cách đó, máy chủ được trừu tượng hóa từ máy tính thực tế của bạn, và bất kỳ vi-rút 'hoặc vv nào được chứa bên trong máy ảo. Như tôi đã nói trước đây, nếu bạn giữ một hình ảnh như một bản sao lưu, bạn có thể khôi phục lại trạng thái trước đó của bạn khá dễ dàng.

0

Tạo một máy ảo. thử một cái gì đó như vmware hoặc qemu

3

Để đảm bảo người ta nói, chroot nhà tù là hiếm khi một ý tưởng tốt đó là, mặc dù ý định, rất dễ dàng để thoát ra khỏi, infact tôi đã thấy nó được thực hiện bởi người dùng vô tình!

3

Không có hành vi phạm tội, nhưng nếu bạn không có thời gian để xem các bản vá bảo mật và lưu ý các vấn đề bảo mật, bạn nên quan tâm, bất kể thiết lập của bạn là gì. Mặt khác, thực tế là bạn đang suy nghĩ về những vấn đề này đặt bạn ngoài 99,9% chủ sở hữu của các máy như vậy. Bạn đang đi đúng hướng!

4

Tôi thứ hai những gì xardias nói, nhưng thay vào đó hãy giới thiệu OpenVZ.

Nó tương tự như Linux-Vserver, vì vậy bạn có thể muốn so sánh hai khi đi tuyến đường này.

Tôi đã thiết lập máy chủ web với máy chủ proxy http (nginx), sau đó ủy quyền lưu lượng truy cập cho các vùng chứa OpenVZ khác nhau (dựa trên tên máy chủ hoặc đường dẫn được yêu cầu). Bên trong mỗi vùng chứa, bạn có thể thiết lập Apache hoặc bất kỳ máy chủ web nào khác (ví dụ: nginx, lighttpd, ..). Bằng cách này, bạn không có một Apache cho mọi thứ, nhưng có thể tạo một vùng chứa cho bất kỳ tập hợp con dịch vụ nào (ví dụ: cho mỗi dự án).

container OpenVZ có thể khá dễ dàng được cập nhật hoàn toàn ("for i in $ (vzlist); làm vzctl exec apt-get upgrade; done")

Các tập tin của container khác nhau được lưu trữ trong các nút phần cứng và do đó bạn có thể dễ dàng truy cập chúng bằng SFTPing vào nút phần cứng. Ngoài việc bạn có thể thêm địa chỉ IP công khai vào một số vùng chứa của bạn, hãy cài đặt SSH tại đó và sau đó truy cập chúng trực tiếp từ vùng chứa. Tôi thậm chí đã nghe từ các proxy SSH, vì vậy địa chỉ IP công cộng bổ sung có thể không cần thiết ngay cả trong trường hợp đó.

0

Bạn đang thực sự cố gắng giải quyết vấn đề gì? Nếu bạn quan tâm về những gì trên máy chủ đó, bạn cần phải ngăn chặn những kẻ xâm nhập xâm nhập vào nó. Nếu bạn quan tâm về những gì những kẻ xâm nhập sẽ làm với máy chủ của bạn, bạn cần phải hạn chế khả năng của chính máy chủ.

Không có vấn đề nào trong số này có thể được giải quyết bằng ảo hóa, mà không làm đứt chính máy chủ. Tôi nghĩ câu trả lời thực sự cho vấn đề của bạn là:

  1. chạy một hệ điều hành cung cấp cho bạn cơ chế dễ dàng để cập nhật hệ điều hành.
  2. sử dụng phần mềm do nhà cung cấp cung cấp.
  3. sao lưu mọi thứ thường xuyên.
+0

Trong khi tất cả điều này về cơ bản là đúng, một số loại hộp cát cung cấp lớp bảo mật bổ sung hữu ích. Cho dù điều này có đáng làm không phụ thuộc vào số lượng khác trên máy chủ - nếu việc sử dụng duy nhất của máy là một máy chủ web thì không có nhiều điểm trong việc đặt máy chủ web trong hộp cát. –

3

tôi thấy nó đáng ngạc nhiên mà không ai đề cập mod_chrootsuEXEC, đó là những điều cơ bản bạn nên bắt đầu với, và, rất có thể những điều duy nhất bạn cần.

+0

Sửa tôi nếu tôi sai, nhưng chroot không bao giờ được dự định là một tính năng bảo mật. chroot jails không an toàn. – Alexander

+1

Chương trình chroot UNIX (8) là * không * được thiết kế như một phần mềm bảo mật - bạn đúng, nhưng Apache mod_chroot không liên quan gì đến chương trình đó.Nó chỉ đơn giản là sử dụng chroot (2) hệ thống gọi để cô lập Apache từ phần còn lại của hệ thống. – Terminus

+1

Khi sử dụng mod_chroot, Apache chạy trong môi trường không có bất kỳ thứ gì có thể thay đổi thế giới bên ngoài. suexec sau đó cho phép một cách mà bạn có thể chạy bất kỳ VirtualHost dưới một người dùng khác nhau, vì vậy họ không thể gây rối với nhau. – Terminus

1

Bạn nên sử dụng SELinux. Tôi không biết nó được hỗ trợ như thế nào trên Debian; nếu không, chỉ cần cài đặt Centos 5.2 với SELinux được kích hoạt trong máy ảo. Không nên quá nhiều công việc, và an toàn hơn nhiều so với bất kỳ chroot nghiệp dư nào, không an toàn như hầu hết mọi người tin. SELinux có danh tiếng là khó quản trị, nhưng nếu bạn chỉ chạy một máy chủ web, thì đó không phải là vấn đề. Bạn có thể chỉ cần làm một vài "sebool" để cho httpd kết nối với DB, nhưng đó là về nó.

+0

Móc LSM khá chết não và không thực sự áp dụng ở đây. –

1

Mặc dù tất cả những điều trên đều là gợi ý tốt, tôi cũng khuyên bạn nên thêm quy tắc iptables để không cho phép các kết nối mạng không mong muốn. Kể từ khi điều đầu tiên nhất khai thác web tự động làm là tải phần còn lại của tải trọng của họ, ngăn chặn các kết nối mạng có thể làm chậm kẻ tấn công xuống.

Một số quy tắc tương tự như vậy có thể được sử dụng (Hãy coi chừng, máy chủ web của bạn có thể cần quyền truy cập vào các giao thức khác): iptables - gửi chủ sở hữu OUTPUT -m --uid-chủ sở hữu apache -m state --state ESTABLISHED, RELATED - -jump ACCEPT iptables - áp dụng chủ sở hữu OUTPUT -m - api-chủ sở hữu apache --protocol udp --destination-port 53 --jump ACCEPT iptables - áp dụng chủ sở hữu OUTPUT -m - chủ sở hữu -uid-apache --jump REJECT

1

Nếu sử dụng Debian, debootstrap là bạn của bạn cùng với QEMU, Xen, OpenVZ, Lguest hoặc rất nhiều người khác.