বুটে একাধিক এনক্রিপ্টড ডিস্ক আনলক করতে একটি একক পাসফ্রেজ ব্যবহার করা


23

আমার মেশিনে একটি এসএসডি রয়েছে, যেখানে আমি সিস্টেমটি এবং একটি এইচডিডি ইনস্টল করেছি, যা আমি বড় এবং / অথবা খুব কম ব্যবহৃত ফাইলগুলির স্টোরেজ হিসাবে ব্যবহার করি। উভয়ই এনক্রিপ্ট করা হয়েছে, তবে আমি তাদের জন্য একই পাসফ্রেজটি বেছে নেওয়া পছন্দ করেছি। এসএসডি মাউন্ট করা হয় /এবং এইচডিডি এ থাকে /usr/hdd(স্বতন্ত্র ব্যবহারকারীদের প্রত্যেকেরই এটির ডিরেক্টরি থাকে এবং তারা হোম ডিরেক্টরি থেকে পছন্দ মতো সিমলিংক করতে পারেন)।

সিস্টেমটি বুট করার পরে এটি এসএসডি-র জন্য তত্ক্ষণাত পাসফ্রেজ জিজ্ঞাসা করে এবং এইচডিডি-র জন্য এটির জন্য কয়েক সেকেন্ড পরে (এটি স্বয়ংক্রিয়ভাবে চালিত)। উভয় পাসফ্রেজ একইরূপে দেওয়া, সিস্টেমটি একবার জিজ্ঞাসা করার জন্য কি কনফিগার করার কোনও উপায় আছে?


আপনি সম্ভবত কোনও expectস্ক্রিপ্ট বা অনুরূপ লিখতে পারেন যা সিস্টেমটি না করে ডিস্কগুলি মাউন্ট করার জন্য ডেকে আনে। পরিবর্তে, সিস্টেমটি স্ক্রিপ্টটি কল করবে যা পাসওয়ার্ডের জন্য জিজ্ঞাসা করবে, এটি সংরক্ষণ করবে এবং এটি প্রতিটি মাউন্ট ক্রিয়াকলাপ সরবরাহ করবে।
h3rrmiller

যদি আমি আপনার ধারণাটি সঠিকভাবে বুঝতে পারি তবে এটি এসএসডি তে প্রয়োগ করা যাবে না, যেহেতু সিস্টেমটি বুট করে। তবে এটি অর্থহীন হয়ে যায়, যেহেতু আমার এখনও পৃথকভাবে এইচডিডি জন্য পাসফ্রেজ টাইপ করতে হবে। অথবা না?
শে

আপনি /etc/crypttab দ্বিতীয় ড্রাইভটি আনলক করতে ব্যবহার করতে পারেন ।
জেসনওয়ারিয়ান

1
@ জেসনওয়ারিয়ান যদি তা উত্তরে প্রসারিত করা যায় তবে ... উত্তরগুলি উত্তর হিসাবে পোস্ট করা উচিত, মন্তব্য নয়।
ডারোবার্ট

1
@ আডারবার্ট মাঝে মাঝে একটি ভাল উত্তর লেখার জন্য সময় বা ঝোঁক থাকে না।
জেসনওয়ারিয়ান

উত্তর:


24

দেবিয়ান ভিত্তিক বিতরণ:

উবুন্টু এবং ডেবিয়ান একটি পাসওয়ার্ড ক্যাশে স্ক্রিপ্ট অর্ণবপোত decrypt_keyctl সঙ্গে cryptsetup প্যাকেজ।

decrypt_keyctl স্ক্রিপ্ট একাধিক এনক্রিপ্ট করা LUKS লক্ষ্যগুলিতে একই পাসওয়ার্ড সরবরাহ করে, এটি আপনাকে একাধিকবার টাইপ করা থেকে বাঁচায়। এটি বিকল্প সহ ক্রিপ্টটাবে সক্ষম করা যায় keyscript=decrypt_keyctlকীফাইল ক্ষেত্রে একই শনাক্তকরণকারী লক্ষ্যগুলির জন্য একই পাসওয়ার্ড ব্যবহার করা হয় । প্রতিটি শনাক্তকারীর জন্য বুট পাসওয়ার্ড একবার জিজ্ঞাসা করা হয়।

একটি উদাহরণ ক্রিপ্টটাব :

<target>      <source>         <keyfile>      <options>
part1_crypt   /dev/disk/...    crypt_disks    luks,keyscript=decrypt_keyctl
part2_crypt   /dev/disk/...    crypt_disks    luks,keyscript=decrypt_keyctl

আপনি আপনার ক্রিপ্টাব আপডেট করার পরে , পরিবর্তনগুলি প্রয়োগ করতে আপনাকে initramfs আপডেট করতে হবে। ব্যবহার update-initramfs -u

Decrypt_keyctl এর জন্য সম্পূর্ণ রিডমিটি অবস্থিত /usr/share/doc/cryptsetup/README.keyctl

দুর্ভাগ্যক্রমে, এটি বর্তমানে বাগের কারণে সিস্টেমেড ডিআইএম ব্যবহার করে ডেবিয়ান সিস্টেমগুলিতে কাজ করে না (অন্যান্য init সিস্টেমগুলি প্রভাবিত করা উচিত নয়)। ডিবিয়ান ক্রিপ্টটাব ম্যান পৃষ্ঠাinitramfs বুটের ইন্ট্রামফেস পর্যায়ে প্রসেসিংকে বাধ্য করার বিকল্প হিসাবে কাজ করার পরামর্শ দেয় ।


বিতরণগুলি যা ডিক্রিপট_কিেক্টল লিপি সরবরাহ করে না:

যদি আপনার ডিস্ট্রিবিউশনের মাধ্যমে ডিক্রিপ্ট_কিআর্টিআরএল সরবরাহ না করা হয় তবে এনক্রিপ্ট করা রুট ফাইল সিস্টেমে কোনও কিফিল ব্যবহার করে ডিভাইসটি আনলক করা যায়। এটি যখন অন্য কোনও এনক্রিপ্টড ডিভাইসের আগে রুট ফাইল সিস্টেমটিকে আনলক করা এবং মাউন্ট করা যায় This

LUKS একাধিক কী স্লট সমর্থন করে। কী ফাইলটি অনুপলব্ধ / হারিয়ে গেলে এটি বিকল্পভাবে পাসওয়ার্ড ব্যবহার করে ডিভাইসটিকে আনলক করতে দেয়।

  1. এলোমেলো ডেটা সহ কী উত্পন্ন করুন এবং কেবল ফাঁস এড়াতে কেবল তার পড়ার যোগ্য মালিকের কাছে এর অনুমতিগুলি সেট করুন। নোট করুন যে কী ফাইলটি প্রথমে আনলক হওয়া মূল বিভাজনে থাকা দরকার।

    dd if=/dev/urandom of=<path to key file> bs=1024 count=1
    chmod u=rw,g=,o= <path to key file>
    
  2. আপনার LUKS ডিভাইসে কী যুক্ত করুন

    cryptsetup luksAddKey <path to encrypted device> <path to key file>
    
  3. কী ফাইলটি ব্যবহার করতে ক্রিপ্টটাব কনফিগার করুন । প্রথম লাইনটি রুট ডিভাইস হওয়া উচিত, যেহেতু ডিভাইসগুলি ক্রিপ্টটবে তালিকাভুক্ত হিসাবে একই ক্রমে আনলক করা থাকে । কী ফাইলগুলির জন্য পরম পাথ ব্যবহার করুন।

    <target>      <source>         <keyfile>                  <options>
    root_crypt    /dev/disk/...    none                       luks
    part1_crypt   /dev/disk/...    <path to key file>         luks
    

রিডমের প্রথম লাইনগুলি থেকে এটি খুব আশাব্যঞ্জক দেখাচ্ছে, ধন্যবাদ আমি আগামীকাল এটি পরীক্ষা করব (এখনই রিবুট করতে চাই না)।

দুর্ভাগ্যক্রমে, এটি কার্যকর হয় না (যেমন কোনও পরিবর্তন নেই)। আমারcrypttab দেখুন (আমি UUID=সিস্টেম ইনস্টলার দ্বারা তৈরি স্পর্শ করি নি , আমি অনুমান করি এটির উচিত নয়) এবং ফলস্বরূপ এন্ট্রিগুলি/var/log/syslog । ত্রুটিগুলি এক প্রকারের বোধগম্য, তবে সেগুলি সম্পর্কে কী করব তা আমার কোনও ধারণা নেই। ফাইল /lib/cryptsetup/scripts/decrypt_keyctlবিদ্যমান, তাই কেন জানি না এটি অজানা বিকল্প সম্পর্কে অভিযোগ করে।
কীফাইল

আপনি কি ডিক্রিপ্ট_কিআরেক্টলটি ইআর্রামফের সাথে অন্তর্ভুক্ত হয়ে গেছে তা যাচাই করেছেন? চিত্রটি আপডেট করার সময় ভার্বোস বিকল্পটি ব্যবহার করে এটি পরীক্ষা করুন: update-initramfs -u -k $(uname -r) -vএটির আউটপুট হওয়া উচিত Adding binary /lib/cryptsetup/scripts/decrypt_keyctl
সেবাসথ

1
lsinitramfs /boot/initrd.img-$(uname -r)
Initramfs

3
ওহো, দুঃখিত, এখন আমি আরো মনোযোগ কি প্রদান করা যে update-initramfsবলেন, আমি এই লক্ষ্য: E: /usr/share/initramfs-tools/hooks/cryptkeyctl failed with return 1.। কিছুটা গুগল করার পরে, আমি জানতে পারলাম আমার সম্ভবত keyutilsপ্যাকেজ দরকার (সত্যিই ইনস্টল করা হয়নি)। এখন update-initramfsসফল এবং lsinitramfsউল্লেখ আছে decrypt_keytls। পরবর্তী বুটের পরে আপডেট হবে (সম্ভবত আগামীকাল)।
দ্বিগুণ করুন

3

উপরে ডেবিয়ানে আমার কার্যনির্বাহী, উপরের বাগটি @sebasth দ্বারা রেফারেন্স দেওয়া হয়েছে।

আমার সেটআপ কিছুটা আলাদা। আমার কাছে একটি এনক্রিপ্ট করা মূল পার্টিশন এবং একটি গুচ্ছ রাইড ডিস্ক রয়েছে। আমার জন্য, আমাকে ক্রিপ্টটাবটিতে একটি initramfs বিকল্প যুক্ত করতে হয়েছিল:

<target>      <source>         <keyfile>      <options>
part1_crypt   /dev/disk/...    crypt_disks    plain,cipher=aes-xts-plain64,keyscript=decrypt_keyctl,initramfs
part2_crypt   /dev/disk/...    crypt_disks    plain,cipher=aes-xts-plain64,keyscript=decrypt_keyctl,initramfs

এটি আপডেট-থ্রাইমফেসগুলিকে বলছে যে আমি এই ক্রিপ্টটাব এন্ট্রিগুলিকে initramfs এ স্থাপন করতে চাই। আমি দৌড়ে আমার ক্রিপ্টটাব পরীক্ষা করেছি

cryptdisks_start part1_crypt
cryptdisks_start part2_crypt

নোট করুন যে আমার রেইড ডিস্কগুলি প্লেন ডিএম-ক্রিপ্ট। এর অর্থ হ'ল আমি লুকস কীফিল পদ্ধতিটি ব্যবহার করতে পারছি না যা সিস্টেমেড কী স্ক্রিপ্ট বাগের চারপাশে কাজ করে। সরল ডিএম-ক্রিপ্টের জন্য, আমাকে পাসফ্রেজটি সরলরেখাতে সংরক্ষণ করতে হবে।

এনক্রিপ্ট করা ডিস্কগুলি update-initramfsচালানোর আগে মাউন্ট করতে হবে ; অন্যথায় এটি ত্রুটি নিক্ষেপ করবে। আমার থ্রিমারফগুলি তৈরি করার সময় আমাকে নিম্নলিখিত লাইনগুলি সন্ধান করতে হয়েছিল:

update-initramfs -k -u -v | grep 'keyctl'

যা নিম্নলিখিত দুটি ফাইল দেখিয়েছে:

/bin/keyctl
cryptkeyctl

initramfs এ যোগ করা হচ্ছে।

পরিশেষে, উপরের রেফারেন্সযুক্ত বাগটি মোকাবেলা করার জন্য, সিস্টেমকে আমার ক্রিপ্টটাব পরিচালনা করা অক্ষম করতে হয়েছিল: systemd ক্রিপ্টটাবটিতে কী-স্ক্রিপ্ট বিকল্পটি সমর্থন করে না। এর জন্য, আমি কার্নেল বিকল্পটি যুক্ত করেছি

GRUB_CMDLINE_LINUX_DEFAULT="quiet luks.crypttab=no"     

থেকে / ইত্যাদি / ডিফল্ট / গ্রাব এবং দৌড়ে update-grub। সিস্টেমেড এখন ক্রিপ্টটাব উপেক্ষা করে এবং সমস্ত এনক্রিপ্ট করা পার্টিশন initramfs এ লোড করা হয়।

যেহেতু আমার কাছে একটি এনক্রিপ্ট করা মূল পার্টিশন রয়েছে, তাই ক্রিপ্টরুট আমার কীটি ক্যাশে দেবে না। এর অর্থ আমাকে আমার পাসওয়ার্ড দু'বার প্রবেশ করতে হবে; একটি রুট বিভাজনের জন্য এবং একবার আমার রেড অ্যারের জন্য।


1

আরেকটি বিকল্প হ'ল /lib/cryptsetup/scripts/decrypt_derivedস্ক্রিপ্টটি ব্যবহার করা , যা ডিবিয়ান / উবুন্টুতে ক্রিপ্টসেটআপেরও একটি অংশ।

কীটি ক্যাশে করার পরিবর্তে, আপনি দ্বিতীয় ডিস্কের অতিরিক্ত পাসওয়ার্ড হিসাবে একটি ডিস্কের ভলিউম কী ব্যবহার করেন। এটির জন্য দ্বিতীয় (এবং তৃতীয়, ইত্যাদি) এনক্রিপ্টড ডিস্কে একটি দ্বিতীয় পাসওয়ার্ড যুক্ত করা দরকার তবে LUKS সেটিকে সমর্থন করে। এই সমাধানটি কাজ করে যদি আপনার একাধিক এনক্রিপ্টড ডিস্ক একই পাসওয়ার্ড ব্যবহার না করে।

Sda6crypt থেকে sda5 এ কী যুক্ত করার উদাহরণ:

Sda5 এর অতিরিক্ত পাসওয়ার্ড হিসাবে sda6crypt এর ভলিউম কী যুক্ত করুন:

mkfifo fifo
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > fifo &
cryptsetup luksAddKey /dev/sda5 fifo
rm fifo

স্বয়ংক্রিয়ভাবে আনলক হতে sda5crypt কনফিগার করুন /etc/crypttab

ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,initramfs,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab

এটি fifoডিস্কের অস্থায়ী ফাইলটিতে ভলিউম কীটি সংরক্ষণ না করে কীটি পাস করার জন্য একটি নামযুক্ত পাইপ ( ) ব্যবহার করে।

keyscriptবিকল্প শুধুমাত্র যদি কাজ করে crypttabডেবিয়ান মূল cryptsetup সরঞ্জাম দ্বারা প্রক্রিয়াকৃত হয়, systemd হল reimplementation বর্তমানে সমর্থন করে না। যদি আপনার সিস্টেমটি সিস্টেমড ব্যবহার করে (যা বেশিরভাগ সিস্টেমে থাকে), আপনার সিস্টেমে initramfsস্টার্ট শুরুর আগে ক্রিপসেটআপ সরঞ্জামগুলির মাধ্যমে আরআরআরডে প্রসেসিং জোর করার বিকল্প প্রয়োজন need

Https://unix.stackexchange.com/a/32551/50793 এর উপর ভিত্তি করে


বুঝতে পারছি এটি একটি সুন্দর সমাধান ডাবিয়ান 10 বাস্টারে কোনও হিক্কার নেই!
জানুস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.