2011-01-17 8 views

Trả lời

4

Tôi đã có một yêu cầu tương tự cách đây vài năm, yêu cầu một vài tập lệnh PHP để nói chuyện với một cổng nối tiếp. Cổng nối tiếp đầu tiên thường là/dev/ttyS0, thuộc sở hữu của root và trong nhóm dialout.

Để thiết lập ban đầu, tôi đã thêm người dùng apache vào nhóm quay số. Các kịch bản PHP đã có thể trực tiếp nói chuyện với cổng nối tiếp mà không có vấn đề gì. Tuy nhiên, chỉ một phiên bản của một tập lệnh có thể mở cổng nối tiếp bất kỳ lúc nào, vì vậy giải pháp này không thể hoạt động.

Sau đó, tôi đã tạo một daemon cung cấp một lớp giữa cổng nối tiếp và các tập lệnh PHP. Các kịch bản PHP sẽ nói chuyện với daemon thông qua một đường ống có tên, và daemon sau đó sẽ định dạng các yêu cầu và truyền nó vào cổng nối tiếp - làm một chút bộ nhớ đệm trên đường đi.

Vì vậy, hãy thêm www-data hoặc bất kỳ người dùng apache nào của bạn vào nhóm sở hữu các tệp đó, cấp quyền thực thi nhóm hoặc sử dụng proxy như tôi có. Nếu an ninh liên quan đến bạn, sau đó tôi sẽ đi với sau này.

0

Bạn có thể thay đổi người dùng mà máy chủ của bạn chạy. Điều này có thể dễ dàng thực hiện bằng cách sử dụng phiên bản cửa sổ của apache (apache chạy ở đó như dịch vụ và nó rất dễ dàng để cấu hình người dùng theo đó apache chạy).

Bạn sử dụng plattform máy chủ nào?

+0

Đang sử dụng ubuntu sáng suốt. Tôi không muốn thay đổi người dùng theo đó apache chạy vì điều này sẽ là một nguy cơ bảo mật, nhưng tôi đã tạo ra một số ứng dụng kết thúc trở lại mà yêu cầu quyền truy cập vào các tệp không thuộc sở hữu của www-data. Điều gì sẽ xảy ra dọc theo các dòng tạo nhóm chứa dữ liệu www và chủ sở hữu tệp? – mrwooster

+0

đó sẽ là một tùy chọn khác có thể hoạt động. việc thay đổi người dùng apache chỉ là một nguy cơ bảo mật nếu yozu chỉ định người dùng có quyền cấp cao (như root) – Thariama

1

Không, không trực tiếp. Nếu bạn đang sử dụng máy Linux và có quyền, bạn có thể đặt bộ bit setuid trên tệp của mình.

Hãy nhớ rằng máy chủ web hoạt động như một người dùng khác vì một lý do. Nó là một cơ chế bảo mật rất quan trọng và bằng cách làm việc xung quanh nó, bạn có thể gây ra lỗ hổng bảo mật.

6

Nếu bạn có quyền truy cập vào cấu hình của máy chủ (giả sử là Apache), bạn có thể xem xét sử dụng suPHP. Trong một máy chủ ảo của configuration bạn một cách rõ ràng có thể thiết lập người dùng và nhóm mà một kịch bản PHP được thực hiện:

<VirtualHost 192.168.1.1:80> 
... 
suPHP_UserGroup user group 
... 
</VirtualHost> 

Cài đặt này có sẵn cho các cấu hình suPHP xây dựng với các tùy chọn --with-setid-mode=paranoid.

Một cách khác để thay đổi ID người dùng là posix_setuid() cần có đặc quyền thích hợp nào. Điều đó có nghĩa là chạy tập lệnh PHP của bạn dưới dạng root, đây là sự cố bảo mật serios.