Что делать, если Linux не видит аппаратный ключ защиты 1С?

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

Перевод инфраструктуры 1С:Предприятие на операционные системы семейства Linux — актуальная задача для многих системных администраторов. Однако в процессе миграции часто возникают сложности с аппаратной защитой. Типичная ситуация: вы установили Linux Mint, Ubuntu или Debian, подключили локальный USB-ключ HASP, он горит и отображается в списке оборудования, но платформа 1С категорически отказывается его видеть и выдает ошибку лицензирования. В этой статье мы подробно разберем все шаги и тонкости настройки операционной системы для успешной работы локального ключа защиты.

Шаг 1. Физическое подключение и проблема совместимости с USB 3.0

Прежде чем приступать к установке программного обеспечения и изменению конфигурационных файлов, проанализируем физический уровень подключения. Старые аппаратные ключи защиты 1С (семейства HASP4 и ранние HASP HL, обычно красного или зеленого цвета) имеют аппаратные контроллеры, разработанные задолго до появления стандарта USB 3.0. В операционных системах Linux современные контроллеры xHCI часто не могут корректно инициализировать такое устаревшее устройство.

Выясним статус устройства в системе. Откроем терминал и выполним следующую команду для просмотра списка подключенных USB-устройств:

lsusb

В выводе команды мы должны найти строку, содержащую упоминание Aladdin Knowledge Systems или SafeNet. Если устройство присутствует в списке, но платформа его не определяет, выполним простую физическую оптимизацию. Переключим ключ из синего порта USB 3.0 в черный порт USB 2.0. Если на сервере или компьютере отсутствуют порты стандарта 2.0, подключим ключ через самый простой пассивный USB-хаб (разветвитель) стандарта USB 2.0. Это принудительно переведет работу контроллера в режим совместимости и решит проблему на физическом уровне.

Шаг 2. Выбор и установка драйверов HASP

Для того чтобы операционная система понимала, как работать с ключом защиты, нам понадобятся специализированные драйверы. Существует два основных пути решения этой задачи: использование оригинальных пакетов от компании-производителя Sentinel (Thales/Gemalto) или использование оптимизированных сборок от отечественной компании Etersoft.

Рассмотрим установку оригинальных драйверов. Для современных 64-разрядных систем (x86_64) производитель наконец выпустил полноценные 64-битные пакеты драйверов. Нам больше не требуется устанавливать огромное количество устаревших 32-битных библиотек для совместимости. Загрузим пакет Sentinel LDK Run-time для Linux, распакуем архив и перейдем в каталог с deb-пакетами. Установим драйвер с помощью пакетного менеджера:

sudo dpkg -i sentinel-ldk-runtime-daemon_*.deb

Вторым отличным вариантом является использование пакета haspd от компании Etersoft. Эти сборки исторически славятся великолепной адаптацией под российские Linux-дистрибутивы (Astra Linux, ALT Linux, RED OS), а также под Ubuntu и Linux Mint. Драйвер haspd автоматически разворачивает все необходимые службы и утилиты защиты.

Шаг 3. Исправление известного бага в скрипте инициализации Etersoft

Если мы приняли решение использовать пакеты haspd от Etersoft на Debian-подобных системах, то можем столкнуться с тем, что служба защиты отказывается запускаться. Проанализируем причину. Она кроется в досадной синтаксической ошибке внутри стартового скрипта инициализации.

Откроем конфигурационный файл в текстовом редакторе с правами суперпользователя:

sudo nano /etc/init.d/haspd

Найдем строку под номером 24. В оригинальном файле она выглядит следующим образом:

SourceIfNotEmpty /etc/sysconfig/haspd

Обратите внимание на отсутствие знака равенства. Из-за этой опечатки интерпретатор команд ломает логику выполнения скрипта. Исправим эту строку, добавив знак равенства:

SourceIfNotEmpty=/etc/sysconfig/haspd

Сохраним изменения (в редакторе nano это делается комбинацией клавиш Ctrl+O, затем Enter) и закроем редактор (Ctrl+X). Теперь нам необходимо принудительно обновить конфигурацию инициализации системы systemd и запустить службу заново:


sudo systemctl daemon-reload
sudo systemctl restart haspd

Шаг 4. Настройка прав доступа к USB-устройству через правила udev

Даже при корректно запущенных драйверах операционная система Linux жестко разграничивает права доступа к файлам устройств. По умолчанию доступ к аппаратным USB-портам на запись и чтение может быть закрыт для непривилегированных пользователей, под которыми работает демон 1С:Предприятия (обычно это пользователь usr1cv8).

Решим эту проблему путем создания специального правила для подсистемы управления устройствами udev. Создадим новый файл правил:

sudo nano /etc/udev/rules.d/80-hasp.rules

Вставим в этот файл правила, которые будут автоматически определять подключение USB-ключей Aladdin (их Vendor ID равен 0529) и предоставлять группе пользователей usr1cv8 или стандартной группе доступа к портам полные права:


SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0529", MODE="0664", GROUP="usr1cv8"

Если мы настраиваем локальный компьютер, где 1С запускается обычным пользователем, можно разрешить доступ для системной группы plugdev:


SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0529", MODE="0664", GROUP="plugdev"

После сохранения файла правил выполним перезагрузку конфигурации udev, чтобы изменения вступили в силу без перезагрузки компьютера:


sudo udevadm control --reload-rules
sudo udevadm trigger

Шаг 5. Тонкости работы с 32-битными библиотеками (Multiarch)

Несмотря на наличие современных 64-битных версий Sentinel LDK, при использовании более старых версий драйверов (или если вы используете специфические утилиты лицензирования 1С) система может потребовать наличие 32-битного окружения. Если запустить 32-битный исполняемый файл в чистой 64-битной системе, Linux выдаст вводящую в заблуждение ошибку "Файл или каталог не существует", хотя сам файл лежит перед нами.

Для исправления этого добавим поддержку мультиархитектуры в нашей операционной системе. Разберем по шагам команды для терминала:


sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libuuid1:i386

После установки данных библиотек совместимости все низкоуровневые 32-битные утилиты драйвера HASP смогут без проблем запускаться и выполнять свои функции в 64-битной среде Linux Mint или Ubuntu.

Шаг 6. Явная настройка конфигурационного файла nethasp.ini

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

Для этого отредактируем файл конфигурации nethasp.ini. Нам необходимо найти этот файл в каталоге установки 1С. Обычно в Linux он располагается по пути /opt/1C/v8.3/x86_64/conf/nethasp.ini (или в каталоге /opt/1C/v8.3/i386/conf/ для 32-битной платформы). Если файла там нет, мы можем создать его вручную.

Внесем в файл следующие параметры, которые жестко задают поиск ключа на локальной петле обратной связи (localhost):


[NH_COMMON]
NH_TCPIP = Enabled

[NH_TCPIP]
NH_SERVER_ADDR = 127.0.0.1
NH_USE_BROADCAST = Disabled

Такая конфигурация моментально перенаправит поисковые запросы 1С на локальный адрес 127.0.0.1, где запущен наш локальный менеджер лицензий, минуя сетевые задержки и блокировки.

Шаг 7. Мониторинг служб и веб-интерфейс диагностики

Финальным этапом нашей работы станет проверка работоспособности всей цепочки. Самый простой способ убедиться, что драйвер успешно запустился — это открыть встроенный веб-интерфейс Sentinel Admin Control Center. Откроем любой веб-браузер и перейдем по следующему адресу:

http://localhost:1947

Если страница успешно загрузилась, значит, служба работает. Перейдем в левом меню в раздел Sentinel Keys. Там должен отображаться наш подключенный локальный USB-ключ с подробным описанием его ID и типа лицензии.

Если веб-интерфейс недоступен, проверим состояние служб в терминале. Для оригинального драйвера Sentinel выполним проверку статуса демонов:


sudo systemctl status aksusbd
sudo systemctl status hasplmd

Для альтернативного драйвера от Etersoft команда будет следующей:

sudo systemctl status haspd

Если службы находятся в состоянии inactive или failed, внимательно изучите лог вывода службы с помощью утилиты journalctl -xe для локализации конкретной ошибки. Чаще всего перезапуск службы помогает решить проблему после исправления всех конфигурационных файлов:

sudo systemctl restart aksusbd hasplmd

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

← На главную