एन्क्रिप्टेड / बूट के साथ Ubuntu पूर्ण डिस्क एन्क्रिप्शन


15

मैं एक अलग /bootविभाजन के साथ एक पूर्ण एन्क्रिप्टेड डिस्क को सेटअप करने की कोशिश कर रहा हूं और मुझे कुछ परेशानी हो रही है।

मैं एक उबंटू 15.04 लाइव डीवीडी सत्र पर आने वाली प्रक्रिया को लिखूंगा।

  • डिस्क को 'यादृच्छिक डेटा' से भरें

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • विभाजन बनाएं (gparted का उपयोग करके)

    1. विभाजन तालिका बनाएं - gpt 2।
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 linux-swap 4GB #swap
      • / dev / sda3 ext4 15 GB #root
      • / dev / sda4 ext4 FREESPACE #home
  • संस्करणों को एन्क्रिप्ट करें

    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda1
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda2
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda3
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 5000 /dev/sda4
    
  • क्रिप्टोकरंसी खोलें

    cryptsetup luksOpen /dev/sda1 boot
    cryptsetup luksOpen /dev/sda2 swap
    cryptsetup luksOpen /dev/sda3 root
    cryptsetup luksOpen /dev/sda4 home
    
  • स्वरूप

    mkfs.ext2 /dev/mapper/boot
    mkswap /dev/mapper/swap
    mkfs.ext4 /dev/mapper/root
    mkfs.ext2 /dev/mapper/home
    
  • स्थापित करें (सर्वव्यापीता का उपयोग करके)

    • बूट लोडर पर / देव / एसडीए
    • / dev / sda1 - ext2 - माउंट पॉइंट / बूट के रूप में उपयोग करें
    • / dev / sda2 - ext2 - माउंट पॉइंट / बूट के रूप में उपयोग करें
    • / dev / sda3 - ext2 - माउंट पॉइंट / बूट के रूप में उपयोग करें
    • / dev / sda4 - ext2 - माउंट पॉइंट / बूट के रूप में उपयोग करें

    अंत में इंस्टॉलर चेतावनी देता है कि ग्रब-इंस्टॉल विफल हो गया है (क्योंकि बूट वॉल्यूम एन्क्रिप्ट किया गया है), इसलिए 'बूटलोडर के बिना जारी रखें' चुनें।

  • साफ बूट मात्रा

    mkfs.ext2 /dev/mapper/boot
    
  • माउंट की मात्रा

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Fstab और crypttab को अपडेट करें

    sudo blkid
    
    [/dev/sr0: UUID="2015-10-21-16-17-40-00" LABEL="Ubuntu 15.10 amd64"
               TYPE="iso9660" PTUUID="429817b4" PTTYPE="dos"
    /dev/sda1: UUID="...#1" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda2: UUID="...#2" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda3: UUID="...#3" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda4: UUID="...#4" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/mapper/boot: UUID="..." TYPE="ext2"
    /dev/mapper/swap: UUID="..." TYPE="swap"
    /dev/mapper/root: UUID="..." TYPE="ext4"
    /dev/mapper/home: UUID="..." TYPE="ext4"]
    
  • fstab

    #<file system>   <mount point>   <type>   <options>           <dump>   <pass>
    UUID=#1          /boot           ext2     defaults            0        2
    UUID=#2          none            swap     sw                  0        0
    UUID=#3          /               ext4     errors=remount-ro   0        1
    UUID=#4          /home           ext4     defaults            0        2
    
  • crypttab

    boot   UUID=#1   luks,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool, time=3000
    swap   UUID=#2   luks,swap,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool,time=3000
    root   UUID=#3   luks,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool,time=3000
    home   UUID=#4    luks,cipher=twofish-xts-plain64,size=512,
                      hash=whirlpool,time=5000
    
  • Initramfs छवि अपडेट करें

    cd /mnt
    sudo chroot root
    mount -t proc proc /proc
    mount -t sysfs sys /sys
    mount -t devpts devpts /dev/pts
    update-initramfs -u                      #ok
    
  • बूटलोडर कॉन्फ़िगर करें ( /etc/default/grub)

    GRUB_ENABLE_CRYPTODISK=y
    GRUB_PRELOAD_MODULES="luks cryptodisk"
    GRUB_CMDLINE_LINUX="cryptdevice=UUID#3:root root=/dev/mapper/root resume=/dev/mapper/swap 
                        crypto=whirlpool:twofish-xts-plain64:512:0:"
    
  • config फ़ाइल बनाएँ

    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
    
  • बाहर की कोशिश करो

    $ exit
    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/cow'.]
    

क्या इससे पहले मैंने कोई गलती की? मैं सही तरीके से ग्रब को कॉन्फ़िगर और इंस्टॉल कैसे कर सकता हूं?


मुझे बुरा लगता है कि आपके क्यू को "सही" साइट पर ले जाने के बाद, किसी ने भी मदद नहीं की। मैंने उबंटू में इस स्तर का काम नहीं किया है। लेकिन मैंने Google को grub+ आपके शीर्षक के लिए देखा। मुझे लगता है कि आपको pavelkogan.com/2014/05/23/luks-full-disk-enc एन्क्रिप्शन पर (जो इस विषय पर पहली Google खोज है) एन्क्रिप्ट करने की आपकी प्रक्रिया मिली । यदि नहीं, तो शायद इससे मदद मिलेगी। अच्छा प्रश्न! और शुभकामनाएं!
शेल्टर

चीजों की जोड़ी: 1. आप /bootसब कुछ के लिए माउंट बिंदु के रूप में उल्लेख करते हैं। मुझे उम्मीद है कि यह एक टाइपो है। 2. आपने /devचुरिंग करते समय माउंट नहीं किया था , लेकिन आपने माउंट भक्ति किया था। ऊ
मूरू

एक और गलती यह है कि आप क्रिप्टैब और एफस्टैब में समान यूयूआईडी का उपयोग कर रहे हैं। fstab को वास्तव में / dev / mapper / ड्राइव के UUIDs का उपयोग करना चाहिए।
हांग्जो डबिन्सकी

1
इस गाइड को उबंटू समुदाय के सदस्य द्वारा चेकआउट करें । मैंने इसका उपयोग किया है और यह मेरे लिए बहुत अच्छा काम करता है।
कप्पड़

जवाबों:


13

आपने कुछ गलतियाँ की हैं, लेकिन मुख्य समस्या सर्वव्यापीता और ग्रब में है। मूल रूप से, जब आप /एक एन्क्रिप्टेड पार्टीशन सेट करते हैं और इसके लिए एक अलग पार्टीशन नहीं बनाते हैं /boot, तो ग्रब एक त्रुटि संदेश देता है जैसे:

मुझे पता /bootहै कि एन्क्रिप्टेड है। आप स्थापित करने की आवश्यकता GRUB_ENABLE_CRYPTODISK=yमें /etc/default/grub। मैं आपके लिए ऐसा नहीं करूंगा, इसलिए मैं विफल हो रहा हूं और आपकी स्थापना बंद हो जाएगी।

प्रक्रिया का अवलोकन

  • हम ईएफआई मोड का उपयोग करते हैं।
  • हम मानक इंस्टॉलर का उपयोग करके एक अनएन्क्रिप्टेड /bootविभाजन और एक एन्क्रिप्टेड btrfs में /स्थापित होते हैं।
  • इंस्टॉलर समाप्त होने के बाद, हम chroot, कुछ महत्वपूर्ण कॉन्फ़िगरेशन परिवर्तन करते हैं, और EFI सिस्टम विभाजन में ग्रब को फिर से स्थापित करते हैं और initrd को फिर से बनाते हैं।

विस्तृत कदम

  • Ubuntu 16.04 से बूट डिस्क स्थापित करें (Xubuntu के साथ परीक्षण)।
  • इंटरनेट से कनेक्ट करें और चलाएं sudo apt update && sudo apt upgrade इंस्टॉलर घटकों को अपडेट करने के लिए
  • का प्रयोग करें fdisk, gpartedया एक और उपकरण 3 विभाजन बनाने के लिए:
    • एक GPT विभाजन तालिका
    • एक 200MB विभाजन जिसे हम EFI सिस्टम विभाजन के लिए उपयोग करेंगे
    • एक बहु-गीगाबाइट विभाजन जिसे हम अंततः हमारे एन्क्रिप्टेड स्वैप विभाजन के रूप में उपयोग करेंगे, लेकिन जो हमारे अस्थायी अनएक्रिप्टेड के रूप में कार्य करेगा /boot
    • एक एन्क्रिप्टेड विभाजन जो बाकी जगह का उपयोग करता है
  • एन्क्रिप्टेड पार्टीशन तैयार करें

    sudo cryptsetup luksFormat /dev/sda3
    sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
    sudo mkfs.btrfs /dev/mapper/sda3_crypt
    
  • Ubuntu स्थापित करें

    • स्थापना प्रकार के बारे में पूछे जाने पर "कुछ और" चुनें।
    • के /dev/sda1रूप में कॉन्फ़िगर करेंEFI System Partition
    • /dev/sda2माउंट बिंदु के साथ ext2, स्वरूपित के रूप में कॉन्फ़िगर करें/boot
    • /dev/mapper/sda3_cryptमाउंट बिंदु के साथ btrfs के रूप में कॉन्फ़िगर करें/
    • स्थापना के साथ जारी रखें।
    • इसके खत्म होने के बाद, लाइव सिस्टम (कोई रिबूट) में रहने के लिए चुनें।
  • की सामग्री की प्रतिलिपि बनाएँ /bootऔर करेंchroot

    sudo mount -o subvol=@ /dev/mapper/sda3_crypt /target
    sudo mount /dev/sda2 /mnt
    # (Watch those trailing slashes! rsync is very sensitive to them.)
    sudo rsync -aXAH /mnt/ /target/boot/
    sudo mount /dev/sda1 /target/boot/efi
    sudo mount --bind /dev /target/dev
    sudo mount --bind /proc /target/proc
    sudo mount --bind /sys /target/sys
    sudo chroot /target
    
  • (सब कुछ अब chrootआपके नए सिस्टम के अंदर हो रहा है।)

  • में लाइन जोड़ें /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • में लाइन जोड़ें /etc/crypttab। (नहीं ) sudo blkidका UUID खोजने के लिए आपको सबसे पहले भागना होगा ।/dev/sda3/dev/mapper/sda3_crypt

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • के /etc/fstabलिए लाइन को संपादित करें और हटाएं /boot। अन्य प्रविष्टियाँ सही हैं।

  • EFI सिस्टम विभाजन में ग्रब स्थापित करें, एक नया grub.cfg उत्पन्न करें, और initrd तैयार करें।

    sudo grub-install --target=x86_64-efi --efi-directory /boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck
    sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub/grub.cfg
    sudo update-initramfs -c -k all
    
  • वैकल्पिक डबल-चेक: डबल-चेक जिसमें /boot/efi/EFI/ubuntu/grub/grub.cfgऐसी लाइनें होती हैं जिनमें शामिल हैं insmod luks, cryptomount -u <UUID>सही बूट प्रविष्टियाँ, आदि और डबल-इन चेक कि आपके इनट्रेड में cryptsetupबाइनरी है। अगर ये चीजें गायब हैं, तो यह इसलिए है क्योंकि grub-mkconfig और / या update-initrd यह पता नहीं लगा सका कि आपके द्वारा fstab में जो वॉल्यूम माउंट या निर्दिष्ट किए गए हैं, वे क्रिप्टैब में एन्क्रिप्टेड वॉल्यूम से संबंधित हैं। (बहुत सारे जादू ऑटोकॉन्फ़िगरेशन हैं जो वे करते हैं।) ऐसा हो सकता है यदि आप इस गाइड से विचलन करते हैं, उदाहरण के लिए, जेडएफएस का उपयोग करके या sda3_crypt विभाजन की कोशिश करके।

  • (यदि btrfs के बजाय ZFS का उपयोग कर रहे हैं) grub-mkconfig और अद्यतन-initrd ZFS को पहचान नहीं पाएगा। वैकल्पिक हल (chroot दौरान, कोड़ना mkconfig / अद्यतन-initrd से पहले) शामिल है संपादन /usr/sbin/grub-mkconfigजोड़ने के लिए || trueलाइन 139 (जो साथ शुरू होता है करने के लिए GRUB_DEVICE=), जोड़ने GRUB_DEVICE="/dev/mapper/sda3_crypt"के लिए /etc/default/grub, फ़ाइल बनाने /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupकी सामग्री के साथ export CRYPTSETUP=yऔर फ़ाइल /etc/initramfs-tools/conf.d/cryptrootकी सामग्री के साथ target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard। यह सब उन चरणों के अतिरिक्त है जो आप तब लेंगे जब आप ZFS पार्टीशन को एन्क्रिप्ट नहीं कर रहे थे (जैसे कि लाइव सिस्टम में दोनों के दौरान zFS यूजर्स के बर्तनों को स्थापित करना और चेरोट के दौरान और /fstab में आने वाली लाइन को डिलीट करना )।

  • चुरोट से बाहर निकलें और अपने नए सिस्टम में रिबूट करें

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • आपको अपने पासवर्ड के लिए ग्रब माँगते हुए देखना चाहिए। फिर आपको बूट मेनू मिलेगा। उबंटू को चुनने के बाद आपसे आपका पासवर्ड दोबारा मांगा जाएगा। तब आप अपने सिस्टम में होंगे। उबंटू BTRFS का उपयोग कैसे करता है, इसके बारे में और पढ़ें ।

  • TODO : एन्क्रिप्टेड स्वैप बनाएं (संकेत: इसमें संपादन क्रिप्टैब, एफस्टैब और री-रनिंग शामिल है update-initrd)।

  • TODO : अपना पासवर्ड सहेजें ताकि आपको केवल इसे ग्रब में दर्ज करने की आवश्यकता हो। यह यहाँ विस्तृत है

उन्नयन

  • हर बार जब आप एक नया कर्नेल स्थापित करते हैं, तो आपको कस्टम चलाना चाहिए grub-mkconfig कमांड ।
  • हर बार जब आप ग्रब अपडेट करते हैं, तो आपको कस्टम grub-installकमांड चलाना चाहिए ।

अन्य नोट

  • यह एक एकल एन्क्रिप्टेड वॉल्यूम बनाने और इसे स्वैप विभाजन (और संभवतः अन्य) बनाने के लिए लुभाना है, लेकिन यह काम नहीं करता है। Grub-mkconfig और update-initrd दोनों गलत व्यवहार करेंगे। हालाँकि, मैंने LVM की कोशिश नहीं की है।
  • यह btrfs के शीर्ष पर एक स्वैप का उपयोग करने के लिए आकर्षक हो सकता है , लेकिन प्रदर्शन के कारण शायद यह एक बुरा विचार है।

बस स्पष्ट करना कि मुझे क्या लगता है कि आप पहले से ही जानते हैं (आपकी टिप्पणी के अनुसार): fstabऔर crypttabवास्तव में प्रश्न में सही नहीं हैं । कच्चे उपकरणों crypttabको इंगित करना चाहिए ; खोले गए क्रिप्ट उपकरणों को इंगित करना चाहिए । uuid/dev/sdxYfstab/dev/mapper/label
हेंडी

इस उत्तर को बनाने के लिए धन्यवाद, इसने मुझे इसे स्थापित करने में मदद की।
x13

मैं वास्तव में इस सच्चे FDE में से किसी पर विचार नहीं करता, क्योंकि विभाजन की जानकारी लीक है। ट्रू FDE में सभी सेक्टर्स का एनक्रिप्टेड डेटा होता है (शुरुआत में LUKS हेडर के अपवाद के साथ, हालाँकि यह तकनीकी रूप से अलग किए गए हेडर का उपयोग करके आवश्यक नहीं है)। मैं एलयूएम का उपयोग एलयूकेएस के अंदर एफडीई करता हूं, इसलिए यह निश्चित रूप से काम करता है और अच्छे हो सकते हैं यदि आपको बाद में विभाजन / वॉल्यूम आकार बदलने की आवश्यकता होती है। 12.04 में ऐसा करने पर यहां एक पुराना ब्लॉग पोस्ट है , लेकिन बाद के संस्करणों में काम करना चाहिए।
रास

इसके अलावा, BTRFS पर एक swapfile का उपयोग करना निश्चित रूप से एक बुरा विचार है ...
crass

आपके grub-installनिर्देश में, आपके पास एक --bootloader=ubuntuपैरामीटर है। मुझे वह तर्क उबंटू के या जीएनयू के मैनुअल में नहीं लगता है । क्या आप स्पष्ट कर सकते हैं कि यह क्या करता है या यह कहाँ से प्रलेखित है?
सैमुअल हैमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.