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