1 сайт = 1 пользователь

Концепция 1 сайт = 1 пользователь является краеугольным камнем в настройке веб-сервера. В большей части это относится к безопасности сервера, но тема достаточно велика, чтобы посвятить отдельную запись (так и читать удобнее). Кратко идея выглядит следующим образом:

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

Такой подход даёт ряд существенных плюсов:

  1. Файлы внутри сайта принадлежат пользователю, и другие пользователи физически не могут в них ничего изменить
  2. chroot не позволит пользователям даже прочитать чужие файлы сославшись символьной ссылкой
  3. nginx запускается от имени пользователя, поэтому без проблем работает с временными файлами, загружаемыми на сервер, не требуя 777 прав на папку загрузок
  4. php так же запускается от имени пользователя, что позволяет задать индивидуальные настройки типа open_basedir, папку для загрузки файлов и сессий
  5. в php так же можно задать обратный адрес для отправки почты с домена через функцию mail, что позволяет быстро отследить источник спама, если такой появится

Кроме вопросов безопасности, разделение пользователей позволяет гибко распределять ресурсы — определяя в настройках количество процессов php и максимальный объём память доступный этим процессам, можно регулировать максимальную нагрузку на сервер от определенного сайта.

Разделение пользователей так же полезно при мониторинге системы — в списке процессов прекрасно видно сколько каждый сайт использует ресурсов, что позволяет, в случае замедления общей работы системы, быстро вычислить «виновника» и отселить его на отдельный сервер.