Làm cách nào để định cấu hình LVM & LUKS cho phân vùng tự động mã hóa?


21

Gần đây tôi đã cài đặt máy chủ Ubuntu 11.04 với mã hóa lvm đầy đủ (được cài đặt từ thiết lập). Tôi muốn bây giờ sử dụng một tập tin quan trọng để mở khóa tự động. Tôi đã cố gắng làm theo hướng dẫn này http://ubuntuforums.org/showthread.php?t=837416

Tôi đã tạo một khóa với lệnh này: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

tôi đã đưa nó vào /boot/grubvì tôi nghĩ rằng nó không được mã hóa. Khi tôi cố gắng thêm khóa bằng dấu phẩy này, sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile nó sẽ hỏi tôi cụm mật khẩu và khi tôi đặt nó thì không có gì xảy ra, không có gì được in ra màn hình! Tôi bỏ qua nó và tiếp tục các bước khác và khởi động lại nhưng không có gì xảy ra và nó yêu cầu cụm mật khẩu.

Cảm ơn đã giúp đỡ .


Bạn có nghĩa là giải mã mà không cần nhập cụm mật khẩu? Nếu quá trình khởi động có thể làm điều đó, thì các phím cần thiết để giải mã âm lượng sẽ cần phải có trên hệ thống ở đâu đó có thể truy cập trong khi khởi động. Làm thế nào bạn mong đợi rằng để bảo vệ bạn khỏi trộm cắp dữ liệu?
James Henstridge

vâng, tôi nghĩ rằng tôi sẽ đặt chìa khóa vào một phân vùng ẩn hoặc ổ đĩa flash USB. Điều đó có thể không ?
isoman

Vấn đề là nếu bộ tải khởi động có thể xác định vị trí khóa, thì ai đó đang kiểm tra mã khởi động (không được mã hóa) cũng sẽ có thể xác định vị trí của nó. Nếu bạn lưu trữ khóa trên thẻ USB, bạn muốn chắc chắn rằng thanh đó sẽ không bị đánh cắp với máy tính. Nếu bạn chỉ cắm phích cắm trong khi khởi động, thì nó không thuận tiện hơn việc nhập cụm mật khẩu.
James Henstridge

Cách dừng tự động mã hóa: askubfox.com/questions/615408/ trên
Ciro Santilli 改造

Câu trả lời:


27

Tôi vừa mới trải qua điều này trên máy chủ gia đình mới của tôi, nó đã mất rất nhiều sự hiểu biết và đoán, nhưng tôi đã làm cho nó hoạt động. Tôi sẽ cố gắng tái tạo các bước ở đây. Tôi đang sử dụng Ubuntu Server 11.10 và bắt đầu cài đặt tiêu chuẩn khá nhiều bằng LVM được mã hóa, vì vậy tôi sẽ chỉ liên quan đến những thay đổi tôi đã thực hiện từ đó.

Thiết lập:

  • / dev / sda1 là phân vùng khởi động / không được mã hóa của tôi
  • / dev / sda5 là phân vùng lvm của tôi chứa mọi thứ khác - root, trao đổi và nhà
  • / dev / sdc1 là phân vùng trên ổ flash USB của tôi, nơi tôi sẽ lưu trữ keyfile

Đầu tiên, tôi đã tạo một keyfile, chỉ trong thư mục chính của tôi:

dd if=/dev/urandom of=keyfile bs=512 count=4

(bạn có thể sử dụng kích thước khối lớn hơn hoặc đếm cho khóa lớn hơn)

Nói với cryptsetup khóa mới (đó là nội dung quan trọng, không phải tên tệp):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Sau đó, tôi định dạng ổ flash USB của mình bằng ext2 và đặt cho nó một nhãn. Tôi đã sử dụng một nhãn, để sau này tôi có thể gắn nó bằng nhãn và thay thế ổ flash USB trong trường hợp có vấn đề với nó.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(tất nhiên, thiết bị của bạn sẽ thay đổi)

Bây giờ, sao chép keyfile vào ổ flash USB, thuộc sở hữu của chế độ root 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

Sửa đổi / etc / crypttab. Của tôi ban đầu chứa

sd5_crypt UUID=(...) none luks

mà tôi đã đổi thành

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Cuối cùng, cập nhật initramfs:

sudo update-initramfs -uv

Bây giờ nó khởi động bằng cách sử dụng keyfile trên ổ flash USB. Nếu tôi tháo ổ đĩa flash (giả sử, khi tôi đi nghỉ) thì nó không khởi động và dữ liệu của tôi được an toàn.

Nếu bất cứ ai biết cách lấy nó để yêu cầu cụm mật khẩu nếu ổ flash USB bị thiếu, điều đó sẽ hữu ích như một dự phòng. Hy vọng điều này sẽ giúp, bất kỳ bổ sung hoặc chỉnh sửa sẽ được chào đón nhiều hơn!


3
Nếu bạn không chắc chắn làm thế nào để nhận được lời nhắc mật khẩu, bạn có thể sử dụng phân vùng có thể khởi động trong ổ đĩa flash để tải thông qua một initramfs thay thế tìm keyfile và khởi động mặc định trên đĩa cứng tải một initramfs thông thường nhắc nhở Một mật khẩu.
Phục hồi Monica - -

1
@ 3pic Tôi không chắc chắn 100% vì tôi đã làm điều này vài tháng trước. Nhưng Ubuntu khởi động vào một hệ thống tệp ảo. keyscript=/lib/cryptsetup/scripts/passdevthêm passdevkịch bản cho nó. Và sau đó update-initramfs -uvxây dựng lại hệ thống lưu trữ tập tin.
VarunAgw

1
@RandyOrrison này thực sự là tuyệt vời. Nó hoạt động. Nhưng ... sau khi vượt qua initram, nó sẽ ngồi trong một hoặc hai phút với A start job is running for dev-sda8:-keyfile.device (1min 18s...)... Nó trôi qua, mọi thứ được gắn kết, nhưng nó bị treo trong một thời gian. Nhật ký cho biết "Đã hết thời gian chờ thiết bị dev-sda8: -sda7keyfile.device; Sự phụ thuộc không thành công cho Thiết lập tiền điện tử cho sda7crypt." Tất nhiên, nó đã được gắn bởi initram, nhưng .... Tôi đang làm gì sai?
deitch

1
Vì một số lý do, nó dường như không thích / làm việc với systemd; nó chỉ đơn giản là sẽ bỏ qua các keyscriptlĩnh vực hoàn toàn.
Etienne Bruines

1
Trong Ubuntu 17.10+, công cụ update-initramfs sẽ không tạo ra hình ảnh initramfs có khả năng khởi động âm lượng luks nếu hệ thống tệp gốc của bạn nằm trên ổ đĩa luks và có tệp chính. Bạn có thể làm cho nó hoạt động bằng cách để "none" làm giá trị keyfile và đặt các tùy chọn để có keycript = / etc / my-keycript, trong đó / etc / my-keycript là tập lệnh shell in ra khóa.
Macil

6

Các hướng dẫn này từ howtoforge.com đã giúp tôi khởi động và chạy với khối lượng giải mã tự động.

Cách làm: Tự động mở khóa ổ đĩa được mã hóa LUKS bằng một tệp khóa

Bước 1: Tạo một keyfile ngẫu nhiên

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

Bước 2: Tạo keyfile chỉ đọc để root

sudo chmod 0400 /root/keyfile

Điều đó sẽ làm cho keyfile chỉ có thể đọc được bằng root. Nếu ai đó có quyền truy cập vào keyfile này, thì dù sao bạn cũng gặp vấn đề lớn hơn trên máy tính của mình.

Hoặc sử dụng keyfile mong muốn của bạn để root: root và di chuyển nó vào thư mục / root

Bước 3: Thêm keyfile vào LUKS

Các thiết bị hỗ trợ LUKS / dm_crypt có thể chứa tối đa 10 khóa / mật khẩu khác nhau. Vì vậy, bên cạnh việc có mật khẩu đã được thiết lập, chúng tôi sẽ thêm keyfile này làm phương thức ủy quyền bổ sung.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX tất nhiên là thiết bị LUKS của bạn.

Trước tiên, bạn sẽ được nhắc nhập mật khẩu (hiện có) để mở khóa ổ đĩa. Nếu mọi thứ hoạt động tốt, bạn sẽ nhận được một đầu ra như thế này:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Bước 4: Tạo một trình ánh xạ

Các thiết bị LUKS cần tạo một trình ánh xạ mà sau đó có thể được tham chiếu trong fstab. Mở / etc / crypttab

sudo nano /etc/crypttab

và thêm vào đó một dòng như thế này:

sdX_crypt      /dev/sdX  /root/keyfile  luks

hoặc bạn có thể sử dụng UUID của thiết bị:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt là tên của trình ánh xạ đang được tạo. Bạn có thể sử dụng ở đây bất kỳ tên nào, ví dụ "âm nhạc" hoặc "phim" hoặc "sfdsfawe" ....

Lưu và đóng tệp bằng cách phát hành ctrl-x, nhập, nhập. Ctrl-x đóng nano nhưng trước tiên, nó yêu cầu lưu tệp [yes = enter] và tên sẽ là [cùng tên = enter].

Những gì chúng tôi đã làm ở đó thực sự là nói rằng / root / keyfile sẽ được sử dụng thay vì nhập mật khẩu để mở khóa ổ đĩa.

Bước 5: Gắn thiết bị vào fstab

Bây giờ, chúng ta có một thiết bị đã được mở khóa (tốt, chưa, nhưng khi hệ thống đang được khởi động) và chúng ta chỉ cần gắn nó ngay bây giờ. Mở / etc / fstab:

sudo nano /etc/fstab

và thêm một mục mới như:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

Đảm bảo rằng bạn có tên trình ánh xạ chính xác mà bạn đã thêm trong bước 4. Ngoài ra, hãy đảm bảo rằng điểm gắn kết / thư mục tồn tại. Sau khi đã thêm nó, lưu lại tệp và đóng nó (ctrl-x, enter, enter).

Bước 6: Khởi động lại hoặc làm lại

Đó là nó. Bây giờ bạn có thể khởi động lại và các thiết bị bổ sung sẽ được tự động mở khóa và gắn kết. Bạn cũng có thể kiểm tra nó bằng cách đếm lại tất cả các thiết bị:

sudo mount -a

1
bạn quên cập nhật initramfs, cần 100%
3pic

6

Cải thiện câu trả lời của Randy Orrison , đây là một đoạn script nhỏ do tôi tạo ra, điều này sẽ khiến hệ thống dự phòng khi hỏi người dùng mật khẩu nếu không tìm thấy keyfile.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

Lưu nó và thay thế keyscript=/lib/cryptsetup/scripts/passdevtrong /etc/crypttabvới đường dẫn đến tập tin này và chạy sudo update-initramfs -uvvà bạn đã làm xong.


Tôi đoán giải pháp của bạn không hoạt động cho ổ đĩa USB cho nhiều hơn một keyfile. Ý tôi là nếu tôi có nhiều phân vùng được mã hóa (home, exchange, root). Nó cho biết rằng nó không ngắt trình điều khiển USB sau lệnh cat. Bạn có bất cứ ý tưởng làm thế nào để sửa chữa nó?
Khamidulla

Điều này đang làm việc cho tôi (Xubfox 17.10) nhưng tôi đã phải chỉnh sửa grub và xóa "giật gân". Ngoài ra, tôi phải lưu tệp ở một vị trí thích hợp (/ lib / cryptsetup / scripts / Unlock_custom) và chmod nó 755. Không chắc chắn nếu giật gân hoặc sao chép ở vị trí cụ thể làm cho nó hoạt động với tôi, nhưng nó không hoạt động trước đó. Dù sao, nó hoạt động nhưng khi khởi động, sau khi Startet AppArmor initialization.tôi nhận được: Một công việc bắt đầu đang chạy cho dev-đĩa keyfile.device (1m 30s). Sau những năm 90 X bắt đầu và tôi có thể sử dụng hệ thống của mình ... không biết làm thế nào để khắc phục công việc bắt đầu này ...
firepol

1

@deitch Tôi đã có cùng một thiết lập như @Randy Orrison và gặp vấn đề tương tự như bạn và hóa ra đó là một lỗi của systemd cố gắng gắn kết lại / filesystem khi nó tìm thấy mục tương ứng trong / etc / crypttab.

Để giải quyết vấn đề này, tôi chỉ xóa mục nhập cho sda5_crypt khỏi / etc / crypttab sau khi lệnh update-initramfs -uv được chạy.

Reeboot và mọi thứ hoạt động tốt như dự định.

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.