암호화된 UEFI-Booting Arch 설치를 설정했습니다 1 . 시작할 때 문구를 묻는 메시지가 표시되지 않는 이유는 무엇입니까?
참고: 이름을 변경하는 경우암호화폐예를 들어 `/etc/crypttab`에서암호화된 부팅시작할 때 비밀번호를 입력해야 하는데 아무거나 입력하면 쉽게 로그인할 수 있습니다.
LSBLK
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 100M 0 part /boot/efi
├─sda2 8:2 0 250M 0 part /boot
└─sda3 8:3 0 118.9G 0 part
└─crypto 254:0 0 118.9G 0 crypt
├─Arch-swap 254:1 0 512M 0 lvm [SWAP]
└─Arch-root 254:2 0 118.4G 0 lvm /
dmesg | grep -i "오류\|경고\|실패"
[ 1.052685] acpi PNP0A08:00: _OSC failed (AE_SUPPORT); disabling ASPM
[ 2.340204] RAS: Correctable Errors collector initialized.
[ 9.002142] ACPI Warning: SystemIO range 0x0000000000000428-0x000000000000042F conflicts with OpRegion 0x0000000000000400-0x000000000000047F (\_SB.PCI0.LPC.PMIO) (20181213/utaddress-213)
[ 9.004065] ACPI Warning: SystemIO range 0x0000000000000540-0x000000000000054F conflicts with OpRegion 0x0000000000000500-0x000000000000057F (\_SB.PCI0.LPC.LPIO) (20181213/utaddress-213)
[ 9.004107] ACPI Warning: SystemIO range 0x0000000000000530-0x000000000000053F conflicts with OpRegion 0x0000000000000500-0x000000000000057F (\_SB.PCI0.LPC.LPIO) (20181213/utaddress-213)
[ 9.004185] ACPI Warning: SystemIO range 0x0000000000000500-0x000000000000052F conflicts with OpRegion 0x0000000000000500-0x000000000000057F (\_SB.PCI0.LPC.LPIO) (20181213/utaddress-213)
[ 9.455380] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 9.455385] cfg80211: failed to load regulatory.db
[ 175.019957] random: 5 urandom warning(s) missed due to ratelimiting
df-h
Filesystem Size Used Avail Use% Mounted on
dev 1.9G 0 1.9G 0% /dev
run 1.9G 756K 1.9G 1% /run
/dev/mapper/Arch-root 117G 1.8G 109G 2% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 1.9G 0 1.9G 0% /tmp
/dev/sda2 243M 76M 155M 33% /boot
/dev/sda1 99M 125K 99M 1% /boot/efi
tmpfs 383M 0 383M 0% /run/user/0
cryptsetup luksDump /dev/sda3
LUKS header information
Version: 2
Epoch: 4
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 16459d28-76a6-40c4-b96d-090cf2f411fc
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 608808
Threads: 4
Salt: 10 23 09 25 cd 08 38 47 e4 56 27 2f e9 ab d6 96
61 ed 32 9a 6a f7 36 a6 12 d3 1e 8b 02 4b cf f3
AF stripes: 4000
AF hash: sha512
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
1: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 605120
Threads: 4
Salt: 2e df 79 1d 5b c8 2d d6 89 c3 d0 7c a7 47 a7 e1
d4 63 4e 42 38 51 0d 12 4d a8 cd dd 09 d0 cb 1b
AF stripes: 4000
AF hash: sha256
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha512
Iterations: 125307
Salt: 11 8b 07 aa 78 49 32 4e bf a7 8b b0 8a 29 89 d6
ff 5d 90 3f a4 68 ee f6 c5 71 7a 44 10 7e 0d 1f
Digest: d4 42 ae 00 6c 03 d1 ab b9 37 62 4a ce be 93 dd 20 d4 71 6e 03 7b 92 40 b4 8d ff 54 3c 97 72 21
3b 86 fe 5e ec 18 79 2f 1f 3c 19 d8 20 94 44 a1 06 b7 44 30 a5 75 4d 5b f8 a1 cc 03 c6 a9 98 0f
/etc/default/grub
# GRUB boot loader configuration
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda3:crypto resume=/dev/mapper/Arch-swap"
# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
# Uncomment to enable booting from LUKS encrypted devices
GRUB_ENABLE_CRYPTODISK=y
# Uncomment to enable Hidden Menu, and optionally hide the timeout count
#GRUB_HIDDEN_TIMEOUT=5
#GRUB_HIDDEN_TIMEOUT_QUIET=true
# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=auto
# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep
# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true
# Uncomment and set to the desired menu colors. Used by normal and wallpaper
# modes only. Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/path/to/wallpaper"
#GRUB_THEME="/path/to/gfxtheme"
# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
# Uncomment to make GRUB remember the last selection. This requires to
# set 'GRUB_DEFAULT=saved' above.
#GRUB_SAVEDEFAULT="true"
/boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod lvm
insmod ext2
set root='lvmid/YPm8Dv-HYiA-CyfU-yV0y-aVH0-n917-W3uEwd/GyClul-dXdo-8gyf-j0N4-RwTG-wFVt-3KH4fO'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='lvmid/YPm8Dv-HYiA-CyfU-yV0y-aVH0-n917-W3uEwd/GyClul-dXdo-8gyf-j0N4-RwTG-wFVt-3KH4fO' 46268152-ba54-4ecf-ad04-b381c8da1c2b
else
search --no-floppy --fs-uuid --set=root 46268152-ba54-4ecf-ad04-b381c8da1c2b
fi
font="/usr/share/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_input console
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-46268152-ba54-4ecf-ad04-b381c8da1c2b' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 b558ecc3-2d22-481b-91eb-26cdc2e86cf0
else
search --no-floppy --fs-uuid --set=root b558ecc3-2d22-481b-91eb-26cdc2e86cf0
fi
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=/dev/mapper/Arch-root rw cryptdevice=/dev/sda3:crypto resume=/dev/mapper/Arch-swap quiet
echo 'Loading initial ramdisk ...'
initrd /initramfs-linux.img
}
submenu 'Advanced options for Arch Linux' $menuentry_id_option 'gnulinux-advanced-46268152-ba54-4ecf-ad04-b381c8da1c2b' {
menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-46268152-ba54-4ecf-ad04-b381c8da1c2b' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 b558ecc3-2d22-481b-91eb-26cdc2e86cf0
else
search --no-floppy --fs-uuid --set=root b558ecc3-2d22-481b-91eb-26cdc2e86cf0
fi
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=/dev/mapper/Arch-root rw cryptdevice=/dev/sda3:crypto resume=/dev/mapper/Arch-swap quiet
echo 'Loading initial ramdisk ...'
initrd /initramfs-linux.img
}
menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-46268152-ba54-4ecf-ad04-b381c8da1c2b' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt2' --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 b558ecc3-2d22-481b-91eb-26cdc2e86cf0
else
search --no-floppy --fs-uuid --set=root b558ecc3-2d22-481b-91eb-26cdc2e86cf0
fi
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=/dev/mapper/Arch-root rw cryptdevice=/dev/sda3:crypto resume=/dev/mapper/Arch-swap quiet
echo 'Loading initial ramdisk ...'
initrd /initramfs-linux-fallback.img
}
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
ls -l /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 Mar 29 18:13 16459d28-76a6-40c4-b96d-090cf2f411fc -> ../../sda3
lrwxrwxrwx 1 root root 10 Mar 29 18:13 46268152-ba54-4ecf-ad04-b381c8da1c2b -> ../../dm-2
lrwxrwxrwx 1 root root 10 Mar 29 18:13 4ef43d75-a4c7-4ef0-84d9-66a968578ff1 -> ../../dm-1
lrwxrwxrwx 1 root root 10 Mar 29 18:13 7AE8-13D9 -> ../../sda1
lrwxrwxrwx 1 root root 9 Mar 29 18:44 9671-F6FA -> ../../sdb
lrwxrwxrwx 1 root root 10 Mar 29 18:13 b558ecc3-2d22-481b-91eb-26cdc2e86cf0 -> ../../sda2
/etc/fstab
# /dev/mapper/Arch-root
UUID=46268152-ba54-4ecf-ad04-b381c8da1c2b / ext4 rw,relatime 0 1
# /dev/sda2
UUID=b558ecc3-2d22-481b-91eb-26cdc2e86cf0 /boot ext2 rw,relatime,block_validity,barrier,user_xattr,acl 0 2
# /dev/sda1
UUID=7AE8-13D9 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2
# /dev/mapper/Arch-swap
UUID=4ef43d75-a4c7-4ef0-84d9-66a968578ff1 none swap defaults 0 0
/etc/crypttab
# Configuration for encrypted block devices.
# See crypttab(5) for details.
# NOTE: Do not list your root (/) partition here, it must be set up
# beforehand by the initramfs (/etc/mkinitcpio.conf).
# <name> <device> <password> <options>
# home UUID=b8ad5c18-f445-495d-9095-c9ec4f9d2f37 /etc/mypassword1
# data1 /dev/sda3 /etc/mypassword2
# data2 /dev/sda5 /etc/cryptfs.key
# swap /dev/sdx4 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
# vol /dev/sdb7 none
crypto UUID=b558ecc3-2d22-481b-91eb-26cdc2e86cf0 none luks,timeout=180
/etc/mkinitcpio.conf
# Configuration for encrypted block devices.
# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run. Advanced users may wish to specify all system modules
# in this array. For instance:
# MODULES=(piix ide_disk reiserfs)
MODULES=()
# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image. This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=()
# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way. This is useful for config files.
FILES=(/crypto_keyfile.bin)
# HOOKS
# This is the most important setting in this file. The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
## This setup specifies all modules in the MODULES setting above.
## No raid, lvm2, or encrypted root is needed.
# HOOKS=(base)
#
## This setup will autodetect all modules for your system and should
## work as a sane default
# HOOKS=(base udev autodetect block filesystems)
#
## This setup will generate a 'full' image which supports most systems.
## No autodetection is done.
# HOOKS=(base udev block filesystems)
#
## This setup assembles a pata mdadm array with an encrypted root FS.
## Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
# HOOKS=(base udev block mdadm encrypt filesystems)
#
## This setup loads an lvm2 volume group on a usb device.
# HOOKS=(base udev block lvm2 filesystems)
#
## NOTE: If you have /usr on a separate partition, you MUST include the
# usr, fsck and shutdown hooks.
HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck)
# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=()
각주
1 https://gist.github.com/HardenedArray/31915e3d73a4ae45adc0efa9ba458b07
답변1
답변이 늦었지만 다른 사람에게 도움이 될 수도 있습니다.
UEFI 시스템이 있습니다. 따라서 부트로더는 /boot/efi/EFI/ArchLinux/grubx64.efi
펌웨어 등에 의해 로드 됩니다. 펌웨어는 /boot/efi
PARTUUID를 사용하여 UEFI NVRAM 부팅 변수에 저장되어 있고 를 통해 찾을 수 있는 파티션(EFI 시스템 파티션 또는 줄여서 ESP라고도 함)을 찾습니다 efibootmgr -v
. ESP는 암호화되지 않아야 하며 그렇지 않으면 펌웨어가 부트로더를 읽을 수 없습니다.
부트로더가 시작되면 자체 구성 파일을 읽습니다. 구성 파일의 위치는 배포판마다 다르지만 일반적인 시나리오는 grub.cfg
ESP의 최소 파일을 grubx64.efi
이 파일과 동일한 디렉터리에 배치하는 것입니다. 이 미니에는 grub.cfg
"실제"를 찾아 읽는 데 필요한 줄만 포함됩니다 .grub.cfg
/boot/grub/grub.cfg
(대안은 실제 위치를 설치 grub.cfg
에 포함시키는 것입니다...그러나 이렇게 하면 서명이 무효화되므로 보안 부팅을 사용하는 시스템에서는 작동하지 않습니다.)grubx64.efi
grubx64.efi
귀하의 경우 /boot/efi/EFI/ArchLinux/grub.cfg
다음과 같이 보일 수 있습니다.
search.fs_uuid b558ecc3-2d22-481b-91eb-26cdc2e86cf0 root
set prefix=($root)'/grub'
configfile $prefix/grub.cfg
root
여기 를 참고해주세요Linux 루트 파일 시스템을 참조하지 않습니다.대신 GRUB 구성 파일이 포함된 파일 시스템, 즉 /boot
파일 시스템의 루트 디렉터리입니다. 이것이 첫 번째 줄에서 파티션의 UUID를 언급하는 이유입니다 /dev/sda2
.
귀하의 경우, /dev/sda2
이는 암호화되지 않은 config 입니다 /boot
. mini-config는 GRUB에게 UUID로 이를 찾고 실제 GRUB 구성 파일을 읽도록 지시합니다. 이는 <root of /boot filesystem>/grub/grub.cfg
운영 체제가 실행되고 마운트될 때 친숙해질 것입니다. 그러나 시작 시 GRUB은 한 번에 하나의 파일 시스템에만 액세스할 수 있습니다./boot/grub/grub.cfg
/boot
실제로 그래픽 모드를 사용하고 grub.cfg
Linux 루트 파일 시스템에서 로드하기 위해 이 비트가 포함되어 있습니다./usr/share/grub/unicode.pf2
set root='lvmid/YPm8Dv-HYiA-CyfU-yV0y-aVH0-n917-W3uEwd/GyClul-dXdo-8gyf-j0N4-RwTG-wFVt-3KH4fO'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='lvmid/YPm8Dv-HYiA-CyfU-yV0y-aVH0-n917-W3uEwd/GyClul-dXdo-8gyf-j0N4-RwTG-wFVt-3KH4fO' 46268152-ba54-4ecf-ad04-b381c8da1c2b
else
search --no-floppy --fs-uuid --set=root 46268152-ba54-4ecf-ad04-b381c8da1c2b
fi
font="/usr/share/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_input console
terminal_output gfxterm
GRUB는 이미 암호화된 루트 파일 시스템에 액세스할 수 있지만 지금까지 암호화된 LUKS 볼륨을 찾으라는 지시를 받지 않았기 때문에 현재 암호화된 루트 파일 시스템에서는 작동하지 않습니다. GRUB는 펌웨어에서 제공하는 디스플레이 모드와 글꼴을 사용하게 되지만 을(를) 로드할 수 없다는 메시지를 표시할 수 있습니다 /usr/share/grub/unicode.pf2
.
최신 GRUB는 LUKS 암호화된 파일 시스템에서 파일을 읽을 수 있지만 먼저 명령을 확인해야 합니다 cryptomount -u 16459d28-76a6-40c4-b96d-090cf2f411fc
. 이렇게 하면 GRUB에서 LUKS 비밀번호를 묻는 메시지가 표시되고 암호화된 볼륨을 GRUB에 액세스할 수 있게 됩니다(GRUB가 파일 시스템 및 LVM을 검색할 수 있음). 암호화된 볼륨 내부).
비밀 정보가 포함되어 있지 않기 때문에 unicode.pf2
복사하여 설정하는 것이 더 쉬울 수 있으므로 루트 파일 시스템에 액세스하려고 시도하는 대신 거기에서 글꼴을 로드하는 명령을 추가하는 방법을 알게 될 것입니다./boot/grub/
GRUB_FONT=/boot/grub/unicode.pf2
/etc/default/grub
grub-mkconfig
현재 구성에 따라 GRUB가 LUKS 암호화를 이해할 필요가 없어집니다. 즉, /boot
암호화되지 않은 파일 시스템에서 커널과 initramfs를 로드하고 매개변수 세트를 커널에 전달하기만 하면 됩니다. 그러면 initramfs 파일에는 암호화 비밀번호를 요청하고 Linux에서 사용할 수 있도록 암호화 잠금을 해제하는 스크립트가 포함됩니다.
현재 커널 매개변수는 다음에서 볼 수 있습니다 grub.cfg
.
linux /vmlinuz-linux root=/dev/mapper/Arch-root rw cryptdevice=/dev/sda3:crypto resume=/dev/mapper/Arch-swap quiet
이는 다음 줄에 의해 결정됩니다 /etc/default/grub
.
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda3:crypto resume=/dev/mapper/Arch-swap"
이 방법은 디스크 장치의 순서가 변경되지 않는 한 작동하지만 부팅 시 실수로 USB 스틱을 삽입하는 등의 상황에 대해 더 강력하기 때문에 UUID를 사용하는 것이 현재 권장되는 방법입니다. 따라서 GRUB_CMDLINE_LINUX
해당 줄을 다음과 같이 변경 해야 합니다 .
GRUB_CMDLINE_LINUX="cryptdevice=UUID:16459d28-76a6-40c4-b96d-090cf2f411fc:crypto resume=/dev/mapper/Arch-swap"
여기서 UUID는 cryptsetup luksDump
암호화된 볼륨 내 파일 시스템의 UUID가 아니라 표시된 UUID입니다. 암호화가 처음 잠금 해제될 때까지 파일 시스템 UUID를 사용할 수 없기 때문입니다.
(암호화를 사용하는 경우에도 마찬가지입니다. /boot
GRUB가 cryptsetup 잠금 해제 상태를 커널에 전달할 수 없기 때문입니다. GRUB가 한 번 잠금 해제된 경우에도 커널은 암호화를 다시 잠금 해제해야 합니다. GRUB 및 GRUB에 대해 암호화 비밀번호를 한 번 입력할 필요가 없도록 하려면 다시 initramfs의 경우 initramfs에 저장된 키 파일을 사용하여 루트 파일 시스템의 잠금을 해제할 수 있습니다. 하지만 그렇게 하면 initramfs절대적으로하지루트 파일 시스템 키 파일이 포함된 initramfs 파일에 액세스하면 루트 파일 시스템에 대한 액세스가 해제되므로 암호화되지 않은 파티션에 저장됩니다. )
이 옵션은 본질적으로 루트 파일 시스템이 포함된 LUKS 볼륨의 잠금을 해제하는 initramfs의 행 cryptdevice=
과 동일합니다 . 이것이 유일한 LUKS 볼륨의 잠금을 해제해야 한다면 기술적으로는 전혀 필요하지 않을 것입니다. 그러나 완전성을 위해 다음 행을 사용 하십시오. 해야 한다:/etc/crypttab
/etc/crypttab
/etc/crypttab
crypto UUID=16459d28-76a6-40c4-b96d-090cf2f411fc none luks,timeout=180
여기의 UUID는 명령으로 표시되는 UUID이기도 합니다 cryptsetup luksDump
. 목표 /etc/crypttab
는 각 암호화된 볼륨이 잠금 해제된 것으로 표시되는 방식과 잠금 해제가 발생하는 방식을 결정하는 것입니다. 이 경우 이 줄은 볼륨을 나타냅니다 /dev/sda3
(볼륨의 UUID로 식별됩니다. 이는 성공적으로 잠금 해제되기 전에 내용으로 식별하는 데 필요한 모든 것입니다. 파일 시스템의 UUID 또는 볼륨에 저장된 LVM은 사용할 수 없습니다) 이 암호화된 볼륨) LUKS 볼륨이고 암호화 비밀번호의 자동 소스가 없으므로 비밀번호 프롬프트가 표시되어야 합니다. 이는 encrypt
initramfs 파일의 후크 스크립트를 통해 수행됩니다.
비밀번호를 입력하면 initramfs는 암호화된 볼륨에서 LVM 볼륨 그룹을 자동으로 감지하고 Arch
발견되는 즉시 VG를 활성화합니다. 이는 모두 lvm2
initramfs의 후크 스크립트에 의해 수행됩니다. 그 후에 에 액세스할 수 있게 /dev/mapper/Arch-root
되고 /dev/mapper/Arch-swap
initramfs는 스왑 활성화를 진행하고(선택적으로 최대 절전 모드 이미지가 있는지 확인하고 그렇다면 복원) 루트 파일 시스템을 마운트할 수 있습니다.
현재 /etc/mkinitcpio.conf
다음 줄이 있습니다.
FILES=(/crypto_keyfile.bin)
이는 암호화와 함께 사용되어 /boot
시스템의 LUKS 볼륨을 잠금 해제하는 키 파일을 식별할 수 있습니다. 즉, crypto 를 사용할 때 GRUB의 암호화를 /boot
수동으로 잠금 해제 /boot
하면 GRUB에서 initramfs가 루트 파일 시스템(또는 실제로는 암호화된 볼륨)을 잠금 해제할 수 있게 해주는 키 파일이 포함된 initramfs 파일을 로드합니다. 추가 비밀번호를 입력하세요.그러나 이는 또한 initramfs 파일의 보안을 시스템 보안에 매우 중요하게 만듭니다..
암호화되지 않은 경우 파일이 귀하 또는 다른 곳 /boot
에서 참조되지 않기 때문에 파일의 목적을 볼 수 없습니다. /etc/crypttab
이 파일이 존재하고 비밀번호를 입력하지 않고 LUKS 볼륨을 잠금 해제하기 위한 유효한 키를 포함하는 경우 암호화되지 않은 initramfs 파일에서 사용할 수 있습니다.따라서 비밀번호를 몰라도 디스크 암호화를 잠금 해제할 수 있습니다.공격자가 initramfs 파일을 검사하고 crypto_keyfile.bin
그 내용을 알아냅니다.
답변2
실제로 이 작업을 수행하기 위해 crypttab이 필요하지 않습니다.
내가 본 첫 번째 문제는 GRUB 구성을 수정해야 한다는 것입니다. /dev/sdX와 같은 하드 경로를 사용하는 대신 UUID를 사용하고 매핑된 암호화 장치의 루트 경로를 지정해야 합니다.
cryptdevice=UUID=device-UUID:root root=/dev/mapper/root
이것아치 문서여기에 게시할 수 있는 것보다 더 많은 세부 정보를 제공하는 신뢰할 수 있는 출처가 있지만 더 자세한 정보가 필요하면 직접 문의하시기 바랍니다.
답변3
올바른 파일을 생성해야 합니다 /etc/crypttab
. 또한 마운트 지점을 에 추가하는 것을 잊지 마세요 /etc/fstab
.
crypttab
다음과 같은 내용이 포함되어야 합니다.
targetname physicalpartition none
예를 들어:
targetData /dev/sdb3 none
대상에 대해 생성한 이름은 어디에 targetData
있으며 로 대체됩니다 /dev/mapper
.