RAMにファイルをBashで保存する - 可能ですか?
-
28-10-2019 - |
質問
Arch Linuxを使用してLuksを使用してハードドライブを暗号化します。通常、キーファイルまたはパスフレーズのいずれかを使用して、暗号化されたボリュームのロックを解除しますが、両方が必要です。
# 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
上記のコードは私が念頭に置いていたものです。私は機会がなかったのでコードを試していませんが、ハードドライブの一時的なキーファイルを保存するのに十分安全ではないと思います。
私はバッシュをあまりよく知らないので、あちこちにいくつかのエラーがあるかもしれません。しかし、私は問題を解決する方法についての自分の考えを見せたかっただけです。おそらく、誰でも実際にそれを機能させるのを助けることができます。
キーファイルをRAMに保存することは可能ですか、それとも他の選択肢がありますか?
解決
あなたが探しているのはSHM / SHMFS、またはTMPFSとして知られていると思います。
shm / tmpfsの使用とそれをマウントして保護する方法について説明するいくつかのリンクを以下に示します
http://www.cyberciti.biz/tips/what-is-devshm-ind-its-practical-usage.html
https://wiki.archlinux.org/index.php//dev/shm
自分自身を小さなパーティションで作成して使用するのは非常に簡単なようです。スクリプトがその場でマウントを作成する場合、ルートとして実行する必要があります。