Содержание

Перейти к концу метаданных
Переход к началу метаданных

Для осуществления подписи ПО, на машине были установлены следующие пакеты: bsign, binutils, gzip, lzma, bzip2, gnupg.

Подпись пакетов в Astra Linux SE 1.6

Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:


gpg --batch --import secret_key.key
Для проверки правильности импорта:
gpg --list-secret-keys
Для подписывания пакетов может быть использован скрипт.

 sign-deb_package.sh
sign-deb_package.sh (by PostgresPro)
#!/bin/bash

DIR_BIN=$1
DIR_SIGNED=$2

TMP_DIR=$DIR_SIGNED/tmp$$
SIGN_LOG=sign.log

GPG_VER=`gpg --version | head -n 1 | sed -e 's/gpg (GnuPG) //'`

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"`
#echo $list_of_packages

for i in $list_of_packages ; do
	pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
	mkdir -p $TMP_DIR/{control,data}
	cp $i $TMP_DIR
	pushd $TMP_DIR
	ar x $pack_name

# Definig archives type
	data_arch_type=`ls data.tar* | cut -d'.' -f3`
	control_arch_type=`ls control.tar* | cut -d'.' -f3`
	popd

# Unpack data archive
	pushd $TMP_DIR/data
	case $data_arch_type in
	        xz)
		tar --same-permissions --same-owner -xJf ../data.tar.xz
		;;
		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
		;;
	esac
	popd

# Unpack control archive
	pushd $TMP_DIR/control
	case $control_arch_type in
		xz)
		tar --same-permissions --same-owner -xJf ../control.tar.xz
		;;
	        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
		;;
	esac
	popd

# Sign files
	pushd $TMP_DIR/data
	for file in `find . -type f` ; do
	    if [ -x $file ] || [ "`echo $file | sed -e 's/^.*\.so.*$/so/g'`" = "so" ] ; then
		if [ ! -L $file ]; then
		    oldstat=`stat -c %a $file`
		    GPG2OPTS=
		    if [ "$GPGVER" = "2.1.18" ] || [ ! "$GPGVER" = "1.4.18" ]; then
			GPG2OPTS="--batch --pinentry-mode=loopback"
		    fi
		    bsign -N -s --pgoptions="--default-key 12345678 $GPG2OPTS --passphrase-file key_password.txt" $file
		    bsign -V $file | grep -v "not ELF64"
		    bsign -w $file | grep -v "not ELF64"
		    newstat=`stat -c %a $file`
		    [ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
		fi
	    fi
	done
	popd

# Counting md5sums
	pushd $TMP_DIR/control
	if [ -e ./md5sums ] ; then
		filenames=`cat md5sums | awk -F'  ' '{print $2}'`
		popd
		pushd $TMP_DIR/data
		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
		mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums
		rm -f $TMP_DIR/control/md5sums.new
	fi

# Packing back in deb
	pushd $TMP_DIR/data
	case $data_arch_type in
		xz)
		tar --same-permissions --same-owner -cJf ../data.tar.xz .
		;;
	        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 .
		;;
	esac
	popd

	pushd $TMP_DIR/control
	case $control_arch_type in
    		xz)
		tar --same-permissions --same-owner -cJvf ../control.tar.xz .
		;;
		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 .
		;;
	esac
	popd
	pushd $TMP_DIR
	ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type
	cp $pack_name  $DIR_SIGNED/
	popd
	rm -rf $TMP_DIR
done

for j in $list_of_udebs ; do
    cp $j $DIR_SIGNED
done

echo "Sign done"



В скрипте необходимо указать


sign-deb_package.sh
bsign -N -s --pgoptions="--default-key 12345678 $GPG2OPTS --passphrase-file ./key_password.txt" $file

где 12345678 - ID ключа, а ./key_password.txt - путь к файлу с парольной фразой.

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

 sign-deb_package.sh /root/pkg /root/pkg_sign

Если ПО было подписано ранее, ключами, сгенерированными для версий ОС 1.5 и ниже, обеспечить работу такого ПО в режиме ЗПС можно установив пакет astra-digsig-oldkeys

Открытые ключи необходимо размещать в директории /etc/digsig/keys/legacy/keys/

Подпись пакетов в ОС 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

, где key_for_signing.key это название переданного Вам ключа.

Для подписывания пакетов может быть использован скрипт. Скрипт должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.
Для корректной работы скрипта следует заменить строку:

bsign -s --pgoptions "--default-key=A42E56D6" $file

на:

bsign -s -9 --pgoptions "--default-key=A42E56D6" $file

и указать идентификатор ключа (в нашем примере это A42E56D6, у Вас этот идентификатор будет другим), с помощью которого необходимо подписать пакет. Идентификатор ключа можно получить, используя команду:

gpg --list-keys

Далее следуйте по документации

Мануалы GPG

Разбираемся в GnuPG
The internals of an OpenPGP key
Параноидальное описание параноидальной подписи