Từ một Ubuntu 16.04 hoạt động, tôi đã thành công trong việc mã hóa phân vùng gốc sau khi cài đặt, với phân vùng gốc chứa mọi thứ ngoại trừ / boot. Tôi đặt / khởi động trên một USB có thể tháo rời riêng biệt. Đáng chú ý là tôi đã làm điều này trước khi nâng cấp lên Ubuntu 18 và bản nâng cấp hoạt động tốt trên phiên bản đĩa được mã hóa.
Việc mã hóa không được thực hiện "tại chỗ", điều này rất tốt với tôi vì dù sao tôi cũng không muốn ghi đè lên phiên bản làm việc cho đến khi thiết lập mới hoạt động.
Thực hiện đúng quy trình cực kỳ đơn giản và nhanh chóng. (Mặc dù việc tìm ra quy trình đúng rất tốn thời gian vì tôi đã làm theo một số khách hàng tiềm năng sai.)
ĐỀ CƯƠNG
- Tạo một đĩa USB linux trực tiếp - thật tiện lợi khi kích hoạt tính bền bỉ. Khởi động trên đĩa USB trực tiếp đó.
- Tạo một nhóm khối lượng mã hóa luks trên một phân vùng trống. (Trong trường hợp của tôi, nó nằm trên cùng một đĩa với linux gốc, nhưng nó có thể là một đĩa khác.) Tạo / (root) và trao đổi khối lượng logic trên phân vùng được mã hóa đó. Chúng sẽ hoạt động như các phân vùng ảo khi có liên quan đến linux đã sao chép.
- Sao chép các tập tin từ root cũ sang root mới.
- Thiết lập và phân vùng một USB khác để hoạt động như một đĩa khởi động rời.
- Thiết lập một số tệp trong thư mục gốc mới, thực hiện một số phép thuật và chroot vào thư mục gốc mới và sau đó cài đặt grub vào đĩa khởi động từ môi trường gốc mới của chroot'd.
CHI TIẾT
1 - Khởi động với đĩa USB linux trực tiếp - thật tiện lợi khi bật tính năng bền bỉ.
Đã cài đặt Ubuntu 16 trên usb với unetbootin. GUI cho phép "kiên trì" được chỉ định, nhưng một bước khác cũng được yêu cầu để duy trì hoạt động bền bỉ - sửa đổi /boot/grub/grub.cfg
để thêm --- persistent
như sau:
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
Khởi động bằng USB trực tiếp
2- Tạo một nhóm âm lượng được mã hóa luks trên một phân vùng trống. Tạo / (root) và trao đổi khối lượng logic trên phân vùng được mã hóa đó.
Giả sử phân vùng không sử dụng được mã hóa là /dev/nvme0n1p4
.
Tùy chọn , nếu bạn có dữ liệu cũ trên phân vùng bạn muốn ẩn trước khi mã hóa và định dạng, bạn có thể xóa ngẫu nhiên phân vùng. Xem thảo luận tại đây .
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
Thiết lập mã hóa.
cryptsetup -y -v luksFormat /dev/nvme0n1p4
Bạn sẽ được yêu cầu đặt mật khẩu.
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
Bạn sẽ được yêu cầu nhập mật khẩu. Lưu ý rằng đó crypt1
là một tên người dùng tùy ý quyết định. Bây giờ tạo khối lượng và định dạng.
pvcreate /dev/mapper/crypt1
vgcreate crypt1-vg /dev/mapper/crypt1
lvcreate -L 8G crypt1-vg -n swap
mkswap /dev/crypt1-vg/swap
lvcreate -l 100%FREE crypt1-vg -n root
mkfs.ext4 /dev/crypt1-vg/root
Sử dụng các tiện ích này để xem khối lượng và hiểu thứ bậc.
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
3- Sao chép tập tin từ root cũ sang root mới
mkdir /tmp/old-root
mount /dev/ubuntu-vg/root /tmp/old-root/
mkdir /tmp/new-root
mount /dev/crypt1-vg/root /tmp/new-root/
cp -a /tmp/old-root/. /tmp/new-root/
umount /tmp/old-root
umount /tmp/new-root
cp -a ...
bản sao trong chế độ lưu trữ, bảo quản tất cả các chế độ tập tin và cờ.
4 - Thiết lập và phân vùng một USB khác để hoạt động như một đĩa khởi động rời.
Tôi đã sử dụng gparted cho việc này. Thiết lập hai phân vùng. Phân vùng đầu tiên là vfat
, thứ hai ext2
. Mỗi cái là 512 MB, bạn có thể lấy đi với ít hơn. Giả sử thiết bị /dev/sdf
.
# The first partition: (will be /dev/sdf1)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: fat32
Label: (leave)
# The second partition: (will be /dev/sdf2)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: ext4
Label: (leave)
5- Thiết lập một số tệp trong thư mục gốc mới, thực hiện một số phép thuật và chroot vào thư mục gốc mới và sau đó cài đặt grub vào đĩa khởi động từ môi trường gốc mới của chroot'd.
Tìm một số UUID để sử dụng sau. Lưu ý các đầu ra từ các lệnh sau:
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
Gắn kết phân vùng gốc và phân vùng khởi động
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
Cài đặt tập tin /mnt/etc/fstab
/dev/mapper/crypt1--vg-root / ext4 errors=remount-ro 0 1
/dev/mapper/crypt1--vg-swap none swap sw 0 0
UUID=[uuid of /dev/sdf2] /boot ext2 defaults 0 2
UUID=[uuid of /dev/sdf1] /boot/efi vfat umask=0077 0 1
trong đó "[uuid of ...]" chỉ là kết hợp chữ-số-gạch nối.
Tạo tập tin /mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
Một số phép thuật cần thiết để vào môi trường thư mục gốc:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
Bây giờ hãy thiết lập đĩa USB khởi động với grub
:
apt install --reinstall grub-efi-amd64
grub-install --efi-directory=/boot/efi --boot-directory=/boot --removable
update-initramfs -k all -c
update-grub
Bây giờ bạn sẽ có thể khởi động lại và khởi động bằng đĩa khởi động USB mới được tạo.
Xử lý sự cố-
(a) Mạng phải được kết nối cho apt install --reinstall grub-efi-amd64
lệnh. Nếu mạng được kết nối nhưng DNS bị lỗi, hãy thử
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b) Trước khi gọi initramfs
, vmlinuz...
tệp hiện tại được sử dụng trong linux gốc phải có trong thư mục gốc mới. Nếu không, hãy tìm nó và đặt nó ở đó.
(c) Các grub-install
lệnh sẽ bằng cách tìm kiếm mặc định tất cả các đĩa linux khác, nó có thể tìm thấy ngay cả khi họ không mount
ed, và đặt chúng trong menu boot trên USB boot mới. Thông thường điều này là không mong muốn, vì vậy có thể tránh được bằng cách thêm dòng này vào /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
GHI CHÚ:
Có thể thêm tệp văn bản có khóa mã hóa vào USB khởi động rời.