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.