Монтаж LUKS з командного рядка


11

Коли в nautilusабо cajaя натискаю на значку зашифрованого диска і введіть свій пароль, блоковий пристрій , що лежить в основі отримує відображається в /dev/mapper/luks-$UUIDі змонтовано на /media/$USER/$DISK, не потрібно пароль адміністратора. Чи є спосіб викликати цей процес з командного рядка, без графічного інтерфейсу, включаючи усунення sudo та можливість точки монтажу, щоб знову відключити його від GUI.


Не будучи певним (звідси коментар, а не відповідь), я вважаю, що графічний інтерфейс робить це через udisks(або udisks2). Дослідження варіантів з його утиліти CLI може дати подальші відповіді.
wraeth

Також можливо, що ви вперше ввели пароль і вибрали його для збереження у вашій реєстраційній мережі. Таким чином, технічно це дійсно використовувати пароль, але його зроблено автоматично , так що ви не бачите його.
wraeth

Відповіді:


12

Я не знаю, як це зробити з однією командою. Програми графічного інтерфейсу доволі допитуються на диску, щоб скористатися «правильним» підходом, і вам доведеться виконати частину цієї роботи самостійно. Тобі не потрібно судо, і я думаю, що послідовність подій відносно безболісна.

Короткий відповідь

Використання udisksctlз udisks2пакета:

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

Для роботи вищевказаного облікового запису потрібно буде відповідним чином авторизуватися. У Debian та Ubuntu це означає додавання вашого облікового запису до 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.

Встановити дозволи Filesystem

За замовчуванням до файлової системи буде доступний лише root. У більшості випадків ви, мабуть, хочете, щоб файли були доступні вашим обліковим записом користувача. Припустимо, що ім'я вашого облікового запису " 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-накопичувач.


Я створив скрипт bash з відкритим кодом, який автоматизує та спрощує розділ "Використовувати свою файлову систему": github.com/JerichoJyant/usbkey . Він призначений для флеш-накопичувачів usb. Я планую включити налаштування, яке ви описали тут, у сценарій.
Джош Паттон

3

Відповідь на asciiphil мені здається правильним, і повинні бути позначені як такі.

Починається: "Я не знаю способу це зробити з однією командою". Я також не відкрив відповідний запит на функції . Як вирішення, можна створити сценарій обгортки, щоб забезпечити єдиний командний спосіб розблокувати та змонтувати розділ.

Припустимо, що ви використовуєте Bash, збережіть сценарій нижче як, наприклад unlock-and-mount, зробіть його виконуваним і помістіть його в каталог у своєму PATH. Потім ви зможете розблокувати та змонтувати пристрій за один крок unlock-and-mount /dev/disk/by-id/my-device-part-X.

Попередження: це спирається на розбір повідомлень, що udisksctlнадсилаються до stdout, та на стабільність udisksctlінтерфейсу командного рядка. Це неміцно, відповідно до udisksctl сторінки man , на якій сказано:

[Ця] програма не призначена для використання сценаріями чи іншими програмами - параметри / команди можуть змінюватися несумісними способами в майбутньому навіть у випусках з обслуговування.

Тим часом ось сценарій, який працює зараз:

#!/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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.