2010-05-06 36 views
11

Tôi đã gặp phải vấn đề này, tôi có một máy chủ đang chạy apache và php. Chúng tôi có nhiều máy chủ ảo nhưng chúng tôi nhận thấy rằng người dùng có khả năng độc hại có thể sử dụng không gian web của mình để duyệt các tệp của người dùng khác (thông qua tập lệnh php đơn giản) và thậm chí cả tệp hệ thống, điều này có thể xảy ra do quyền php. Một cách để tránh nó là đặt var open_basedir trong php.ini, yhis rất đơn giản trong một hệ thống máy chủ duy nhất, nhưng trong trường hợp máy chủ ảo sẽ có basebir trên mỗi máy chủ.PHP - một open_basedir khác nhau cho mỗi máy chủ ảo

Tôi có thể đặt người phụ thuộc dựa trên mỗi người dùng/máy chủ lưu trữ bằng cách nào? là có một cách để cho apache hereditate php đặc quyền của tập tin php đã được yêu cầu

E.G. /home/X_USER/index.php có tư cách là chủ sở hữu X_USER, khi apache đọc tệp index.php nó kiểm tra đường dẫn và chủ sở hữu của nó, đơn giản là tôi đang tìm kiếm một biến hệ thống dựa trên php đặt cho đường dẫn đó.

Thank trước Lopoc

Trả lời

17

Có thể thiết lập open_basedir trên một cơ sở cho mỗi thư mục bằng cách sử dụng chỉ thị php_admin_value Apache.

Ví dụ từ manual:

<Directory /docroot> 
    php_admin_value open_basedir /docroot 
</Directory> 

Re bình luận của bạn: có, lệnh bên ngoài không bị ảnh hưởng bởi open_basedir - khi gọi ls / này được thực hiện với các quyền tài khoản người dùng PHP chạy dưới (thường được đặt tên www hoặc tương tự). Theo tôi biết, không thể mở rộng open_basedir thành các lệnh bên ngoài.

Trong trường hợp đó, tôi không nghĩ rằng loại bảo vệ mà bạn đang tìm kiếm là có thể trong một thiết lập Apache/PHP bình thường. Điều duy nhất có thể đến gần là running Apache in a chroot jail. Tôi đã không làm điều này bản thân mình vì vậy tôi không thể nói bất cứ điều gì về nó - bạn phải đào sâu vào và có thể đặt một câu hỏi cụ thể về điều đó.

+0

vâng ok, nhưng chỉ 'ls /' đơn giản vang vẫn hoạt động ngay cả với chỉ thị này – Lopoc

+0

@Lopoc xem cập nhật của tôi. –

1

chroot là một ý tưởng tốt. Và bây giờ docker là hiệu quả hơn.

và open_basedir với "/ docroot" không phải là bảo mật, bạn nên kết thúc với một "/" hoặc PHP có thể truy cập/docroot1

Các vấn đề liên quan