Я собираюсь зашифровать мой жесткий диск, используя LUKS с Arch Linux;Обычно для разблокировки зашифрованных томов используется ключевой файл или ключевая фраза, однако я хочу требовать и того, и другого.
# If keyfile exists, try to use that
if [ -f ${ckeyfile} ]; then
if eval /sbin/cryptsetup --key-file ${ckeyfile} luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; then
dopassphrase=0
else
echo "Invalid keyfile. Reverting to passphrase."
fi
fi
# Ask for a passphrase
if [ ${dopassphrase} -gt 0 ]; then
echo ""
echo "A password is required to access the ${cryptname} volume:"
#loop until we get a real password
while ! eval /sbin/cryptsetup luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; do
sleep 2;
done
fi
if [ -e "/dev/mapper/${cryptname}" ]; then
if [ ${DEPRECATED_CRYPT} -eq 1 ]; then
export root="/dev/mapper/root"
fi
else
err "Password succeeded, but ${cryptname} creation failed, aborting..."
exit 1
fi
Приведенный выше код обрабатывает дешифрование тома, поскольку вы можете видеть, что он проверяет, является ли ключевой файл действительным, и возвращает парольную фразу, если это не так.Моя идея обойти это - взять ключевой файл и ключевую фразу, сложить их значения и создать новый ключевой файл, который открывает том.Проблема в том, что я не знаю, где сохранить файл, я думал о сохранении его в оперативной памяти, но я не знаю, возможно ли это с bash.
if poll_device "${cryptdev}" ${rootdelay}; then
if /sbin/cryptsetup isLuks ${cryptdev} >/dev/null 2>&1; then
[ ${DEPRECATED_CRYPT} -eq 1 ] && warn_deprecated
if [ -f ${ckeyfile} ]; then
bool=true
while $bool; then
echo "Enter passphrase: "
read passphrase
tmpkey="tmpkeyfile"
cp ${ckeyfile} ${tmpkey} #Create a temporary keyfile
echo passphrase >> ${tmpkey} #Add the passphrase to the keyfile
if eval /sbin/cryptsetup --key-file ${tmpkey} luksOpen ${cryptdev} ${cryptname} ${CSQUIET}; then
bool=false
Код выше - это то, что я имел в виду, я не пробовал код, поскольку у меня не было возможности, но я не думаю, что это достаточно безопасно, чтобы просто сохранить временныйkeyfile на жестком диске.
Я не очень хорошо знаю bash, поэтому здесь и там могут быть некоторые ошибки.Но я просто хотел показать свою идею о том, как решить проблему, может быть, кто-нибудь может помочь мне на самом деле заставить его работать.
Можно ли сохранить ключевой файл в ОЗУ или есть другие альтернативы?