Отказано в разрешении IIS 7 / PHP 5.3.6 при доступе к сетевому файлу

#php #iis

#php #iis

Вопрос:

Сервер-> 64-разрядная версия Windows 2008 (IIS 7 amp; amp; PHP 5.3.6)

ServerB-> 32-разрядная версия Windows 2003 (файловый сервер)

Я пытаюсь получить доступ к файлу ServerB directory1 directory2 .abc через fopen через сайт, размещенный на сервере, и я получаю сообщение об ошибке «Отказано в разрешении». Это веб-сайт по умолчанию, использующий пул приложений по умолчанию.

Что я пытался предоставить следующим учетным записям или группам в AD полные разрешения для каталога (и файла через наследование), и это все равно выдавало ошибку:

  • вручную создана учетная запись IUSR_SERVERA (ранее она не существовала)
  • IIS_WPG
  • Все
  • Сетевая служба
  • Анонимный доступ
  • Пользователи, прошедшие проверку подлинности

Идентификатором для DefaultAppPool по умолчанию является NetworkService, и в нем включены 32-разрядные приложения.

IUSR_SERVERA имеет полные права доступа к локальному каталогу php.

Приветствуется любая помощь. Я временно решил проблему, скопировав необходимый файл локально в папку wwwroot сервера, но это вообще не может быть постоянным решением.

Спасибо

-Майк

Ответ №1:

Спасибо за предложение ProcMon, оно привело меня к ответу. Я неправильно настроил приложение по умолчанию.

Я читал и перечитывал все, что смог найти, но нигде конкретно об этом не говорилось:

Если вам необходимо получить доступ к сетевым файлам с использованием PHP через IIS 7, настройте учетную запись с надлежащими учетными данными в приложении по умолчанию для сайта, над которым вы работаете.

Для этого зайдите в диспетчер IIS

  1. Выберите свой сайт на панели «Подключения»
  2. Щелкните ссылку Просмотр приложений на панели действий (крайняя правая часть экрана).
  3. Нажмите Установить значения по умолчанию для приложения на панели действий на новом экране
  4. Выберите DefaultAppPool в разделе «Пул приложений»
  5. Введите надлежащие учетные данные в разделе «Учетные данные физического пути»

Знайте, что изменение модели процесса -> Идентификатор в дополнительных настройках пула приложений по умолчанию никак не повлияло на разрешение этого.

Комментарии:

1. Это именно то, что мне было нужно, когда я не мог заставить fopen работать из-за file_exists, возвращающего false.

Ответ №2:

Учетная запись IUSR_SERVERA не принесет большой пользы, учитывая, что PHP выполняется под пулом приложений по умолчанию, который, как вы сказали, выполняется как NetworkService.

Что вам нужно сделать, так это предоставить разрешения на ServerB серверу NetworkService, потому что это локальная учетная запись, а не учетная запись AD.

В противном случае вы могли бы изменить пул приложений по умолчанию, чтобы он запускался как IUSR_SERVERA, и тогда он должен работать, предполагая, что учетная запись является учетной записью AD, а не локальной.

Если вы все еще не можете понять это, возьмите копию ProcMon и просмотрите сообщения на предмет обращений, содержащих желаемый путь, и посмотрите, какова фактическая причина отказа операционной системы и какую учетную запись она пытается использовать.