Я устанавливаю последнюю версию PHP на IIS 7.5 через FastCGI, и во всех инструкциях говорится, что FastCGI должен выдать себя за вызывающего клиента, установив
fastcgi.impersonate = 1
Если мой сайт будет иметь эту конфигурацию
выделенный пул приложений
удостоверение пула приложений ApplicationPoolIdentity
только анонимная аутентификация (как IUSR)
почему я хочу выдать себя за?
Я пришел из ASP.NET, где IUSR получает разрешения только для чтения, а удостоверение пула приложений - любые разрешения на запись. Предоставление доступа для записи в IUSR обычно открывает двери для уязвимостей WebDAV. Поэтому я не решаюсь позволить PHP работать как IUSR.
Я не могу найти много людей, задающих этот вопрос ( 1 | 2 ), поэтому я думаю, что я что-то упускаю. Может кто-нибудь уточнить это для меня?
13 месяцев спустя я хотел вернуться к своему собственному вопросу. За это время я перевел полдюжины веб-сайтов из IIS 6 в IIS 7.5 и настроил их по своему предпочтительному методу. Все, что я могу сказать, это то, что веб-сайты работают, у них не было проблем с безопасностью (не то, что это популярные сайты), и, на мой взгляд, настройка более безопасна, чем то, что рекомендует learn.iis.net.
Для потомков здесь приведены соответствующие настройки. В PHP INI:
Корневой каталог веб-сайта 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.
Если ваше приложение находится в виртуальном каталоге, вам необходимо добавить это разрешение в корневой каталог веб-сайта. Это позволяет вашему приложению читать его родительский файл 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 для пула приложений, и разрешения выглядят очень похоже на то, что я описал выше.
Рекомендуется включить олицетворение FastCGI в PHP при использовании IIS. Это контролируется директивой fastcgi.impersonate в файле php.ini. Когда олицетворение включено, PHP будет выполнять все операции с файловой системой от имени учетной записи пользователя, которая была определена с помощью аутентификации IIS.
Согласно документации, он просто позволяет fastcgi действовать от имени клиента, используя все те же разрешения (в вашем случае это то, что выглядит как учетная запись IUSR). Другими словами, для выполнения всех действий, которые обычно разрешены для собственных (или аноновых) учетных данных клиента. Ни больше ни меньше. Без этого набора я думаю, что бедные fastcgi остались бы искалеченными.
В этом случае он будет иметь доступ к аккаунту гостя или что-то в этом роде.
Мэтт
Спасибо за ваши ответы Мэтт и Боб! Я начинал думать, что никто не сделает удар.
WimpyProgrammer
2
Когда PHP запускается без олицетворения, он запускается как идентификатор пула приложений. Это позволяет мне предоставить права только для чтения пользователю anon и предоставить доступ на запись к идентификатору приложения. Так что PHP не беспомощен без подражания. Я создал тест, который мог бы прояснить. IUSR (анон): предоставлено чтение, отказано в записи. идентификация приложения: предоставлено чтение / запись. С отключенным олицетворением я все еще могу писать файлы с помощью кода. С подражанием я не могу. Но я не хочу, чтобы у IUSR был доступ на запись. Я думаю, что задам несколько вопросов на других форумах и вернусь сюда, когда узнаю больше.
Смотрите: http://www.php.net/manual/en/install.windows.iis6.php
Согласно документации, он просто позволяет fastcgi действовать от имени клиента, используя все те же разрешения (в вашем случае это то, что выглядит как учетная запись IUSR). Другими словами, для выполнения всех действий, которые обычно разрешены для собственных (или аноновых) учетных данных клиента. Ни больше ни меньше. Без этого набора я думаю, что бедные fastcgi остались бы искалеченными.
источник