Montowanie LUKS z wiersza poleceń


11

Kiedy w nautiluslub cajakliknięciu na ikonę zaszyfrowanego dysku i wprowadzić hasło, podstawowe urządzenie blok zostaje odwzorowany na /dev/mapper/luks-$UUIDi zostanie zamontowany /media/$USER/$DISK, nie wymaga hasła administratora. Czy istnieje sposób na wywołanie tego procesu z wiersza poleceń, bez GUI, w tym usunięcie sudo i umożliwienie mountpointowi odmontowania z GUI.


Bez pewności (stąd komentarz zamiast odpowiedzi) wierzę, że GUI robi to poprzez udisks(lub udisks2). Zbadanie opcji za pomocą narzędzia CLI może dostarczyć dalszych odpowiedzi.
— odzywa się

Możliwe jest również, że hasło zostało wprowadzone po raz pierwszy i wybrane do zapisania w breloku do logowania. Dlatego, technicznie to nie używać hasła, ale jego odbywa się automatycznie, więc nie widzę.
— odzywa się

Odpowiedzi:


12

Nie wiem, jak to zrobić za pomocą jednego polecenia. Programy GUI przeprowadzają dość przesłuchanie dysku, aby przyjąć „właściwe” podejście i będziesz musiał wykonać część tej pracy sam. Jednak nie potrzebujesz sudo i myślę, że wynikowa sekwencja wydarzeń jest stosunkowo bezbolesna.

Krótka odpowiedź

Użyj udisksctlz udisks2pakietu:

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

Twoje konto użytkownika musi być odpowiednio autoryzowane, aby powyższe działało. W systemach Debian i Ubuntu oznacza to dodanie konta do plugdevgrupy.

Po zakończeniu pracy z dyskiem:

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

Jak skonfigurować rzeczy

Oto jak możesz skonfigurować różne rzeczy (za pomocą wiersza poleceń), aby proces korzystania z dysku był jak najbardziej bezbolesny. Zakładam, że chcesz wykorzystać cały dysk USB jako pojedynczy system plików. Inne konfiguracje będą wymagać modyfikacji instrukcji. Zastrzeżenie dotyczące odmian: nie znalazłem sposobu na użycie LVM w zaszyfrowanym kontenerze, który pozwoliłby nieuprzywilejowanemu kontu rozłączyć wszystko. (Nie widzę sposobu na dezaktywację grupy woluminów przez udisksctl.)

Dla celów ilustracji powiemy, że dysk jest /dev/sda. Będziesz potrzebować nazwy systemu plików, aby ułatwić późniejsze korzystanie z niego. Użyję „ example”.

Podziel dysk na partycje

Uruchom sudo parted /dev/sdai uruchom następujące polecenia:

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

mkpartKomenda będzie prawdopodobnie poprosi, aby dostosować nieco parametry. Powinieneś być w porządku, akceptując zalecane liczby.

Partycja będzie teraz dostępna za pośrednictwem /dev/disk/by-partlabel/example-part.

Utwórz i zamontuj partycję LUKS

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

Przejdź przez monity.

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

Zaszyfrowane urządzenie jest teraz dostępne pod adresem /dev/mapper/example-unlocked. To nie będzie trwałe; to tylko proces instalacji.

Utwórz swój system plików

Załóżmy, że używany system plików to XFS. Prawie każdy inny tradycyjny system plików będzie działał w ten sam sposób. Ważne jest, aby dodać etykietę, do której można będzie się później odwoływać:

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

Do urządzenia blokującego system plików można teraz uzyskać dostęp za pośrednictwem /dev/disk/by-label/example.

Ustaw uprawnienia systemu plików

Domyślnie system plików będzie dostępny tylko przez root. W większości przypadków prawdopodobnie chcesz, aby pliki były dostępne dla twojego konta użytkownika. Zakładając, że nazwa Twojego konta to „ user”:

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

Zamknij wszystko w dół

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

Użyj swojego systemu plików

To będziesz robić regularnie. Po podłączeniu dysku USB

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

Jeśli twoje konto użytkownika to „ user”, system plików zostanie teraz zamontowany na /media/user/example.

Aby odmontować system plików:

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

Teraz możesz odłączyć dysk USB.


Stworzyłem skrypt bash typu open source, który automatyzuje i upraszcza sekcję „Użyj systemu plików”: github.com/JerichoJyant/usbkey . Jest przeznaczony do dysków flash USB. Planuję również dołączyć opisany tutaj skrypt do skryptu.
— Josh Patton

3

Odpowiedź przez asciiphil wydaje mi się słuszne i powinny być oznaczone jako takie.

Zaczyna się: „Nie wiem, jak to zrobić za pomocą jednego polecenia”. Ja też nie otworzyłem odpowiedniego żądania funkcji . Aby obejść ten problem, można utworzyć skrypt opakowujący, który umożliwia odblokowanie i zamontowanie partycji za pomocą jednego polecenia.

Zakładając, że używasz Basha, zapisz poniższy skrypt, np. unlock-and-mount, Aby był wykonywalny i umieść go w katalogu w swoim PATH. Będziesz wtedy mógł odblokować i zamontować urządzenie w jednym kroku za pomocą unlock-and-mount /dev/disk/by-id/my-device-part-X.

Ostrzeżenie: polega to na analizie udisksctlwysyłanych komunikatów na standardowe wyjście oraz na stabilności udisksctlinterfejsu wiersza poleceń. Jest kruchy, zgodnie ze udisksctl strony człowieka , który mówi:

[Ten] program nie jest przeznaczony do użytku przez skrypty lub inne programy - opcje / polecenia mogą się zmieniać w niekompatybilny sposób w przyszłości, nawet w wydaniach konserwacyjnych.

Tymczasem oto skrypt, który teraz działa:

#!/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"

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.