Оглавление |
---|
Подпись пакетов в Astra Linux SE 1.6
Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:
Command |
---|
gpg --batch --import secret_key.key |
Для проверки правильности импорта:
Command |
---|
gpg --list-secret-keys |
Для подписывания пакетов может быть использован скрипт.
...
title | sign-deb_package.sh |
---|
...
title | sign-deb_package.sh (by PostgresPro) |
---|
...
Информация | ||
---|---|---|
| ||
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10 |
Подписание пакетов в Astra Linux Special Edition 1.6, 8.1, x.7
Установка пакетов
Для осуществления подписания ПО необходимо установить пакеты:
- bsign;
- binutils;
- gzip;
- lzma;
- bzip2;
- gnupg.
Команда для установки пакетов:
Command |
---|
sudo apt install bsign binutils gzip lzma bzip2 gnupg |
Подготовка к подписанию пакетов
Импортировать закрытый ключ для подписания в набор ключей администратора командой:
Command sudo gpg --import secret_key.key
Проверить правильности импорта:
Command sudo gpg --list-secret-keys
Подписание пакетов
- Подписание пакетов должно осуществляться от имени администратора через механизм sudo.
- Для подписания пакетов может быть использован сценарий sign-deb.sh. Файл сценария доступен для загрузки с помощью web-браузера по ссылке sign-deb16.sh.
Для настройки сценария в сценарии необходимо указать следующие параметры:
Информация icon false key_id="<идентификатор_ключа>"
pass_file="<абсолютный_путь_к_файлу_с_паролем>"При запуске сценария:
первый аргумент указывает полный путь до каталога, содержащего пакеты, которые необходимо подписать;
второй аргумент указывает полный путь до каталога, в который будут помещены подписанные пакеты, например:
Command sudo ./sign-deb16.sh /root/pkg /root/pkg_sign
Исходный текст сценария:
Блок кода | ||||
---|---|---|---|---|
| ||||
#!/bin/bash
#---------------------
key_id=""
pass_file=""
DIR_BIN=$1
DIR_SIGNED=$2
#---------------------
TMP_DIR=$DIR_SIGNED/tmp$$
if [ -z $DIR_BIN ] ; then
echo "Specify original directory as first argument."
exit 1
fi
if [ -z $DIR_SIGNED ] ; then
echo "Specify destination directory as second argument."
exit 1
fi
if [ ! -e $DIR_BIN ] ; then
echo "Original directory $DIR_BIN doesn't exist."
exit 1
fi
list_of_packages=`find $DIR_BIN -type f -name "*.deb"`
list_of_udebs=`find $DIR_BIN -type f -name "*.udeb"`
for i in $list_of_packages ; do
pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
echo "Unpacking $pack_name"
mkdir -p $TMP_DIR/{control,data}
cp $i $TMP_DIR
pushd $TMP_DIR &>/dev/null
fakeroot ar x $pack_name
SIGN_LOG=${DIR_SIGNED}/${pack_name}.log
# Definig archives type
data_arch_type=`ls data.tar* | cut -d'.' -f3`
control_arch_type=`ls control.tar* | cut -d'.' -f3`
popd &>/dev/null
# Unpack data archive
pushd $TMP_DIR/data &>/dev/null
case $data_arch_type in
gz)
fakeroot tar --same-permissions --same-owner -xzf ../data.tar.gz
;;
bz2)
fakeroot tar --same-permissions --same-owner -xjf ../data.tar.bz2
;;
lzma)
fakeroot tar --same-permissions --same-owner --lzma -xf ../data.tar.lzma
;;
xz)
fakeroot tar --same-permissions --same-owner -xJf ../data.tar.xz
;;
esac
popd &>/dev/null
# Unpack control archive
pushd $TMP_DIR/control &>/dev/null
case $control_arch_type in
gz)
fakeroot |
...
tar --same-permissions --same-owner - |
...
xzf ../ |
...
control.tar. |
...
gz ;; |
...
|
...
bz2) |
...
fakeroot tar --same-permissions --same-owner - |
...
xjf ../ |
...
control.tar. |
...
bz2 ;; lzma) fakeroot tar --same-permissions --same-owner - |
...
-lzma -xf ../ |
...
control.tar. |
...
lzma ;; xz) fakeroot tar --same-permissions --same-owner - |
...
xJf ../ |
...
control.tar. |
...
xz ;; |
...
esac |
...
popd &>/dev/null |
...
# Sign files pushd $TMP_DIR/ |
...
В скрипте необходимо указать
...
title | sign-deb_package.sh |
---|
data &> /dev/null list=`find . -type f` for file in $list ; do elf=`file $file | cut -d: -f2 | awk -F' ' '{print $1}'` if [ $elf = "ELF" ]; then #if [ "$(file $file | grep ELF)" ];then oldstat=`stat -c %a $file` bsign -N -s --pgoptions="--batch -- |
...
pinentry- |
...
mode=loopback --passphrase-file |
...
где 12345678 - ID ключа, а ./key_password.txt - путь к файлу с парольной фразой.
Скрипт должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.
Command |
---|
sign-deb_package.sh /root/pkg /root/pkg_sign |
Подпись пакетов в ОС 1.4 и выше
Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:
панель | ||||
---|---|---|---|---|
| ||||
gpg --import key_for_signing.key |
Для подписывания пакетов может быть использован скрипт. Скрипт должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.
Для корректной работы скрипта в строке:
панель | ||||
---|---|---|---|---|
| ||||
bsign -s --pgoptions "--default-key=A42E56D6" $file |
следует указать идентификатор ключа (слово A42E56D6
), с помощью которого необходимо подписать пакет. Идентификатор ключа можно получить, используя команду:
панель | ||||
---|---|---|---|---|
| ||||
gpg --list-keys |
Подписывание ПО в среде операционной системы специального назначения «Astra Linux Special Edition» версии 1.5 ключом, сгенерированным для более ранних версий
Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:
панель | ||||
---|---|---|---|---|
| ||||
gpg --import key_for_signing.key |
...
=$pass_file --default-key=$key_id" $file
bsign -w $file
newstat=`stat -c %a $file`
[ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
else
echo "$file not ELF"
fi
done
popd &> /dev/null
# Counting md5sums
pushd $TMP_DIR/control &>/dev/null
if [ -e ./md5sums ] ; then
filenames=`cat md5sums | awk -F' ' '{print $2}'`
popd &>/dev/null
pushd $TMP_DIR/data &> /dev/null
for j in $filenames
do
echo `md5sum $j` >> $TMP_DIR/control/md5sums.new
done
sed -e 's/\ /\ \ /g' $TMP_DIR/control/md5sums.new > $TMP_DIR/control/md5sums.new_mod
popd &> /dev/null
mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums &> /dev/null
rm -f $TMP_DIR/control/md5sums.new &> /dev/null
fi
# Packing back in deb
pushd $TMP_DIR/data &> /dev/null
case $data_arch_type in
gz)
fakeroot tar --same-permissions --same-owner -czf ../data.tar.gz .
;;
bz2)
fakeroot tar --same-permissions --same-owner -cjf ../data.tar.bz2 .
;;
lzma)
fakeroot tar --same-permissions --same-owner --lzma -cf ../data.tar.lzma .
;;
xz)
fakeroot tar --same-permissions --same-owner -cJf ../data.tar.xz .
;;
esac
popd &> /dev/null
pushd $TMP_DIR/control &> /dev/null
case $control_arch_type in
gz)
fakeroot tar --same-permissions --same-owner -czvf ../control.tar.gz .
;;
bz2)
fakeroot tar --same-permissions --same-owner -cjvf ../control.tar.bz2 .
;;
lzma)
fakeroot tar --same-permissions --same-owner --lzma -cvf ../control.tar.lzma .
;;
xz)
fakeroot tar --same-permissions --same-owner -cJvf ../control.tar.xz .
;;
esac
popd &> /dev/null
pushd $TMP_DIR &> /dev/null
fakeroot ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type &> /dev/null
cp ${pack_name} $DIR_SIGNED/${pack_name%.deb}_signed.deb &> /dev/null
echo "Creating $DIR_SIGNED/${pack_name%.deb}_signed.deb"
popd &> /dev/null
rm -rf $TMP_DIR &> /dev/null
done
for j in $list_of_udebs ; do
cp $j $DIR_SIGNED
done
echo "done"
exit 0 |
Особенности применения ПО, подписанного ключами для версий Astra Linux Special Edition 1.5 и ниже
Информация |
---|
Если ПО было подписано ранее, ключами, сгенерированными для версий Astra Linux Special Edition 1.5 и ниже, обеспечить работу такого ПО в режиме ЗПС можно установив пакет |
Подписание пакетов в Astra Linux Special Edition РУСБ.10015.01 1.4 и 1.5
Подписание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписания должен быть импортирован в набор ключей администратора командой:
панель | ||||
---|---|---|---|---|
| ||||
sudo gpg --import key_for_signing.key |
Для подписания пакетов может быть использован сценарий. Сценарий должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/bin/bash
key_id="00000000"
pass_file="/root/key_password.txt"
DIR_BIN=$1
DIR_SIGNED=$2
TMP_DIR=$DIR_SIGNED/tmp$$
SIGN_LOG=sign.log
if [ -z $DIR_BIN ] ; then
echo "Specify original directory as first argument."
exit 1
fi
if [ -z $DIR_SIGNED ] ; then
echo "Specify destination directory as second argument."
exit 1
fi
if [ ! -e $DIR_BIN ] ; then
echo "Original directory $DIR_BIN doesn't exist."
exit 1
fi
list_of_packages=`find $DIR_BIN -type f -name "*.deb"`
list_of_udebs=`find $DIR_BIN -type f -name "*.udeb"`
for i in $list_of_packages ; do
pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
echo "Unpacking $pack_name"
mkdir -p $TMP_DIR/{control,data}
cp $i $TMP_DIR
pushd $TMP_DIR &>/dev/null
ar x $pack_name
SIGN_LOG=${DIR_SIGNED}/${pack_name}.log
# Definig archives type
data_arch_type=`ls data.tar* | cut -d'.' -f3`
control_arch_type=`ls control.tar* | cut -d'.' -f3`
popd &>/dev/null
# Unpack data archive
pushd $TMP_DIR/data &>/dev/null
case $data_arch_type in
gz)
tar --same-permissions --same-owner -xzf ../data.tar.gz
;;
bz2)
tar --same-permissions --same-owner -xjf ../data.tar.bz2
;;
lzma)
tar --same-permissions --same-owner --lzma -xf ../data.tar.lzma
;;
xz)
tar --same-permissions --same-owner -xJf ../data.tar.xz
;;
esac
popd &>/dev/null
# Unpack control archive
pushd $TMP_DIR/control &>/dev/null
case $control_arch_type in
gz)
tar --same-permissions --same-owner -xzf ../control.tar.gz
;;
bz2)
tar --same-permissions --same-owner -xjf ../control.tar.bz2
;;
lzma)
tar --same-permissions --same-owner --lzma -xf ../control.tar.lzma
;;
xz)
tar --same-permissions --same-owner -xJf ../control.tar.xz
;;
esac
popd &>/dev/null
# Sign files
pushd $TMP_DIR/data &> /dev/null
list=`find . -type f`
for file in $list ; do
elf=`file $file | cut -d: -f2 | awk -F' ' '{print $1}'`
if [ $elf = "ELF" ]; then
#if [ "$(file $file | grep ELF)" ];then
oldstat=`stat -c %a $file`
bsign -N -s --pgoptions="--default-key=$key_id --passphrase-file=$pass_file" $file
bsign -w $file
newstat=`stat -c %a $file`
[ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
else
echo "$file not ELF"
fi
done
popd &> /dev/null
# Counting md5sums
pushd $TMP_DIR/control &>/dev/null
if [ -e ./md5sums ] ; then
filenames=`cat md5sums | awk -F' ' '{print $2}'`
popd &>/dev/null
pushd $TMP_DIR/data &> /dev/null
for j in $filenames
do
echo `md5sum $j` >> $TMP_DIR/control/md5sums.new
done
sed -e 's/\ /\ \ /g' $TMP_DIR/control/md5sums.new > $TMP_DIR/control/md5sums.new_mod
popd &> /dev/null
mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums &> /dev/null
rm -f $TMP_DIR/control/md5sums.new &> /dev/null
fi
# Packing back in deb
pushd $TMP_DIR/data &> /dev/null
case $data_arch_type in
gz)
tar --same-permissions --same-owner -czf ../data.tar.gz .
;;
bz2)
tar --same-permissions --same-owner -cjf ../data.tar.bz2 .
;;
lzma)
tar --same-permissions --same-owner --lzma -cf ../data.tar.lzma .
;;
xz)
tar --same-permissions --same-owner -cJf ../data.tar.xz .
;;
esac
popd &> /dev/null
pushd $TMP_DIR/control &> /dev/null
case $control_arch_type in
gz)
tar --same-permissions --same-owner -czvf ../control.tar.gz .
;;
bz2)
tar --same-permissions --same-owner -cjvf ../control.tar.bz2 .
;;
lzma)
tar --same-permissions --same-owner --lzma -cvf ../control.tar.lzma .
;;
xz)
tar --same-permissions --same-owner -cJvf ../control.tar.xz .
;;
esac
popd &> /dev/null
pushd $TMP_DIR &> /dev/null
ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type &> /dev/null
cp ${pack_name} $DIR_SIGNED/${pack_name%.deb}_signed.deb &> /dev/null
echo "Creating $DIR_SIGNED/${pack_name%.deb}_signed.deb"
popd &> /dev/null
rm -rf $TMP_DIR &> /dev/null
done
for j in $list_of_udebs ; do
cp $j $DIR_SIGNED
done
echo "Sign done" |
Для корректной работы сценария откорректировать строки сценария:
панель | ||||
---|---|---|---|---|
| ||||
key_id="000000" |
Заменив значение 00000 на идентификатор ключа, с помощью которого необходимо подписать пакет, а путь /root/key_password.txt на полный путь к файлу с паролем к ключу. Идентификатор ключа можно получить, используя команду:
панель | ||||
---|---|---|---|---|
| ||||
gpg --list-keys |
Скачать sign-deb_package.sh
Подписание ПО в среде операционной системы специального назначения Astra Linux Special Edition РУСБ.10015-01 1.5 ключом, сгенерированным для более ранних версий
Подписание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписания должен быть импортирован в набор его ключей командой:
панель | ||||
---|---|---|---|---|
| ||||
sudo gpg --import key_for_signing.key |
где key_for_signing.key — название переданного ключа.
Для подписания пакетов может быть использован сценарий. Сценарий должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.
Блок кода | ||||
---|---|---|---|---|
| ||||
#!/bin/bash
key_id="00000000"
pass_file="/root/key_password.txt"
DIR_BIN=$1
DIR_SIGNED=$2
TMP_DIR=$DIR_SIGNED/tmp$$
SIGN_LOG=sign.log
if [ -z $DIR_BIN ] ; then
echo "Specify original directory as first argument."
exit 1
fi
if [ -z $DIR_SIGNED ] ; then
echo "Specify destination directory as second argument."
exit 1
fi
if [ ! -e $DIR_BIN ] ; then
echo "Original directory $DIR_BIN doesn't exist."
exit 1
fi
list_of_packages=`find $DIR_BIN -type f -name "*.deb"`
list_of_udebs=`find $DIR_BIN -type f -name "*.udeb"`
for i in $list_of_packages ; do
pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
echo "Unpacking $pack_name"
mkdir -p $TMP_DIR/{control,data}
cp $i $TMP_DIR
pushd $TMP_DIR &>/dev/null
ar x $pack_name
SIGN_LOG=${DIR_SIGNED}/${pack_name}.log
# Definig archives type
data_arch_type=`ls data.tar* | cut -d'.' -f3`
control_arch_type=`ls control.tar* | cut -d'.' -f3`
popd &>/dev/null
# Unpack data archive
pushd $TMP_DIR/data &>/dev/null
case $data_arch_type in
gz)
tar --same-permissions --same-owner -xzf ../data.tar.gz
;;
bz2)
tar --same-permissions --same-owner -xjf ../data.tar.bz2
;;
lzma)
tar --same-permissions --same-owner --lzma -xf ../data.tar.lzma
;;
xz)
tar --same-permissions --same-owner -xJf ../data.tar.xz
;;
esac
popd &>/dev/null
# Unpack control archive
pushd $TMP_DIR/control &>/dev/null
case $control_arch_type in
gz)
tar --same-permissions --same-owner -xzf ../control.tar.gz
;;
bz2)
tar --same-permissions --same-owner -xjf ../control.tar.bz2
;;
lzma)
tar --same-permissions --same-owner --lzma -xf ../control.tar.lzma
;;
xz)
tar --same-permissions --same-owner -xJf ../control.tar.xz
;;
esac
popd &>/dev/null
# Sign files
pushd $TMP_DIR/data &> /dev/null
list=`find . -type f`
for file in $list ; do
elf=`file $file | cut -d: -f2 | awk -F' ' '{print $1}'`
if [ $elf = "ELF" ]; then
#if [ "$(file $file | grep ELF)" ];then
oldstat=`stat -c %a $file`
bsign -9 -N -s --pgoptions="--default-key=$key_id --passphrase-file=$pass_file" $file
bsign -w $file
newstat=`stat -c %a $file`
[ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
else
echo "$file not ELF"
fi
done
popd &> /dev/null
# Counting md5sums
pushd $TMP_DIR/control &>/dev/null
if [ -e ./md5sums ] ; then
filenames=`cat md5sums | awk -F' ' '{print $2}'`
popd &>/dev/null
pushd $TMP_DIR/data &> /dev/null
for j in $filenames
do
echo `md5sum $j` >> $TMP_DIR/control/md5sums.new
done
sed -e 's/\ /\ \ /g' $TMP_DIR/control/md5sums.new > $TMP_DIR/control/md5sums.new_mod
popd &> /dev/null
mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums &> /dev/null
rm -f $TMP_DIR/control/md5sums.new &> /dev/null
fi
# Packing back in deb
pushd $TMP_DIR/data &> /dev/null
case $data_arch_type in
gz)
tar --same-permissions --same-owner -czf ../data.tar.gz .
;;
bz2)
tar --same-permissions --same-owner -cjf ../data.tar.bz2 .
;;
lzma)
tar --same-permissions --same-owner --lzma -cf ../data.tar.lzma .
;;
xz)
tar --same-permissions --same-owner -cJf ../data.tar.xz .
;;
esac
popd &> /dev/null
pushd $TMP_DIR/control &> /dev/null
case $control_arch_type in
gz)
tar --same-permissions --same-owner -czvf ../control.tar.gz .
;;
bz2)
tar --same-permissions --same-owner -cjvf ../control.tar.bz2 .
;;
lzma)
tar --same-permissions --same-owner --lzma -cvf ../control.tar.lzma .
;;
xz)
tar --same-permissions --same-owner -cJvf ../control.tar.xz .
;;
esac
popd &> /dev/null
pushd $TMP_DIR &> /dev/null
ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type &> /dev/null
cp ${pack_name} $DIR_SIGNED/${pack_name%.deb}_signed.deb &> /dev/null
echo "Creating $DIR_SIGNED/${pack_name%.deb}_signed.deb"
popd &> /dev/null
rm -rf $TMP_DIR &> /dev/null
done
for j in $list_of_udebs ; do
cp $j $DIR_SIGNED
done
echo "Sign done" |
Для корректной работы сценария в строках:
панель | ||||
---|---|---|---|---|
| ||||
key_id="000000" |
заменить 00000 на идентификатор ключа, с помощью которого необходимо подписать пакет, а вместо /root/key_password.txt - указать полный путь к файлу с паролем к ключу
Подсказка | ||||||
---|---|---|---|---|---|---|
| ||||||
bsign -s --pgoptions "--default-key=A42E56D6" $file |
на:
Подсказка | ||
---|---|---|
| ||
bsign -s -9 --pgoptions "--default-key=A42E56D6" $file |
...
. Идентификатор ключа можно получить, используя команду:
панель | ||||
---|---|---|---|---|
| ||||
gpg --list-keys |
Далее следуйте
...
указаниям в документации.
...
Дополнительные материалы по GPG
Разбираемся в GnuPG
The internals of an OpenPGP key
Параноидальное описание параноидальной подписи