Хранить файл в оперативной памяти с помощью bash - возможно? - PullRequest
2 голосов
/ 04 декабря 2011

Я собираюсь зашифровать мой жесткий диск, используя 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, поэтому здесь и там могут быть некоторые ошибки.Но я просто хотел показать свою идею о том, как решить проблему, может быть, кто-нибудь может помочь мне на самом деле заставить его работать.
Можно ли сохранить ключевой файл в ОЗУ или есть другие альтернативы?

1 Ответ

4 голосов
/ 04 декабря 2011

Я думаю, что вы можете искать это 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.

...