alexeyymanikin

Рейтинг
151
Регистрация
20.09.2008
LineHost:
Никакой пошлости. Идея хорошая для большой компании, для таких как я это не имеет смысла. У меня чуть другие проблемы.


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

Даже если на хостинге размещается один рабочий сайт - большое количество пользователей используют еще один для разработки или тестирования. С точки зрения хостинга не вижу разницы - 100 клиентов или 100000 - в любом случае это спокойная жизнь пользователей.

Замечу, что первые попытки/мысли сделать подобную систему появились в 2011 году, когда у нас и 5000 клиентов не было.

LineHost:
Я понимаю пользу такого решения, в данный момент это будет пользоватся спросом, так как экономическая ситуация заставляет вебмастеров экономить. У них множество сайтов и само собой дырявые скрипты. Но изоляция не решает всех проблем, так как зараженные сайты генерируют огромные нагрузки и опасны другим серверам. То есть чистить всё равно надо.
Неизвестна остальная часть системы, по этому сложно что то понять.
По сути, всё это можно рещить с помошью mod_privileges.

нет не заменит, mod_privileges это как mod_itk (https://httpd.apache.org/docs/trunk/mod/mod_privileges.html, http://mpm-itk.sesse.net/) Это просто, если говорить грубо суид процесса в нужного пользователя. Проблему изоляции сайтов в рамках одного аккаунта не решает. Только если в рамках разных пользователей.

По поводу, автоматический (полуавтоматической) чистки от вирусов - ждите новостей и подписывайтесь на нашу группу в https://vk.com/begetru, https://www.facebook.com/LTDBeGet =) будет интересно.

AGHost:
Спасибо, Алексей, а покажите-ка getfacl alexeyxt.beget.tech

И скриншот у меня выдает 403.

Прошу прощения

epsilon1 : /home/a/alexeyxt/alexeyxt.beget.tech/public_html [0] # getfacl index.php
# file: index.php
# owner: alexeyxt
# group: newcustomers
user::rw-
user:alexeyxt:rwx
user:alexeyxt__alexeyxtjbegetjtec__yq:rwx
group::---
group:newcustomers:---
group:alexeyxt:--x
mask::rwx
other::---



---------- Добавлено 04.04.2017 в 23:24 ----------

Dimanych:
Спасибо за информацию.
Примерно также реализовывал в своей системе, тоже на базе itk, но меня остановило создание unix-юзверя для каждого домена, поэтому ограничился созданием отдельного www пользователя на аккаунт. Конечно это не даёт той межсайтовой защиты о которой мы говорим, но всё таки это лучше чем работа всего аккаунта от одного пользователя.
Т.е. у вас там тысячи unix пользователей и это не вызывает никаких проблем?

Пример сервера для free хостинга

free4 : ~ [0] # cat /etc/passwd | wc -l
15879

ну как сказать не вызывает, конечно проблем было много, но все они решаемы. Внедряли мы эту систему более полугода и в процессе внедрения было очень много проблем =)

---------- Добавлено 04.04.2017 в 23:28 ----------

LineHost:
Dimanych, 64 бит ОС имеет 2 в 43 степени user_id пространство, не в это упрётся ;)

Если честно, то не вижу смысла в такой грамоздкой системе, стабильность и надёжность которой тоже сомнительна. Да, удобство в управлении безусловно плюс, но с другой стороны минус одна точкка доступа со стороны основного пользователя. Учитывая то, что многие вебмастеры используют вечно дырявый Windows Commander или что то подобное, то безопаснотсь в такой системе не на много выше чем на обычном шарике. Нет ничего лучше, как реальный отдельный unix пользователь.

не кто не мешает создавать отдельного пользователя ftp/ssh для каждого сайта. то есть это выбор каждого пользователя. Так же не нужно забывать про многосайтовые системы или сайты которым нужны общие данные. Вопрос исключительно в гибкости и удобстве.

Повторюсь, если у Вас свой VPS - это одно дело, если Вы клиент шаред хостинга - изоляция сайтов среди ТОП10 хостингов есть только у нас.

---------- Добавлено 04.04.2017 в 23:57 ----------

тест прикрепления картинки

vandamme:
какой-то набор слов, думаете "не линуксоиды" тут что-то поняли?
какой вывод делать из стать?

такое ощущение что тут у вас пропущен кусок текста после этого:



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

ну а создание пользователя фтп и базы данных всегда было по умолчанию в стандартном cpanel и других панелек.

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

Когда я в соседних темах писал - "у реализована изоляция сайтов и скрипты сайта не могут выйти за пределы директории сайта", меня просили более подробно об этом рассказать.

Dimanych:
Где именно вы опишите вашу систему?
Вторая неделя пошла, но пока не нашёл где оно описано, как собственно и ссылок никаких не дождались...

Написать хорошую статью - не так просто. Описал со стороны пользователя как это выглядит /ru/forum/961280

Как это работает со стороны ядра - постараюсь написать на хабр. Лично в моем случае каждая статья на хабр занимает от дня до трех. Не хватает времени.

rustelekom:

2) На beget.ru сделали нечто, что решает проблему разделения сайтов на одном хостинг аккаунте.

Описал это нечто /ru/forum/961280, со стороны пользователя это выглядит именно так.

Добрый день, клиенты, коллеги.

В последнее время начали появляться посты с вопросами - нужна изоляция сайтов, как защитить сайты, хостинг с разделением пользователей - примеры можно посмотреть тут:

/ru/forum/961280

/ru/forum/960421

При этом часть комментариев в этих постах не просто лишена смысла, а, наоборот - может сделать только хуже. По факту из ТОП10 Российских хостингов только у нас есть изоляция сайтов в рамках аккаунта, может быть и из ТОП50, но дальше ТОП10 я не анализировал. В свое время мы словили много проблем, багов и сбоев (и, конечно, сломанных сайтов =), вводя эту систему, хотя внешне она максимально проста. В этом посте я бы хотел рассказать, как она работает с точки зрения пользователя.

Для начала я бы хотел немного пояснить - в нашей системе под сайтом подразумевается директория на диске, под доменом - доменное имя (будь то домен или поддомен, не важно). Например /test.ru/public_html - это сайт, а http://test.ru - это домен.

Теперь, собственно, про изоляцию.

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

epsilon1 : ~ [0] # cat /etc/passwd | grep alexeyxt
alexeyxt:x:1316:601::/home/a/alexeyxt:/bin/false

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

epsilon1 : /home/a/alexeyxt [0] # ls -la
total 44
drwx------+ 6 root root 4096 Apr 4 19:11 .
drwx--x--t 32 root root 4096 Apr 4 19:17 ..
drwx------+ 2 alexeyxt newcustomers 4096 Apr 4 19:11 .gem
drwx------+ 2 alexeyxt newcustomers 4096 Apr 4 19:11 .local
dr-x------+ 2 root root 4096 Apr 4 19:11 .service
drwx------+ 3 root root 4096 Apr 4 19:11 alexeyxt.beget.tech

Пример сайта в данном случае - alexeyxt.beget.tech. Опять же обычные права "владелец, группа, остальные" в данном контексте не совсем правильны, ну и "+" в конце прав намекает на posix acl. В директории сайта файлы так же принадлежат основному пользователю:

epsilon1 : /home/a/alexeyxt/alexeyxt.beget.tech/public_html [0] # pwd
/home/a/alexeyxt/alexeyxt.beget.tech/public_html
epsilon1 : /home/a/alexeyxt/alexeyxt.beget.tech/public_html [0] # ls -la
total 36
drwx------+ 3 alexeyxt newcustomers 4096 Apr 4 19:11 .
drwx------+ 3 root root 4096 Apr 4 19:11 ..
drwx------+ 2 alexeyxt newcustomers 4096 Apr 4 19:11 cgi-bin
-rwx------+ 1 alexeyxt newcustomers 11236 Apr 4 19:11 index.php

Но все процессы этого сайта работают не из под основного пользователя (под процессами сайта я подразумеваю, например, apache, php, python, nginx, отдельный ftp доступ, отдельный ssh доступ и так далее). Для этого сайта был создан отдельный пользователь:

alexeyxt__alexeyxtjbegetjtec__yq:x:66852:601:site,login=alexeyxt:/home/a/alexeyxt/alexeyxt.beget.tech:/bin/false

Более внимательный читатель заметит, что ID это пользователя не совсем случайная величина =). Если посмотреть vhost apache для alexeyxt.beget.tech, там будет секция:

<IfModule mpm_itk_module>
MaxClientsVHost 30
AssignUserId #66852 #601
</IfModule>

То есть все процессы этого пользователя, запущенные через Apache, а также порожденные от них, будут работать от пользователя alexeyxt__alexeyxtjbegetjtec__yq. Со стороны пользователя это выглядит так:

Если посмотреть posix acl, можно увидеть:

epsilon1 : /home/a/alexeyxt/alexeyxt.beget.tech/public_html [0] # getfacl index.php
# file: index.php
# owner: alexeyxt
# group: newcustomers
user::rw-
user:alexeyxt:rwx
user:alexeyxt__alexeyxtjbegetjtec__yq:rwx
group::---
group:newcustomers:---
group:alexeyxt:--x
mask::rwx
other::—

То есть этот пользователь имеет права на запись и чтение из директории сайта, но не из общей директории и не из директории других сайтов. Основной пользователь нужен в основном для:

  • подсчета нагрузки (так как нагрузка всех сайтов учитывается у основного пользователя)
  • удобства администрирования сайтов - один доступ FTP/SSH
  • системных целей, например, запуск Cron задач, которым нужен доступ ко всем сайтам.

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

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

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

smart2web, видимо мои доводы о бесполезности open_basedir не являются авторитетными или хотя бы убедительными. Думаю по этому вопросу Вам стоит обратиться к Григорию Земскому (Revisium) - он сможет рассказать и о способах заражения самого сайта и о способах заражения соседних сайтов. Так же полагаю его мнение об изоляции сайтов можно считать самым авторитетным среди Российского сегмента сети.

>> У вирусов уже искусственный интеллект появился?

Опять же, о каком искусственном интеллекте Вы говорите, если даже в webshell скриптах обычно есть строки на подобии https://github.com/tennc/webshell/blob/master/php/12309/12309.php.txt#L402. А вот злые хакеры додумались как найти другие сайты на аккаунте, написали парсинг директорий, определения домена, но не добавили строку ini_set('open_basedir', '/');

Зачем вводить в заблуждение пользователей которые будут читать форум, что добавление open_basedir им поможет. С другой стороны хуже им от этого конечно не будет, но и не защитит их не как. Под защитой я имею в виду ситуацию, когда Вы можете в рамках одного аккаунта залить любые скрипты/программы, выполнить их и не как не сможете навредить другому сайту на аккаунте. Даже дав человеку SSH к одному сайту он не сможет навредить другим сайтам на аккаунте.

Я заранее приношу извинения, если немного резок, но либо мы говорим о разных вещих, либо Вы не понимаете сути проблемы.

пс. по поводу ссылки - предлагаю сделать проще, на следующей недели постараюсь подробно описать на форуме как это работает у нас в системе.

smart2web:
Согласен, но open_basedir не даст такому процессу попасть выше указанного значения.

Вы мои сообщения читаете ? Это только в том случае если у ваз заблокированы все функции аля exec - что фактически причиняет боль пользователям. И это работает только в случае PHP.

А если посмотреть более внимательно http://php.net/manual/ru/ini.core.php open_basedir изменяется PHP_INI_ALL после версии 5.3 что означает http://php.net/manual/ru/configuration.changes.modes.php "Значение может быть установлено отовсюду" - ну кто мешает получив доступ к файлу, изменить .htaccess ?

При этом Вы продолжаете уверять меня, что open_basedir защитит сайты пользователей ?

smart2web:
Ну тогда по разным дата-центрам разносить сайты, чего уж там.
Интересно, какая CMS работает с функцией exec и еще интересно, почему мы не рассматриваем php как модуль апач? Какие еще отдельные процессы?

То есть предполагается выключать функции exec ? Насколько я знаю у Bitrix долгие операции реализованы в том числе через exec (хотя могу ошибаться). Так же бывает нужно вызывать ffmpeg, curl - года 3-4 назад мы собирали статистику по вызовам этих функций и как не странно они используются.

Мы как раз и рассматриваем php как модуль apache, но при этом он работает из под разных пользователей. Но тут проблема даже не в PHP... Ок может пользователь будет использовать python, node.js или perl не дай бог. То есть данный вопрос надо решать комплексно, не на уровне отдельно взятого языка с его костылями - а на уровне операционной системы.

---------- Добавлено 24.03.2017 в 16:29 ----------

>> Какие еще отдельные процессы?

Не могу не задать вопрос - а как по вашему работает php как модуль apache ? Обрабатывает все запросы в рамках одного процесса ? =) Или же все таки apache, например создает несколько потомков - передает им обработку запроса, далее в зависимости от сайта потомок суидится в пользователя и уже потом вызывает php в рамках своего процесса для обработки запроса =)

Всего: 145