2008-08-11 34 views
6

Theo PHP Safe Mode Docs trên safe_mode_gid:GID Chế độ an toàn PHP là gì?

Theo mặc định, chế độ Safe Mode không một UID so sánh kiểm tra khi mở file. Nếu bạn muốn thư giãn điều này để so sánh GID, hãy bật safe_mode_gid. Có sử dụng kiểm tra UID (FALSE) hoặc GID (TRUE) khi truy cập tệp hay không.

Để tập lệnh PHP chạy trên máy chủ web, sự khác biệt giữa kiểm tra UID (Nhận dạng người dùng) và GID (Nhận dạng nhóm) là gì?

Trả lời

1

Chế độ an toàn Kiểm tra UID được sử dụng để ngăn người dùng truy cập các tệp của người khác. GID được sử dụng để ngăn một nhóm người dùng truy cập các tệp GROUPS khác.

2

Điều này sẽ chỉ cho phép bạn linh hoạt hơn một chút trong thiết lập máy chủ web của bạn. Sử dụng safe_mode_gid, bạn sẽ có thể chạy các tiến trình PHP/httpd riêng lẻ cho mỗi người dùng trên hệ thống của bạn, nhưng cung cấp cho mỗi quá trình khả năng đọc một số tệp được chia sẻ miễn là chúng được chạy như cùng một nhóm (GID) và các tệp được chia sẻ thuộc sở hữu của nhóm này.

2

Ví dụ tên người dùng máy chủ web và nhóm là apache: www,

nếu bạn thiết lập của bạn để kiểm tra UID, quá trình php sẽ chỉ có quyền truy cập vào bất kỳ tập tin thuộc sở hữu của người dùng apache. Vì vậy, nếu bạn có một máy chủ web khác đang chạy trên hệ thống của mình, ví dụ tomcat với tên người dùng và nhóm tomcat: www, bất kỳ tệp nào được tạo bởi quy trình tomcat sẽ không thể truy cập được bởi php bởi vì nó thuộc sở hữu của người dùng tomcat .

Nhưng nếu bạn thay vì sử dụng séc GID, các tập tin được tạo ra bởi quá trình tomcat sẽ có thể đọc được bởi quá trình php vì thuộc cùng một nhóm www

1

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

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