Файлы программных лицензий 1С на Linux: найти, проверить и вернуть

· 9 мин

Содержание

Программные лицензии 1С в Linux хранятся в общем каталоге /var/1C/licenses/ (для всех пользователей компьютера) и в личном каталоге пользователя ~/.1cv8/1C/1cv8/conf/. Это обычные файлы с расширением .lic, имя которых состоит из цифр, например 20241015093412.lic. Сервер 1С ищет их в тех же местах, но от имени служебного пользователя, обычно usr1cv8.

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

Стандартные каталоги лицензий 1С в разных дистрибутивах

Пути не зависят от дистрибутива. В Ubuntu, Debian, Astra Linux, РЕД ОС, ALT Linux и CentOS платформа 8.3 ищет лицензии в одних и тех же местах. Меняется только способ установки пакетов, а не логика поиска.

КаталогКто видит лицензиюКогда используется
/var/1C/licenses/все пользователи компьютера и служба сервера 1Сосновной вариант для сервера и общих рабочих мест
~/.1cv8/1C/1cv8/conf/только этот пользовательлицензия активирована «на себя» без прав на общий каталог
/home/usr1cv8/.1cv8/1C/1cv8/conf/только служба сервера 1Счастный случай предыдущей строки: домашний каталог пользователя службы

Домашний каталог пользователя службы бывает не в /home. Узнать его точно можно командой:

getent passwd usr1cv8 | cut -d: -f6

Если служба сервера у вас запущена от другого пользователя, подставьте его имя. Посмотреть, от кого работает агент сервера, можно так:

ps -o user,cmd -C ragent

Как найти все файлы лицензий на машине

Когда непонятно, куда мастер активации сохранил файл, проще всего пройтись поиском по всей файловой системе:

sudo find / -xdev -name "*.lic" -newermt "2015-01-01" 2>/dev/null | grep -i -E "1c|1cv8"

Фильтр grep убирает чужие .lic от других программ. Если ничего не нашлось, уберите -xdev: каталог /var или /home может быть смонтирован с отдельного раздела.

Платформа не требует, чтобы в каталоге был один файл. В /var/1C/licenses/ может лежать несколько .lic: например, лицензия сервера и комплект клиентских лицензий на 10 пользователей. Каждая активация даёт отдельный файл.

Владелец и права на файлы лицензии

Файл лицензии читает тот процесс, который запускает 1С. Для толстого или тонкого клиента это пользователь, вошедший в систему. Для сервера — пользователь службы ragent, rmngr и rphost.

Типовая настройка общего каталога для сервера выглядит так:

sudo mkdir -p /var/1C/licenses
sudo chown -R usr1cv8:grp1cv8 /var/1C/licenses
sudo chmod 775 /var/1C/licenses
sudo chmod 664 /var/1C/licenses/*.lic

Смысл прав простой:

  • 📁 каталог должен быть доступен на запись тому, кто активирует лицензию, иначе новый файл не сохранится;
  • 📄 файлы должны быть доступны на чтение всем, кто запускает 1С на этом компьютере;
  • 👤 группа grp1cv8 создаётся при установке сервера; если её нет, проверьте командой getent group grp1cv8 и при необходимости используйте группу, в которую входит пользователь службы.

На рабочей станции с несколькими пользователями удобнее дать каталогу права 755, а файлам — 644, и активировать лицензию от администратора через sudo. Тогда обычные пользователи читают лицензию, но не могут её удалить.

Не ставьте chmod 777 «чтобы точно заработало». Любой пользователь сможет удалить или подменить файл, и вы узнаете об этом только при следующем запуске 1С.

Проверка прав от имени службы

Самый быстрый способ убедиться, что служба видит файл, — прочитать его её же правами:

sudo -u usr1cv8 ls -l /var/1C/licenses/
sudo -u usr1cv8 head -c 100 /var/1C/licenses/*.lic > /dev/null && echo "чтение работает"

Если команда вернула Permission denied, проблема в правах, а не в лицензии. Если система использует SELinux (РЕД ОС, CentOS), проверьте ещё и контекст файла командой ls -Z: после копирования из другого каталога он мог остаться чужим.

Проверка лицензий утилитой ring и консолью rac

Отдельного графического менеджера лицензий для Linux в платформе нет. Вместо него используют две консольные утилиты: ring для работы с самими файлами и rac для того, чтобы увидеть, какие лицензии реально выдал сервер.

Утилита ring: список, проверка, активация

Утилита ring ставится вместе с компонентами 1C:Enterprise и требует установленной Java. Если её нет в PATH, найдите исполняемый файл:

sudo find /opt -type f -name ring 2>/dev/null

Основные команды модуля лицензирования:

ring license list                       # перечень лицензий в стандартных каталогах
ring license info --name <имя_лицензии> # подробности: тип, число пользователей, владелец
ring license validate --name <имя_лицензии>  # проверка, что лицензия подходит этому компьютеру

Имя лицензии берите из вывода ring license list. Запускайте команды от того пользователя, для которого проверяете лицензию: для сервера — через sudo -u usr1cv8. Иначе ring покажет содержимое личного каталога администратора, а не службы.

Команда ring license activate получает лицензию без графического интерфейса. Это выручает на сервере без рабочего стола. Параметров у неё много (пин-код, регистрационные данные, адрес, способ получения), поэтому перед запуском посмотрите их список:

ring license activate --help

Консоль rac: какие лицензии выдал сервер

Чтобы понять, какой файл сервер реально использует, посмотрите сеансы вместе с лицензиями:

rac cluster list
rac session list --cluster=<uuid_кластера> --licenses

В выводе для каждого сеанса есть поле full-name с полным путём к файлу лицензии, тип лицензии (программная или ключ HASP) и сервер, который её выдал. Это самый надёжный ответ на вопрос «откуда взялась лицензия»: вы видите не то, что лежит на диске, а то, что использовано.

Для rac должна работать служба ras (по умолчанию порт 1545). Если rac не подключается, проверьте, запущена ли она: systemctl status с именем службы RAS вашей установки.

Восстановление лицензии после сбоя диска и lost+found

Если после аварийного выключения или проверки диска fsck каталог /var/1C/licenses/ оказался пустым, файл мог уцелеть в каталоге lost+found того раздела, где лежит /var. Утилита fsck складывает туда «осиротевшие» файлы под именами вида #123456, без исходного названия.

Порядок действий:

  1. Найдите точку монтирования раздела с /var: df /var.
  2. Посмотрите, что лежит в lost+found этого раздела, отобрав небольшие файлы:
    sudo find /lost+found -type f -size -20k -printf "%TY-%Tm-%Td %s %p\n" | sort
    
  3. Сверьте даты изменения с датой активации лицензии. Файл лицензии маленький, обычно несколько килобайт.
  4. Скопируйте кандидата обратно с расширением .lic и выставьте права:
    sudo cp "/lost+found/#123456" /var/1C/licenses/restored.lic
    sudo chown usr1cv8:grp1cv8 /var/1C/licenses/restored.lic
    sudo chmod 664 /var/1C/licenses/restored.lic
    
  5. Проверьте файл: sudo -u usr1cv8 ring license list, затем ring license validate по его имени.

Если файл не нашёлся или не проходит проверку, остаётся повторное получение лицензии по тому же пин-коду. Его запускают тем же мастером, что и первую активацию, выбрав вариант повторного получения. Регистрационные данные (организация, ИНН, ФИО, адрес) нужно ввести так же, как при первой активации, иначе повторное получение не пройдёт. Эти данные стоит сохранить заранее, вместе с пин-кодами из комплекта поставки.

Число повторных активаций по одному пин-коду ограничено. Если лимит исчерпан, лицензию восстанавливают через партнёра, у которого её покупали, или через центр лицензирования, предъявив документы о покупке.

Восстановленный из lost+found файл работает, только если оборудование не изменилось. После замены диска, сетевой карты или переноса виртуальной машины на другой хост лицензия перестаёт соответствовать компьютеру, и нужна повторная активация.

Как не попадать в эту ситуацию

  • 💾 включите /var/1C/licenses/ и личные каталоги ~/.1cv8/1C/1cv8/conf/ в резервное копирование ;
  • 📝 храните пин-коды и регистрационные данные отдельно от сервера;
  • 🐳 в контейнерах держите каталог лицензий на постоянном томе и не меняйте параметры окружения контейнера, к которым привязана лицензия, между перезапусками.

Простейшая копия делается одной командой:

sudo tar czf /root/1c-licenses-$(date +%F).tar.gz /var/1C/licenses

Лицензии в кластере из нескольких серверов 1С

В кластере лицензии бывают двух видов, и хранятся они по-разному.

ЛицензияГде лежит файлЧто важно
Лицензия на сервер 1Сна каждом рабочем сервере, в его /var/1C/licenses/у каждого рабочего сервера своя, привязана к его оборудованию
Клиентские лицензиина сервере, который выдаёт клиентские лицензииклиенты получают их по сети, файлы на рабочих местах не нужны

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

Есть два рабочих варианта:

  1. Держать все клиентские лицензии на одном сервере и назначить ему функциональность «Клиентская лицензия» с требованием «Назначать».
  2. Разнести комплекты по серверам осознанно и учитывать, что лимит пользователей считается по каждому серверу отдельно.

Выдача лицензий сервером включается и в свойствах самой информационной базы. Если там выдача запрещена, клиент будет искать лицензию у себя на компьютере. В Linux свойство меняют через rac infobase update; точное имя параметра посмотрите в rac help infobase, оно зависит от версии платформы.

После изменения требований назначения функциональности новые правила применяются к новым сеансам. Не перезапускайте службу сервера в рабочее время, чтобы «ускорить» процесс: оборвутся все сеансы пользователей. Если перезапуск нужен, делайте его вне рабочих часов и предупредите людей заранее.

Диагностика ошибок лицензирования и логи

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

Диагностика: выберите симптом

Технологический журнал: событие LIC

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

Создайте файл logcfg.xml в каталоге conf установленной платформы (например, /opt/1cv8/conf/ для платформ 8.3.20 и новее):

<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="/var/log/1c/techlog" history="24">
    <event>
      <eq property="name" value="LIC"/>
    </event>
    <property name="all"/>
  </log>
</config>

Каталог для журнала создайте заранее и отдайте его пользователю службы:

sudo mkdir -p /var/log/1c/techlog
sudo chown usr1cv8:grp1cv8 /var/log/1c/techlog

Платформа перечитывает настройки журнала сама, перезапуск службы не нужен. Воспроизведите ошибку, посмотрите свежие файлы .log в подкаталогах и сразу выключите журнал, удалив logcfg.xml: при большой нагрузке он быстро растёт.

Если используется ключ HASP

Аппаратные ключи на Linux работают через драйвер Sentinel. Проверка:

systemctl status aksusbd

В браузере на этом же сервере откройте http://localhost:1947: в списке ключей должен появиться ваш. Для сетевого ключа клиенту нужен файл nethasp.ini с адресом сервера ключей в каталоге conf платформы.

Частые вопросы

Можно ли просто скопировать .lic-файл на другой компьютер?
Нет. Программная лицензия привязана к оборудованию компьютера, где её активировали. На другой машине она не пройдёт проверку, нужна активация нового пин-кода или повторное получение.
Удаляются ли лицензии при обновлении или удалении платформы?
Нет. Пакеты платформы не трогают /var/1C/licenses/ и домашние каталоги. Файлы остаются на месте и после переустановки.
Где хранятся лицензии 1С в Windows для сравнения?
В каталоге C:\ProgramData\1C\licenses\ для всех пользователей. Логика та же, что в Linux: общий каталог плюс профиль пользователя.
Нужны ли клиентские лицензии на компьютерах пользователей, если есть сервер 1С?
Нет, если клиентские лицензии активированы на сервере и выдача лицензий сервером разрешена для базы. Тогда пользователи получают их по сети.
Как узнать, сколько пользователей даёт найденный файл?
Выполните ring license info с именем лицензии: в выводе будет тип лицензии и число рабочих мест.