lamp стек что это

MEAN или LAMP и не только: какой технический стек использовать

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

Ваш выбор технического стека в начале ваших проектов имеет решающее значение, потому что он определяет, какие инструменты ваши разработчики смогут использовать и какие функции / атрибуты будут полезны для вашего приложения. Текущие самые популярные технические стеки — это стек MEAN и LAMP.

Сегодня мы рассмотрим преимущества и недостатки стека MEAN, стека LAMP и других популярных опций, чтобы убедиться, что вы выберете правильный стек для своего следующего проекта.

Что такое MEAN?

MEAN — это высокоуровневый стек с открытым исходным кодом на основе Javascript, который лучше всего подходит для создания динамических веб-сайтов и приложений. Термин MEAN был придуман в 2013 году Валерием Карповым как аббревиатура для описания приложений, созданных с использованием комбинации тех же 4 инструментов. Эти инструменты хорошо работают вместе и обеспечивают уникальные преимущества для любого приложения MEAN.

Самым большим преимуществом разработки стека MEAN является то, что все уровни используют JavaScript, что упрощает интеграцию различных компонентов и позволяет разрабатывать программное обеспечение с полным стеком.

Слои MEAN:

MEAN лучше всего подходит для облачных современных веб-приложений, разрабатываемых небольшими командами или начинающими компаниями. MongoDB позволяет легко создавать облачные приложения благодаря функциям масштабируемости, тестирования и развертывания. Кроме того, AngularJS идеально подходит для создания одностраничных приложений (SPA) на основе оптимизаций с быстрой загрузкой. Вы даже можете разрабатывать кроссплатформенные мобильные приложения с помощью Express.js

Одноязычная настройка JavaScript в MEAN позволяет небольшим проектным группам делать больше. С другими стеками вам понадобится несколько программистов с разными навыками программирования для создания полноценного приложения. Это разделяет вашу команду и ограничивает скорость разработки приложения.

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

Некоторые ведущие компании, такие как Netflix, Paypal, The Weather Channel и Forbes, внедрили компоненты MEAN в свои приложения. Прогнозируется, что популярность MEAN будет расти только по мере того, как все больше компаний переходят к группам разработки полного стека и облачным веб-приложениям.

Плюсы и минусы MEAN

Плюсы

Минусы

Что такое LAMP?

LAMP — это самый популярный в мире технологический стек, предназначенный для создания приложений без использования внешнего программного обеспечения или данных. LAMP — наиболее зрелый технологический стек, который используется с момента его создания в 1998 году Майклом Кунце. Он получил широкую популярность как первый технологический стек с открытым исходным кодом и остается популярным даже сегодня в корпоративных или давно существующих приложениях.

Главное преимущество LAMP — это зрелость и широкая популярность. Будучи давним лидером в области веб-технологий, технологии LAMP должны быть совместимы с любым новым инструментом. LAMP использует PHP и базу данных MySQL, которые особенно хорошо известны и поддерживаются большинством хост-провайдеров.

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

Слои LAMP

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

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

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

LAMP используется многими крупными компаниями по всему миру, включая Facebook, WordPress, Wikipedia, Slack и Tumblr. Хотя в настоящее время он занимает большинство рынка, многие эксперты полагают, что LAMP постепенно выйдет из употребления, так как MEAN и другие стеки продолжают развиваться.

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

Плюсы и минусы LAMP

Плюсы

Минусы

Другие лучшие технологические стеки

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

Давайте кратко рассмотрим эти почетные упоминания.

Стек MERN — это вариант MEAN, который заменяет Angular.js на React.

React использует виртуальную модель DOM для упрощения изменений пользовательского интерфейса и оптимизирован для высокореактивных одностраничных приложений. React также использует JSX для гибкого управления компонентами. Самым большим недостатком React является то, что в его базовом состоянии отсутствуют функции в виде библиотеки, а не полнофункционального фреймворка.

Замена Angular на React по сути жертвует функциями ради простоты использования и гибкости.

Преимущества:

Недостатки:

Пример использования:

Вы хотите в кратчайшие сроки создать простое или промежуточное одностраничное приложение, или ваша команда уже знакома с React.

Подобно MERN, MEVN заменяет Angular.js на Vue.js.

Vue — это фреймворк, который предлагает минималистский подход, ориентированный на производительность. Он более легкий, чем Angular.js или React, и поставляется со всеми основными функциями «из коробки». Vue также можно дополнить сторонними сервисами, чтобы заполнить любую нишу, соответствующую вашим потребностям. Самым большим недостатком Vue является то, что он не используется широко и может не иметь поддержки сообщества или интеграции, которой пользуются React или Angular.

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

Преимущества:

Недостатки:

Пример использования:

Ruby on Rails (RoR)

Ruby on Rails — это удобный для разработчиков технологический стек, построенный на самоуверенном языке программирования Ruby. Он уникален тем, что содержит все инструменты стандартного технического стека в одном пакете. Он также изначально интегрирован с HTML, CSS и JavaScript.

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

Преимущества:

Недостатки:

Пример использования:

Бессерверный

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

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

Преимущества

Недостатки

Пример использования:

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

Выбор правильного стека технологий

MEAN или LAMP лучше всего подходят для большинства проектов, но как выбрать?

У обоих есть компромиссы, поэтому важно учитывать, какие факторы наиболее важны для вашего конкретного проекта.

Вы захотите рассмотреть:

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

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

Выбор создания нового приложения на LAMP сейчас означает, что у вас уже будет хорошее приложение, но, возможно, в будущем вам придется полностью перейти на MEAN.

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

ИМЕТЬ В ВИДУФОНАРЬ
Тип приложения:Современные типы приложений, такие как облачные, гибридные, PWA или SPA.Многостраничные приложения.
Продолжительность жизни:Длительный срок службы, создание приложения для будущей поддержки MEAN.Короткий срок службы, вы разрабатываете это приложение для работы только сейчас и в ближайшем будущем.
Движение:Стабильный трафик от низкого до среднего, резервирование не требуется.Высокий трафик с большими пиками в часы пик.
Клиентская или серверная:Рендеринг на стороне клиента.На стороне сервера вы не хотите полагаться на клиентскую инфраструктуру для хорошего взаимодействия.
Динамический или статический:JavaScript позволяет создавать приложения, управляемые событиями, с обновлениями в реальном времени.Приложение представляет собой статическое приложение, которое не требует обновлений в реальном времени.
Обучение:Нужно только изучить JavaScript.Команде придется изучить несколько инструментов, но PHP и MySQL легко освоить.
Обслуживание:Высокий уровень обслуживания для поддержки частых обновлений каждого инструмента.Низкие эксплуатационные расходы, стабильная экосистема.

Заключение

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

Чтобы помочь вам узнать все, что вам нужно знать о веб-архитектуре, Educative создал Path Scalability & System Design для разработчиков. Этот курс исследует все варианты, которые вам нужно сделать при разработке веб-приложения, и позволяет понять компромиссы на каждом этапе.

К концу курса у вас будут навыки реализации микросервисных архитектур в различных технологических стеках, создание облачного приложения и практика объяснения компромиссов для следующего собеседования или конференции.

Источник

Установка LAMP в Ubuntu 20.04

В этой статье мы рассмотрим, как установить LAMP Ubuntu 20.04 несколькими способами: с помощью утилиты tasksel и вручную с помощью пакетного менеджера.

Установка LAMP в Ubuntu 20.04

1. Установка пакетов LAMP с помощью утилиты tasksel

Утилита tasksel позволяет устанавливать наборы пакетов различных программ буквально в одну команду. Она разработана для Debian, но может использоваться и в Ubuntu. Для её установки выполните в терминале команду:

lamp стек что это

Далее, чтобы установить Lamp на Ubuntu, достаточно выполнить команду:

sudo tasksel install lamp-server

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

lamp стек что это

2. Установка пакетов LAMP вручную

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

Для начала необходимо установить веб-сервер Apache2:

lamp стек что это

Далее необходимо установить СУБД MySQL:

lamp стек что это

Установка интерпретатора языка программирования PHP и расширений, необходимых для его работы с Apache и MySQL:

lamp стек что это

На момент написания статьи актуальной версией PHP в официальных репозиториях Ubuntu считалась версия 7.4. Самая же последняя официальная версия PHP от разработчиков 8.0.9 по состоянию на 29 июля 2021 года.

Также необходимо установить дополнительные расширения для языка PHP, которые понадобятся для создания будущих проектов и их дальнейшей публикации на хостинг:

lamp стек что это

3. Настройка брандмауэра

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

sudo ufw allow in 80/tcp

lamp стек что это

4. Проверка работы LAMP

Для начала необходимо убедиться, что веб-сервер Apache и СУБД MySQL успешно запустились и при необходимости запустить их. Смотрим статус apache, выполнив команду в терминале:

sudo systemctl status apache2

lamp стек что это
В разделе Active должно быть active (running). Те же самые действия необходимо сделать для проверки MySQL:

sudo systemctl status mysql

lamp стек что это

Если в статусах вместо active будет inactive (dead), то сервисы необходимо запустить вручную:

sudo systemctl start apache2
sudo systemctl status mysql

lamp стек что это

lamp стек что это

Для проверки наберите в адресной строке браузера IP-адрес сервера, куда вы устанавливали LAMP, в качестве примера выбран localhost:

lamp стек что это

Если при открытии вы увидели страницу, которая изображена на скриншоте выше, это означает что веб-север apache успешно запущен и работает. Теперь необходимо проверить правильно ли работает PHP. Создайте файл в директории /var/www/html при помощи следующей команды:

sudo vi /var/www/html/phpinfo.php

Вместо vi можно использовать любой другой текстовый редактор на ваш выбор (nano, emacs, gedit и др.).
В файл phpinfo.php впишите следующую команду:

lamp стек что это

Далее откройте адрес localhost/phpinfo.php в браузере. Если всё работает, вы должны увидеть страничку, которая изображена ниже на скриншоте:

lamp стек что это

Также можно проверить, работает ли интеграция с СУБД MySQL. Если расширение PHP для MySQL установлено, то на странице с phpinfo будет размещен блок с информацией:

lamp стек что это

На данном этапе процесс проверки пройден успешно. Далее мы перейдем к настройке стека 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 и замените на:

lamp стек что это

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

error_reporting = E_ALL
display_errors = On

lamp стек что это

После внесения всех изменений необходимо перезапустить Apache:

sudo systemctl restart apache2

7. Настройка MySQL

По умолчанию MySQL не очень хорошо настроена в плане безопасности. Необходимо задать пароль суперпользователя и удалить гостевой доступ. Для выполнения всех этих задач запустите в терминале следующую команду:

lamp стек что это

На первом этапе утилита спросит вас необходимо ли включить компонент для валидации (проверки) паролей. Данный плагин проверяет надежность вашего пароля. Если вы решите настроить данный плагин, то сценарий предложит выбрать уровень проверки пароля. Наивысший уровень можно включить, нажав 2. Если данный плагин включать не требуется, введите No и далее нажмите на enter для перехода к следующему шагу. Следующим шагом утилита попросит вас ввести пароль суперпользователя, так как он ещё не задан, введите пароль, нажмите enter и введите пароль еще раз:

lamp стек что это

Во всех следующих вопросах нужно отвечать утвердительно путем ввода y/Y или Yes:

lamp стек что это

Готово, теперь ваша база данных защищена и готова к работе. Для того, чтобы войти в оболочку MySQL введите следующую команду:

Введите пароль пользователя root, который вы задали на этапе запуска mysql_secure_installation.
Не перепутайте пароль от пользователя root который присутствует в операционной системе Ubuntu и пользователя root в MySQL. Это разные пользователи, соответственно вы должны вводить пароль именно к учетной записи root, которая присутствует в MySQL.

lamp стек что это

На этом настройка LAMP Ubuntu 20.04 завершена.

8. Как удалить LAMP в Ubuntu

Чтобы полностью удалить LAMP из системы, достаточно удалить все пакеты, которые вы установили ранее:

Команда purge позволяет удалить не только пакеты, но и их конфигурационные файлы. Если вы хотите оставить конфигурационные файлы, используйте команду remove.

Выводы

В этой статье мы разобрали, как выполняется установка LAMP Ubuntu 20.04. Как видите, это не очень сложно и с такой задачей может справиться даже новичок. Если у вас остались вопросы, оставляйте их в комментариях!

Источник

И снова о… LAMP и базово защищённый мини-хостинг своими руками

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 функций, которые так или иначе могут дать доступ скрипту к компонентам и файлам системы. Приведённый выше список честно взят из интернета, так что если кто поделится ссылочкой на списочек функций — буду премного благодарен.

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

Источник

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

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