Как сделать, чтобы PHP под IIS мог создавать и изменять файлы

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

Тема этой статьи, с одной стороны, уже не раз поднималась, в том числе, в Интернете. Но, в тоже время, очень многие материалы по данному вопросу являются не полными. В частности, потому что не затрагивают причину возникновения данной проблемы либо затрагивают её достаточно поверхностно. Поэтому, имеет смысл вновь обратиться к нему. Тем более что в последние годы хостинг под Windows стал довольно распространён, а IIS является «штатным» web-сервером этой операционной системы.

О том какую роль играет работа с файлами в функционировании web-приложений говорить, наверное, излишне. Достаточно вспомнить, хотя бы то, что практически любая система управления контентом (англ. — Content Management System, сокр. — CMS) имеет файл настроек конфигурации, который создаётся при её установке и в который записываются данные необходимые для её работы. Если нет возможности создать этот файл, CMS может не установиться. Правда, некоторые CMS, например Joomla, в подобных случаях, выводят содержимое этого файла на странице завершения установки. Таким образом, есть возможность создать файл настроек вручную, просто скопировав его содержимое со страницы.

Однако это не решает проблему, так как в процессе работы web-приложения всё равно может потребоваться создание или изменение тех или иных файлов. Следовательно, проблему записи файлов при работе сайта под IISнеобходимо решить.

Причина возникновения проблемы

Для решения любой проблемы необходимо понять причину, которая привела к её возникновению.

В NTFS для доступа к файлам и папкам существует система, так называемых, разрешений. Подробное описание этой системы приведено на сайте TechNet. Однако её суть довольно проста. Для того чтобы пользователь или группа пользователь могли совершать с файлом или папкой те или иные действия, они должны обладать определённым набором прав.

В процессе установки IIS создаются:

  • Группа пользователей: IIS_IUSRS;
  • Пользователь: IUSR.

Полное описание разрешений NTFS по умолчанию для IIS представлено на сайте поддержки Microsoft. В рамках рассматриваемого вопроса необходимо отметить только следующие моменты.

Группа пользователей IIS_USRS имеет доступ только к папке сайта по умолчанию (wwwroot). Причём, по умолчанию, доступ не полный. В частности, нет разрешений на запись и изменение. При этом пользователь IUSR в списке пользователей и групп, имеющих доступ к этой папке, по умолчанию, отсутствует вообще.

Данные установки разрешений служат, в частности, для обеспечения безопасности. Но, в тоже время, как показывает практика, сильно затрудняют работу web-приложений.

Дело в том, что IIS устроена таким образом, что по умолчанию, то есть, если в web-приложении не реализован специальный вид аутентификации, оно работает в режиме анонимного доступа. В этом режиме все пользователи web-приложения представлены в системе как пользователь IUSR. Поэтому, вполне естественно, что web-приложение имеет только те возможности, которые ему могут быть предоставлены в соответствии с этой учётной записью.

Вследствие того, что, как говорилось выше, разрешения на запись и изменения у пользователя IUSR по умолчанию отсутствуют, также, по умолчанию, отсутствуют аналогичные возможности у web-приложений.

Варианты решения

Теперь, когда стала известна причина возникновения проблемы, можно рассмотреть возможные способы её решения.

В данном случае их два:

  1. Предоставить пользователю IUSRнеобходимые разрешения для папок, в которых расположены файлы сайтов.
  2. Использовать аутентификацию отличную от анонимной.

Первый способ в принципе достаточно подробно описан на официальном сайте PHP в статье посвящённой установке в Windows.

В силу своей простоты, в частности необходимые разрешения можно предоставить не только с помощью командной строки (как предлагается в статье), но и при помощи графического интерфейса Windows (вкладка «Безопасность» в окне свойств папки или файла (см. скриншот)), этот способ легко реализуем.

srceen_wwwroot

Помимо этого, он предоставляет возможность создавать файлы и записывать в них изменения, в том числе, простым web-приложениям, в которых не предусмотрена система авторизации (простейшие сайты).

В тоже время, использование этого способа отрицательно сказывается на безопасности. Как уже было отмечено, при анонимном доступе все пользователи web-приложения, представлены в системе одной и той же учётной записью. И таким образом все они, включая простых «гостей сайта», имеют, по сути, одинаковые права.

Второй способ значительно сложнее в реализации и подходит только для достаточно сложных web-приложений. Он требует не просто наличия у web-приложения системы авторизации. Эта система должна быть построена в соответствии с тем методом аутентификации, который используется на сервере.

Методы аутентификации, используемые в IIS, подробно описаны на сайте поддержки Microsoft.

Такой подход обеспечивает более высокий уровень безопасности, а также, несмотря на всю сложность реализации расширить возможности web-приложения. Например, путём интеграции с ActiveDirectory.

Заключение

Проблема полноценной работы с файлами в PHP под IIS решаема. При этом для её решения могут быть использованы различные подходы, а не только способ с официального сайта PHP.

Решение, какой из них выбрать здесь, как и во многих других случаях, необходимо принимать разработчику, в соответствии со спецификой разрабатываемого приложения и требованиями к нему. В том числе, требованиями относительно безопасности.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *