Bagaimana me-mount wadah cryptsetup hanya dengan `mount`?


9

Saya membuat wadah terenkripsi via

#!/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

yaitu file misalnya yang containerditentukan untuk skrip ini akan berisi sistem file ext3 yang dienkripsi melalui cryptsetup luksFormat.

Untuk memasangnya, saat ini saya menggunakan skrip lain, katakan 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
)

dan melepasnya 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

Ada banyak redundansi dan secara manual meraih perangkat loop dan mapper yang keduanya bisa tetap anonim. Apakah ada cara untuk melakukan sesuatu seperti mount -o luks ~/container /mnt/decrypted(meminta frasa sandi) dan umount /mnt/decryptedcara mudah sebagai gantinya?


sunting Pada dasarnya saya senang dengan skrip saya di atas (walaupun pemeriksaan kesalahan dapat diperbaiki ...), jadi

Bagaimana opsi mount -o luks=~/containerdiimplementasikan mirip dengan -o loop ~/loopfilemenggunakan skrip yang saya tulis?

Bisakah ini dicapai tanpa menulis ulang mount? Atau sebagai alternatif, dapat -t luks -o loop ~/containerdiimplementasikan?


Sudahkah Anda mencoba cryptmount ?
jw013

@ jw013 Saya belum dan mungkin telah menyederhanakan banyak hal, tetapi juga tidak mendukung secara langsung menggunakanmount
Tobias Kienzler

Jawaban:


6

Bahkan, memodifikasi mountadalah mungkin, seperti yang saya pelajari dari keberadaan mount.ntfs-3g. Saya hanya melakukan dugaan, tetapi saya menduga mount -t sometypehasil dalam panggilan untuk mount.sometype $DEV $MOUNTPOINT $OPTIONS, merasa bebas untuk memperbaiki saya di sini atau mengutip beberapa dokumentasi yang sebenarnya. Terutama opsi -o loopsudah diperlakukan sehingga tidak perlu lopsetuplagi ...

Symlink / buat skrip mount sebagai /sbin/mount.crypto_LUKS. Hapus bagian loopdevice dan alih-alih gunakan saja -o loopsakelar. Ini milik saya /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

Sekarang saya hanya perlu menjalankan mount -o loop ~/container /mnt/decrypted, dan mountakan meminta saya untuk kata sandi dan kemudian me-mount wadah, secara otomatis melepaskan perangkat loop setelah wadah ditutup. Jika sistem file yang didekripsi gagal dipasang, wadah akan ditutup lagi, tetapi Anda dapat memodifikasinya. Atau mengimplementasikan beberapa opsi penguraian alih-alih meneruskan semuanya mount.

Saya berharap hal yang sama dapat dicapai melalui /sbin/umount.luks, tetapi umount /mnt/decrypted(bahkan dengan -t crypto_LUKS) masih hanya melakukan unmount biasa, meninggalkan wadah terbuka. Jika Anda menemukan cara untuk umountmemanggil dm.umountskrip saya , tolong beri tahu saya ... Saat ini, panggilan langsung umounttidak disarankan karena Anda harus mencari tahu /dev/mappernamanya secara manual cryptsetup luksClose $MAPPER. Setidaknya perangkat loop akan dirilis secara otomatis jika mount -o loopdigunakan sebelum ...


Mengenai itu umount, saya kira saya harus memodifikasi /etc/mtabentri sayamount.luks sehingga jenis sistem file misalnya luks.ext3bukan ext3.
Tobias Kienzler

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.