Данная статья предназначена в первую очередь для разработчиков, чьи программные продукты должны работать на компьютерах под управлением ОС Astra Linux Special Edition в условиях применения Замкнутой Программной Среды (ЗПС). Для того, чтобы ЗПС позволила запуск добавляемых разработчиками файлов (исполняемых файлов и библиотек), эти файлы должны быть подписаны. Далее описывается процедура подписывания файлов. |
См. также статью Инструменты для выполнения подписания файлов DLL и проверки подписи.
|
Все действия осуществляются от имени непривилегированного пользователя, если не указано иное. |
Далее в статье:
|
man bsign;man gpg.Изучить дополнительные информационные материалы
Если комплект ключей получен в виде ISO-образа - примонтировать этот образ. Если комплект ключей получен в виде архива — распаковать архив.
| При работе с ключами соблюдать меры безопасности для предотвращения несанкционированного доступа к секретному ключу и паролю и предотвращению утери секретного ключа. |
Модуль gpg и модуль digsig_verif - абсолютно не связаны и независимы. Список импортированных ключей в gpg никак не влияет на проверку исполняемых файлов при включении режима замкнутой программной среды (ЗПС). |
Импортировать в таблицу ключей пользователя секретный ключ.
| Ключи должны быть импортированы в таблицу ключей того пользователя, от имени которого в дальнейшем будет выполняться подписывание. Если подписывание будет выполняться с использованием sudo, то импорт также следует выполнять с использованием sudo. Ключи могут быть импортированы в несколько таблиц, например, для подписания с пользованием с sudo и без использования sudo, но дублирование ключей затрудняет их контроль и увеличивает риск утечки. |
Для импорта ключей:
gpg --import /etc/digsig/primary_key_2018.gpg gpg --import /etc/digsig/partners_rbt_root_key_2018.gpg |
| gpg --import --pinentry-mode=loopback --passphrase-file=ORG_password.txt ORG_secret.gpg |
Проверить список импортированных ключей и запомнить идентификатор ключа ORG_secret_key_id:
| gpg --list-secret-keys |
Идентификатор ключа в выводе команды представлен строкой из сорока шестнадцатиричных цифр (строкой из 8 символов и указывается через обратную косую черту ("слэш") после алгоритма в Astra Linux Special Edition 1.5).
Самоподписанные ключи:
Для создания самоподписанных ключей:
Key-Type:GOST_R34.10-2012 %no-protection Name-Real:<название_организации> Name-Comment: No comments Name-Email: <адрес_электронной_почты> |
| gpg --gen-key --batch <имя_файла_с_параметрами> |
Регистрация открытых ключей требуется на тех машинах, на которых будут проверяться подписи, сделанные парным закрытым ключом Для регистрации открытого ключа:
| gpg --export "<название_организации>" > <название_организации>.gpg |
| sudo update-initramfs --uk all |
| Для успешного запуска программ при включенной ЗПС подписаны должны быть не только исполняемые файлы приложений, но и используемые этими приложениями динамические библиотеки (файлы .so). После выполнения подписывания следует в обязательном порядке тестировать работоспособность ПО. В случае выявления нарушения работы ПО (возможно для файлов с нестандартной структурой) использовать вместо встроенных подписей отсоединенные. |
Доступные инструменты для подписывания файлов:
bsign-integrator;bsign, применение которого описано далее;bsign-dll и bsign-dot-net.Доступные методы подписания файлов зависят от наличия ключей:
|
Для подписания файлов:
Убедиться в пригодности файла для подписания, проверив его тип. Проверить тип файла можно с помощью команды file. Например, для файла /bin/bash:
| /bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=30bada4dfa11f45a96a5993d4c2fd41a27a61663, stripped |
SampleRes.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows |
Если тип файла не ELF, то:
bsign, явно задавая тип подписи;в еще более ранних обновлениях bsign может не поддерживать подписи для формата файлов PE, и в таких случаях следует использовать процедуру создания встраиваемой подписи из статьи Инструменты для выполнения подписания файлов DLL и проверки подписи;
Подписание тестового ELF-файла test_elf с помощью команды bsign:
| bsign -s test_elf |
Если тип подписи не указан явно (см. далее), то начиная с версии bsign 1.4.1 по умолчанию используется встраиваемая подпись (-E). В версиях 1.2.1 — 1.4.1 тип подписи автоматически определяется в зависимости от формата файла (ELF или PE). В более ранних обновлениях используется встраиваемая подпись и, в некоторых версиях, подпись в расширенных атрибутах.
Если импортирован только один ключ, можно ограничиться вышеуказанной командой без каких-либо опций. При наличии нескольких ключей, можно указать, каким именно ключом следует подписать файл:
| bsign -s --pgoptions="--default-key=ORG_secret_key_id" test_elf |
Для подписания файлов форматов отличных от ELF следует дополнительно указать опцию, определяющую тип подписи. См. ЗПС: инструмент bsign и ЗПС: инструмент bsign-integrator.
При работе из командной строки без использования графической оболочки (например, при подключении через ssh или при работе в консоли), требуется использовать дополнительные опции, т.к. в этом случае не может быть выдан графический запрос на ввод пароля, и операция завершится ошибкой (сообщением о неверно введенном пароле). В таком случае можно:
|
После того, как файл подписан, можно проверить подпись:
bsign -w test_elf |
Для удобства подписания deb-пакетов, можно воспользоваться данной инструкцией.
Для создания отсоединенной опции с помощью команды bsign используется опция -D (–detached) этой команды:
| bsign -s -D <имя_файла> |
По умолчанию подпись создается в каталоге /etc/digsig/external_sig. Имя файла с подписью формируется как полный путь к подписываемому файлу в котором символы косая черта ("/") заменены символами коммерческое at ("@") и добавлено расширение ,sign. Например, для файла /home/user/detached_example полный путь к файлу будет /etc/digsig/external_sig/@home@user@detached_example.sign. Каталог /etc/digsig/external_sig по умолчанию недоступен непривилегированным пользователям. Чтобы разрешить в него запись можно использовать ACL, например:
| sudo setfacl -m u:<имя_пользователя>:rwx /etc/digsig/external_sig |
| Несмотря на то, что название файла с отсоединенной подписью содержит полный путь к подписываемому файлу в момент создания подписи, результат проверки отсоединенной подписи не зависит от положения файла в момент проверки подписи. |
Более удобным может быть использование явного указания каталога, в котором должна сохраняться создаваемая отсоединенная подпись, с помощью опции -T команды bsign. Например, для сохранения отсоединенных подписей в текущем каталоге:
| bsign -s -D -T . <имя_файла> |
Для того, чтобы отсоединенная подпись могла проверяться необходимо:
/etc/digsig/external_sig/ на машине, на которой будет выполняться проверка.Далее под клиентской машиной подразумевается машина, на которой:
Машина, на которой выполняется подписывание файлов, в подавляющем большинстве случаев не является клиентской машиной.
Для того, чтобы подписанные файлы могли использоваться на клиентских машинах при включенной ЗПС:
Подробную информацию о настройке ЗПС на клиентских машинах см. в статье Ограничения программной среды в Astra Linux Special Edition x.8.