कमांड लाइन से बढ़ते हुए LUKS


11

जब में nautilusया cajaमैं एक एन्क्रिप्टेड डिस्क के आइकन पर क्लिक करता हूं और अपना पासवर्ड दर्ज करता हूं, तो अंतर्निहित ब्लॉक डिवाइस को मैप किया जाता है /dev/mapper/luks-$UUIDऔर यह माउंट हो जाता है /media/$USER/$DISK, किसी रूट पासवर्ड की आवश्यकता नहीं होती है। क्या जीयूआई के बिना कमांड लाइन से इस प्रक्रिया को लागू करने का एक तरीका है, जिसमें सुडो को कम करना और जीयूआई से फिर से अनमाउंट होने में सक्षम माउंटपॉइंट शामिल है।


कुछ किए बिना (इसलिए उत्तर के बजाय एक टिप्पणी) मेरा मानना ​​है कि जीयूआई यह udisks(या udisks2) के माध्यम से करता है । इसकी सीएलआई उपयोगिता से विकल्पों की जांच करने से आगे के उत्तर मिल सकते हैं।
मार्थ 7'15

इसके अलावा, यह संभव है कि आपने पहली बार पासवर्ड दर्ज किया है और इसे अपने लॉगिन कीरिंग में सहेजने के लिए चुना है। इसलिए, तकनीकी रूप से यह एक पासवर्ड का उपयोग करता है , लेकिन यह स्वचालित रूप से किया जाता है ताकि आप इसे न देखें।
लपेटें

जवाबों:


12

मुझे यह करने के लिए एकल-कमांड तरीके का पता नहीं है। जीयूआई कार्यक्रम "सही" दृष्टिकोण लेने के लिए डिस्क की थोड़ी पूछताछ कर रहे हैं और आपको उस काम को स्वयं करने की आवश्यकता होगी। हालांकि, आपको सुडो की आवश्यकता नहीं है, और मुझे लगता है कि घटनाओं का परिणामी क्रम अपेक्षाकृत दर्द रहित है।

संक्षिप्त उत्तर

पैकेज udisksctlसे उपयोग करें udisks2:

udisksctl unlock -b /path/to/disk/partition
udisksctl mount -b /path/to/unlocked/device

उपरोक्त कार्य के लिए आपके उपयोगकर्ता खाते को उचित रूप से अधिकृत करना होगा। डेबियन और उबंटू पर, इसका मतलब है कि plugdevसमूह में अपना खाता जोड़ना ।

जब आप डिस्क के साथ कर रहे हैं:

udisksctl unmount -b /path/to/unlocked/device
udisksctl lock -b /path/to/disk/partition
udisksctl power-off -b /path/to/disk/or/partition

कैसे चीजों को सेट करें

यहां बताया गया है कि आप डिस्क को कमांड लाइन के माध्यम से कैसे सेट कर सकते हैं ताकि डिस्क का उपयोग करने की प्रक्रिया को यथासंभव दर्दनाक बना सकें। मुझे लगता है कि आप USB ड्राइव की संपूर्णता को एक सिंगल फाइल सिस्टम के रूप में उपयोग करना चाहते हैं। अन्य कॉन्फ़िगरेशन में निर्देशों में संशोधन की आवश्यकता होगी। विविधताओं पर चेतावनी: मुझे एन्क्रिप्टेड कंटेनर में LVM का उपयोग करने का एक तरीका नहीं मिला है जो एक अप्रकाशित खाते को सब कुछ डिस्कनेक्ट करने की अनुमति देगा। (मुझे किसी वॉल्यूम समूह को निष्क्रिय करने का कोई तरीका नहीं दिखता है udisksctl)

चित्रण के प्रयोजनों के लिए, हम कहेंगे कि डिस्क है /dev/sda। बाद में इसे संदर्भित करना आसान बनाने के लिए आपको फ़ाइल सिस्टम के लिए एक नाम की आवश्यकता होगी। मैं " example" का उपयोग करूँगा ।

डिस्क को विभाजन

sudo parted /dev/sdaनिम्नलिखित कमांड चलाएं और चलाएं:

mklabel gpt
mkpart example-part 1MiB -1s
quit

mkpartआदेश शायद मापदंडों थोड़ा समायोजित करने का संकेत होगा। आपको इसकी अनुशंसित संख्याओं को स्वीकार करना ठीक होना चाहिए।

विभाजन अब के माध्यम से उपलब्ध होगा /dev/disk/by-partlabel/example-part

LUKS विभाजन बनाएँ और माउंट करें

sudo cryptsetup luksFormat /dev/disk/by-partlabel/example-part

संकेतों के माध्यम से जाओ।

sudo cryptsetup luksOpen /dev/disk/by-partlabel/example-part example-unlocked

एन्क्रिप्टेड डिवाइस अब उपलब्ध है /dev/mapper/example-unlocked। यह कोई स्थायी बात नहीं है; यह सिर्फ सेटअप प्रक्रिया के लिए है।

अपने फाइलसिस्टम बनाएँ

चलिए मान लेते हैं कि जिस फाइलसिस्टम का आप उपयोग कर रहे हैं, वह XFS है। बहुत ज्यादा किसी भी अन्य पारंपरिक फाइल सिस्टम उसी तरह काम करेगा। महत्वपूर्ण बात यह है कि एक लेबल जोड़ना है जिसे आप बाद में संदर्भित कर सकते हैं:

sudo mkfs -t xfs -L example /dev/mapper/example-unlocked

फाइलसिस्टम के ब्लॉक डिवाइस को अब इसके जरिए एक्सेस किया जा सकता है /dev/disk/by-label/example

फ़ाइल सिस्टम अनुमतियाँ सेट करें

डिफ़ॉल्ट रूप से, फ़ाइल सिस्टम केवल रूट द्वारा पहुँच योग्य होगा। ज्यादातर मामलों में, आप शायद यह चाहते हैं कि फाइलें आपके उपयोगकर्ता खाते द्वारा सुलभ हों। आपके खाते का नाम " user" मान लिया गया है :

udisksctl mount -b /dev/disk/by-label/example
sudo chown user:user /media/user/example

सब कुछ बंद करें

udisksctl unmount -b /dev/disks/by-label/example
sudo cryptsetup luksClose example-unlocked

अपने फाइलसिस्टम का उपयोग करें

यह वही है जो आप नियमित रूप से करेंगे। USB ड्राइव में प्लग करने के बाद,

udisksctl unlock -b /dev/disks/by-partlabel/example-part
udisksctl mount -b /dev/disks/by-label/example

यदि आपका उपयोगकर्ता खाता " user" है, तो फाइलसिस्टम अब आरोहित हो जाएगा /media/user/example

फ़ाइल सिस्टम को अनमाउंट करने के लिए:

udisksctl unmount -b /dev/disks/by-label/example
udisksctl lock -b /dev/disks/by-partlabel/example-part
udisksctl power-off -b /dev/disks/by-partlabel/example-part

अब आप USB ड्राइव को डिस्कनेक्ट कर सकते हैं।


मैंने एक ओपन सोर्स बैश स्क्रिप्ट बनाई जो आपके "यूज़ योर फाइल्स सिस्टम" सेक्शन को स्वचालित और सरल बनाती है: github.com/JerichoJyant/usbkey । यह USB फ्लैश ड्राइव के लिए डिज़ाइन किया गया है। मैं यहाँ स्क्रिप्ट में आपके द्वारा बताए गए सेटअप को शामिल करने की योजना बना रहा हूँ।
जोश पैटन

3

जवाब से asciiphil सही होने के लिए मुझे लगता है, और इस तरह के रूप में चिह्नित किया जाना चाहिए।

यह शुरू होता है, "मुझे ऐसा करने का एकल-आदेश तरीका नहीं पता है।" मैं या तो नहीं है, और एक इसी सुविधा का अनुरोध खोला है । एक वर्कअराउंड के रूप में, एक विभाजन को अनलॉक करने और माउंट करने के लिए एक एकल-कमांड तरीका प्रदान करने के लिए एक आवरण स्क्रिप्ट बना सकता है।

मान लें कि आप बैश का उपयोग करते हैं, तो नीचे दी गई स्क्रिप्ट को सहेजें, जैसे unlock-and-mount, इसे निष्पादित करें, और इसे अपनी निर्देशिका में रखें PATH। फिर आप एक डिवाइस को एक चरण में अनलॉक और माउंट करने में सक्षम होंगे unlock-and-mount /dev/disk/by-id/my-device-part-X

चेतावनी: यह संदेश udisksctlभेजने पर निर्भर करता है संदेश भेजने के लिए, और udisksctlकमांड लाइन इंटरफ़ेस की स्थिरता पर । यह udisksctl मैन पेज के अनुसार नाजुक है , जो कहता है:

[यह] कार्यक्रम स्क्रिप्ट या अन्य कार्यक्रमों द्वारा उपयोग करने के लिए अभिप्रेत नहीं है - विकल्प / आदेश भविष्य में असंगत तरीके से रखरखाव के रिलीज में भी बदल सकते हैं।

इस बीच, यहाँ स्क्रिप्ट है, जो अभी के लिए काम करती है:

#!/usr/bin/env bash
# A convenience wrapper around `udisksctl`.

# Trace execution 
set -x

# Abort on errors. (I find this helpful, despite the cautions given in
# http://mywiki.wooledge.org/BashFAQ/105 and
# http://mywiki.wooledge.org/BashFAQ/112 .)
set -e
set -u

# Define functions
die () {
    echo >&2 "$@"
    exit 1
}

# Validate input argument(s) 
[[ "$#" -eq 1 ]] || die "Exactly 1 argument required: path to partition ID. $# given"
[[ -b "$1" ]]    || die "$1 is not a block device"
[[ "$1" == /dev/disk/by-id/* ]] || die "$1 does not begin '/dev/disk/by-id/'"

# Unlock partition
unlockedpart="$(udisksctl unlock -b "$1" |\
 tail -n1 |\
 sed -e 's/^Unlocked \/dev\/[[:print:]]\+ as \([[:print:]]\+\).$/\1/' \
)"

# Mount unlocked partition
udisksctl mount -b "$unlockedpart"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.