సిస్టమ్ బూట్ సమయంలో LUKS కంటైనర్‌ను డీక్రిప్ట్ చేస్తోంది

అందరికీ మంచి పగలు మరియు రాత్రి! ఈ పోస్ట్ LUKS డేటా ఎన్‌క్రిప్షన్‌ని ఉపయోగించే వారికి మరియు Linux (Debian, Ubuntu)లో డిస్క్‌లను డీక్రిప్ట్ చేయాలనుకునే వారికి ఉపయోగకరంగా ఉంటుంది. రూట్ విభజనను డీక్రిప్ట్ చేసే దశలు. మరియు నేను ఇంటర్నెట్‌లో అలాంటి సమాచారాన్ని కనుగొనలేకపోయాను.

ఇటీవల, షెల్ఫ్‌లలో డిస్క్‌ల సంఖ్య పెరగడంతో, /etc/crypttab ద్వారా బాగా తెలిసిన పద్ధతి కంటే ఎక్కువ ఉపయోగించి డిస్క్‌లను డీక్రిప్ట్ చేయడంలో నేను సమస్యను ఎదుర్కొన్నాను. వ్యక్తిగతంగా, నేను ఈ పద్ధతిని ఉపయోగించడంలో కొన్ని సమస్యలను హైలైట్ చేస్తున్నాను, అవి ఫైల్ చదవబడుతోంది రూట్ విభజనను లోడ్ చేసిన తర్వాత (మౌంట్) మాత్రమే, ఇది ZFS దిగుమతులను ప్రతికూలంగా ప్రభావితం చేస్తుంది, ప్రత్యేకించి అవి *_crypt పరికరంలోని విభజనల నుండి నిర్మించబడినట్లయితే లేదా విభజనల నుండి కూడా నిర్మించబడిన mdadm దాడులు. మీరు LUKS కంటైనర్‌లలో పార్టెడ్‌ని ఉపయోగించవచ్చని మా అందరికీ తెలుసు, సరియైనదా? ఇంకా శ్రేణులు లేనప్పుడు ఇతర సేవల ప్రారంభ ప్రారంభ సమస్య కూడా, కానీ ఉపయోగించడానికి నాకు ఇప్పటికే ఏదో అవసరం ఉంది (నేను iSCSI ద్వారా క్లస్టర్డ్ Proxmox VE 5.x మరియు ZFSతో పని చేస్తున్నాను).

ZFSoverISCSI గురించి కొంచెంiSCSI LIO ద్వారా నా కోసం పని చేస్తుంది మరియు నిజానికి, iscsi లక్ష్యం ప్రారంభమైనప్పుడు మరియు ZVOL పరికరాలను చూడనప్పుడు, అది వాటిని కాన్ఫిగరేషన్ నుండి తీసివేస్తుంది, ఇది గెస్ట్ సిస్టమ్‌లను బూట్ చేయకుండా నిరోధిస్తుంది. అందువల్ల, json ఫైల్ బ్యాకప్‌ను పునరుద్ధరించడం లేదా ప్రతి VM కోసం ఐడెంటిఫైయర్‌లతో పరికరాలను మాన్యువల్‌గా జోడించడం, ఇటువంటి మెషీన్‌లు డజన్ల కొద్దీ ఉన్నప్పుడు మరియు ప్రతి కాన్ఫిగరేషన్‌లో 1 కంటే ఎక్కువ డిస్క్‌లు ఉన్నప్పుడు చాలా భయంకరంగా ఉంటుంది.

మరియు నేను పరిగణించే రెండవ ప్రశ్న ఎలా డీక్రిప్ట్ చేయాలి (ఇది వ్యాసం యొక్క ముఖ్య అంశం). మరియు మేము దీని గురించి క్రింద మాట్లాడుతాము, కట్ కింద వెళ్ళండి!

చాలా తరచుగా, ఇంటర్నెట్‌లో, ఒక కీ ఫైల్ ఉపయోగించబడుతుంది (దీనికి ముందు కమాండ్ ద్వారా స్లాట్‌కు స్వీయ-జోడించబడింది - cryptsetup luksAddKey), లేదా అరుదైన మినహాయింపులలో (రష్యన్ భాషా ఇంటర్నెట్‌లో చాలా తక్కువ సమాచారం ఉంది) - decrypt_derived స్క్రిప్ట్ /lib/cryptsetup/script/లో ఉంది (వాస్తవానికి, ఇతర మార్గాలు ఉన్నాయి, కానీ నేను ఈ రెండింటిని ఉపయోగించాను, ఇవి కథనానికి ఆధారం). నేను రీబూట్ చేసిన తర్వాత పూర్తి స్వయంప్రతిపత్తి చేరిక కోసం కూడా ప్రయత్నించాను, కన్సోల్‌లో ఎటువంటి అదనపు ఆదేశాలు లేకుండా, ప్రతిదీ నా కోసం ఒకేసారి "ఎగురుతుంది". కాబట్టి, ఎందుకు వేచి ఉండండి? —

ప్రారంభిద్దాం!

sda3_crypt క్రిప్టో విభజనపై ఇన్‌స్టాల్ చేయబడిన డెబియన్ వంటి సిస్టమ్ మరియు మీ హృదయ కంటెంట్‌కు అనుగుణంగా గుప్తీకరించడానికి మరియు సృష్టించడానికి సిద్ధంగా ఉన్న డజను డిస్క్‌లను ఊహించుకుందాం. sda3_cryptని అన్‌లాక్ చేయడానికి మనకు పాస్‌ఫ్రేజ్ (పాస్‌ఫ్రేజ్) ఉంది మరియు ఈ విభజన నుండి మనం నడుస్తున్న (డీక్రిప్టెడ్) సిస్టమ్‌లోని పాస్‌వర్డ్ నుండి “హాష్” ను తీసివేసి, మిగిలిన డిస్క్‌లకు జోడిస్తాము. ప్రతిదీ ప్రాథమికమైనది, కన్సోల్‌లో మేము అమలు చేస్తాము:

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

ఇక్కడ X అనేది మన డిస్క్‌లు, విభజనలు మొదలైనవి.

మా పాస్‌ఫ్రేజ్ నుండి డిస్క్‌లను "హాష్"తో ఎన్‌క్రిప్ట్ చేసిన తర్వాత, మీరు UUID లేదా IDని కనుగొనాలి - ఎవరు దేనికి మరియు దేనికి అలవాటు పడ్డారనే దానిపై ఆధారపడి ఉంటుంది. మేము వరుసగా /dev/disk/by-uuid మరియు by-id నుండి డేటాను తీసుకుంటాము.

తదుపరి దశ మనకు అవసరమైన ఫంక్షన్‌ల కోసం ఫైల్‌లు మరియు మినీ-స్క్రిప్ట్‌లను సిద్ధం చేయడం, కొనసాగిద్దాం:

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

../డీక్రిప్ట్ యొక్క కంటెంట్‌లు

#!/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

మరియు చివరిగా, update-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కి జోడించబడతాయి. కమాండ్‌తో ఏ డ్రైవర్ ఉపయోగించబడుతుందో మీరు కనుగొనవచ్చు udevadm సమాచారం -a -n /dev/sdX | ఎగ్రెప్ 'లుకింగ్|డ్రైవర్'.

ఇప్పుడు మేము పూర్తి చేసాము మరియు అన్ని ఫైల్‌లు స్థానంలో ఉన్నాయి, అమలు చేయండి update-initramfs -u -k అన్నీ -v, లాగింగ్‌లో ఉండకూడదు మా స్క్రిప్ట్‌ల అమలు లోపాలు. మేము రీబూట్ చేస్తాము, పాస్‌ఫ్రేజ్‌ని నమోదు చేయండి మరియు డిస్కుల సంఖ్యను బట్టి కొంచెం వేచి ఉండండి. తరువాత, సిస్టమ్ ప్రారంభమవుతుంది మరియు లాంచ్ యొక్క చివరి దశలో, అంటే రూట్ విభజనను “మౌంట్” చేసిన తర్వాత, పార్ట్‌ప్రోబ్ కమాండ్ అమలు చేయబడుతుంది - ఇది LUKS పరికరాలు మరియు ఏదైనా శ్రేణులలో సృష్టించబడిన అన్ని విభజనలను కనుగొని ఎంచుకుంటుంది, అది ZFS లేదా mdadm, సమస్యలు లేకుండా సమావేశమవుతారు! మరియు ఇవన్నీ లోడ్ చేయడానికి ముందు ఈ డిస్క్‌లు/శ్రేణులు అవసరమయ్యే కోర్ సేవలు మరియు సేవలు.

అప్‌డేట్ 1: ఎలా గుర్తింపు తీసుకురావడంతోపాటు AEP, ఈ పద్ధతి LUKS1 కోసం మాత్రమే పని చేస్తుంది.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి