Hầu hết câu trả lời là không chính xác đúng hay chi tiết .. Đừng quên safe_mode
kiểm tra xem chủ sở hữu của SCRIPT có khớp với chủ sở hữu của tệp bạn muốn truy cập hay không. Nó không có gì để làm với người dùng httpd: nhóm.
Ví dụ: httpd của bạn có thể chạy dưới dạng apache:daemon
, tập lệnh của bạn được sở hữu bởi some_user:users
và tệp bạn muốn ghi vào some_other_user:users
.
Nếu bạn không kích hoạt safe_mode_gid
, tập lệnh sẽ không thể truy cập tệp vì người dùng không khớp.
Đây là hiện tượng phổ biến khi tập lệnh tạo thư mục và sau đó cố tạo tệp trong thư mục này.
Tạo thư mục thành công vì thư mục mẹ được sở hữu bởi cùng một người dùng như tập lệnh tạo nó (rất có thể, nó được tải lên bởi "some_user").
NHƯNG, các thư mục đã tạo hiện đang thuộc sở hữu của người sử dụng httpd, chúng ta hãy nói apache:daemon
Nếu safe_mode
được kích hoạt, bạn sẽ không thể tạo ra một tập tin bên trong thư mục này vì chủ sở hữu kịch bản (some_user
) doesn không khớp với chủ sở hữu thư mục (apache
).
Thậm chí nếu bạn kích hoạt safe_mode_gid
, nó sẽ không hoạt động vì nhóm tập lệnh là "người dùng" trong khi nhóm thư mục là "daemon".
Giải pháp tốt nhất là đặt cùng một nhóm cho người dùng ftp và httpd. Đừng quên bạn phải cho phép ghi vào nhóm trên thư mục "có thể ghi" và điều này kém an toàn hơn vì tất cả người dùng của bạn nằm trong cùng một nhóm, quá trình httpd có thể truy cập các tệp người dùng khác kể từ khi bạn kích hoạt safe_mode_gid
.
Bạn nên kết hợp safe_mode_gid
+ open_basedir
và đặt nhà của người dùng là giá trị open_basedire
để tránh điều này.
HTH