私はArch LinuxでLUKSを使ってハードドライブを暗号化します。通常、暗号化されたボリュームのロックを解除するには、鍵ファイルまたはパスフレーズを使用しますが、両方を要求したいと思います。あなたはキーファイルが有効であり、そうでない場合はパスフレーズに戻り場合、それはチェックし見ることができるようbashでRAMにファイルを保存する - 可能ですか?
# 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に保存することはできますか、それとも他の方法がありますか?
ありがとうございます。私は/ dev/shmの使用を検討しましたが、Fedoraで見つけることができませんでしたが、私はそれをテストすることができませんでした。読んだ後、それは最良の選択のように思えます、私はそれを確認するために仮想マシンでアーチLinuxを起動します。 – Griffin
/dev/shmはtmpfsのマウントで作成されました –
ありがとう! '/ dev/shm'は完璧と思われます。 – Griffin