Назад | Перейти на главную страницу

Обучение управлению однопользовательскими VPS

Пытаюсь самообразоваться, поэтому у меня есть несколько вопросов к гуру. Этот VPS будет работать с сайтами wordpress и drupal.

  1. На однопользовательском VPS со стеком Debian LAMP, как лучше всего обслуживать веб-сайты из домашнего каталога пользователя без полномочий root вместо / var / www, при этом гарантируя, что владельцем файла / группы является пользователь: пользователь? Я предполагаю, что это лучший способ избежать смены владельца / группы / var / www.

  2. Требуется ли suexec только для одного пользователя без полномочий root? Стоит ли мне его использовать?

  3. Является ли PHP с FastCGI стандартом де-факто для использования в наши дни, а когда нет?

  4. Я заметил, что использование памяти снизилось наполовину на моем VPS при переключении с mpm_worker на mpm_prefork. Это ожидаемое поведение? Оба MPM настроены с одинаковыми настройками в apache.conf

Каждому нужно с чего-то начинать - и только попробовав, вы действительно сможете научиться делать эти вещи. Тем не менее, то, что сервер может обслуживать ваш сайт, не означает, что это должно быть - большинство недостатков безопасности обычно не проявляются до тех пор, пока они не будут использованы. Также помните, что если ваш сервер скомпрометирован, это повлияет не только на вас, но и на всех других пользователей Интернета.

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

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

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

  1. Путь, по которому обслуживает Apache, определен в вашем httpd.conf - ищите DocumentRoot директива, которая в основном определяет путь файловой системы, который соответствует корневому пути веб-сайта. Обычно вы найдете подходящий Directory блок, который определяет определенные параметры, разрешения и поведение для совпадающих файлов. Я бы порекомендовал статьи «Идеальный сервер» на HowToForge в качестве хорошей отправной точки (однако, в более поздних версиях действительно есть значительная часть настройки, настроенная с помощью ISPConfig, что далеко не идеально для обучения).

    Тем не менее, используя /var/www довольно распространенная практика (даже если она не совсем соответствует нормальному стандарт иерархии файловой системы, который может способствовать /srv/www). Вам нужны ограничительные разрешения - и наличие вашего содержащего каталога, принадлежащего root, ограничивает ущерб, который может возникнуть в случае взлома учетной записи / сайта. Я бы предложил просто добавить каждый сайт в / var / www. Например, возможный макет может быть:

    • /var/www/domain1.com - домашний каталог ограниченного пользователя (принадлежит этому пользователю)
      • cgi-bin - каталог для скриптов cgi (возможно, включая оболочки FastCGI)
      • log - символическая ссылка на файл журнала конкретного сайта в / var / log /
      • tmp - временный каталог (например, для загрузок, сеансов и т. д.) по мере необходимости
      • public_html - корень документа для сайта


    Сохраните права доступа 644 для файлов и 755 для каталогов (используйте более строгие разрешения для файлов конфигурации, которые могут содержать пароли). (Вы также можете добавить веб-сервер в группу, в зависимости от ваших настроек).

  2. Вы упоминаете несколько сайтов (сайты Wordpress и Drupal) - желательно разделить их, насколько это возможно, и запускать их от имени разных пользователей - хорошее начало. Чем меньше может сделать конкретный пользователь, тем меньше ущерба может быть нанесен, если конкретный сайт будет скомпрометирован (при этом попытки «исправить» вещи после множества таких компромиссов, вероятно, не лучшая идея - лучше всего начать с этого момента - рекомендованное чтение). suExec - хорошая идея, но вы можете обойтись без него, если используете PHP-FPM (хотя вы все равно можете использовать suExec с PHP-FPM).

  3. mod_php быстрее, чем FastCGI, но он не может справиться с нагрузкой (поскольку каждый запрос получает специальный интерпретатор PHP, вы получаете скорость, но огромное использование памяти). Следовательно, для любых приложений, кроме самых тривиальных, вам следует выбрать путь FastCGI. я бы порекомендовал PHP-FPM - это менеджер процессов FastCGI, который имеет хорошую производительность и значительно упрощает реализацию многих важных функций (например, suExec). Он легко доступен для версий PHP выше 5.3.3 (предыдущие версии должны быть скомпилированы с патчем php-fpm). На стороне Apache, если вы используете PHP-FPM, вы должны использовать mod_fastcgi и передать запросы работающему демону PHP-FPM с FastCgiExternalServer.

  4. Apache использует потоки и процессы для ответа на запросы. Многопоточный подход более эффективен, но не все модули являются потокобезопасными. Для запуска большего количества процессов в целом требуется больше памяти, но при определенных обстоятельствах он может быть более стабильным. Каждый запрос обрабатывается одним потоком.

    • mpm_prefork - это более старый менеджер процессов - у каждого процесса есть только один поток - поэтому для каждого запроса требуется новый процесс - для этого требуется больше памяти.
    • mpm_worker - более новый менеджер процессов - запускает небольшое количество процессов, каждый из которых имеет несколько потоков. Это должно лучше масштабироваться и потреблять меньше ресурсов.


    Есть несколько возможных причин, по которым ваша память могла упасть при переключении. Во-первых, вы, вероятно, перезапустили Apache - это завершит все существующие процессы и запустит новые. Со временем процессы будут расти в размерах и потреблять больше памяти - новые процессы используют меньше памяти. Во-вторых, значения, которые вы установили в httpd.conf, вероятно, определяют разные начальные точки для каждого диспетчера процессов (например, вы ожидаете, что если mpm_worker имеет больше потоков, то же количество запущенных процессов будет потреблять больше памяти - однако они также будут иметь возможность обрабатывать больше запросов). (Значение каждой из директив диспетчера процессов объясняется в httpd.conf - или вы можете увидеть этот ответ).

Наконец, если вы работаете на VPS с низким объемом памяти, я бы порекомендовал изучить NginX вместо Apache. Хотя более широко используется Apache; Nginx проще в настройке, использует меньше ресурсов и обычно предлагает лучшую производительность (особенно "из коробки").

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