2010-04-01 44 views
5

Có cách nào để đặt php chạy dưới apache để tạo thư mục với thư mục thuộc sở hữu của chủ sở hữu của chương trình tạo ra nó thay vì được sở hữu bởi apache?PHP mkdir và apache quyền sở hữu

Sử dụng tính năng nhấn từ để tạo thư mục mới để tải lên nhưng chúng được sở hữu bởi apache.apache chứ không phải bởi trang web mà chúng đang chạy. Điều này cũng xảy ra khi sử dụng ostickets. Bây giờ chúng ta phải SSH vào máy chủ và chmod các thư mục, nhưng nó sẽ có vẻ sẽ có một thiết lập một nơi nào đó để ghi đè quyền sở hữu bên ngoài của bất kỳ chương trình nào nó.

Trả lời

2

Safe_mode được bật trên máy chủ của bạn. Hàm mkdir() tạo thư mục với chủ sở hữu ("apache", "none", ..) khác với chủ sở hữu tập lệnh hiện tại. Và các tập lệnh không thể tải lên (di chuyển, sao chép) các tệp vào thư mục đó với một chủ sở hữu khác (không giống như chủ sở hữu tập lệnh hiện tại).

Tắt safe_mode và điều đó sẽ hoạt động.

Xem http://php.net/manual/en/features.safe-mode.php để biết chi tiết.

P.S. Với kích hoạt safe_mode bạn không thể sử dụng chức năng chmod() trong php.

+0

Điều này làm việc Sanhe - Cảm ơn bạn –

+0

** Cảnh báo Tính năng này đã được DEPRECATED là của PHP 5.3.0 và REMOVED là của PHP 5.4.0. ** – Jim

1

Không trực tiếp, không. Bạn không thể "cho đi" quyền sở hữu tệp cho người dùng khác, trừ khi bạn là người chủ. Bạn có thể điều tra bằng cách sử dụng chỉ thị apache "AssignUserID" để buộc vhost cụ thể chạy như một người dùng/nhóm cụ thể. Với Apache/PHP sẽ tạo ra bất kỳ tập tin với quyền sở hữu phù hợp

+0

Chỉ trong trường hợp ai đó nghĩ rằng đây có thể là cách để đi (sử dụng mpm_perchild_module) - mà tôi đã nghĩ: từ liên kết: ** Mô-đun này không hoạt động. Phát triển mô-đun này chưa hoàn thành và hiện không hoạt động. Không sử dụng mã độc, trừ khi bạn là một lập trình viên sẵn sàng giúp sửa chữa nó.** – Jim

0

Check-out PHP chown() chức năng

+1

Chức năng này sẽ thất bại nếu không được chạy bởi superuser. – webbiedave

2

Một cách khác là đặt người dùng apache và "người sử dụng của khách hàng" trong một nhóm mới. Thêm thư mục nên sử dụng bit dính SGID để mỗi tệp mới được gán nhóm cho nhóm mới này. Bằng cách này, máy chủ web và "người sử dụng khách hàng" có thể làm việc với các tập tin mà không cần bất kỳ vấn đề

[17:57] [email protected] /tmp/test $ ls -al /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 17:55 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

Như bạn thấy thư mục có cây gậy chút SGID và chủ sở hữu là "người sử dụng" nhóm trong đó I (progman) là. Không nếu người dùng khác thêm tệp mà nhóm sẽ tự động được đặt thành nhóm này

[17:55] proglap ~ # touch /tmp/test/x 

Điều này được thực thi từ gốc. Bây giờ chúng ta nhận được:

[17:57] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 72 Apr 1 17:59 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 
-rw-r--r-- 1 root users 0 Apr 1 17:59 x 

Như bạn thấy các tập tin bổ sung là từ gốc, nhưng nhóm được thiết lập để users và cách này tôi thể gỡ bỏ nó

[18:00] [email protected] /tmp/test $ rm x 
rm: remove write-protected regular empty file `x'? y 
[18:01] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 18:01 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

Hãy ghi nhớ rằng bạn vẫn cần thay đổi chmod nếu bạn muốn chỉnh sửa tệp là rw-r--r-- chỉ là quyền truy cập đọc nhóm. Nhưng thay đổi chmod, thậm chí có thể làm việc với umask, là tốt hơn so với giao dịch với quyền truy cập root và sử dụng chown.

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