Làm cách nào để gắn một thùng chứa cryptsetup chỉ với `mount`?


9

Tôi đã tạo một container được mã hóa thông qua

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

tức là một tệp, ví dụ containerđược chỉ định cho tập lệnh này sẽ chứa hệ thống tệp ext3 được mã hóa thông qua cryptsetup luksFormat.

Để gắn kết nó, tôi hiện đang sử dụng một tập lệnh khác, nói 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
)

và để ngắt kết nối nó 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

Có rất nhiều dư thừa và tự tay lấy một thiết bị lặp và trình ánh xạ cả hai đều có thể ẩn danh. Có cách nào đơn giản để làm một cái gì đó như mount -o luks ~/container /mnt/decrypted(nhắc cho cụm mật khẩu) và umount /mnt/decryptedcách dễ dàng thay thế?


chỉnh sửa Về cơ bản tôi hài lòng với các tập lệnh của mình ở trên (mặc dù việc kiểm tra lỗi có thể được cải thiện ...), vì vậy

Làm thế nào một tùy chọn gắn kết -o luks=~/containercó thể được thực hiện tương tự như -o loop ~/loopfilesử dụng các tập lệnh tôi đã viết?

Điều này có thể đạt được mà không cần viết lại mount? Hoặc cách khác, có thể -t luks -o loop ~/containerđược thực hiện?


Bạn đã thử dùng tiền điện tử chưa?
jw013

@ jw013 Tôi không có và nó có thể đơn giản hóa mọi thứ một chút, nhưng nó cũng không hỗ trợ trực tiếp bằng cách sử dụngmount
Tobias Kienzler

Câu trả lời:


6

Trong thực tế, sửa đổi mountlà có thể, như tôi đã học được từ sự tồn tại của mount.ntfs-3g. Tôi chỉ đang phỏng đoán, nhưng tôi nghi ngờ có mount -t sometypekết quả trong một cuộc gọi đến mount.sometype $DEV $MOUNTPOINT $OPTIONS, vui lòng sửa tôi ở đây hoặc trích dẫn một số tài liệu thực tế. Đặc biệt là tùy chọn -o loopđã được xử lý nên không cần lopsetupthêm nữa ...

Symlink / tạo tập lệnh mount như /sbin/mount.crypto_LUKS. Loại bỏ phần loopdevice và thay vào đó chỉ sử dụng công -o looptắc. Đây là /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

Bây giờ tôi chỉ cần chạy mount -o loop ~/container /mnt/decrypted, và mountsẽ nhắc tôi nhập mật khẩu và sau đó gắn container, tự động giải phóng loopdevice sau khi đóng container. Nếu hệ thống tập tin được giải mã không thể gắn kết, container sẽ được đóng lại, nhưng bạn có thể sửa đổi điều đó tất nhiên. Hoặc thực hiện một số phân tích tùy chọn thay vì chuyển mọi thứ vào mount.

Tôi đã hy vọng điều tương tự có thể đạt được thông qua /sbin/umount.luks, nhưng umount /mnt/decrypted(ngay cả với -t crypto_LUKS) vẫn chỉ thực hiện việc ngắt kết nối thông thường, để lại container mở. Nếu bạn tìm cách umountgọi dm.umountkịch bản của tôi thay vào đó, xin vui lòng cho tôi biết ... Hiện tại, việc gọi trực tiếp umountkhông được khuyến khích vì bạn sẽ phải tìm ra /dev/mappertên theo cách thủ công cryptsetup luksClose $MAPPER. Ít nhất thiết bị lặp sẽ được phát hành tự động nếu mount -o loopđược sử dụng trước ...


Liên quan đến umount, tôi đoán tôi sẽ phải sửa đổi /etc/mtabmục nhập của tôimount.luks sao cho loại hệ thống tập tin là ví dụ luks.ext3thay vì ext3.
Tobias Kienzler

3

pam_mount, có sẵn từ sourceforge , gửi kèm với mount.crypto_LUKS và umount.crypto_LUKS hữu ích để khắc phục một số thiếu sót của tập lệnh được cung cấp bởi người đăng khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.