Gắn LUKS từ dòng lệnh


11

Khi vào nautilushoặc cajatôi nhấp vào biểu tượng của đĩa được mã hóa và nhập mật khẩu của mình, thiết bị khối bên dưới sẽ được ánh xạ tới /dev/mapper/luks-$UUIDvà nó được gắn vào /media/$USER/$DISK, không yêu cầu mật khẩu gốc. Có cách nào để gọi quy trình này từ dòng lệnh, mà không cần GUI, bao gồm cả việc xóa sudo và có điểm gắn kết có thể được ngắt kết nối lại từ GUI.


Không chắc chắn (do đó là một nhận xét chứ không phải là một câu trả lời) Tôi tin rằng GUI thực hiện điều này thông qua udisks(hoặc udisks2). Điều tra các tùy chọn từ tiện ích CLI của nó có thể cung cấp câu trả lời thêm.
thúc

Ngoài ra, có thể bạn đã nhập mật khẩu lần đầu tiên và chọn lưu mật khẩu vào khóa đăng nhập của mình. Do đó, về mặt kỹ thuật nó không sử dụng mật khẩu, nhưng thực hiện một cách tự động vì vậy bạn không nhìn thấy nó.
thúc

Câu trả lời:


12

Tôi không biết một cách đơn lẻ để làm điều này. Các chương trình GUI đang thực hiện một chút thẩm vấn của đĩa để thực hiện phương pháp "đúng" và bạn sẽ cần phải tự mình thực hiện một số công việc đó. Tuy nhiên, bạn không cần sudo và tôi nghĩ rằng chuỗi các sự kiện tương đối không gây đau đớn.

Câu trả lời ngắn

Sử dụng udisksctltừ udisks2gói:

udisksctl unlock -b /path/to/disk/partition
udisksctl mount -b /path/to/unlocked/device

Tài khoản người dùng của bạn sẽ cần phải được ủy quyền thích hợp để những điều trên hoạt động. Trên Debian và Ubuntu, điều đó có nghĩa là thêm tài khoản của bạn vào plugdevnhóm.

Khi bạn thực hiện với đĩa:

udisksctl unmount -b /path/to/unlocked/device
udisksctl lock -b /path/to/disk/partition
udisksctl power-off -b /path/to/disk/or/partition

Cách thiết lập mọi thứ

Đây là cách bạn có thể thiết lập mọi thứ (thông qua dòng lệnh) để làm cho quá trình sử dụng đĩa không đau nhất có thể. Tôi sẽ giả sử bạn muốn sử dụng toàn bộ ổ USB dưới dạng một hệ thống tệp duy nhất. Các cấu hình khác sẽ yêu cầu sửa đổi các hướng dẫn. Hãy cẩn thận với các biến thể: Tôi chưa tìm thấy cách sử dụng LVM trong vùng chứa được mã hóa sẽ cho phép một tài khoản không có đặc quyền ngắt kết nối mọi thứ. (Tôi không thấy cách nào để hủy kích hoạt nhóm âm lượng qua udisksctl.)

Đối với mục đích minh họa, chúng tôi sẽ nói rằng đĩa là /dev/sda. Bạn sẽ cần một tên cho hệ thống tập tin để dễ dàng tham khảo sau này. Tôi sẽ sử dụng " example".

Phân vùng đĩa

Chạy sudo parted /dev/sdavà chạy các lệnh sau:

mklabel gpt
mkpart example-part 1MiB -1s
quit

Các mkpartlệnh có thể sẽ nhắc bạn điều chỉnh các thông số hơi. Bạn sẽ ổn khi chấp nhận số khuyến nghị của nó.

Các phân vùng sẽ có sẵn thông qua /dev/disk/by-partlabel/example-part.

Tạo và gắn kết phân vùng LUKS

sudo cryptsetup luksFormat /dev/disk/by-partlabel/example-part

Đi qua các gợi ý.

sudo cryptsetup luksOpen /dev/disk/by-partlabel/example-part example-unlocked

Các thiết bị mã hóa hiện có sẵn tại /dev/mapper/example-unlocked. Đây sẽ không phải là một điều vĩnh viễn; nó chỉ dành cho quá trình thiết lập.

Tạo hệ thống tập tin của bạn

Giả sử rằng hệ thống tập tin bạn đang sử dụng là XFS. Khá nhiều hệ thống tập tin truyền thống khác sẽ hoạt động theo cùng một cách. Điều quan trọng là thêm nhãn mà bạn có thể tham khảo sau:

sudo mkfs -t xfs -L example /dev/mapper/example-unlocked

Thiết bị khối của hệ thống tập tin có thể được truy cập thông qua /dev/disk/by-label/example.

Đặt quyền hệ thống tập tin

Theo mặc định, hệ thống tập tin sẽ chỉ có thể truy cập bằng root. Trong hầu hết các trường hợp, bạn có thể muốn các tệp có thể truy cập được bằng tài khoản người dùng của mình. Giả sử tên tài khoản của bạn là " user":

udisksctl mount -b /dev/disk/by-label/example
sudo chown user:user /media/user/example

Đóng mọi thứ xuống

udisksctl unmount -b /dev/disks/by-label/example
sudo cryptsetup luksClose example-unlocked

Sử dụng hệ thống tập tin của bạn

Đây là những gì bạn sẽ làm thường xuyên. Sau khi cắm vào ổ USB,

udisksctl unlock -b /dev/disks/by-partlabel/example-part
udisksctl mount -b /dev/disks/by-label/example

Nếu tài khoản người dùng của bạn là " user", hệ thống tập tin sẽ được gắn vào /media/user/example.

Để ngắt kết nối hệ thống tập tin:

udisksctl unmount -b /dev/disks/by-label/example
udisksctl lock -b /dev/disks/by-partlabel/example-part
udisksctl power-off -b /dev/disks/by-partlabel/example-part

Bây giờ bạn có thể ngắt kết nối ổ USB.


Tôi đã tạo một tập lệnh bash mã nguồn mở tự động hóa và đơn giản hóa phần "Sử dụng hệ thống tập tin của bạn": github.com/JerichoJyant/usbkey . Nó được thiết kế cho ổ đĩa flash USB. Tôi dự định kết hợp các thiết lập mà bạn mô tả ở đây trong kịch bản là tốt.
Josh Patton

3

Câu trả lời của asciiphil đối với tôi là chính xác, và nên được đánh dấu như vậy.

Nó bắt đầu, "Tôi không biết một cách đơn lẻ để làm điều này." Tôi cũng không, và đã mở một yêu cầu tính năng tương ứng . Như một giải pháp thay thế, người ta có thể tạo một tập lệnh bao bọc để cung cấp một cách một lệnh để mở khóa và gắn kết một phân vùng.

Giả sử bạn sử dụng Bash, lưu tập lệnh bên dưới dưới dạng, ví dụ: unlock-and-mountlàm cho nó có thể thực thi được và đặt nó vào một thư mục trong tệp của bạn PATH. Sau đó, bạn sẽ có thể mở khóa và gắn thiết bị trong một bước với unlock-and-mount /dev/disk/by-id/my-device-part-X.

Cảnh báo: điều này phụ thuộc vào việc phân tích cú pháp các thông điệp udisksctlgửi đến thiết bị xuất chuẩn và dựa trên sự ổn định của udisksctlgiao diện dòng lệnh. Điều này là mong manh, theo udisksctl trang người đàn ông , nói:

Chương trình [Điều này] không được sử dụng bởi các tập lệnh hoặc các chương trình khác - các tùy chọn / lệnh có thể thay đổi theo cách không tương thích trong tương lai ngay cả trong các bản phát hành bảo trì.

Trong khi đó, đây là kịch bản, hiện đang hoạt động:

#!/usr/bin/env bash
# A convenience wrapper around `udisksctl`.

# Trace execution 
set -x

# Abort on errors. (I find this helpful, despite the cautions given in
# http://mywiki.wooledge.org/BashFAQ/105 and
# http://mywiki.wooledge.org/BashFAQ/112 .)
set -e
set -u

# Define functions
die () {
    echo >&2 "$@"
    exit 1
}

# Validate input argument(s) 
[[ "$#" -eq 1 ]] || die "Exactly 1 argument required: path to partition ID. $# given"
[[ -b "$1" ]]    || die "$1 is not a block device"
[[ "$1" == /dev/disk/by-id/* ]] || die "$1 does not begin '/dev/disk/by-id/'"

# Unlock partition
unlockedpart="$(udisksctl unlock -b "$1" |\
 tail -n1 |\
 sed -e 's/^Unlocked \/dev\/[[:print:]]\+ as \([[:print:]]\+\).$/\1/' \
)"

# Mount unlocked partition
udisksctl mount -b "$unlockedpart"

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.