...
Для подписывания пакетов может быть использован скрипт. Скрипт Скрипт должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты. Для корректной работы скрипта в строке:
панель |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
|
bsign -s --pgoptions "--default-key=A42E56D6" $file |
следует указать идентификатор ключа (слово A42E56D6
), с помощью которого необходимо подписать пакет. Идентификатор ключа можно получить, используя команду:
панель |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
|
gpg --list-keys |
Скачать
Подписывание ПО в среде операционной системы специального назначения «Astra Linux Special Edition» версии 1.5 ключом, сгенерированным для более ранних версий
Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:
панель |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
|
gpg --import key_for_signing.key |
...
Раскрыть |
---|
|
Блок кода |
---|
language | bash |
---|
title | sign_deb.sh |
---|
| #!/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" |
|
Для корректной работы скрипта в строке:
панель |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
|
key_id="000000" pass_file="/root/key_password.txt" |
заменить 00000 на идентификатор ключа, с помощью которого необходимо подписать пакет, а вместо /root/key_password.txt - указать полный путь к файлу с паролем к ключу. Идентификатор ключа можно получить, используя команду:
панель |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
|
gpg --list-keys |
Скачать
Подписывание ПО в среде операционной системы специального назначения «Astra Linux Special Edition» версии 1.5 ключом, сгенерированным для более ранних версий
Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:
панель |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
|
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" |
|
Для корректной работы скрипта в строке:
панель |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
|
key_id="000000" pass_file="/root/key_password.txt" |
заменить 00000 на идентификатор ключа, с помощью которого необходимо подписать пакет, а вместо /root/key_password.txt - указать полный путь к файлу с паролем к ключу. Идентификатор ключа можно получить, используя команду:
Подсказка |
---|
borderColor | #c2e6ff |
---|
bgColor | #e2f3ff |
---|
icon | false |
---|
|
bsign -s --pgoptions "--default-key=A42E56D6" $file |
на:
Подсказка |
---|
|
bsign -s -9 --pgoptions "--default-key=A42E56D6" $file |
и указать идентификатор ключа (в нашем примере это A42E56D6, у Вас этот идентификатор будет другим), с помощью которого необходимо подписать пакет. Идентификатор ключа можно получить, используя команду:
...