Keycript LUKS bị bỏ qua trên mạng hỏi mật khẩu


10

Hãy để tôi bắt đầu bằng cách nói tôi không mới với LUKS. Tôi đã thiết lập LUKS với các bản ghi chép nhiều lần có và không có LVM. Tôi không chắc những gì đang thực sự xảy ra ở đây. Tôi có một hệ thống có một phân vùng được mã hóa duy nhất. Ổ đĩa của tôi được tổ chức như sau:

# lsblk

TÊN MAJ: MIN RM KÍCH THƯỚC RO LOẠI MOUNTPOINT
sda 8: 0 0 128G 0 đĩa  
└─sda1 8: 1 0 128G 0 phần  
  ├─vg0-root 253: 1 0 20G 0 lvm /
  ├─vg0-an toàn 253: 6 0 100M 0 lvm   
  │ ─ bảo mật 253: 7 0 98M 0 mật mã / root / an toàn
  └─vg0-hoán đổi 253: 4 0 1G 0 lvm [SWAP]

/etc/crypttabTập tin của tôi trông giống như thế này

# UUID không bắt buộc ở đây vì đường dẫn đến LV sẽ không thay đổi
an toàn / dev / vg0 / an toàn không luks, keycript = / lib / cryptsetup / scripts / không an toàn

/lib/cryptsetup/scripts/insecureTập tin của tôi có thể thực thi được và trông giống như thế này

#!/bin/sh
# My actual file looks somewhat different because it dumps the key file with dd.
# This accomplishes virtually the same thing though.

echo -n "my-encryption-password"

Tôi đã chạy update-initramfs -k all -umột số lần sau khi định cấu hình crypttab và đặt tệp keycript của tôi vào vị trí.

Theo như tôi có thể nói, tệp script của tôi thậm chí không được sao chép vào tệp initrd.img. Bây giờ tôi nghĩ về nó, tôi không nghĩ rằng nó sẽ được sao chép vào tệp initrd.img vì phân vùng gốc không được mã hóa và tệp script có thể dễ dàng truy cập từ đó.

Khi khởi động lại, hệ thống sẽ thấy bản ghi từ crypttab và yêu cầu mật khẩu (trong trường hợp của tôi không thực sự tồn tại vì khóa duy nhất là một khóa chứa đầy các bit ngẫu nhiên) thay vì sử dụng keycript để mở khóa phân vùng LUKS. Tôi đã thử lấy LUKS ra khỏi LVM và đưa nó lên sda2, và kết quả vẫn như vậy. Tôi cũng biết rằng keycript hoạt động vì cryptsetup luksOpen /dev/vg0/secure secure -d - <<< "$(/lib/cryptsetup/scripts/insecure)"hoạt động như một lá bùa và giải mã phân vùng LUKS của tôi.

Tôi đã thử điều này trong Ubuntu 16.04.2 và Ubuntu Mate 16.04.2 với kết quả tương tự. Tôi đã sử dụng keycripts trước đây mà không gặp rắc rối. Sự khác biệt duy nhất là, trong quá khứ, phân vùng / của tôi luôn được mã hóa. Nếu bất cứ ai có thể làm sáng tỏ, tôi sẽ đánh giá cao nó. Tôi chỉ muốn một phân vùng được mã hóa rất nhỏ bởi vì tôi dự định sao chép hệ thống này và tôi không muốn sao chép nó với toàn bộ / phân vùng được mã hóa.


CẬP NHẬT 2017-04-26

Khi đào qua các bản ghi, tôi tìm thấy một dòng có lỗi sau đây không có ý nghĩa gì. Từ khi nào 'keycript = / path / to / script' là một tùy chọn không xác định cho crypttab?

... systemd-cryptsetup [737]: Gặp tùy chọn không xác định / etc / crypttab 'keycript = / lib / cryptsetup / scripts / không an toàn', bỏ qua.

Chỉ để đá, tôi đã thử loại bỏ tùy chọn keycript và sử dụng keyfile, và tất cả chỉ hoạt động! Trên thực tế, tôi đã thử các tùy chọn khác như keyfile-offset và chúng cũng hoạt động. Do đó, vấn đề nằm ở đâu đó với tùy chọn keycript. Có ai có bất kỳ ý tưởng tại sao?


3
Tôi nghĩ systemd là vấn đề của bạn. Google nhanh chóng cho systemd và keycript cho thấy một lỗi và yêu cầu kéo để triển khai keycript trong systemd tại đây . Thậm chí còn có một cách giải quyết có sẵn từ liên kết đầu tiên.
sergtech

Đây là sự nghi ngờ của tôi cũng như tôi đã tiếp tục đào sâu vào vấn đề của mình và tìm kiếm kết quả mà tôi đã tìm thấy trên mạng. Tôi đã thử một số đề xuất ở đây , nhưng tôi không chắc làm thế nào để đưa tệp script vào initrd.
b_laoshi

Câu trả lời:


3

Hãy thử tùy chọn "initramfs" trong / etc / crypttab của bạn (theo /unix//a/4476763536711 ). /etc/crypttabSau đó bạn sẽ trông như thế này:

# UUID is not required here since the path to the LV won't change
secure      /dev/vg0/secure       none      luks,keyscript=/lib/cryptsetup/scripts/insecure,initramfs

Xin lưu ý rằng có thể có vấn đề là fs gốc của bạn nằm trong bộ chứa LVM. Vấn đề này cũng được đề cập trong bài viết được liên kết ở trên: " Nhưng điều này hiện chỉ hoạt động (đáng tin cậy) nếu thiết bị gốc không có trong LVM. " May mắn thay, có vẻ như một cách giải quyết được cung cấp.

Hệ thống của tôi trông như thế này:

$ lsblk
NAME                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                             8:0    0 931.5G  0 disk
└─sda1                          8:1    0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdb                             8:16   0 931.5G  0 disk
└─sdb1                          8:17   0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdc                             8:32   0 465.8G  0 disk
├─sdc1                          8:33   0   953M  0 part  /boot
└─sdc2                          8:34   0 464.8G  0 part
  └─sdc2_crypt                253:0    0 464.8G  0 crypt
    ├─system_crypt_vg-data_lv 253:1    0   447G  0 lvm   /
    └─system_crypt_vg-swap_lv 253:2    0  17.8G  0 lvm   [SWAP]

... và sau đây /etc/crypttablà phép thuật giải mã với một bản mô tả (!) trong Ubuntu 18.04.2 LTS:

$ cat /etc/crypttab
# <target name> <source device>                           <key file> <options>
sdc2_crypt      UUID=[...]                                none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh
md1_crypt       /dev/md1                                  none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh,initramfs

Lưu ý rằng việc giải mã sdc2_cryptvới keycript được cung cấp hoạt động mà không có tùy chọn initramfs (vì nó chứa fs gốc và do đó "tự động" được xem xét trong giai đoạn khởi động initramfs). md1_cryptchỉ được giải mã trong giai đoạn khởi động initramfs (và do đó với keycript theo mục nhập crypttab) sau khi tôi thêm tùy chọn initramfs. Việc giải mã sau này của md1_crypt trong giai đoạn khởi động systemd không hoạt động với một keycript được cung cấp trong crypttab vì "systemd cryptsetup" không hỗ trợ keycript tùy chọn, xem https://github.com/systemd/systemd/pull/3007 .

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.