TL; DR: Làm cách nào tôi có thể bật mod_userdir một cách an toàn? (nghĩa là: mỗi người dùng sẽ có thể tạo và phân phát nội dung của họ trong ~/public_html nhưng họ không được phép đọc nội dung của nhau hoặc trực tiếp - mèo /home/userX/public_html/file
- không thông qua các chức năng PHP (file_get_contents('/home/userX/public_html/file'
))
Chi tiết:
Tôi đã định cấu hình Apache với mod_userdir để cung cấp cho người dùng của mình tùy chọn phân phát nội dung thả tệp trong thư mục ~/public_html của họ. Để bảo vệ quyền truy cập tệp và để tránh bất kỳ người dùng nào có thể đọc tệp của người khác, tôi đã định cấu hình các quyền sau:
/home/userA user.user drwx--x--x (711)
/home/userA/public_html user.user drwxrwx--x (771)
Tôi đã thêm dữ liệu www
cho từng nhóm người dùng:
usermod -a -G dữ liệu www của người dùng
(nó cũng có thể hoạt động khi tạo một nhóm và thêm tất cả người dùng, bao gồm cả dữ liệu www
, với nó)
Tất cả các cấu hình hoạt động như mong đợi. Bất kỳ người dùng nào cũng có thể truy cập nội dung của nó từ https://server/~user và họ không thể đọc bất kỳ tệp nào của người khác:
userA@ubuntu:/home$ cat userB/public_html/index.php
mèo: userB/public_html/index.php: Quyền bị từ chối
Càng xa càng tốt. Nhưng vấn đề là, vì Apache đang chạy như dữ liệu www
và nó có quyền truy cập nhóm vào bất kỳ tệp nào bên trong/home/*, bất kỳ người dùng nào cũng có thể tạo tệp PHP để đọc nội dung của người khác bằng các chức năng như giám đốc điều hành
, hệ thống
, file_get_contents
, vân vân.
Tôi biết rằng tôi có thể vô hiệu hóa các chức năng như vậy khỏi việc thực thi việc thêm chúng vào disable_functions
chặn trong php.ini
nhưng tôi thấy đây là một bản vá, không phải là một giải pháp. Vì vậy, đối với tôi, có vẻ như nên có cách khác, an toàn hơn, để định cấu hình cấu hình Apache hỗ trợ userdir này. Tôi đã tìm cách để thực hiện việc này một cách chính xác nhưng chưa tìm được giải pháp thích hợp.