Cô lập các máy chủ ảo Apache từ phần còn lại của hệ thống


11

Tôi đang thiết lập một máy chủ web sẽ lưu trữ một số trang web khác nhau dưới dạng Apache Virtualhosts, mỗi máy chủ này sẽ có khả năng chạy các tập lệnh (chủ yếu là PHP, possiblu khác).

Câu hỏi của tôi là làm thế nào tôi cách ly từng Virtualhost này với nhau và với phần còn lại của hệ thống? Tôi không muốn ví dụ trang web X đọc cấu hình của trang web Y hoặc bất kỳ tệp "riêng tư" nào của máy chủ.

Hiện tại tôi đã thiết lập Virtualhost với FastCGI, PHP và SUExec như được mô tả ở đây ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), nhưng SUExec chỉ ngăn người dùng chỉnh sửa / thực thi các tệp khác ngoài tệp của họ - người dùng vẫn có thể đọc thông tin nhạy cảm như tệp cấu hình.

Tôi đã nghĩ đến việc loại bỏ quyền đọc toàn cầu UNIX cho tất cả các tệp trên máy chủ, vì điều này sẽ khắc phục vấn đề trên, nhưng tôi không chắc liệu tôi có thể làm điều này một cách an toàn mà không làm gián đoạn chức năng máy chủ hay không.

Tôi cũng đã xem xét việc sử dụng chroot, nhưng dường như điều này chỉ có thể được thực hiện trên cơ sở mỗi máy chủ chứ không phải trên cơ sở mỗi máy chủ ảo.

Tôi đang tìm kiếm bất kỳ đề xuất nào sẽ cách ly Virtualhost của tôi với phần còn lại của hệ thống.

PS Tôi đang chạy máy chủ Ubuntu 12.04

TRẢ LỜI của tôi: Tôi đã kết thúc với gần như theo cấu hình hiện tại của mình, nhưng thực hiện một nhà tù chroot cho tất cả các máy chủ ảo, ví dụ như có nhà tù chroot /var/wwwvà sau đó có tất cả dữ liệu của người dùng trong mỗi thư mục con với quyền của nhóm / người khác r / w / x tàn tật. Tùy chọn này là mong muốn đặc biệt bởi vì tất cả đều có thể mà không cần sửa đổi mã nguồn.

Tôi đã chọn câu trả lời của @Chris, vì nó được viết kỹ lưỡng và cũng được coi là FTP và SELinux

Câu trả lời:


4

Điều này có thể được thực hiện bằng cách kích hoạt mô-đun mod_users trong Apache.

Bạn sẽ cần thiết lập UserDir trong cấu hình apache của mình. Tôi đề nghị bạn làm điều này trong một tập tin cấu hình riêng biệt và bao gồm nó. Bao gồm trong

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

Tôi có thể cung cấp cho bạn toàn bộ hướng dẫn nhưng điều này sẽ giúp bạn bắt đầu định cấu hình Apache: http://www.techytalk.info/enable-userdir-apache-module-ubfox-debian-basing-linux-distribution/

Gợi ý nếu bạn đang chạy SELinux (và bạn nên), bạn sẽ phải cấp quyền truy cập đọc Apache cho nhà người dùng. Bạn có thể làm điều này bằng cách thiết lập:

sudo setsebool -P httpd_enable_homedirs=On

Nó cũng cần quyền truy cập tệp cho thư mục người dùng thư mục public_html và quyền rx trên thư mục mẹ lên đến root.

Rõ ràng bạn cần thiết lập chroot cho người dùng, ví dụ như trong vsftpd. Tải về:

apt-get vsftpd

Để định cấu hình mở /etc/vsftpd/vsftpd.conf bằng vi hoặc nano. Tìm và bỏ ghi chú hoặc thêm: chroot_local_user = yes

Bạn có thể có hành vi tương tự đối với sftp mà tôi khuyên dùng qua FTP, mở / etc / ssh / sshd_config và thêm khối Kết hợp và dòng này:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

Điều này sẽ chroot bất kỳ người dùng nào trong nhóm web_users . Ngoài ra, bạn sẽ cần từ chối quyền truy cập vào trình bao bằng cách đặt nó thành / sbin / nologin:

useradd -G "web_users" -s /sbin/nologin new_user

Nếu đây là một máy chủ sản xuất công cộng, tôi cũng khuyên bạn nên áp dụng một số cứng trên HĐH, OpenSSH, Apache, PHP, vsftpd và áp dụng một số trình bao bọc iptables và TCP nghiêm ngặt. Tôi khuyên bạn nên để lại Selinux tại chỗ.


3
Tôi không thấy cách mod_userdircung cấp lưu trữ ảo của các tên miền riêng biệt. Ngoài ra, tôi có lo ngại về bảo mật về mặt cách ly vì tôi không thể tìm thấy bất cứ điều gì về điều đó giữa các thư mục người dùng trong Apache. Nó chỉ có vẻ không cung cấp tính năng đó.
gertvdijk

6

Tôi đề nghị xem qua suphphoặc PHP-FPM .

Về cơ bản, nó sẽ cho phép trình thông dịch PHP 'su' cho một số người dùng cụ thể được định cấu hình cho Virtualhost đó. Điều đó sẽ cho phép bạn sử dụng các quyền hệ thống tệp chung để cô lập mọi Virtualhost.

Tôi muốn giới thiệu FPM để xem xét hiệu suất. Từ trang chủ, đây là điều bạn quan tâm nhất:

Ngoài ra, các tùy chọn nhóm và nhóm người dùng cho mỗi nhóm, cho phép bạn chạy nhóm fpm cụ thể đó theo uid và gid đã cho; tạm biệt suphp!


4

1
Tôi đã xem xét các liên kết này, nhưng có vẻ như tôi không thể truy cập trên cơ sở máy chủ ảo. Có lẽ tôi nên xác định một thư mục www toàn cầu để chroot như thế nào /var/wwwvà có phải tất cả các máy chủ đều nằm trong thư mục con trong đó, mỗi thư mục con này đã loại bỏ quyền thực thi / đọc toàn cầu không?
JesperB

Quan điểm chính của tôi là chroot, và bạn có thể làm điều đó trên mỗi máy chủ ảo. Đây là một ví dụ. Trong trường hợp này, họ đang sử dụng mod_chroot.
tacotuesday
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.