LINUX.ORG.RU

Как безопасно разместить много баз 1С:Предприятия на одном сервере?

 , ,


2

1

Дано.

Много организаций (клиентов) с небольшим кол-вом сотрудников (пользователей). Клиентов например 50-100, пользователей 1-3 штуки на клиента. Конфигурация основанная на БП 3.0, платформа 8.3. Один клиент - одна отдельная база.

Нужно.

Максимально дёшево разместить их на одной виртуальной машине.

Что я пытаюсь сделать.

По причине экономии отметается клиент-серверный вариант и 1cfresh. Используем файловый вариант, для каждого клиента создаём по базе и публикуем их через веб-сервер. 1С работает только с веб-сервером Apache 2.0, 2.2 (2.4 не поддерживается). Используем 2.2.

К сожалению такой сетап очень несекьюрен. Если клиент каким-то образом получит возможность выполнять произвольный код в рамках конфигурации, то он спокойно сможет гулять по файловой системе и смотреть/портить чужие базы. В принципе, если не давать административные права в базе, то загрузка всяких внешних обработок ДОЛЖНА быть ограничена. Но зная какое решето БП3.0 и сама платформа, у меня на это надежды нет.

Работа 1С:Предприятия через веб-сервер выглядит вкратце так. В конфиг апача добавляется:

LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap22.so"

Alias "/demo" "/var/www/html/demo/"
<Directory "/var/www/html/demo/">
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/html/demo/default.vrd"
</Directory>

В default.vrd прописываются настройки для 1с, в частности расположение каталога с базой, например /srv/1c/demo/

В итоге 1С:Предприятие работает внутри одного процесса httpd, который читает/пишет в каталог с базой /srv/1c/demo/ .

Разделение через apache2-mpm-itk

Пробовал использовать apache2-mpm-itk. Для каждого клиента создал отдельного unix-пользователя и виртуальный хост. Далее с помощью параметра AssignUserID в апаче, назначил каждому виртуальном хосту своего пользователя. Каждому пользователю дал права 700 на директорию со своей базой. В итоге разделение прав получилось сделать, но к великому сожалению платформа стала работать крайне нестабильно. Процессы httpd начали падать с ошибкой «child died with signal 11». От этого варианта пришлось отказаться.

Другие варианты с апачем - mpm-peruser мёртв, остальные mpm не позволяют запускать процессы httpd от разных пользователей, suexec не подходит, т.к. он работает только с cgi.

LXC или OpenVZ

Другой вариант, посадить каждого клиента в свой контейнер, со своей базой и своим апачем. Пока опыта работы с этими технологиями у меня нет, буду курить.
Какой тип контейнеров выбрать?
Какой дистрибутив выбрать в качестве хоста?
В качестве «гостя» нужен дистрибутив с apache 2.2 и с пакетным менеджером умеющим rpm/deb, сейчас использую Ubuntu 12.04 LTS.

Может есть другие варианты решения?

★★★★★

1. suexec?

2. Тебе достаточно разграничения прав на уровне ФС, т.е. MAC. Для этого нет необходимости использовать контейнеры. Просто включи мозги запусти N-процессов апача со своим набором user:group.

gh0stwizard ★★★★★ ()
Ответ на: комментарий от gh0stwizard

1. Suexec насколько я понимаю работает с cgi. Тут же 1С запускается не как внешняя программа, а код выполняется в рамках процесса httpd.

2. Вот, то что нужно! Почему то такая простая мысль не пришла мне в голову. Слишком я упёрся в виртуализацию.

Nao ★★★★★ ()

У тебя файловый вариант на пятом клиенте раком встанет.

imul ★★★★★ ()
Ответ на: комментарий от imul

Мне 1-3 клиента достаточно.
Кстати нашёл более красивое и удобное решение - apparmor и mod_apparmod на apache.
Всё настраивается очень красиво и легко. Только пришлось попариться для создания профиля апача+1с.

В итоге встала другая проблема. 1С-ка жрёт адовое кол-во ОЗУ (метров по 500 на одно подключение) и её потом не освобождает.
Похоже придётся отказаться от затеи.

Nao ★★★★★ ()
Ответ на: комментарий от Nao

Что конкретно жрёт? Оппа-ч? По крону его пинать пробовал?

Виртуальные 1С, я думаю, можно nginx'ом проксировать наружу.

dhameoelin ★★★★★ ()
Ответ на: комментарий от dhameoelin

Да, апач. Жрёт сразу. Например создаю 4 базы и захожу в каждую базу по одному разу. Процессы апача скушали два-три гига.
Жрёт конечно же 1с, так как он работает в адресном пространстве апача как подключаемая so-шка.

Пробовал уменьшать кол-во процессов апача и менять mpm (worker, prefork, itk). Особых изменений не заметил, кроме адовых тормозов с itk =)

nginx поможет если решу сделать по отдельному апачу на каждую базу, да.

Nao ★★★★★ ()
Ответ на: комментарий от Nao

Отделяй оппа-чи нафиг. Пусть в контейнерах пасутся.

Вот, кстати, а чего не «сервер 1С в контейнере»*«кол-во клиентов» + «база postgresql на всех в отдельном контейнере»? Безапачно должно быть)

dhameoelin ★★★★★ ()
Последнее исправление: dhameoelin (всего исправлений: 1)
Ответ на: комментарий от dhameoelin

Попробую отделить. Может так памяти меньше жрать будут.

Сервер 1С слишком дорогой. Пытаюсь уменьшить цену.

Nao ★★★★★ ()
Ответ на: комментарий от dhameoelin

Не знаю. А что это? Выделенных железок у нас нет.
Нам 1С предоставляет виртуалки от microsoft azure.
По идее они занимаются установкой и настройкой ОС/платформы, а нам только устанавливать конфигурацию, да с клиентами общаться.

Но в итоге получилось что они не знали как реализовать мою идею и я решил поэкспериментировать.

Nao ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.