Mount

如何僅使用 mount 掛載 cryptsetup 容器?

  • February 18, 2013

我通過創建了一個加密容器

#!/bin/bash
dd if=/dev/zero of=$1 bs=1 count=0 seek=$2
MAPPER=$(mktemp -up /dev/mapper)
LOOPDEV=$(losetup --find --show $1)
cryptsetup luksFormat $LOOPDEV
cryptsetup luksOpen $LOOPDEV $(basename $MAPPER)
mkfs.ext3 $MAPPER
cryptsetup luksClose $MAPPER
losetup -d $LOOPDEV

即,container指定給該腳本的文件將包含一個通過 .ext3 加密的 ext3 文件系統cryptsetup luksFormat

要安裝它,我目前使用另一個腳本,比如dm.mount container /mnt/decrypted

#!/bin/bash
set -e
MAPPER=$(mktemp -up /dev/mapper)
LOOPDEV=$(losetup --find --show $1)
cryptsetup luksOpen $LOOPDEV $(basename $MAPPER) || losetup -d $LOOPDEV
mount $MAPPER $2 || (
 cryptsetup luksClose $MAPPER
 losetup -d $LOOPDEV
)

並解除安裝它dm.umount /mnt/decrypted

#!/bin/bash
set -e
MAPPER=$(basename $(mount | grep $1 | gawk ' { print $1 } '))
LOOPDEV=$(cryptsetup status $MAPPER | grep device | gawk ' { print $2 } ')
umount $1
cryptsetup luksClose $MAPPER
losetup -d $LOOPDEV

有很多冗餘和手動抓取循環設備和映射器,這兩者都可以保持匿名。有沒有辦法簡單地做一些事情mount -o luks ~/container /mnt/decrypted(提示輸入密碼)和umount /mnt/decrypted簡單的方法呢?


編輯基本上我對上面的腳本很滿意(儘管可以改進錯誤檢查……),所以

如何-o luks=~/container實現類似於-o loop ~/loopfile使用我編寫的腳本的掛載選項?

這可以在不重寫的情況下實現mount嗎?或者,可以-t luks -o loop ~/container實施嗎?

事實上,修改mount是可能的,正如我從mount.ntfs-3g. 我只是在做猜測,但我懷疑mount -t sometype會導致呼叫mount.sometype $DEV $MOUNTPOINT $OPTIONS,請隨時在此處糾正我或引用一些實際文件。特別是該選項-o loop已被處理,因此不再需要lopsetup

符號連結/創建掛載腳本為/sbin/mount.crypto_LUKS. 刪除 loopdevice 部分,而只使用-o loop開關。這是我的/sbin/mount.crypto_LUKS

#!/bin/bash
set -e
if [[ $(mount | grep ${2%%/} | wc -l) -gt 0 ]]; then
 echo "Path $2 is already mounted!" >&2
 exit 9
else
 MAPPER=$(mktemp -up /dev/mapper)
 cryptsetup luksOpen $1 $(basename $MAPPER)
 shift
 mount $MAPPER $* || cryptsetup luksClose $(basename $MAPPER)
fi

現在我只需要執行mount -o loop ~/container /mnt/decrypted,它mount會提示我輸入密碼然後掛載容器,一旦容器關閉就會自動釋放循環設備。如果解密後的文件系統掛載失敗,容器會再次關閉,當然你也可以修改。或者實現一些選項解析,而不是將所有內容傳遞給mount.

我希望同樣可以通過 實現/sbin/umount.luks,但是umount /mnt/decrypted(即使使用-t crypto_LUKS)仍然只進行通常的解除安裝,使容器保持打開狀態。如果您找到了umount呼叫我的dm.umount腳本的方法,請告訴我…目前,不鼓勵直接呼叫,因為您必須手動umount找出名稱。如果之前使用過,至少循環設備會自動釋放……/dev/mapper``cryptsetup luksClose $MAPPER``mount -o loop

引用自:https://unix.stackexchange.com/questions/52078