Монтирование LUKS из командной строки

11

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

PSkocik
источник
Не будучи уверенным (следовательно, комментарий, а не ответ), я считаю, что GUI делает это через udisks(или udisks2). Изучение вариантов из утилиты CLI может дать дополнительные ответы.
поздравляет
Кроме того, возможно, что вы ввели пароль в первый раз и решили сохранить его в своем брелоке для входа. Таким образом, технически это действительно использовать пароль, но его сделано автоматически , так что вы не видите его.
поздравляет

Ответы:

12

Я не знаю одного способа сделать это. Программы с графическим интерфейсом делают достаточный запрос на диске, чтобы выбрать «правильный» подход, и вам придется выполнить часть этой работы самостоятельно. Тем не менее, вам не нужен sudo, и я думаю, что последовательность событий относительно безболезненна.

Краткий ответ

Используйте 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.

Установить разрешения файловой системы

По умолчанию файловая система будет доступна только пользователю 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-накопитель.

asciiphil
источник
Я создал скрипт bash с открытым исходным кодом, который автоматизирует и упрощает ваш раздел «Использование вашей файловой системы»: github.com/JerichoJyant/usbkey . Он предназначен для флешек. Я планирую включить в сценарий настройки, которые вы описали здесь.
Джош Паттон
3

Ответ на asciiphil мне кажется правильным, и должны быть помечены как таковые.

Начинается: «Я не знаю, как это сделать одной командой». Я тоже нет, и открыл соответствующий запрос функции . В качестве обходного пути можно создать скрипт-обертку, чтобы обеспечить способ разблокировки и монтирования раздела с помощью одной команды.

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

Предупреждение: это зависит от анализа сообщений, udisksctlотправляемых на стандартный вывод, и от стабильности 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"
sampablokuper
источник