Чи слід себе представляти 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 запускається без оманливості, він працює як ідентифікація пулу програм. Це дозволяє мені надавати права лише для читання користувачеві, що не читає, і надавати доступ для запису до ідентичності програми. Таким чином, PHP не є безпорадним без оманливості. Я створив тест, який міг би прояснити. IUSR (anon): дозволено прочитати, заборонено писати. ідентифікатор програми: надано читання / запис. Якщо вимкнути себе за себе, я все ще можу писати файли за допомогою коду. Ініціюючи себе, я не можу. Але я не хочу, щоб IUSR мав доступ до запису. Думаю, я запитаю кілька питань на інших форумах і повернусь сюди, коли буду знати більше.
WimpyProgrammer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.