Tôi làm việc với quản trị hệ thống tại một trường đại học và tình cờ phát hiện ra điều gì đó có lẽ phổ biến, nhưng lại gây sốc cho tôi.
Tất cả các thư mục và khu vực web chung_html được lưu trữ trên afs, với quyền đọc cho các máy chủ web. Vì người dùng được phép có các tập lệnh php trong public_html, điều này có nghĩa là họ có thể truy cập các tệp của nhau từ bên trong php (và các tệp web chính!).
Điều này không chỉ khiến cho bất kỳ bảo vệ mật khẩu .htaccess nào hoàn toàn vô dụng, nó còn cho phép người dùng đọc các tệp nguồn php chứa mật khẩu cơ sở dữ liệu mysql và thông tin nhạy cảm tương tự. Hoặc nếu họ thấy rằng những người khác có thư mục mà máy chủ web có quyền truy cập ghi (ví dụ: đối với nhật ký cá nhân hoặc để lưu dữ liệu biểu mẫu đã gửi), họ có thể lưu trữ tệp trong các tài khoản đó.
Một ví dụ đơn giản:
<?
header("Content-type: text/plain");
print file_get_contents("/afs/example.com/home/smith/public_html/.htpasswd");
?>
đây là một vấn đề phổ biến phải không? Và làm thế nào để bạn thường giải quyết nó?
CẬP NHẬT:
Cảm ơn các đầu vào. Thật không may, dường như không có câu trả lời đơn giản. Trong một môi trường chia sẻ lớn như thế này, người dùng có lẽ không nên có nhiều sự lựa chọn này. Cách tiếp cận tốt nhất tôi có thể nghĩ đến là đặt "open_basingir" trong cấu hình chính cho tất cả các thư mục "public_html", chạy suphp và chỉ cho phép dọn dẹp php (không có tập lệnh cgi, chạy các lệnh bên ngoài với backticks, v.v.).
Thay đổi chính sách như thế này sẽ phá vỡ rất nhiều thứ, và hoàn toàn có thể khiến người dùng chộp lấy cây chĩa của họ và đuổi theo chúng tôi ... Tôi sẽ thảo luận với các đồng nghiệp của mình và cập nhật ở đây nếu chúng tôi đưa ra quyết định về cách thay đổi thiết lập.
open_basedir
giải pháp bên dưới trên các hệ thống lưu trữ chia sẻ sản xuất, nhưng chúng tôi chia mọi người thành vhost riêng của họ - Không chắc nó có hoạt động cho các thư mục đơn không ...