စနစ်စတင်ချိန်၌ LUKS ကွန်တိန်နာကို ကုဒ်ဝှက်ခြင်း။

အားလုံးပဲ ကောင်းသောနေ့ညပါ! ဤပို့စ်သည် LUKS data encryption ကိုအသုံးပြုပြီး Linux (Debian၊ Ubuntu) အောက်တွင် disks များကို decrypt လုပ်လိုသူများအတွက် အသုံးဝင်မည်ဖြစ်ပါသည်။ root partition ကို decrypt လုပ်ခြင်းအဆင့်များ. ပြီးတော့ အင်တာနက်မှာ ဒီလိုအချက်အလက်တွေ ရှာမတွေ့ဘူး။

မကြာသေးမီက၊ စင်ပေါ်ရှိ disks အရေအတွက် တိုးလာသည်နှင့်အမျှ၊ /etc/crypttab မှတဆင့် လူသိပိုများသော နည်းလမ်းကို အသုံးပြု၍ disks များကို ကုဒ်ဝှက်ခြင်းဆိုင်ရာ ပြဿနာကို ကြုံတွေ့ခဲ့ရသည်။ ကိုယ်တိုင်ကိုယ်ကျ၊ ကျွန်ုပ်သည် ဤနည်းလမ်းကိုအသုံးပြုရာတွင် ပြဿနာအချို့ကို မီးမောင်းထိုးပြသည်၊ ဆိုလိုသည်မှာ ဖိုင်ကိုဖတ်နေခြင်းဖြစ်သည်။ root partition ကို loading (mount) ပြီးမှသာအထူးသဖြင့်၊ ၎င်းတို့ကို *_crypt စက်ပစ္စည်းပေါ်ရှိ အခန်းကန့်များမှ တည်ဆောက်ထားလျှင်၊ သို့မဟုတ် အပိုင်းပိုင်းများမှ တည်ဆောက်ထားသော mdadm စီးနင်းမှုများကိုလည်း ထိခိုက်စေပါသည်။ LUKS ကွန်တိန်နာများတွင် ပိုင်းခြားသုံးနိုင်သည်ကို ကျွန်ုပ်တို့အားလုံးသိကြသည်၊ မဟုတ်လား။ arrays မရှိသေးသော်လည်း၊ အခြားဝန်ဆောင်မှုများ၏အစောပိုင်းစတင်ခြင်း၏ပြဿနာလည်းဖြစ်သည်။ သုံးစွဲဖို့ ကျွန်ုပ်သည် တစ်ခုခု လိုအပ်နေပြီ (ကျွန်ုပ်သည် အစုလိုက်အပြုံလိုက် Proxmox VE 5.x နှင့် iSCSI ထက် ZFS နှင့် အလုပ်လုပ်သည်)။

ZFSoverISCSI အကြောင်း အနည်းငယ်iSCSI သည် LIO မှတဆင့် ကျွန်ုပ်အတွက် လုပ်ဆောင်ပေးသည်၊ အမှန်တကယ်တွင်၊ iscsi ပစ်မှတ်သည် ZVOL စက်ပစ္စည်းများကို စတင်၍ မတွေ့သည့်အခါ၊ ဧည့်သည်စနစ်များကို စတင်ခြင်းမှ တားဆီးပေးသည့် ဖွဲ့စည်းမှုစနစ်မှ ၎င်းတို့ကို ဖယ်ရှားပါသည်။ ထို့ကြောင့်၊ json ဖိုင်အရန်ကူးခြင်းကို ပြန်ယူခြင်း သို့မဟုတ် VM တစ်ခုစီအတွက် identifiers များပါသည့် စက်များကို ကိုယ်တိုင်ထည့်ခြင်းဖြစ်စေ၊ ယင်းကဲ့သို့သော စက်များစွာရှိပြီး ဖွဲ့စည်းမှုတစ်ခုစီတွင် disk 1 ခုထက်ပိုပါက ရိုးရှင်းပါသည်။

ပြီးတော့ ကျွန်တော်စဉ်းစားရမယ့် ဒုတိယမေးခွန်းကတော့ ကုဒ်ဝှက်နည်း (ဒါက ဆောင်းပါးရဲ့ အဓိကအချက်ပါ)။ ပြီးတော့ ဒီအကြောင်းကို အောက်မှာပြောမယ်၊ ဖြတ်သွားလိုက်ပါ။

အများစုမှာ အင်တာနက်ပေါ်တွင် သော့ဖိုင်ကို အသုံးပြုသည် (၎င်းမတိုင်မီ အထိုင်တွင် ၎င်းကို အမိန့်ပေး - cryptsetup luksAddKey) သို့မဟုတ် ရှားရှားပါးပါး ချွင်းချက်အနေဖြင့် (ရုရှားဘာသာစကားအင်တာနက်တွင် အချက်အလက်အနည်းငယ်သာရှိသည်) - decrypt_derived script /lib/cryptsetup/script/ တွင် တည်ရှိသည် (ဟုတ်ပါတယ်၊ တခြားနည်းလမ်းတွေ ရှိပါတယ်၊ ဒါပေမယ့် ဆောင်းပါးရဲ့ အခြေခံကို ဖန်တီးထားတဲ့ ဒီနှစ်ခုကို ကျွန်တော် သုံးပါတယ်)။ ကျွန်ုပ်သည် ကွန်ဆိုးလ်ရှိ အပိုအမိန့်စာများမပါဘဲ ပြန်လည်စတင်ပြီးနောက်တွင် အလုံးစုံသော ကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ပါဝင်မှုကို အပြည့်အဝရရှိရန် ကြိုးပမ်းခဲ့ပြီး၊ ထို့ကြောင့် အရာအားလုံးသည် ကျွန်ုပ်အတွက် တစ်ပြိုင်နက် “ပျံတက်သွား” မည်ဖြစ်သည်။ ထို့ကြောင့် အဘယ်ကြောင့် စောင့်ရသနည်း။ —

စလိုက်ကြစို့!

Debian ကဲ့သို့ sda3_crypt crypto partition တွင် ထည့်သွင်းထားသော စနစ်တစ်ခုနှင့် သင့်စိတ်နှလုံး၏ အကြောင်းအရာအတွက် ကုဒ်ဝှက်ပြီး ဖန်တီးရန် အဆင်သင့်ဖြစ်နေသော ဒစ်တစ်ဒါဇင်ဟု ယူဆကြပါစို့။ ကျွန်ုပ်တို့တွင် sda3_crypt ကိုသော့ဖွင့်ရန် စကားဝှက်တစ်ခု (passphrase) ရှိပြီး ၎င်းသည် လုပ်ဆောင်နေသည့် (ကုဒ်ဝှက်ထားသော) စနစ်ရှိ စကားဝှက်မှ “hash” ကို ဖယ်ရှားပြီး ကျန်ဒစ်များထဲသို့ ပေါင်းထည့်မည့် ဤအခန်းကန့်မှဖြစ်သည်။ အရာအားလုံးသည် အခြေခံဖြစ်သည်၊ ကျွန်ုပ်တို့ လုပ်ဆောင်သည့် ကွန်ဆိုးလ်တွင်-

/lib/cryptsetup/scripts/decrypt_derived sda3_crypt | cryptsetup luksFormat /dev/sdX

X သည် ကျွန်ုပ်တို့၏ဒစ်များ၊ အခန်းကန့်များ စသည်တို့ဖြစ်သည်။

ကျွန်ုပ်တို့၏ စကားဝှက်မှ "hash" ဖြင့် disk များကို စာဝှက်ပြီးနောက်၊ UUID သို့မဟုတ် ID ကို ရှာဖွေရန် လိုအပ်သည် - မည်သူသည် မည်သည့်အရာနှင့် မည်သည့်အရာအတွက် အသုံးပြုသည်အပေါ် မူတည်သည်။ ကျွန်ုပ်တို့သည် /dev/disk/by-uuid နှင့် by-id တို့မှ ဒေတာများကို ယူပါသည်။

နောက်တစ်ဆင့်မှာ ကျွန်ုပ်တို့လုပ်ဆောင်ရန်လိုအပ်သည့်လုပ်ဆောင်ချက်များအတွက် ဖိုင်များနှင့် သေးငယ်သော scripts များကို ပြင်ဆင်နေပါသည်၊ ဆက်လက်လုပ်ဆောင်ကြပါစို့။

cp -p /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks/
cp -p /usr/share/initramfs-tools/scripts/local-top/cryptroot /etc/initramfs-tools/scripts/local-top/

နောက်ထပ်

touch /etc/initramfs-tools/hooks/decrypt && chmod +x /etc/initramfs-tools/hooks/decrypt

../decrypt ၏ အကြောင်းအရာများ

#!/bin/sh

cp -p /lib/cryptsetup/scripts/decrypt_derived "$DESTDIR/bin/decrypt_derived"

နောက်ထပ်

touch /etc/initramfs-tools/hooks/partcopy && chmod +x /etc/initramfs-tools/hooks/partcopy

အကြောင်းအရာများ../partcopy

#!/bin/sh

cp -p /sbin/partprobe "$DESTDIR/bin/partprobe"
cp -p /lib/x86_64-linux-gnu/libparted.so.2 "$DESTDIR/lib/x86_64-linux-gnu/libparted.so.2"
cp -p /lib/x86_64-linux-gnu/libreadline.so.7 "$DESTDIR/lib/x86_64-linux-gnu/libreadline.so.7"

နည်းနည်းပိုတယ်။

touch /etc/initramfs-tools/scripts/local-bottom/partprobe && chmod +x /etc/initramfs-tools/scripts/local-bottom/partprobe

အကြောင်းအရာ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

နောက်ဆုံး၊ အပ်ဒိတ်-initramfs မတိုင်မီ၊ သင်သည် /etc/initramfs-tools/scripts/local-top/cryptroot ဖိုင်ကို စာကြောင်း ~360 မှစတင်ကာ၊ အောက်ဖော်ပြပါ ကုဒ်အတိုအထွာများကို တည်းဖြတ်ရန် လိုအပ်ပါသည်။

မူရင်း


                # decrease $count by 1, apparently last try was successful.
                count=$(( $count - 1 ))
                
                message "cryptsetup ($crypttarget): set up successfully"
                break

ဤပုံစံသို့ ယူဆောင်လာပါ။

တည်းဖြတ်သည်။


                # decrease $count by 1, apparently last try was successful.
                count=$(( $count - 1 ))
                

                /bin/decrypt_derived $crypttarget | cryptsetup luksOpen /dev/disk/by-uuid/ *CRYPT_MAP*
                /bin/decrypt_derived $crypttarget | cryptsetup luksOpen /dev/disk/by-id/ *CRYPT_MAP*

                message "cryptsetup ($crypttarget): set up successfully"
                break

UUID သို့မဟုတ် ID ကို ဤနေရာတွင် အသုံးပြုနိုင်ကြောင်း သတိပြုပါ။ အဓိကအချက်မှာ HDD/SSD စက်ပစ္စည်းများအတွက် လိုအပ်သော ဒရိုက်ဗာများကို /etc/initramfs-tools/modules များတွင် ထည့်သွင်းထားသည်။ မည်သည့် driver ကို command ဖြင့်အသုံးပြုနေသည် ကိုသင်ရှာဖွေနိုင်သည်။ udevadm အချက်အလက် -a -n /dev/sdX | 'ကြည့်နေတယ်|DRIVER'.

ယခုကျွန်ုပ်တို့သည် ပြီးပါပြီ၊ ဖိုင်များအားလုံး နေရာယူထားပြီး၊ run ပါ။ update-initramfs -u -k အားလုံး -vလော့ဂ်အင်၊ မဖြစ်ရဘူး။ ကျွန်ုပ်တို့၏ scripts များ၏ လုပ်ဆောင်မှုအမှားများ။ ကျွန်ုပ်တို့ ပြန်လည်စတင်ကာ၊ စကားဝှက်ကိုရိုက်ထည့်ကာ ဒစ်အရေအတွက်ပေါ်မူတည်၍ အနည်းငယ်စောင့်ပါ။ ထို့နောက်၊ စနစ်စတင်မည်ဖြစ်ပြီး၊ စတင်ခြင်း၏နောက်ဆုံးအဆင့်တွင်၊ ဆိုလိုသည်မှာ root partition ကို "mounting" ပြီးနောက်၊ partprobe command ကိုလုပ်ဆောင်လိမ့်မည် - ၎င်းသည် LUKS စက်များနှင့်မည်သည့် arrays များရှိဖန်တီးထားသော partition အားလုံးကိုရှာဖွေပြီးကောက်ယူလိမ့်မည်၊ ZFS သို့မဟုတ် မည်သည့် arrays ပဲဖြစ်ဖြစ်၊ mdadm, ပြဿနာမရှိဘဲစုဝေးလိမ့်မည်! ဤအရာအားလုံး မတင်မီ ဤ disks/arrays လိုအပ်သော အဓိကဝန်ဆောင်မှုများနှင့် ဝန်ဆောင်မှုများ။

update ၁၄: ဘယ်လိုလဲ သတိထားမိ AEPဤနည်းလမ်းသည် LUKS1 အတွက်သာ အလုပ်လုပ်ပါသည်။

source: www.habr.com

မှတ်ချက် Add