我将使用 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
上面的代码处理卷的解密,如您所见,它检查密钥文件是否有效,如果不是,则恢复为密码。我解决这个问题的想法是获取一个密钥文件和一个密码,将它们的值相加并创建一个新的密钥文件来打开卷。问题是我不知道在哪里保存文件,我想把它保存在 RAM 中,但我不知道 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
上面的代码是我的想法,我没有尝试过代码,因为我没有机会尝试,但我认为仅将临时密钥文件保存在硬盘上是不够安全的。
我不太了解 bash,所以这里和那里可能会有一些错误。但我只是想展示我对如何解决问题的想法,也许任何人都可以帮助我真正让它发挥作用。
是否可以将密钥文件存储在 RAM 中,还是有其他选择?