Có, bạn có thể làm điều này bằng cách truy cập khóa chính trong khi âm lượng được giải mã.
Nhanh chóng và bẩn thỉu để thêm cụm mật khẩu mới:
device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)
device
và volume_name
nên được thiết lập phù hợp.
volume_name
là tên của khối lượng được giải mã, cái mà bạn nhìn thấy /dev/mapper
.
Giải trình:
Khối lượng LUKS mã hóa dữ liệu của họ bằng khóa chính. Mỗi cụm mật khẩu bạn thêm chỉ cần lưu một bản sao của khóa chính được mã hóa với cụm mật khẩu đó. Vì vậy, nếu bạn có khóa chính, bạn chỉ cần sử dụng nó trong một khe khóa mới.
Hãy xé bỏ lệnh trên.
$ dmsetup table --showkeys $volume_name
Điều này đưa ra một loạt các thông tin về khối lượng được giải mã tích cực. Đầu ra trông như thế này:
0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096
Trường số 5 là khóa chính.
$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p
Sẽ không hiển thị đầu ra của dữ liệu này dưới dạng dữ liệu nhị phân, nhưng điều này làm là lấy khóa chính cho âm lượng, sau đó chuyển đổi nó thành dữ liệu nhị phân thô cần thiết sau này.
$ cryptsetup luksAddKey $device --master-key-file <(...)
Điều này nói với cryptsetup để thêm một khóa mới vào âm lượng. Thông thường hành động này yêu cầu một khóa hiện có, tuy nhiên chúng tôi sử dụng --master-key-file
để nói với nó rằng chúng tôi muốn sử dụng khóa chính thay thế.
Các <(...)
là thay lệnh shell & chuyển hướng. Về cơ bản, nó thực thi mọi thứ bên trong, gửi đầu ra đến một đường ống và sau đó thay thế <(...)
bằng một đường dẫn đến đường ống đó.
Vì vậy, toàn bộ lệnh chỉ là một lớp lót để ngưng tụ một số hoạt động.