قم بتثبيت Archlinux مع تشفير نظام كامل و LVM على LUKS

في هذا المنشور ، ستقرأ قليلاً عن بحثي الغريب أثناء الإجازة المرضية القسرية. سيكون هناك عدة أشياء في وقت واحد ، والتي ليست "أفضل ممارسة" ، ولكنها ممكنة أيضًا! إذن هذا هو برنامج تعليمي حول كيفية تثبيت Archlinux (توزيعي المفضل) بحيث:

  • بدون التمهيد / التمهيد (فقط في / الجذر)
  • / على lvm
  • lvm داخل حاوية luks
  • مع UEFI
  • في جهاز افتراضي.
  • مع التمهيد الآمن ("صعبة" في الجهاز الظاهري من غير المرجح أن تنجح)

يشار إلى أن كل شيء سيتم تشفيره باستثناء قسم نظام EFI بملف grubx64.efi واحد - تطبيق EFI لتشغيل grub.

إذا كنت مهتما ، مرحبا بكم في القط!

أولاً ، قمت بإعداد كل شيء على جهاز الكمبيوتر المحمول Lenovo X240 ، ثم لكتابة مقال استخدمته آلة افتراضية مع OVMF في Proxmox.

إعداد اختبار:


يتم إنشاء كل شيء بشكل قياسي للغاية. تستخدم الصورة قوسي المفضل ، والذي يمكن تنزيله دائمًا من Yandex .

بعد ذلك ، بضع نقاط على الظاهرية في Proxmox بخصوص UEFI. لاختبار تشغيل الحامل باستخدام UEFI (وإلا لن يكون مثيرًا للاهتمام) ، تحتاج إلى تعيين OVMF بدلاً من SeaBIOS في خصائص الجهاز الظاهري:



بعد ذلك ، أضف قرص UEFI وفقًا لذلك ، للحصول على شيء مثل هذا:



يمكننا الآن بدء تشغيل الجهاز الظاهري وبدء عملية التثبيت. في وحدة تحكم الجهاز الظاهري ، ابدأ تشغيل خدمة sshd على الفور ، وقم بتعيين كلمة مرور الجذر واكتشف عنوان dhcp للجهاز الظاهري:



بعد ذلك ، يمكننا مواصلة العمل على ssh لجعلها أكثر ملاءمة.

تخطيط القرص


لذلك ، بعد الاتصال بالفعل عبر ssh ، قمنا أولاً بتعيين الوقت بحيث لا يتضح لاحقًا أنه تم إنشاء أنظمة الملفات في المستقبل:

timedatectl set-ntp true && timedatectl set-timezone Europe/Moscow 

تحقق من صحة كل شيء:

 root@archiso ~ # timedatectl Local time: Tue 2018-08-14 13:42:03 MSK Universal time: Tue 2018-08-14 10:42:03 UTC RTC time: Tue 2018-08-14 10:42:04 Time zone: Europe/Moscow (MSK, +0300) System clock synchronized: yes NTP service: active RTC in local TZ: no 

الآن يمكننا البدء في تقسيم القرص. في هذه المرحلة ، لدي محرك / dev / vda ، مثل وحدة تحكم Virtio وهذا مجرد قرص فارغ بدون جدول التقسيم:

 root@archiso ~ # fdisk -l /dev/vda Disk /dev/vda: 15 GiB, 16106127360 bytes, 31457280 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes 

سنقسمها إلى قسمين:

  • قرص fat32 لتطبيقات UEFI (EFI_system_partition)
  • حاوية LUKS مع كل شيء آخر

استخدم gdisk لإنشاء GPT:

 root@archiso ~ # gdisk /dev/vda GPT fdisk (gdisk) version 1.0.4 Command (? for help): o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): y 

بعد ذلك ، قم بإنشاء القسم الأول لـ EFI بنوع EF00 (قسم نظام EFI):

 Command (? for help): n Partition number (1-128, default 1): First sector (34-31457246, default = 2048) or {+-}size{KMGTP}: Last sector (2048-31457246, default = 31457246) or {+-}size{KMGTP}: +512M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): <b>EF00</b> Changed type of partition to 'EFI System' 

الآن قم بإنشاء قسم لـ LUKS ، حيث لن نهتم حتى بالنوع ونتركه كما هو:

 Command (? for help): n Partition number (2-128, default 2): First sector (34-31457246, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-31457246, default = 31457246) or {+-}size{KMGTP}: <b>Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'</b> 

سنكتب التغييرات وننتهي بترميز القسم:

 Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/vda. The operation has completed successfully. 

إنشاء حاويات وأنظمة ملفات LUKS


مع القسم الأول (vda1) ، كل شيء بسيط للغاية. نحتاج فقط لتهيئته والآن هذا هو:

 root@archiso ~ # mkfs.vfat /dev/vda1 mkfs.fat 4.1 (2017-01-24) 

القسم الثاني هو الحاوية التي يجب عليك تحضيرها أولاً. نقوم بتهيئة القسم من خلال cryptsetup وتعيين عبارة المرور:

 root@archiso ~ # cryptsetup -v luksFormat /dev/vda2 WARNING! ======== This will overwrite data on /dev/vda2 irrevocably. Are you sure? (Type uppercase yes): YES Enter passphrase for /dev/vda2: Verify passphrase: Command successful. 

*** لم أزعجني باختيار الشفرات ، مع الكتابة العشوائية فوق الكتابة العشوائية وغيرها ، ولكني قمت للتو بإنشاء حاوية افتراضية.

بعد ذلك ، افتح الحاوية بتحديد عبارة المرور نفسها:

 root@archiso ~ # cryptsetup luksOpen /dev/vda2 container Enter passphrase for /dev/vda2: 

الآن لدينا حاوية مفتوحة يمكن الوصول إليها من خلال مخطط الأجهزة:

 root@archiso ~ # ls -l /dev/mapper | grep container lrwxrwxrwx 1 root root 7 Aug 14 14:01 container -> ../dm-0 

الآن يمكننا الاستمرار في lvm (سأكتب بطريقة سريعة ، لأن هذا ليس موضوعًا):

 root@archiso ~ # pvcreate /dev/mapper/container Physical volume "/dev/mapper/container" successfully created. root@archiso ~ # vgcreate rootvg /dev/mapper/container Volume group "rootvg" successfully created root@archiso ~ # lvcreate -L1G -n swap rootvg Logical volume "swap" created. root@archiso ~ # lvcreate -L5G -n root rootvg Logical volume "root" created. root@archiso ~ # lvcreate -L2G -n home rootvg Logical volume "home" created. root@archiso ~ # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home rootvg -wi-a----- 2.00g root rootvg -wi-a----- 5.00g swap rootvg -wi-a----- 1.00g 

بعد ذلك ، قم بإنشاء أنظمة الملفات على lv لدينا:

 root@archiso ~ # mkfs.ext4 -L root /dev/mapper/rootvg-root mke2fs 1.44.3 (10-July-2018) ... Writing superblocks and filesystem accounting information: done [root@archiso ~]# mkfs.ext4 -L home /dev/mapper/rootvg-home mke2fs 1.44.3 (10-July-2018) Creating filesystem with 524288 4k blocks and 131072 inodes ... Writing superblocks and filesystem accounting information: done [root@archiso ~]# mkswap -L swap /dev/mapper/rootvg-swap ... LABEL=swap, UUID=98b0bc31-1c62-4fec-bb97-e1913d1e8cb4 

الآن يمكن تثبيت كل هذا لتثبيت النظام الأساسي. ستكون نقطة التثبيت / mnt ، حيث سيبدأ جذر نظامنا المستقبلي:

 [root@archiso ~]# mount /dev/mapper/rootvg-root /mnt/ [root@archiso ~]# mkdir -p /mnt/{home,boot/efi} 

*** / boot / efi قمت بإنشائه بحيث يبقى / boot نفسه قيد التشغيل / dev / mapper / rootvg-root ، وقد تم تثبيت مجلد efi بالفعل على / dev / vda1 (قسم fat32 efi):

 [root@archiso ~]# mount /dev/vda1 /mnt/boot/efi/ [root@archiso ~]# mount /dev/mapper/rootvg-home /mnt/home/ [root@archiso ~]# swapon /dev/mapper/rootvg-swap 

تحقق من نقاط التثبيت الحالية (مفيدة دائمًا):

 [root@archiso ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 462.5M 1 loop /run/archiso/sfs/airootfs sr0 11:0 1 573M 0 rom /run/archiso/bootmnt vda 254:0 0 15G 0 disk ├─vda1 254:1 0 512M 0 part /mnt/boot/efi └─vda2 254:2 0 14.5G 0 part └─container 253:0 0 14.5G 0 crypt ├─rootvg-swap 253:1 0 1G 0 lvm [SWAP] ├─rootvg-root 253:2 0 5G 0 lvm /mnt └─rootvg-home 253:3 0 2G 0 lvm /mnt/home 

كما نرى ، كل شيء صادق والآن حان الوقت لوضع القوس نفسه.

تثبيت نظام القاعدة


قم بتثبيت الحزم الأساسية من مجموعات القاعدة والمجموعات القاعدية باستخدام حزمة pacstrap (يمكنك وضع كل ما تريده بالإضافة إلى ذلك):

 pacstrap /mnt base base-devel 

كل شيء يعمل بشكل مثالي ، النظام الأساسي جاهز. بطبيعة الحال ، أزلت الاستنتاج. الآن يمكننا تكوين هذا النظام للتمهيد والعمل.

من الأشياء الأساسية ، ننتج على الفور fstab:

 genfstab -pU /mnt >> /mnt/etc/fstab 

بعد ذلك ، اجعل chroot في هذا النظام الجديد:

 [root@archiso ~]# arch-chroot /mnt 

*** arch-chroot أداة مفيدة للغاية ، لأنها تفعل كل شيء بمفردها. على الرغم من أنه يمكنك دائمًا استخدام chroot القياسي ، قبل القيام بذلك ، اتبع التعليمات الواردة في دليل gentoo -handbook wiki.gentoo.org/wiki/Handbook : AMD64 / Installation / Base section "Mounting the files files systems " الضرورية

قم بتهيئة وقت النظام واسم المضيف على الفور:

 ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime && \ hwclock --systohc && \ echo luks-test > /etc/hostname 

قم بتعيين كلمة مرور الجذر:

 [root@archiso /]# passwd root New password: Retype new password: passwd: password updated successfully 

قم بإلغاء تثبيت اللغات المطلوبة في /etc/locale.gen:

 [root@archiso /]# vi /etc/locale.gen [root@archiso /]# grep -v '^#' /etc/locale.gen en_US ISO-8859-1 en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8 ru_RU ISO-8859-5 

سننشئها:

 [root@archiso /]# locale-gen Generating locales... en_US.ISO-8859-1... done en_US.UTF-8... done ru_RU.UTF-8... done ru_RU.ISO-8859-5... done Generation complete 

قم بتكوينها فورًا للنظام ووحدة التحكم:

 [root@archiso /]# echo LANG=en_US.UTF-8 > /etc/locale.conf [root@archiso /]# echo KEYMAP=ru > /etc/vconsole.conf [root@archiso /]# echo FONT=cyr-sun16 >> /etc/vconsole.conf 

الآن قم بتكوين الملف /etc/mkinitcpio.conf ، المسؤول عن الخيارات ، والخطافات ، وما إلى ذلك عند إنشاء initramfs:

 vi /etc/mkinitcpio.conf 

أهم شيء هو الخطافات وترتيبها:

 HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck) 

*** استئناف هوك لتمهيد النظام بعد السبات من المبادلة. على جهاز افتراضي ليس هناك حاجة. نسختها من خشب الزان.

الآن يمكننا إنشاء initramfs:

 [root@archiso /]# mkinitcpio -p linux ==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default' -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img ==> Starting build: 4.17.14-arch1-1-ARCH -> Running build hook: [base] -> Running build hook: [udev] -> Running build hook: [autodetect] -> Running build hook: [modconf] -> Running build hook: [block] -> Running build hook: [keymap] -> Running build hook: [encrypt] -> Running build hook: [lvm2] -> Running build hook: [resume] -> Running build hook: [filesystems] -> Running build hook: [keyboard] -> Running build hook: [fsck] ==> Generating module dependencies ==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img ==> Image generation successful 

الآن بعد أن أصبح لدينا النظام ، نحتاج إلى تثبيت أداة تحميل التشغيل نفسها. وقع اختياري على grub (2) ، لأنه أكثر شيوعًا إلى حد ما وقادر على تحميل النواة بسهولة من قسم مشفر (حسنًا ، أو لم أكن أبحث حقًا عن الآخرين).

قم بتثبيت حزمة grub:

 [root@archiso /]# pacman -S grub dosfstools efibootmgr mtools 

قبل إنشاء التكوين ، قم بتحرير خيارات grub الافتراضية:

 vim /etc/default/grub 

هنا تحتاج إلى إلغاء تعليق سطر واحد مهم (لا تعليق ، بالطبع):

 # Uncomment to enable booting from LUKS encrypted devices GRUB_ENABLE_CRYPTODISK=y 

وإضافة (هناك فارغ افتراضيًا) إلى GRUB_CMDLINE_LINUX:

 GRUB_CMDLINE_LINUX="cryptdevice=UUID=5ad7c9ad-fb17-4839-925e-479432516c07:container" 

UUID أخذت من blkid:

 [root@archiso /]# blkid | grep vda2 /dev/vda2: UUID="5ad7c9ad-fb17-4839-925e-479432516c07" TYPE="crypto_LUKS" PARTLABEL="Linux filesystem" PARTUUID="667a1243-17ff-4f03-952c-5afd5e3415cc" 

نقوم بتكوين grub:

 [root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file ... WARNING: Failed to connect to lvmetad. Falling back to device scanning. Found linux image: /boot/vmlinuz-linux Found initrd image: /boot/initramfs-linux.img Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img WARNING: Failed to connect to lvmetad. Falling back to device scanning. done 

بعد ذلك ، قم بتثبيت grub نفسه على القرص:

 [root@archiso /]# grub-install /dev/vda Installing for x86_64-efi platform. ... Installation finished. No error reported. 

*** يمكنك إضافة - إعادة فحص - تصحيح ، تحديد الهيكل ... ولكن ... يعمل حقا من تلقاء نفسه)

الآن سنقوم بتحرير / etc / crypttab حتى يعرف النظام نفسه أنه عند التحميل من الضروري فك تشفير قسم LUKS. أضف السطر:

 echo "container /dev/vda2 none" >> /etc/crypttab 

مما يعني أنك بحاجة إلى طلب كلمة مرور (بلا) لقسم / dev / vda2 وتقديمها بالفعل كحاوية عبر مخطط الجهاز.

الآن نحن على استعداد للخروج من chroot وإعادة تشغيل النظام:

 [root@archiso /]# exit exit [root@archiso ~]# reboot Welcome back! 

الآن دعونا ننتقل إلى وحدة تحكم الجهاز الظاهري لرؤية النتيجة:



في هذه المرحلة ، بدأنا تطبيق EFI /boot/efi/EFI/arch/grubx64.efi مع / dev / vda1 ، والذي يطلب منا كلمة مرور لفك تشفير الحاوية الخاصة بنا.

بعد ذلك ، بعد إدخال كلمة المرور:



هنا نافذة grub المألوفة مع خيارات التمهيد من /boot/grub/grub.cfg.
عند هذه النقطة ، قام grub بفك تشفير الحاوية الخاصة بنا وتمكن من الوصول إلى هذا الملف نفسه (/boot/grub/grub.cfg) والنواة و initramfs. بعد تحديد الخيار ، سيتم تشغيل النواة بشكل افتراضي ، initramfs:



في الواقع ، جاءت النواة مع خطاف التشفير ، الذي يطلب منا مرة أخرى كلمة المرور لفك تشفير الحاوية (بشكل عام ، تحتاج إلى إدخال كلمة المرور مرتين ، ولكن قد يكون من صنعك حاويتين للتشغيل والجذر من جنون الارتياب الزائد :)

ثم بعد تحميل النظام بالكامل:



ملاحظة: لزيادة مستوى الفصام ، لا يكفي التمهيد الآمن للتوقيع على محمل إقلاع grubx64.efi.

لقد وجدت أنه من غير المثير للاهتمام مجرد وضع النواة و initramfs على / dev / vda1 ، كما فعلت بالفعل 100 مرة. لا تعرف برامج تحميل التمهيد الأخرى مثل SHIM و bootctl وما إلى ذلك كيفية القيام بذلك (حسنًا ، إذا كنت لا أعرف ، أخبرنا في التعليقات)

Source: https://habr.com/ru/post/ar420081/


All Articles