Как разделить лицензии 1С между разными компаниями на одном RDP-сервере

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе на одном терминальном сервере (RDP) с несколькими независимыми организациями часто возникает проблема «смешивания» лицензий. По умолчанию 1С ищет программные лицензии в общих папках, таких как C:\ProgramData\1C\licenses. Это приводит к тому, что пользователи одной фирмы могут случайно занять лицензии другой, а в окне «О программе» отображаются данные всех активированных на сервере ключей, что нарушает конфиденциальность. Рассмотрим детально, как грамотно изолировать лицензии для каждой группы пользователей.

Проблема использования папок профиля пользователя и блокировок

Разберем ситуацию, с которой сталкиваются многие администраторы при попытке простого копирования лицензий. Перемещение файлов .lic в папку %AppData%\Local\1C\1cv8\conf каждого пользователя кажется логичным, но на практике это приводит к серьезным проблемам. Проанализируем причины:

  1. Механизм защиты: Программная лицензия 1С привязывается к параметрам железа и операционной системы. Когда одна и та же лицензия (файл) открывается одновременно из пяти разных путей разными сессиями пользователей, защитный механизм системы лицензирования может расценить это как попытку эмуляции или взлома, что ведет к блокировке лицензии.
  2. Администрирование: Поддерживать актуальность лицензий в десятках пользовательских папок крайне трудозатратно.

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

Решение 1: Использование технологии FSLogix App Masking

Проанализируем наиболее современный и «чистый» способ изоляции — использование Microsoft FSLogix. Это решение позволяет буквально «скрыть» файлы от тех, кому они не предназначены, на уровне файловой системы.

Рассмотрим алгоритм настройки:

  1. Создадим на сервере папки для каждой организации в общем каталоге лицензий, например:
    • C:\ProgramData\1C\licenses\Firm1
    • C:\ProgramData\1C\licenses\Firm2
  2. Поместим соответствующие файлы .lic в эти папки.
  3. Используя FSLogix Rule Editor, создадим правило маскировки (App Masking).
  4. В правиле укажем, что папка Firm2 должна быть скрыта для всех пользователей, входящих в группу Группа_Фирма1.
  5. Аналогично настроим скрытие папки Firm1 для пользователей Группа_Фирма2.

Результат: Когда пользователь запускает 1С, операционная система «делает вид», что чужих папок с лицензиями не существует. 1С видит только «свои» файлы, при этом физически они остаются в одном экземпляре, что исключает блокировки.

Решение 2: Переназначение путей через конфигурационные файлы 1cescmn.cfg и conf.cfg

Выясним, как можно управлять поиском лицензий с помощью штатных средств платформы. 1С позволяет переопределить стандартные пути поиска конфигурации. Рассмотрим этот метод пошагово.

Для реализации этого метода нам потребуется создать индивидуальную структуру каталогов для каждой фирмы. Например, создадим корень C:\1C_Distr\ и в нем подпапки Org1, Org2.

В основной папке установки платформы (например, C:\Program Files\1cv8\current_version\bin\conf) мы можем отредактировать файл conf.cfg, указав в нем параметр ConfLocation. Однако более гибким будет создание файла 1cescmn.cfg.

Разберем пример содержимого файла 1cescmn.cfg, который можно разместить в профиле пользователя или в папке с платформой:


DistributeLicensing=0
LicensingServerName=MainServer
LicensingServerPort=1540

Но если мы работаем с файловыми базами, нам важнее перенаправить поиск локальных лицензий. Для этого создадим группы пользователей в Windows (например, 1C_Firm1_Users) и настроим права доступа (NTFS) на папки с лицензиями. Важно не просто запретить чтение файла, а запретить просмотр содержимого папки (List folder contents). Если 1С не сможет получить список файлов в директории, она не будет пытаться их использовать.

Решение 3: Разделение через дополнительные инстансы сервера лицензирования

Если инфраструктура позволяет, рассмотрим вариант с использованием компонента «1С:Сервер лицензирования». Это программный модуль, который может раздавать лицензии по сети (даже на одном физическом сервере).

Проанализируем этот подход:

  1. Мы можем запустить несколько служб сервера 1С на разных портах (например, 1540, 1640, 1740).
  2. Каждая служба запускается от имени своей системной учетной записи.
  3. У каждой службы в ее собственном файле настроек прописан путь к своей папке с лицензиями.
  4. В настройках подключения к базе у пользователей (в файле .v8i или через параметры запуска) указывается, к какому серверу лицензий обращаться.

Этот метод сложнее в настройке, но он обеспечивает 100% изоляцию, так как клиентское приложение 1cv8.exe вообще не ищет файлы локально, а получает лицензию от конкретной службы по протоколу TCP/IP.

Решение 4: Символьные ссылки и скрипты входа

Посмотрим на более простой, «админский» способ с использованием символьных ссылок (Symbolic Links). Мы можем создать для всех пользователей в системе один и тот же путь поиска лицензий, но для каждого сеанса этот путь будет вести в разные места.

Рассмотрим алгоритм работы скрипта при входе пользователя (Logon Script):

  1. При логине скрипт определяет, к какой фирме относится пользователь.
  2. Скрипт создает символьную ссылку в профиле пользователя: mklink /D "C:\Users\%USERNAME%\AppData\Local\1C\licenses" "C:\Licenses\Firm_1"
  3. В папке C:\Licenses\Firm_1 лежат оригиналы файлов.

Важный момент: Чтобы 1С не «подхватывала» общие лицензии из ProgramData, их необходимо оттуда убрать. Но помните, что после каждого обновления платформы 1С может пытаться создать или проверить эти пути снова.

Почему стандартные права NTFS иногда «не срабатывают»?

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

Рекомендации по выбору метода

Подводя итог, проанализируем, какой метод лучше выбрать в зависимости от условий:

Помните, что любые манипуляции с файлами лицензий должны сопровождаться сохранением резервных копий кодов активации (пин-кодов), так как при повреждении файлов .lic потребуется повторная активация.

← На главную