Должен ли я выдавать себя за PHP через FastCGI?


16

Я устанавливаю последнюю версию PHP на IIS 7.5 через FastCGI, и во всех инструкциях говорится, что FastCGI должен выдать себя за вызывающего клиента, установив

 fastcgi.impersonate = 1

Если мой сайт будет иметь эту конфигурацию

  • выделенный пул приложений
  • удостоверение пула приложений ApplicationPoolIdentity
  • только анонимная аутентификация (как IUSR)

почему я хочу выдать себя за?

Я пришел из ASP.NET, где IUSR получает разрешения только для чтения, а удостоверение пула приложений - любые разрешения на запись. Предоставление доступа для записи в IUSR обычно открывает двери для уязвимостей WebDAV. Поэтому я не решаюсь позволить PHP работать как IUSR.

Я не могу найти много людей, задающих этот вопрос ( 1 | 2 ), поэтому я думаю, что я что-то упускаю. Может кто-нибудь уточнить это для меня?

Ответы:


17

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>>) - Предоставить чтение и список
    • Корень вашего 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 не идеальны.


Большое спасибо за это! Добавлен пакетный скрипт для автоматизации. Работает нормально для моей установки.
Отец

Вы должны включить имперсанацию и установить Аутентификация> Анонимный доступ> Изменить идентификатор пула приложений. Затем устанавливайте только разрешения файловой системы, используя IIS APPPOOL \ <Имя пула приложений>.
Месье

@Kurian Да, этот подход проще и согласно инструкциям learn.iis.net. Это предлагает какие-либо другие преимущества? Я выбрал систему, описанную выше, потому что она отделяет разрешения приложения от разрешений веб-пользователя.
WimpyProgrammer

Это предотвращает доступ нескольких приложений к данным друг друга. Если ApplicationPoolIdentity не взломан, его можно использовать для взлома других приложений на этом сервере. Во-вторых, он позволяет вам относиться к FastCGI так же, как к ASP.NET, что касается разрешений.
Монстер

Я согласен с первой частью. ApplicationPoolIdentity отлично подходит для приложений с песочницей, поэтому я также использую его выше. Во-вторых, я думаю, что мы управляем нашими сайтами ASP.NET по-другому. Когда я настраиваю сайт ASP.NET, я использую IUSR для анонимного пользователя и ApplicationPoolIdentity для пула приложений, и разрешения выглядят очень похоже на то, что я описал выше.
WimpyProgrammer

1

Смотрите: http://www.php.net/manual/en/install.windows.iis6.php

Олицетворение и доступ к файловой системе

Рекомендуется включить олицетворение FastCGI в PHP при использовании IIS. Это контролируется директивой fastcgi.impersonate в файле php.ini. Когда олицетворение включено, PHP будет выполнять все операции с файловой системой от имени учетной записи пользователя, которая была определена с помощью аутентификации IIS.

Согласно документации, он просто позволяет fastcgi действовать от имени клиента, используя все те же разрешения (в вашем случае это то, что выглядит как учетная запись IUSR). Другими словами, для выполнения всех действий, которые обычно разрешены для собственных (или аноновых) учетных данных клиента. Ни больше ни меньше. Без этого набора я думаю, что бедные fastcgi остались бы искалеченными.


В этом случае он будет иметь доступ к аккаунту гостя или что-то в этом роде.
Мэтт

Спасибо за ваши ответы Мэтт и Боб! Я начинал думать, что никто не сделает удар.
WimpyProgrammer

2
Когда PHP запускается без олицетворения, он запускается как идентификатор пула приложений. Это позволяет мне предоставить права только для чтения пользователю anon и предоставить доступ на запись к идентификатору приложения. Так что PHP не беспомощен без подражания. Я создал тест, который мог бы прояснить. IUSR (анон): предоставлено чтение, отказано в записи. идентификация приложения: предоставлено чтение / запись. С отключенным олицетворением я все еще могу писать файлы с помощью кода. С подражанием я не могу. Но я не хочу, чтобы у IUSR был доступ на запись. Я думаю, что задам несколько вопросов на других форумах и вернусь сюда, когда узнаю больше.
WimpyProgrammer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.