Что такое ламп сервер
Что такое LAMP? Преимущества и недостатки
В данной статье рассмотрим свободно распространяемый и практически бесплатный набор программного обеспечения под названиям LAMP. Как правильно расшифровывается данная аббревиатура? Она состоит из 4-ех популярных технологий, которые состоят в данной связке: Linux — операционная система; Apache — веб-сервер; MySQL — СУБД; PHP — язык программирования, с помощью которого создают веб-ресурсы.
Данный набор ПО устанавливают на сервер для отображения динамических веб-сайтов и веб-приложений.
Эта платформа позволяет установить (развернуть) большинство типов веб-сайтов и сетевого программного обеспечения на вашем сервере.
Lamp web очень часто необходим владельцам сайтов и приложений для работы на серверном оборудовании, поэтому часто пользователи ищут именно lamp hosting для размещения проектов.
Что такое LAMP (lamp стек)?
Тоесть это целый комплекс программного обеспечение, которое работает вместе для обеспечения стабильной, быстрой и профессиональной работы проекта пользователя. Также обратите внимание, что в данной аббревиатуре буква Р может обозначать не только PHP (php lamp), но и другие популярные языки программирования, например, Perl и Python.
Также сегодня можно встретить другие модификации термина LAMP, к примеру:
➡LEMP, где Nginx используется вместо Apache;
➡WAMP, Microsoft Windows вместо Linux (lamp windows);
Для чего нужен LAMP?
Итак кому на самом деле нужен lamp technology и для чего он используется, разложим все по полочкам, чтобы понять действительно нужен LAMP каждому пользователю виртуального сервера. Ламп сервер нужен:
Тоесть, если вам нужен сервер для любой работы, то рано или поздно пригодится установка ubuntu lamp или другой линукс ОС.
Настроить stack lemp на вашем сервере в компании ГиперХост могут технические администраторы по запросу в тикет. На серверах компании эта настройка производится бесплатно.
Преимущества сборки
Итак, зачем и кому нужен LAMP (веб сервер ламп), мы уже разобрались. Теперь рассмотрим его весомые преимущества.
✓ сборка замечательно подходит для быстрого развертывания приложения, из-за простой конфигурации, но все же она дает мало функций в плане масштабируемости и изоляции компонентов.
✓ установка LAMP (Linux + Apache + MySQL + PHP/Perl/Python) является довольно широко используемым вариантом настройки серверов с Ubuntu.
✓ есть большое количество приложений, которые имеют открытый исходный код и написаны с использованием стека приложений LAMP. Например, популярные приложения LAMP: wiki энциклопедии, системы управления содержимым (CMS) и управляющие приложения, например, phpMyAdmin.
✓ гибкость при подборе баз данных, web серверов и языков сценариев.
✓ использует наборы открытого ПО, которое значительно ускоряет процесс разработки.
✓ актуальной заменой для MySQL служат PostgreSQL и SQLite. Python, Perl и Ruby можно заменить PHP. А Nginx, Cherokee и Lighttpd альтернатива Apache.
На практике это очень удачное и востребованное решение, которое подойдет для решения любых серверных задач. Но в нем также есть некоторые недостатки, который собраны ниже отдельным пунктом.
Недостатки LAMP комбинации
Среди недостатков подобной lamp platform следует выделить следующие:
✓ Приложение и база данных используют одни и те же ресурсы сервера (CPU, память, I/O и т.д.), что дает низкую производительность и затрудняет определение источника (приложение или база данных) этой проблемы.
✓ Так же есть помехи в осуществлении горизонтального масштабирования.
Если эти минусы для вас незначительны, то ламп выгодное и полезное решение для вашего проекта.
Где взять LAMP на сервере?
Установить и настроить сборку LAMP вы можете самостоятельно на любом сервере. Для этого в Сети есть большое количество инструкций и советов от системных администраторов. Например, чтобы быстро установить Lamp на дистрибутив Ubuntu, достаточно команды:
sudo tasksel install lamp-server
Далее необходимо время, так как скачиваются и настраиваются определенные пакеты.
Но если Вам необходимо наладить работу LAMP на наших VPS серверах и получить lamp vps hosting, обращайтесь в нашу круглосуточную техническую поддержку. Наши специалисты с многолетним опытом работы,в том числе и с LAMP, помогут быстро собрать и установить сборку на ваш сервер. Эта услугу входит в базовое администрирование. Если необходимо настроить ламп на сервере, заказанном не у нас, это можно осуществить на условиях почасового администрирования. В любом случае вы получите настроенный и оптимизированный LAMP для качественной работы ваших проектов.
Компания HyperHost желает Вам приятной работы!
Но это, конечно же, еще не все технологии, которые поддерживает хостинг от ГиперХост. Более детально в нашей предыдущей статье.
Повышаем безопасность стека web-приложений (виртуализация LAMP)
От переводчика:
Автор оригинального цикла статей на редкость немногословен и трудночитаем. Мы постараемся сохранить его лаконичность там, где это возможно и добавим разъяснений, где автор сам плохо понимает, что он хочет сказать. Перевод допускает ряд отступлений от принятых в профессиональной среде терминов и устойчивых выражений. Переводчик просит проявить снисхождение к подобным случаям в форме личных сообщений, если обнаруженное затрудняет понимание текста и обнажает невежественность писавшего.
LAMP: Типовая и дробная установки
Скорее всего, ваше решение, построенное на базе одного выделенного или виртуального сервера, выглядит следующим образом:
Что случится в случае если, скажем, будет скомпрометирован web-сервер Apache? Злоумышленник получит доступ к вашей базе данных, кэш-памяти и, так же, к другим элементам системы или сети. В таком случае вам необходимо разделить службы сервера следующим образом:
Роли каждой виртуальной машины / сервера:
Ниже приводится детальная информация о назначении машин. WordPress-блог, сайт на базе Drupal или же приложение «на заказ», размещенные на подобных серверах, могут легко обслуживать миллионы хитов в месяц.
Как это работает?
Давайте посмотрим, как работает наша система с реверс-прокси сервером. В этом примере я размещу прокси и HTTP сервера до брандмауэра. (см. рис. 1). Веб-сайт www.example.com будет размещаться по статическому IPv4-адреу 202.54.1.1, который закрепляется за устройством eth0. Внутренний IP 192.168.1.1 назначается устройству eth1. Это узел нашего реверс-прокси сервера. Остальные сервера — внутри локальной сети и не могут быть доступны напрямую через Интернет.
Правилами аппаратного или программного (OpenBSD/Linux) брандмауэра узла 202.54.1.1 разрешается доступ лишь к портам 80 и 443. Все остальные порты – заблокированы. На каждом узле VM также работают iptables и доступ разрешен только к необходимым портам. Ваш обратный прокси-сервер определяет пул HTTP-серверов следующим образом:
Apache и Lighttpd сервера получают доступ к файлам через NFS сервер, настроенный на vm05. Web-сервер Apache настроен для работы с PHP. Наши PHP приложение настроено для подключения к серверу БД, размещенному на vm04. Наше PHP приложение используют vm03 в качестве кеша SQL посредством использования Memcached сервера.
Примечание: Вы можете также поместить реверс-прокси сервер на DMZ, а HTTP и другие сервера – за брандмауэром для повышения безопасности. Но это увеличит стоимость проекта.
Хватит говорить, покажи мне процесс настройки серверов
Большинство перечисленных в этой заметке действий, пишутся с предположением, что они будут выполнены root-пользователем в bash-консоли CentOS 6.x/Red Hat Enterprise Linux 6.x. Тем не менее, вы можете легко копировать настройки на любой другой *NIX подобные операционные системы.
Стек LAMP
Что такое стек LAMP?
Возможно, вы уже что-то слышали о стеке LAMP. Это неудивительно: ведь на нем основаны самые популярные современные веб-приложения с открытым исходным кодом, например WordPress и Drupal.
Но «послужной список» LAMP гораздо длиннее. Это один из первых стеков ПО с открытым исходным кодом для разработки веб-приложений, который по сей день остается самым популярным способом их доставки. Он настолько распространен, что вы, скорее всего, постоянно сталкиваетесь с ним в своей работе при обновлении или получении приложений. Многие считают этот стек идеальным вариантом для разработки новых пользовательских приложений.
Чаще всего LAMP описывают словами «стабильный, простой и мощный». Следовательно, этот набор не только достоин изучения, но и украсит собой резюме любого разработчика.
Компоненты
LAMP — это акроним от названий Linux, Apache, MySQL и PHP. Эти технологии вместе составляют надежный набор ПО для разработки высокопроизводительных веб-приложений. Каждый компонент играет в стеке свою важную роль:
Главная цель PHP — повышение эффективности. Программирование упрощается и приобретает некую форму игры: вы пишете новый код, нажимаете кнопку «Обновить» и сразу же, без компиляции, видите изменения. При желании можно вместо PHP пользоваться Perl или Python, набирающий все большую популярность.
Архитектура LAMP классическая и складывается из нескольких уровней. На самом нижнем уровне находится Linux. На следующем уровне расположились Apache и MySQL, за ними следует PHP. Хотя номинально PHP и находится на самом верху (на уровне представления данных), компонент PHP входит в Apache.
Взаимодействие элементов
Взаимодействие элементов можно проследить в общем представлении порядка выполнения стека LAMP. Процесс начинается с того, что веб-сервер Apache получает от браузера пользователя запросы на веб-страницы. Если запрос касается файла PHP, то Apache передает запрос PHP, который загружает файл и выполняет содержащийся в нем код. Если в коде упоминаются данные, которые требуется извлечь, то PHP взаимодействует с MySQL.
Затем на основе кода в файле и данных, извлеченных из базы данных, PHP создает разметку HTML, согласно которой браузеры отображают веб-страницы. Стек LAMP эффективен для работы не только со статическими, но и с динамическими веб-страницами, содержимое которых может меняться при каждой загрузке в зависимости от даты, времени, ИД пользователя и других факторов.
После выполнения кода PHP передает полученные данные обратно на веб-сервер Apache для отправки в браузер. Также эти новые данные могут сохраняться в MySQL. И, разумеется, все эти операции поддерживаются операционной системой Linux, лежащей в основе всего стека.
Гибкость
Несмотря на то, что в качестве ОС в LAMP используется Linux, никто не запрещает при необходимости использовать любые другие компоненты с другой ОС. Например, есть стек WAMP с Microsoft Windows; MAMP с Mac OS и даже WIMP, использующий Windows и веб-сервер Internet Information Services от Microsoft.
Поскольку LAMP полностью состоит из ПО с открытым исходным кодом и не является коммерческим, у вас есть полная свобода выбора. Вы можете подбирать оптимальные компоненты для конкретных проектов или бизнес-требований.
Но гибкость LAMP этим не ограничивается. Apache является модульным решением с большим количеством готовых настраиваемых модулей для разных расширений. Это модули самого разного назначения, начиная от поддержки других языков и заканчивая функциями аутентификации.
Еще одним преимуществом LAMP является его защищенная архитектура и отлаженные алгоритмы шифрования, доказавшие свою эффективность на многих предприятиях.
Эффективность
LAMP способен существенно ускорить разработку. Так как LAMP — набор открытого ПО, существующего уже более десяти лет, за это время вокруг этого стека сформировалась солидная экосистема. В вашем распоряжении — множество чужих готовых наработок. Подбирайте модуль Apache, решающий 80% ваших задач, настраивайте остальные 20% и получайте значительную экономию времени.
Стек LAMP и IBM
На фоне постоянного усложнения технологий базовые механизмы работы ПО остаются за кадром. Стек LAMP возвращает нас к истокам, помогая чуть лучше разобраться в техническом обслуживании веб-страниц и его принципах. Также можно сказать, что это чистый способ создания приложения. У вас есть база данных, ваш язык сценариев и способ предоставления его клиентам — это и есть LAMP.
Установка LAMP в Ubuntu 20.04
В этой статье мы рассмотрим, как установить LAMP Ubuntu 20.04 несколькими способами: с помощью утилиты tasksel и вручную с помощью пакетного менеджера.
Установка LAMP в Ubuntu 20.04
1. Установка пакетов LAMP с помощью утилиты tasksel
Утилита tasksel позволяет устанавливать наборы пакетов различных программ буквально в одну команду. Она разработана для Debian, но может использоваться и в Ubuntu. Для её установки выполните в терминале команду:
Далее, чтобы установить Lamp на Ubuntu, достаточно выполнить команду:
sudo tasksel install lamp-server
Установка займёт определенное время, так как утилите необходимо скачать все необходимые пакеты. После завершения установки вы получите полностью работающий стек LAMP.
2. Установка пакетов LAMP вручную
Если вы не хотите использовать tasksel, вы можете установить все пакеты по отдельности из стандартных репозиториев и настроить их для совместной работы.
Для начала необходимо установить веб-сервер Apache2:
Далее необходимо установить СУБД MySQL:
Установка интерпретатора языка программирования PHP и расширений, необходимых для его работы с Apache и MySQL:
На момент написания статьи актуальной версией PHP в официальных репозиториях Ubuntu считалась версия 7.4. Самая же последняя официальная версия PHP от разработчиков 8.0.9 по состоянию на 29 июля 2021 года.
Также необходимо установить дополнительные расширения для языка PHP, которые понадобятся для создания будущих проектов и их дальнейшей публикации на хостинг:
3. Настройка брандмауэра
По умолчанию брандмауэр закрывает все неразрешённые входящие подключения. Поэтому, чтобы к вашему веб-серверу можно было получить доступ извне, необходимо добавить его порт в исключения:
sudo ufw allow in 80/tcp
4. Проверка работы LAMP
Для начала необходимо убедиться, что веб-сервер Apache и СУБД MySQL успешно запустились и при необходимости запустить их. Смотрим статус apache, выполнив команду в терминале:
sudo systemctl status apache2
В разделе Active должно быть active (running). Те же самые действия необходимо сделать для проверки MySQL:
sudo systemctl status mysql
Если в статусах вместо active будет inactive (dead), то сервисы необходимо запустить вручную:
sudo systemctl start apache2
sudo systemctl status mysql
Для проверки наберите в адресной строке браузера IP-адрес сервера, куда вы устанавливали LAMP, в качестве примера выбран localhost:
Если при открытии вы увидели страницу, которая изображена на скриншоте выше, это означает что веб-север apache успешно запущен и работает. Теперь необходимо проверить правильно ли работает PHP. Создайте файл в директории /var/www/html при помощи следующей команды:
sudo vi /var/www/html/phpinfo.php
Вместо vi можно использовать любой другой текстовый редактор на ваш выбор (nano, emacs, gedit и др.).
В файл phpinfo.php впишите следующую команду:
Далее откройте адрес localhost/phpinfo.php в браузере. Если всё работает, вы должны увидеть страничку, которая изображена ниже на скриншоте:
Также можно проверить, работает ли интеграция с СУБД MySQL. Если расширение PHP для MySQL установлено, то на странице с phpinfo будет размещен блок с информацией:
На данном этапе процесс проверки пройден успешно. Далее мы перейдем к настройке стека LAMP на Ubuntu 20.04.
5. Настройка Apache
Для обработки запросов будет использоваться модуль mpm_prefork. Данный модуль запускает по отдельному процессу на каждый запрос. Иначе говоря, каждый процесс одновременно обрабатывает только 1 поток на одно соединение. Для начала необходимо выключить mpm_event и mpm_worker и только потом включить модуль mpm_prefork:
sudo a2dismod mpm_event
sudo a2dismod mpm_worker
sudo a2enmod mpm_prefork
sudo a2enmod rewrite
Если вы хотите использовать файлы httaccess для настроек, то необходимо в файле /etc/apache2/apache2.conf изменить значение AllowOverride с None на All для нужных местоположений, например, для /var/www.
Откройте файл apache2.conf при помощи любого текстового редактора:
sudo vi /etc/apache2/apache2.conf
Найдите следующий блок:
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
И замените AllowOverride None на AllowOverride All, затем сохраните изменения и закройте файл. Перезапустите apache:
sudo systemctl restart apache2
6. Настройка PHP
По умолчанию короткие теги, обрамляющие скрипты PHP, отключены. Это может привести к тому, что некоторые скрипты, использующие эти теги, могут не выполнятся. Для включения этой возможности откройте файл php.ini при помощи любого текстового редактора:
sudo vi /etc/php/7.4/apache2/php.ini
Найдите short_open_tag = Off и замените на:
Вывод ошибок в PHP по умолчанию отключён. Если вы хотите разрабатывать программы на этом сервере, то вам необходимо включить ошибки, иначе вместо ошибок вы будете видеть пустой экран. Для этого найдите эти строки и приведите их к такому виду:
error_reporting = E_ALL
display_errors = On
После внесения всех изменений необходимо перезапустить Apache:
sudo systemctl restart apache2
7. Настройка MySQL
По умолчанию MySQL не очень хорошо настроена в плане безопасности. Необходимо задать пароль суперпользователя и удалить гостевой доступ. Для выполнения всех этих задач запустите в терминале следующую команду:
На первом этапе утилита спросит вас необходимо ли включить компонент для валидации (проверки) паролей. Данный плагин проверяет надежность вашего пароля. Если вы решите настроить данный плагин, то сценарий предложит выбрать уровень проверки пароля. Наивысший уровень можно включить, нажав 2. Если данный плагин включать не требуется, введите No и далее нажмите на enter для перехода к следующему шагу. Следующим шагом утилита попросит вас ввести пароль суперпользователя, так как он ещё не задан, введите пароль, нажмите enter и введите пароль еще раз:
Во всех следующих вопросах нужно отвечать утвердительно путем ввода y/Y или Yes:
Готово, теперь ваша база данных защищена и готова к работе. Для того, чтобы войти в оболочку MySQL введите следующую команду:
Введите пароль пользователя root, который вы задали на этапе запуска mysql_secure_installation.
Не перепутайте пароль от пользователя root который присутствует в операционной системе Ubuntu и пользователя root в MySQL. Это разные пользователи, соответственно вы должны вводить пароль именно к учетной записи root, которая присутствует в MySQL.
На этом настройка LAMP Ubuntu 20.04 завершена.
8. Как удалить LAMP в Ubuntu
Чтобы полностью удалить LAMP из системы, достаточно удалить все пакеты, которые вы установили ранее:
Команда purge позволяет удалить не только пакеты, но и их конфигурационные файлы. Если вы хотите оставить конфигурационные файлы, используйте команду remove.
Выводы
В этой статье мы разобрали, как выполняется установка LAMP Ubuntu 20.04. Как видите, это не очень сложно и с такой задачей может справиться даже новичок. Если у вас остались вопросы, оставляйте их в комментариях!
И снова о… LAMP и базово защищённый мини-хостинг своими руками
Увидев в очередной раз презренный посыл в Google в ответ на вопрос о том, как развернуть собственную LAMP’у, решил написать данный пост. Чтобы хоть как-то разбавить тонны радостных отчётов об успешной установке из блогов, суть которых сводится к одной команде aptitude install blah-blah.
Нет, ну конечно понятно, PHP самый надёжный язык, а все движки сайтов, на нём написанные, являются живым воплощением непробиваемой защиты от взлома. Тогда да — aptitude install apache2 — и будет вам счастье. Не забудьте оставить phpmyadmin по дефолтному адресу, да поставьте какое-нибудь дырявое FTP решето.
Вообще, как оказалось, многие даже не в курсе, что взломав сайт и получив возможность исполнять свой PHP код, злоумышленник на системе с дефотными настройками сможет как минимум прочитать в вашей системе почти что угодно. Оно и понятно — работая с Linux привыкаешь как-то, что по дефолту безопасность находится на вполне достаточном уровне. А тут такая дыра…
В общем — в этой статье в очередной раз описывается банальщина на тему как развернуть LAMP и дать доступ внешним пользователям к файлам и базам ваших сайтов. Т.е. как быстро сделать мини-хостинг своими руками. Однако, в отличие от, хостинг у нас будет хотя бы базово защищённым.
Те, кому тема веб-серверов надоела, возможно смогут найти в статье интересные приёмы многопользовательского ограниченного доступа к серверу по SFTP.
И нет, это не ещё одна статья с описанием установки Linux и выполнением aptitude install apache2. Скорее наоборот: в этой статье я хотел показать фатальную недостаточность данных манипуляций и мягко говоря некомпетентность тех, кто их тиражирует в интернете.
Установка
Всё будет описано на примере Debian.
Для начала нужно установить всё необходимое (кстати, для Ubuntu phpMyAdmin лучше ставить из PPA):
При установке phpMyAdmin генерируем произвольный пароль для подключения к БД, в остальном всё очевидно.
Как это будет работать
Все пользователи, которым нужно получить доступ к файлам на сервере, будут иметь локальную учётную запись с возможностью захода только по SFTP и только в папку с принадлежащими им сайтами. При этом будет поддерживаться авторизация как по паролю, так и по ключу. Интерактивный же вход по SSH будет невозможен, хотя если очень надо — его можно будет включить, причём тоже с закрытым доступом к системным файлам.
Никакого FTP не будет, хотя его и возможно легко прикрутить. SFTP надёжней (шифрование, возможность авторизации по ключу), а FTP в данном случае элементарно избыточен и является достаточно большой потенциальной дырой в безопасности.
Каждый сайт будет принадлежать некоему ‘аккаунту’, т.е. под одним ‘аккаунтом’ может быть несколько сайтов. К этим ‘аккаунтам’ привязываются SFTP пользователи, причём никто не мешает к одному ‘аккаунту’ привязать несколько пользователей. Дальше, внутри ‘аккаунта’, всё можно будет разрулить стандартными механизмами прав доступа в Linux.
Пользователи и пароли от БД никак не будут зависеть от системных пользователей, управление БД будет происходить через стандартный phpMyAdmin.
Кроме всего прочего сайты, работающие на вашем сервере, не смогут вылезти за пределы своего рабочего каталога и прочитать или изменить какие-нибудь данные, к ним не относящиеся.
Немного подробней про структуру
Все сайты будут лежать в каталогах вида /var/www/ACCOUNT/sites/SITENAME. ACCOUNT тут не обязательно означает какого-то системного пользователя, просто некий произвольный идентификатор.
У системных пользователей, которые будут подключаться по SFTP для редактирования сайтов, в качестве домашней директории будет установлено /var/www/ACCOUNT/home/USERNAME. Соответственно в зависимости от значения ACCOUNT тот или иной пользователь будет иметь доступ к тому или иному аккаунту. Создание каталога home внутри аккаунта нужно для того, чтобы иметь возможность авторизовывать SFTP пользователей по ключам.
Для всех пользователей SFTP основной группой будет установлена www-data (дефолтная группа Apache2 в deb-based). Кроме этого, все создаваемые как пользователем по SFTP, так и Apache, файлы по умолчанию будут иметь права 0660, а каталоги — 0770. Поскольку у Apache и SFTP пользователя одна и та же группа, то по-умолчанию в любой новый файл или каталог сможет писать как пользователь, так и веб-сервер, вне зависимости от того, кто его создал. Что обычно и требуется.
Базы же будут использовать свой, полностью отдельный механизм авторизации и контроля доступа. Тут всё крайне просто: создаём пользователей и даём им права только на конкретные базы. Поэтому к этому вопросу возвращаться больше не будем.
Создание ‘аккаунтов’ и системных пользователей
Размещение сайта на сервере стоит начать с подготовки места под него и создания пользователя для работы с ним. Как описано выше, для сайта нам нужна папка вида /var/www/ACCOUNT/. В качестве ACCOUNT задействуем для примера 42. Просто 42. Ок, создаём папку:
Кроме этого внутри аккаунта нам нужны каталоги home/USERNAME и sites. Создаём их:
Для будущей настройки SFTP сразу стоит убедиться, что и /var/www/42/sites, и все нижестоящие папки принадлежат root:root и ни у кого, кроме root, нет прав на запись в них.
Дальше создаём пользователя. Чтобы не путаться с обычными, полноценными пользователями сервера, SFTP пользователей можно перенести в диапазон UID от 901 до 999. Если вам это не надо — уберите соотв. параметры. Если вы хотите авторизовываться только по ключу, то добавьте параметр —disabled-password. В итоге команда такая:
Установка шелла в /bin/false гарантирует нам, что пользователь никак не сможет интерактивно зайти в систему.
Настройка SFTP
Настройка SFTP будет заключаться в том, что для всех членов группы www-data мы сделаем так, чтобы при заходе по SFTP они попадали сразу в папку sites ‘аккаунта’, в котором находится их HOME директория, без возможности выбраться выше по дереву каталогов.
Делается это просто. Достаточно в конец файла /etc/ssh/sshd_config дописать код
И ткнуть sshd для обновления конфигурации:
Этот кусочек кода для всех пользователей из группы www-data, во-первых, отключает TCP и X11 форвадинг (им незачем иметь доступ в вашу локалку). Во-вторых делает для них при заходе chroot в sites папку их ‘аккаунта’ (именно для этого нам нужно было делать sites папки доступными для записи только для root — иначе не работает chroot). Ну и в третьих меняет им обработчик SFTP на встроенный (которому не нужно полноценное окружение с шеллом и прочим), попутно говоря ему создавать все файлы и папки со значение umask в 007. То есть права по умолчанию на новые файлы будут 0660, а на каталоги — 0770.
Настройка Apache и phpMyAdmin
Как-либо специфично настраивать Apache для обеспечения базовой работы не нужно. Единственное, что в Debian пакет PHP5 идёт с интегрированным патчем Suhosin, повышающим безопасность. Он будет необходим при настройке конфигов сайта, хотя вполне можно обойтись и без него.
А так в целом для Apache нужно лишь изменить umask для создаваемых файлов и папок на такой же, который мы использовали для настройки SFTP. Делается это путём добавления в /etc/apache2/envvars строчек:
Для минимальной настройки phpMyAdmin нужно лишь поменять адрес, по которому он будет доступен, с неприлично бестолкового your.site/phpmyadmin на что-то другое. Для этого в файле /etc/phpmyadmin/apache.conf нужно заменить строчку
Не забывайте перезапускать Apache:
Добавление сайтов
Для добавления сайтов на ваш хостинг нужно сделать две вещи — во-первых, разместить файлы сайта с нужными правами на вашем сервере, а во-вторых создать конфиг апача для сайта. Кроме этого чаще всего потребуется создать БД и настроить права доступа к ней — но это тривиальная операция, поэтому рассматривать её не будем.
Для размещения файлов нужно из-под root создать каталог сайта в папке нужного ‘аккаунта’. Например:
Дальше выставить желаемые права. Как минимум у SFTP пользователя, который будет работать с этим каталогом, должны быть права на запись. К примеру, можно сделать так:
Ок, теперь пользователь может зайти и залить файлы сайта. Осталось настроить апач. Для этого, как всегда, создаём файл настроек в директории /etc/apache2/sites-available. Содержимое этого файла для сайта deep-thought.net с данными в каталоге /var/www/42/sites/deep-thought.net должно быть примерно таким:
Немного про temp: поскольку мы запрещаем PHP обращаться к файлам вне корневой директории сайта, то нам нужно указать каталог для сохранения временных файлов (файлов, загружаемых пользователями сайта на сервер через стандартный механизм загрузки из HTML формы) и файлов сессий внутри корня сайта. Каталог этот нужно, естественно, предварительно создать. Кроме этого лучше бы явно закрыть к нему доступ из интернета, что и сделано во втором блоке Directory. Иначе кто-нибудь может невзначай получить сессии ваших пользователей.
Если на сервере не установлен Suhosin, то вместо suhosin.executor.func.blacklist можно использовать стандартную опцию PHP disable_functions. Правда её нужно указывать в php.ini, т.е. она будет действовать на все сайты на вашем сервере.
Кроме этого в приведённых выше настройках не отключена функция eval. Увы, многим сайтам она зачем-то нужна, хотя всё же лучше её отключать. Обратите внимание на опции suhosin.executor.disable_eval и suhosin.executor.disable_emodifier всё того же Suhosin.
После того, как вы подготовите нужный вам конфиг, просто активируйте сайт:
И не забудьте пнуть апач:
Ну и конечно нужно залить файлы и базу данных сайта на сервер — без них вряд ли что-то заработает.
Тюнинг SSH: ключи и интерактивный вход
Для доступа пользователей SFTP по ключам нужно сделать всё тоже, что делается всегда: внутри HOME каталога создать директорию .ssh/, в ней файлик authorized_keys, в который прописать публичный ключи для пользователя.
Кроме этого, можно некоторым пользователям открыть интерактивный доступ на сервер. Для этого нужно, во-первых, подготовить в корневой папке соответствующего ‘аккаунта’ нужное chroot окружение, как минимум с интерпретатором и всеми необходимыми виртуальными ФС. Делается это стандартно и ничего сложно в этом нет.
Дальше можно создать дополнительную группу для интерактивного входа. Например, ssh-interactive:
Добавить в неё нужных пользователей, попутно сменив им SHELL на полноценный bash:
И прописать для этой группы специфические настройки в sshd_config. Для этого нужно модифицировать директиву Match, относящейся к www-data, дописав к ней !ssh-interactive, дабы она не распространялась на пользователей этой группы:
И после неё добавить ещё одну директиву Match:
Проблема только в том, что для членов группы ssh-interactive umask больше не будет выставляться в 007. Исправить это можно дописав соответствующий параметр в глобальных настройках подсистемы sftp в sshd_config. Кстати, вряд ли вы захотите перетаскивать компоненты openssh в chroot окружение, так что можно заодно сменить внешний обработчик sftp на внутреннюю реализацию:
В заключение
Меня всегда интересовал вопрос — а нет ли где-нибудь на официальных ресурсах полного списка с описанием всех PHP функций, которые так или иначе могут дать доступ скрипту к компонентам и файлам системы. Приведённый выше список честно взят из интернета, так что если кто поделится ссылочкой на списочек функций — буду премного благодарен.
Ну и да — если есть какие-то комментарии по поводу того, что ещё минимально можно сделать для обеспечения безопасной работы простейшего хостинга — пишите.