Tôi có nên mạo danh PHP thông qua FastCGI?


16

Tôi đang cài đặt phiên bản PHP mới nhất lên IIS 7.5 thông qua FastCGI và tất cả các hướng dẫn đều nói rằng FastCGI nên mạo danh máy khách gọi bằng cách cài đặt

 fastcgi.impersonate = 1

Nếu trang web của tôi sẽ có cấu hình này

  • nhóm ứng dụng chuyên dụng
  • danh tính nhóm ứng dụng của ApplicationPoolIdentity
  • chỉ xác thực ẩn danh (như IUSR)

Tại sao tôi muốn mạo danh?

Tôi đến từ một nền tảng ASP.NET, nơi IUSR có các quyền chỉ đọc và danh tính nhóm ứng dụng có bất kỳ quyền ghi nào. Cho phép truy cập ghi vào IUSR thường mở ra cơ hội cho các lỗ hổng WebDAV. Vì vậy, tôi ngần ngại để PHP chạy như IUSR.

Tôi không thể tìm thấy nhiều người hỏi câu hỏi này ( 1 | 2 ) vì vậy tôi nghĩ rằng tôi phải thiếu một cái gì đó. Ai đó có thể làm rõ điều này cho tôi?

Câu trả lời:


17

13 tháng sau, tôi muốn xem lại câu hỏi của chính mình. Lúc đó tôi đã chuyển một nửa tá trang web từ IIS 6 sang IIS 7.5 và định cấu hình chúng theo phương pháp ưa thích của tôi. Tất cả những gì tôi có thể nói là các trang web hoạt động, chúng không có bất kỳ vấn đề bảo mật nào (không phải đây là các trang web phổ biến) và theo tôi, thiết lập an toàn hơn những gì learn.iis.net khuyến nghị.

Đối với hậu thế, đây là các cài đặt có liên quan. Trong INI PHP:

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0

Trong IIS:

  • Nhóm ứng dụng> Danh tính> ApplicationPoolIdentity
  • Trang web> Xác thực> Xác thực ẩn danh> Người dùng cụ thể: IUSR

Các quyền NTFS và nơi áp dụng chúng:

  • IUSR - Cấp đọc, từ chối viết
    • Thư mục gốc của trang web IIS. Ví dụ, trong dự án Zend Framework, đây sẽ là thư mục / công khai.
    • Nếu ứng dụng của bạn tải lên các tệp và lưu chúng trong một thư mục công cộng, bạn cần áp dụng quyền này cho thư mục tải lên tạm thời. Điều này là do move_uploaded_filesẽ bảo vệ các quyền của thư mục tải lên. Đây là nhược điểm lớn nhất của thiết lập quyền này mà tôi đã tìm thấy.
  • ApplicationPoolIdentity ( IIS AppPool\<<YourApplicationPoolName>>) - Cấp đọc & Danh sách
    • Thư mục gốc của ứng dụng PHP của bạn. Ví dụ, trong một dự án Zend Framework, đây sẽ là toàn bộ dự án.
    • Bất kỳ thư viện bên ngoài (Zend, Doctrine, v.v.) được bao gồm bởi ứng dụng của bạn không có trong thư mục ứng dụng.
  • ApplicationPoolIdentity - Cấp sửa đổi
    • Bất kỳ vị trí nơi ứng dụng của bạn sẽ viết như upload_tmp_dir, session.save_path, và error_log.
    • Đôi khi tôi cần thêm quyền này vào thư mục gốc của ứng dụng PHP trong môi trường phát triển của mình để hỗ trợ những thứ như tự động tạo proxy của Doctrine .
  • ApplicationPoolIdentity - Danh sách tài trợ
    • Nếu ứng dụng của bạn nằm trong một thư mục ảo, bạn sẽ cần thêm quyền này vào thư mục gốc của trang web. Điều này cho phép ứng dụng của bạn đọc web.config cha của nó. Ví dụ: nếu root ứng dụng của bạn là http://example.com/MyPHPApp , hãy đặt quyền này trên thư mục web example.com. Cụ thể, bạn chỉ cần áp dụng cho "Thư mục và tệp này", "chỉ trong vùng chứa này".

Tôi hy vọng điều này sẽ giúp bất cứ ai khác quyết định rằng các hướng dẫn learn.iis.net không lý tưởng.


Cảm ơn rất nhiều vì chuyện này! Đã thêm một tập lệnh bó để tự động hóa. Hoạt động tốt cho cài đặt của tôi.
Sire

Bạn nên bật thông tin và đặt Xác thực> Truy cập ẩn danh> Chỉnh sửa thành Nhận dạng nhóm ứng dụng. Sau đó, chỉ đặt quyền hệ thống tệp bằng IIS APPPOOL \ <Tên nhóm ứng dụng>.
Monstieur

@Kurian Vâng, cách tiếp cận đó đơn giản hơn và theo hướng dẫn learn.iis.net. Nó có cung cấp bất kỳ lợi ích khác? Tôi đã chọn hệ thống được nêu ở trên vì nó tách quyền của ứng dụng khỏi quyền của người dùng web.
WimpyProgrammer

Nó ngăn nhiều ứng dụng truy cập dữ liệu của nhau. Nếu không có ApplicationPoolIdentity nếu một ứng dụng bị hack, nó có thể được sử dụng để hack các ứng dụng khác trên máy chủ đó. Thứ hai, nó cho phép bạn đối xử với FastCGI giống như ASP.NET khi có liên quan đến quyền.
Monstieur

Tôi đồng ý với phần đầu tiên. ApplicationPoolIdentity rất tốt cho các ứng dụng hộp cát, đó là lý do tại sao tôi cũng sử dụng nó ở trên. Đến điểm thứ hai của bạn, tôi đoán chúng tôi quản lý các trang web ASP.NET của chúng tôi khác nhau. Khi tôi thiết lập một trang web ASP.NET, tôi sử dụng IUSR cho người dùng ẩn danh và ApplicationPoolIdentity cho nhóm ứng dụng và các quyền trông rất giống với những gì tôi đã nêu ở trên.
WimpyProgrammer

1

Xem: http://www.php.net/manual/en/install.windows.iis6.php

Mạo danh và truy cập hệ thống tập tin

Bạn nên kích hoạt tính năng mạo danh FastCGI trong PHP khi sử dụng IIS. Điều này được kiểm soát bởi lệnh fastcgi.impersonate trong tệp php.ini. Khi tính năng mạo danh được kích hoạt, PHP sẽ thực hiện tất cả các hoạt động của hệ thống tệp thay mặt cho tài khoản người dùng đã được xác định IIS xác thực.

Theo tài liệu, nó chỉ đơn giản cho phép fastcgi hành động thay mặt khách hàng sử dụng tất cả các quyền tương tự (trong trường hợp của bạn giống như tài khoản IUSR). Nói cách khác, để thực hiện tất cả các hành động thường được cho phép đối với thông tin đăng nhập của chính khách hàng (hoặc anon). Không nhiều không ít. Không có bộ này, tôi tưởng tượng fastcgi đáng thương sẽ bị tê liệt.


Đó là trường hợp trong tình huống của anh ấy, nó sẽ được truy cập dựa trên tài khoản khách hoặc một cái gì đó.
Matt

Cảm ơn câu trả lời của bạn Matt và Bob! Tôi đã bắt đầu nghĩ rằng không ai sẽ bị đâm.
WimpyProgrammer

2
Khi PHP được chạy mà không có sự mạo danh, nó sẽ chạy như danh tính nhóm ứng dụng. Điều này cho phép tôi cấp quyền chỉ đọc cho người dùng anon và cấp quyền truy cập ghi vào danh tính ứng dụng. Vì vậy, PHP không bất lực nếu không mạo danh. Tôi đã tạo ra một bài kiểm tra có thể làm rõ. IUSR (anon): cấp đọc, từ chối viết. danh tính ứng dụng: được cấp đọc / ghi. Khi mạo danh tắt, tôi vẫn có thể viết tệp qua mã. Với sự mạo danh, tôi không thể. Nhưng tôi không muốn IUSR có quyền truy cập ghi. Tôi nghĩ rằng tôi sẽ hỏi một số câu hỏi trong các diễn đàn khác và trở lại đây khi tôi biết nhiều hơn.
WimpyProgrammer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.