පද්ධති ඇරඹුම් වේලාවේදී 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 script /lib/cryptsetup/script/ හි පිහිටා ඇත (ඇත්ත වශයෙන්ම, වෙනත් ක්‍රම තිබේ, නමුත් මම මෙම දෙක භාවිතා කළෙමි, එය ලිපියේ පදනම විය). නැවත පණගැන්වීමෙන් පසු, කොන්සෝලයේ කිසිදු අමතර විධානයකින් තොරව සම්පූර්ණ ස්වයංක්‍රීය ඇතුළත් කිරීම සඳහා මම උත්සාහ කළෙමි, එවිට සියල්ල මා වෙනුවෙන් එකවර “ඉහළට පියාසර” වනු ඇත. එබැවින්, බලා සිටින්නේ මන්ද? -

අපි පටන් ගනිමු!

sda3_crypt crypto කොටසක ස්ථාපනය කර ඇති Debian වැනි පද්ධතියක් සහ ඔබේ හදවතේ අන්තර්ගතයට සංකේතනය කර නිර්මාණය කිරීමට සූදානම් තැටි දුසිමක් උපකල්පනය කරමු. අපට sda3_crypt අගුළු ඇරීමට රහස් වාක්‍ය ඛණ්ඩයක් (මුරපද) ඇති අතර, අපි ධාවනය වන (විකේතනය කළ) පද්ධතියේ මුරපදයෙන් “හැෂ්” ඉවත් කර එය ඉතිරි තැටිවලට එකතු කරන්නේ මෙම කොටසෙනි. සෑම දෙයක්ම මූලික වේ, කොන්සෝලය තුළ අපි ක්රියාත්මක කරන්නෙමු:

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

මෙහි X යනු අපගේ තැටි, කොටස් ආදියයි.

අපගේ රහස් වාක්‍ය ඛණ්ඩයෙන් "හැෂ්" සමඟ තැටි සංකේතනය කිරීමෙන් පසු, ඔබ UUID හෝ හැඳුනුම්පත සොයා ගත යුතුය - භාවිතා කරන්නේ කවුරුන්ද සහ කුමක් සඳහාද යන්න මත පදනම්ව. අපි පිළිවෙලින් /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

../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

../කොටස් පිටපතෙහි අන්තර්ගතය

#!/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 | egrep 'බලනවා|DRIVER'.

දැන් අපි අවසන් කර ඇති අතර සියලුම ගොනු ස්ථානගත කර ඇති බැවින්, ධාවනය කරන්න update-initramfs -u -k all -v, ලොග් කිරීමේදී නොවිය යුතුය අපගේ ස්ක්‍රිප්ට් වල ක්‍රියාත්මක කිරීමේ දෝෂ. අපි නැවත ආරම්භ කරමු, මුරපදය ඇතුළත් කර තැටි ගණන අනුව ටිකක් රැඳී සිටින්න. ඊළඟට, පද්ධතිය ආරම්භ වන අතර දියත් කිරීමේ අවසාන අදියරේදී, එනම් root කොටස “සවිකිරීමෙන්” පසුව, partprobe විධානය ක්‍රියාත්මක වනු ඇත - එය LUKS උපාංගවල සහ ඕනෑම අරාවක, එය ZFS හෝ වේවා, සාදන ලද සියලුම කොටස් සොයාගෙන ලබා ගනී. mdadm, ගැටළු නොමැතිව රැස්වනු ඇත! සහ මේ සියල්ල පැටවීමට පෙර මෙම තැටි/අරා අවශ්‍ය මූලික සේවා සහ සේවා.

යාවත්කාලීන 1: කෙසේද දැක්කා AEP, මෙම ක්‍රමය ක්‍රියාත්මක වන්නේ LUKS1 සඳහා පමණි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න