2015-03-16 19:38:36 +00:00
|
|
|
#!/bin/bash
|
|
|
|
# grub2-sign
|
|
|
|
# Signs everything important in /boot. Depends on grub2-verify.
|
|
|
|
# Author: Bandie Kojote
|
|
|
|
# Licence: GNU-GPLv3
|
|
|
|
|
2015-03-17 06:23:23 +00:00
|
|
|
|
|
|
|
# Running grub2-verify first to prevent double signing
|
2015-12-30 21:32:46 +00:00
|
|
|
echo "Running grub2-verify to check if everything is unsigned..." >&2
|
2015-03-16 19:38:36 +00:00
|
|
|
grub2-verify
|
2015-12-30 21:32:46 +00:00
|
|
|
if (( $? < 2 )); then
|
|
|
|
echo "Run grub2-unsign first." >&2
|
2015-03-16 19:38:36 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2015-03-17 06:23:23 +00:00
|
|
|
|
|
|
|
# Ask for passphrase
|
2015-12-30 21:32:46 +00:00
|
|
|
IFS= read -r -s -p 'Passphrase: ' pp
|
2015-03-17 06:23:23 +00:00
|
|
|
|
2015-12-30 21:32:46 +00:00
|
|
|
# build a find command line matching relevant filenames
|
|
|
|
name_patterns=(
|
|
|
|
grubenv # fixed names
|
|
|
|
'*.'{cfg,lst,mod,asc,pf2} # names with interesting extensions
|
|
|
|
{vmlinuz,initrd}'*' # names with interesting prefixes
|
|
|
|
)
|
|
|
|
find_args=( '-false' )
|
|
|
|
for pattern in "${name_patterns[@]}"; do find_args+=( '-or' '-name' "$pattern" ); done
|
2015-03-17 06:23:23 +00:00
|
|
|
|
|
|
|
# Find GRUB2 datas
|
2015-12-30 21:32:46 +00:00
|
|
|
while IFS= read -r -d '' i; do
|
2015-03-17 06:23:23 +00:00
|
|
|
# Signing
|
2015-12-30 21:32:46 +00:00
|
|
|
if gpg --batch --detach-sign --passphrase-fd 0 "$i" <<<"$pp"; then
|
|
|
|
echo "$i signed." >&2
|
2015-03-16 19:38:36 +00:00
|
|
|
else
|
2015-12-30 21:32:46 +00:00
|
|
|
echo "ERROR!" >&2
|
2015-03-16 19:38:36 +00:00
|
|
|
break
|
|
|
|
fi
|
2015-12-30 21:32:46 +00:00
|
|
|
done < <(find /boot '(' "${find_args[@]}" ')' '-print0' )
|
2015-03-17 06:54:03 +00:00
|
|
|
|
2015-03-19 22:11:00 +00:00
|
|
|
# Shredding passphrase
|
2015-12-30 21:32:46 +00:00
|
|
|
if (( ${#pp} )); then
|
|
|
|
echo "Shredding passphrase..." >&2
|
|
|
|
for (( i=0; i<10; i++ )); do
|
|
|
|
pp=$(LC_ALL=C tr -cd '[:print:]' </dev/urandom | head -c ${#pp})
|
|
|
|
done
|
|
|
|
fi
|
2015-03-17 06:54:03 +00:00
|
|
|
|
2015-12-30 21:32:46 +00:00
|
|
|
echo "Done!" >&2
|
2015-03-17 06:54:03 +00:00
|
|
|
exit 0
|