Должен ли я выдавать себя за PHP через FastCGI?
Я устанавливаю последнюю версию PHP на IIS 7.5 через FastCGI, и во всех инструкциях говорится, что FastCGI должен выдать себя за вызывающего клиента, установив
fastcgi.impersonate = 1
Если мой сайт будет иметь эту конфигурацию
- выделенный пул приложений
- идентификатор пула приложений ApplicationPoolIdentity
- только анонимная аутентификация (как IUSR)
почему я хочу выдать себя за?
Я пришел из ASP.NET, где IUSR получает разрешения только для чтения, а удостоверение пула приложений - любые разрешения на запись. Предоставление доступа для записи в IUSR обычно открывает двери для уязвимостей WebDAV. Поэтому я не решаюсь позволить PHP работать как IUSR.
Я не могу найти много людей, задающих этот вопрос ( 1 | 2), поэтому я думаю, что я что-то упускаю. Может кто-нибудь уточнить это для меня?
3 ответа
13 месяцев спустя я хотел вернуться к своему собственному вопросу. За это время я перевел полдюжины веб-сайтов из IIS 6 в IIS 7.5 и настроил их по своему предпочтительному методу. Все, что я могу сказать, это то, что веб-сайты работают, у них не было проблем с безопасностью (не то, что это популярные сайты), и, на мой взгляд, настройка более безопасна, чем то, что рекомендует learn.iis.net.
Для потомков здесь приведены соответствующие настройки. В PHP INI:
cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0
В IIS:
- Пул приложений> Идентичность> ApplicationPoolIdentity
- Веб-сайт> Аутентификация> Анонимная аутентификация> Конкретный пользователь: IUSR
Разрешения NTFS и где их применять:
- IUSR - Грант Читать, Запретить Написать
- Корневой каталог веб-сайта IIS. Например, в проекте Zend Framework это будет каталог /public.
- Если ваше приложение загружает файлы и сохраняет их в общедоступном каталоге, вам необходимо применить это разрешение к временному каталогу загрузки. Это потому что
move_uploaded_file
сохранит права на каталог загрузки. Это самый большой недостаток этой настройки разрешений, который я обнаружил.
- ApplicationPoolIdentity (
IIS AppPool\<<YourApplicationPoolName>>
) - Grant Read & List- Корень вашего PHP-приложения. Например, в проекте Zend Framework это будет весь проект.
- Любые внешние библиотеки (Zend, Doctrine и т. Д.), Включенные в ваше приложение, которых нет в папке приложения.
- ApplicationPoolIdentity - Грант Модифицировать
- Любое место, где будет написано ваше приложение, например
upload_tmp_dir
,session.save_path
, а такжеerror_log
, - Иногда мне нужно добавить это разрешение в корень приложения PHP в моей среде разработки для поддержки таких вещей, как автоматическая генерация прокси в Doctrine.
- Любое место, где будет написано ваше приложение, например
- ApplicationPoolIdentity - список грантов
- Если ваше приложение находится в виртуальном каталоге, вам необходимо добавить это разрешение в корневой каталог веб-сайта. Это позволяет вашему приложению читать его родительский файл web.config. Например, если корнем вашего приложения является http://example.com/MyPHPApp, установите это разрешение в веб-каталоге example.com. В частности, вам нужно только обратиться к "Эта папка и файлы", "только в этом контейнере".
Я надеюсь, что это поможет любому, кто решит, что инструкции learn.iis.net не идеальны.
Смотрите: http://www.php.net/manual/en/install.windows.iis6.php
Олицетворение и доступ к файловой системе
Рекомендуется включить олицетворение FastCGI в PHP при использовании IIS. Это контролируется директивой fastcgi.impersonate в файле php.ini. Когда олицетворение включено, PHP будет выполнять все операции с файловой системой от имени учетной записи пользователя, которая была определена с помощью аутентификации IIS.
Согласно документации, он просто позволяет fastcgi действовать от имени клиента, используя все те же разрешения (в вашем случае это то, что выглядит как учетная запись IUSR). Другими словами, для выполнения всех действий, которые обычно разрешены для собственных (или аноновых) учетных данных клиента. Не больше, не меньше. Без этого набора я думаю, что бедные fastcgi останутся калеками.
Существует много расплывчатых ответов относительно прав доступа к файлам для IIS, поэтому я потратил много времени, чтобы разобраться в этом. В 2023 году я все еще могу подтвердить, что @WimpyProgrammer были на высоте. Короче говоря, мои настройки по умолчанию следующие:
Анонимная аутентификация заменяется на Идентификатор пула приложений, а для fastcgi.impersonate установлено значение 0.
Чтобы приложение могло читать файлы конфигурации, я разрешаю следующее в c:\inetpub и его подпапках:IUSR — чтение + запретить запись IIS_IUSRS — чтение и выполнение (включая список)
Корневые папки для каждого веб-сайта (например, c:\inetpub\example.com) затем получают:IIS AppPool\AppPoolName — Изменить (чтобы иметь возможность обновлять файлы из приложения)IIS_IUSRS удаляется IUSR наследует Чтение + Запретить запись (для разрешить незарегистрированным пользователям просматривать сайт)
Разрешения на настройки по умолчанию для системы и т. д. оставлены как есть, и у меня есть отдельные разрешения, предоставленные для изоляции FTP.