2

我将使用 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 中,还是有其他选择?

4

1 回答 1

4

我认为您可能正在寻找的是 shm / shmfs,或者称为 tmpfs。

这里有几个关于使用 shm / tmpfs 以及如何安装和保护它的链接

http://www.cyberciti.biz/tips/what-is-devshm-and-its-practical-usage.html

https://wiki.archlinux.org/index.php//dev/shm

为自己创建一个小分区并使用它似乎很简单。如果您的脚本要动态创建挂载,则需要以 root 身份运行。

于 2011-12-04T16:37:13.623 回答