Ubuntu को डिस्क एन्क्रिप्शन और SSD कैशिंग दोनों के साथ कैसे स्थापित करें


10

मैं एक कॉर्पोरेट वातावरण में उबंटू का उपयोग कर रहा हूं, और हमारी सुरक्षा नीति में कहा गया है कि हमें पूर्ण डिस्क एन्क्रिप्शन का उपयोग करना होगा।

मुझे 32GB mSATA SSD और 750GB कताई जंग के साथ एक लैपटॉप भी मिला है। मेरी वर्तमान स्थापना इस प्रक्रिया का उपयोग करके, इसका लाभ उठाने के लिए bcache का उपयोग करती है । यह एसएसडी को भरने के बारे में चिंता किए बिना मेरे लिए एक बहुत स्वागत योग्य प्रदर्शन प्रदान करता है।

यह एक बाउंटेड प्रश्न होगा। इनाम के लिए सम्मानित किया जाएगा:

  • उबंटू की एक ताजा स्थापना करने का एक स्पष्ट, विश्वसनीय तरीका
    • कोई भी रिलीज़ स्वीकार्य है लेकिन 15.04 (विशद) ठीक रहेगा
  • पूरे फाइलसिस्टम को एन्क्रिप्ट किया जाएगा
    • यहां प्राथमिकता डिफ़ॉल्ट चेक-इन इंस्टॉलर प्रोग्राम (dm-crypt एन्क्रिप्शन) में प्रासंगिक चेकबॉक्स का उपयोग करना है
  • एक SSD पर फाइल सिस्टम को कैश किया जाएगा
    • वरीयता के लिए, कर्नेल डीएम-कैश / lvmcache विधि , डेबियन जेसी के साथ ऐसा करने के लिए विधि के लिए यहां देखें
    • कैश भी सुरक्षित होना चाहिए (यानी एन्क्रिप्टेड)
    • इस बारे में स्पष्ट स्पष्टीकरण होना चाहिए कि कैश को एन्क्रिप्ट भी क्यों किया गया है

पहले ही ऊपर डेबियन जेसी के लिए विधि की कोशिश कर चुके हैं, लेकिन यह मेरे लिए बूट करने से इनकार करता है। अब तक यहाँ टिप्पणियों में वर्णित विधि की कोशिश नहीं की है

पोस्ट किए गए समाधानों को वर्चुअलबॉक्स वीएम पर दो खाली वर्चुअल डिस्क और 15.04 डेस्कटॉप (एमड64 रिलीज़) की एक रिलीज़ कॉपी के साथ परीक्षण किया जाएगा। बाउंटी पहले समाधान पर जाता है जिसे मैं अपने वास्तविक हार्डवेयर को पुनर्स्थापित करने के लिए अपनाता हूं।

कृपया अपना समाधान लिखें जैसे कि वह समुदाय के विकी में जा रहा हो।


मैंने इनाम से सम्मानित किया है - मुझे लगता है कि "LUKS-on-LVM" समाधान के लिए अभी भी संभावना है जो केवल एक पासवर्ड में स्वीकृत उत्तर की आसानी को जोड़ती है, केवल डिवाइस-मैपर घटकों का उपयोग करने के साथ।


जो मैं समझता हूं, आप LUKS ubuntu इंस्टॉल करने पर डिफ़ॉल्ट LVM में lvmcache का उपयोग नहीं करना चाहते हैं क्योंकि कैश अनएन्क्रिप्टेड होगा।
solsTiCe

@solsTiCe - यह मेरी समझ थी कि lvmcrypt, dm-cache के शीर्ष पर एक अच्छी आसान परत होने के नाते, LUKS के साथ भी सामंजस्य संभव हो सकता है (LUKS एक अन्य डिवाइस-मैपर चीज़, dm-crypt) होने के नाते, यह सिर्फ इस तरह से मायने रखता है चारों ओर आप चीजों को परत करते हैं
एड्रियन

आपको यह समझना चाहिए, कि / बूट विभाजन निश्चित रूप से अनएन्क्रिप्टेड होना चाहिए। Ubuntu 14.04 पर ग्रब के साथ bcache असंगत था और मेरा मानना ​​है कि यह अभी भी है।
एडम रिक्ज़ोस्की

@AdamRyczkowski हाँ, मेरे पास अब वह कॉन्फ़िगरेशन है। यह स्वीकार्य है लेकिन मैं एक LUKS विन्यास पसंद करूंगा।
एड्रियन

मैं यह नहीं देखता कि LUKS bcache को बाहर क्यों करेगा ... वे एक दूसरे पर निर्भर नहीं होते हैं और एक दूसरे के ऊपर खुशी से बैठ सकते हैं।
एडम रिक्ज़ोस्की

जवाबों:


7

LUKS पर bcache पर LVM

यहाँ रूसी गुड़िया खेल 3 स्टैक / परतों के साथ थोड़ा गहरा है ...

इस प्रश्न के बारे में मेरा प्रारंभिक विचार एलयूएम पर एलवीएम के साथ एक डिफ़ॉल्ट उबंटू इंस्टॉलेशन का उपयोग करना था और इसे bcache में बदलना था ब्लॉकों के साथ बैकिंग डिवाइस था लेकिन यह एलवीएम के साथ मेरे परीक्षण पर मेरे लिए काम नहीं करता था।

इसके अलावा, ubuntu इंस्टॉलर ( सर्वव्यापकता) ) अग्रिम में तैयार किए गए bcache डिवाइस के अंदर स्थापित करने के लिए बहुत सीमित है (कम से कम LVM पर LUKS के साथ), इसलिए हम मैन्युअल रूप से चीजों को करने की एक विधि पर वापस आते हैं।

लाइव सीडी / यूएसबी में बूट करें और "Ubuntu का प्रयास करें" चुनें और एक टर्मिनल खोलें

पहले से इंस्टॉल किए

sudo -i
# Define some variable to avoid confusion and error
luks_part=/dev/sda3
boot=/dev/sda2                    # boot partition
caching_bcache=/dev/sdb           # SSD or partition in SSD

# Do secure erase of encrypted backing and caching device (see Notes [1])
dd if=/dev/urandom of=$luks_part || dd if=/dev/urandom of=$caching_bcache
# Go and grab some coffe, this will take a while...

apt-get install bcache-tools
# Setup bcache caching and backing devices
make-bcache -C $caching_bcache -B $luks_part
# (Optional) Tweak bcache
echo writeback > /sys/block/bcache0/bcache/cache_mode

# Below we now create manually what ubiquity should have done for us
# Setup LUKS device on bcache device
cryptsetup --key-size 512 luksFormat /dev/bcache0
cryptsetup luksOpen /dev/bcache0 crypted

# Setup LVM on LUKS
# You can skip that part if you don't want to use a swap
# or don't want to use multiple partition. Use /dev/mapper/crypted
# as you root latter on
pvcreate  /dev/mapper/crypted
vgcreate vg /dev/mapper/crypted
lvcreate -L 1G vg -n swap
lvcreate -l 100%FREE vg -n root

स्थापना

टर्मिनल को खुला रखें और अब इंस्टॉलेशन चलाएं। विभाजन और निर्दिष्ट करते समय "कुछ और" चुनें

  • आपका बूट विभाजन (/dev/sda2 )
  • आपका रूट विभाजन (/dev/mapper/vg-root )
  • आपकी अदला-बदली ( /dev/mapper/vg-swap)

और अपने विभाजन को प्रारूपित करने के लिए चेकबॉक्स की जांच करें

स्थापना के अंत में, रिबूट न ​​करें , लेकिन बस "जारी रखने का प्रयास करें" पर क्लिक करें

पोस्ट-स्थापित

हमारे खुले टर्मिनल में

# Install bcache-tools to add bcache module to initramfs
mount /dev/mapper/vg-root /mnt
mount $boot /mnt/boot
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
chroot /mnt
# To get apt-get running in the chroot
echo 'nameserver 8.8.8.8' > /run/resolvconf/resolv.conf
apt-get install bcache-tools

# Create /etc/crypttab to add crypted bcached partition
echo "crypted UUID=`blkid -o value /dev/bcache0|head -1` none luks" > /etc/crypttab

exit
sync
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot
umount /mnt
vgchange -an /dev/mapper/crypted
cryptsetup luksClose crypted
sync

# Reboot & enjoy

लाइव सीडी / यूएसबी से एक उबंटू 15.04 रिबूट बग है, इसलिए आपको रिबूट / शटडाउन को मजबूर करना पड़ सकता है

चेक

एक बार बूट होने के बाद, आप जाँच सकते हैं कि /dev/bcache0वास्तव में एक LUKS विभाजन है

if sudo cryptsetup isLuks /dev/bcache0; then \
    echo "crypted";\
    else echo "unencrypted";\
fi

ऐसा इसलिए है क्योंकि यह आपके एलयूकेएस विभाजन का कैश है, और आप अब अपने डेटा को डिवाइस के माध्यम से एक्सेस करते हैं /dev/bcache0और मूल बैकिंग डिवाइस ( /dev/sda3यहां) से कभी नहीं

संदर्भ

http://bcache.evilpiepirate.org/

https://wiki.archlinux.org/index.php/Bcache

https://wiki.archlinux.org/index.php/Dm-crypt

bcache- स्थिति आधिकारिक रूप से bcache-tools में विलय नहीं हुई है, फिर भी। आप इसे यहाँ कर सकते हैं: https://gist.github.com/djwong/6343451

[१] इस वाइपिंग को करने के बेहतर तरीके हो सकते हैं


update-initramfs -uk allक्रिप्टैब निर्माण और निम्नलिखित exitकमांड के बाद चलना सुनिश्चित करें ।
'18:

4

LUKS + LUKS / dm-cache पर LVM

उबंटू इंस्टॉलर एलयूएम का उपयोग एलयूकेएस कॉन्फ़िगरेशन पर करता है, क्योंकि यह पूर्ण डिस्क एन्क्रिप्शन है।

यदि आप प्रदर्शन को बढ़ावा देने के लिए dm-cache / lvmcache का उपयोग करना चाहते हैं, तो आपको अपने डेटा की सुरक्षा बनाए रखने के लिए अपने कैश पूल को एक एन्क्रिप्टेड वॉल्यूम में रखने की आवश्यकता होगी।

कदम हैं

  • लक्ष्य ब्लॉक डिवाइस पर एक LUKS वॉल्यूम बनाएं
  • नए एन्क्रिप्टेड LUKS वॉल्यूम के साथ डिफ़ॉल्ट वॉल्यूम समूह बढ़ाएँ
  • नए LUKS वॉल्यूम में कैश मेटाडेटा और डेटा वॉल्यूम बनाएँ
  • उन्हें कैश पूल के रूप में एक साथ बांधें
  • इस कैश पूल को रूट वॉल्यूम में बांधें
  • सुनिश्चित करें कि नया एन्क्रिप्टेड वॉल्यूम बूट में जोड़ा जा सकता है /etc/crypttab
  • सुनिश्चित करें कि आपका बूट वातावरण dm-cache का समर्थन करता है

नीचे दी गई स्क्रिप्ट एक उदाहरण प्रदान करती है, और एक मौजूदा रूट फाइलसिस्टम में एक एन्क्रिप्टेड कैश पूल जोड़ेगी। यह उन सिस्टमों के लिए डिज़ाइन किया गया था, जिन्होंने उबंटू इंस्टॉलर में डिफ़ॉल्ट डिस्क एन्क्रिप्शन विकल्प का उपयोग किया है - अर्थात; संपूर्ण डिस्क विभाजन और एन्क्रिप्टेड, कोई कस्टम विभाजन नहीं आदि।

कृपया ध्यान दें कि इस स्क्रिप्ट में बहुत कम सत्यापन या रक्षात्मक प्रोग्रामिंग है। यदि यह आपकी कार्य प्रणाली को नष्ट कर देता है, तो यह आपकी जिम्मेदारी है।

इस प्रकार कॉल करें:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. काम करने के लिए जड़ चाहिए
  2. बैश में स्क्रिप्ट चलाएं
  3. स्क्रिप्ट नाम
  4. ब्लॉक डिवाइस जिसे आप उपयोग करना चाहते हैं (केवल पूरे डिस्क के साथ परीक्षण किया गया)
  5. मेटाडाटा आकार
  6. कैश डेटा का आकार

आकार पैरामीटर MB में डिफ़ॉल्ट रूप से हैं: आपको कैश स्थान के लिए 1: 1000 मेटाडेटा स्थान के अनुपात की आवश्यकता होगी (उदाहरण के लिए यदि आपकी कैश डिस्क 180GB है, तो आपको 180MB मेटाडेटा स्थान और 179820MB डेटा स्थान की आवश्यकता है - आप गोल करना चाह सकते हैं मेटाडेटा थोड़ा सतर्क होना चाहिए। 8M के मेटाडेटा के लिए एक निचली सीमा है।)

आपको अपने कैश वॉल्यूम के लिए पासवर्ड के लिए कहा जाएगा - आपको बूट के दौरान आपके डिस्क के बीओटीएच के पासवर्ड के लिए कहा जाएगा ।

संदर्भ


#! / Bin / bash
#
# lvmcryptocache
#
# LVM कैश पूल जोड़ें और इसे रूट वॉल्यूम में संलग्न करें
# एलयूकेएस एन्क्रिप्शन सहित
# मान लें कि आप "सभी रूट पर" सेटअप का उपयोग कर रहे हैं
# अगर आप नहीं हैं, अगर आपको पसंद है तो इसे अपनाएं
#
# स्क्रिप्ट GPL3 या बाद में लाइसेंस प्राप्त
# © एड्रियन विल्किंस मई 2015
#
# डिस्क डिवाइस का नाम जिसे आप कैश के रूप में उपयोग कर रहे हैं, पास करें
# यह आदर्श रूप से पूरी तरह से रिक्त होना चाहिए, इसलिए चलाएं
#
# dd if = / dev / zero of = / dev / $ {DISK}
#
# कुछ समय के लिए उस पर विभाजन तालिका को उलझाने के लिए

CACHE_DISK = $ 1
META_SIZE = $ 2
DATA_SIZE = $ 3

DISK_NAME = $ (बेसन $ CACHE_DISK)

CRYPT_VOLUME = $ {DISK_NAME} _crypt
CACHE_PV = / dev / नक्शाकार / $ {} CRYPT_VOLUME

# कच्चे डिस्क में LUKS वॉल्यूम बनाएं

cryptsetup luksFormat $ CACHE_DISK
cryptsetup ओपन - टाइप लुक्स $ CACHE_DISK $ CRYPT_VOLUME

# डिस्क आकार के सामान को आज़माने और काम करने के लिए शुरू किया लेकिन यह जटिल है
# अगर आपकी मर्जी हो तो चलिए, मैं विस्तार से भागता रहा
#
# DISK_SIZE = $ (fdisk -l | grep "डिस्क $ {CACHE_ISK}" | awk '{प्रिंट $ 5}')
# 
# META_SIZE = $ ((DISK_SIZE / 1000))
# META_SIZE = $ ((META_SIZE + 512))
# MOD = $ ((META_SIZE% 512))
# MOD_OFFSET = $ ((512 - MOD))
# META_SIZE = $ ((META_SIZE + 512)) 
# META_SIZE = $ ((META_SIZE + MOD_OFFSET)
# 
# DATA_SIZE = $ ((DISK_SIZE - META_SIZE))
# 

# एन्क्रिप्टेड वॉल्यूम के अंदर नए पीवी बनाएं

pvcreate $ CACHE_PV
vgextend ubuntu-vg $ CACHE_PV
lvcreate -L $ {META_SIZE} -n cachemeta ubuntu-vg $ CACHEPPV
lvcreate -L $ {DATA_SIZE} -n कैश्डता ubuntu-vg $ CACH_VV
lvconvert - टाइप कैश-पूल - ummetadata ubuntu-vg / cachemeta - cachemode writethrough ubuntu-vg / cachedata-yes
lvconvert - टाइप कैश - कैशलेबल ubuntu-vg / कैश्डता ubuntu-vg / रूट

# अब कैश पूल के UUID PHYSICAL DRIVE (/ dev / sdb) को / etc / crypttab में जोड़ें
DISK_UUID = $ (ls -al / dev / disk / by-uuid / | grep DISK_NAME। Awk '{प्रिंट $ 9}')
गूंज "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} कोई भी लुक्स, त्यागें" >> / etc / crypttab

apt-get install-yes पतले प्रोविजनिंग-टूल्स

हुक = $ (tempfile)
# सही उपकरण और मॉड्यूल जोड़ने के लिए initramfs में एक हुक स्क्रिप्ट जोड़ें

इको "#! / बिन / श"> $ हुक
इको "PREREQ =" lvm2 "" >> $ HOOK
इको "prereqs ()" >> $ HOOK
इको "{" >> $ HOOK
इको "इको \" $ PREREQ \ ">> $ हुक
इको "}" >> $ HOOK
इको "केस $ 1 इन" >> $ बुक
इको "prereqs)" >> $ HOOK
इको "prereqs" >> $ HOOK
गूंज "बाहर निकलें 0" >> $ HOOK
इको ";;" >> $ HOOK
इको "एसैक" >> $ हुक
इको "अगर [! -x / usr / sbin / cache_check]; तो" >> $ HOOK
गूंज "बाहर निकलें 0" >> $ HOOK
इको "फाई" >> $ हुक
इको "। / usr / share / initramfs-tools / हुक-फ़ंक्शंस" >> $ HOOK
इको "copy_exec / usr / sbin / cache_check" >> $ HOOK
इको "मैनुअल_एड_मॉडल्स dm_cache dm_cache_mq dm_persistent_data dm_bufio" >> $ HOOK

cp $ HOOK / etc / initramfs-tools / हुक / lvmcache
chmod + x / etc / initramfs-tools / हुक / lvmcache

इको "dm_cache" >> / etc / initramfs-tools / मॉड्यूल
इको "dm_cache_mq" >> / etc / initramfs-tools / मॉड्यूल
इको "dm_persistent_data" >> / etc / initramfs-tools / मॉड्यूल
इको "dm_bufio" >> / etc / initramfs-tools / मॉड्यूल

# Initramfs अपडेट करें

update-initramfs -u

इको नाउ रिबूट!

1. आप अपने कैश डिस्क को शून्य से खाली करने का सुझाव देते हैं, लेकिन यदि आप उस पर एन्क्रिप्टेड एलयूकेएस रखना चाहते हैं, तो इसके बजाय आपको इसे यादृच्छिक डेटा के साथ सुरक्षित रूप से मिटा देना चाहिए। 2. आपके सेटअप में आपके पास 2 एलयूकेएस विभाजन हैं, भले ही आप उसी पासफ़्रेज़ का उपयोग करते हैं जो आपको दो बार दर्ज करना है, है ना?
solsTiCe

1. रैंडम डिस्क वाइप आधुनिक हार्डवेयर पर थोड़ा पुराना है - जीरो डिस्क को गैर-शैक्षणिक स्तर के उपायों से परे और निश्चित रूप से वाणिज्यिक डिस्क रिकवरी लैब से परे रखने के लिए पर्याप्त है। जब तक आप पहले से संवेदी डेटा का उपयोग नहीं कर रहे हैं, यह अनावश्यक है क्योंकि इसे लिखे गए सभी ब्लॉक एन्क्रिप्ट किए जाएंगे; वियर-लेवलिंग एल्गोरिदम के कारण आपको उस SSD का उपयोग नहीं करना चाहिए जिसके पास सादा संवेदनशील डेटा था। 2. हां, 2 LUKS विभाजन हैं, जैसा कि मैं पाठ में कहता हूं, आपको बूट के दौरान दोनों पासफ़्रेज़ के लिए संकेत दिया जाएगा।
एड्रियन

यादृच्छिक पोंछना SSD पर डेटा को सुरक्षित रूप से हटाने के लिए नहीं है, लेकिन जांच से बचने के लिए और 00000000zerazer000000000000 जैसे खाली से एन्क्रिप्टेड डेटा को भेद करने में सक्षम है। यहां आप बीच में एन्क्रिप्टेड डेटा देख सकते हैं। यह एक यादृच्छिक सूप के बीच में छिपे होने के बजाय आपके एन्क्रिप्शन को कमजोर करता है।
solsTiCe

मैं इस मार्ग के साथ जाने के बाद समाप्त हो गया जब मैं bcache स्थापित करना बंद कर दिया। ऐसा लगता है कि यह बहुत अच्छा काम कर रहा है | cache_utilization_pct | 79.096846147 |:। हालाँकि topमैं देख रहा हूँ कि iowait में 20-50% लगातार हैं। क्या यह बफरिंग का एक साइड इफेक्ट हो सकता है?
जीन जोर्डन

मैं वास्तव में जानने का दावा नहीं कर सकता - लेकिन मैं अनुमान लगा रहा हूं कि यह एसएसडी को लिखने को कम से कम करने में शामिल अनुकूलन का एक साइड-इफेक्ट हो सकता है। यहाँ IOWait के बारे में लेख: thattommyhall.com/2011/02/18/iops-linux-iostat
एड्रियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.