Montage von LUKS über die Befehlszeile


11

Wenn in nautilusoder cajaich auf das Symbol einer verschlüsselten Festplatte klicke und mein Kennwort eingebe, wird das zugrunde liegende Blockgerät zugeordnet /dev/mapper/luks-$UUIDund um gemountet /media/$USER/$DISK, ohne dass ein Root-Kennwort erforderlich ist. Gibt es eine Möglichkeit, diesen Prozess über die Befehlszeile ohne GUI aufzurufen, einschließlich der Vermeidung von sudo und der Möglichkeit, den Mountpoint wieder von der GUI abzumelden.


Ohne sicher zu sein (daher eher ein Kommentar als eine Antwort), glaube ich, dass die GUI dies durch udisks(oder udisks2) tut . Die Untersuchung der Optionen über das CLI-Dienstprogramm kann weitere Antworten liefern.
Wraeth

Es ist auch möglich, dass Sie das Passwort beim ersten Mal eingegeben und ausgewählt haben, um es in Ihrem Login-Schlüsselbund zu speichern. Daher technisch es tut ein Passwort verwenden, aber die automatisch erfolgt , so dass Sie es nicht sehen.
Wraeth

Antworten:


12

Ich kenne keinen einzigen Befehl, um dies zu tun. Die GUI-Programme fragen die Festplatte ziemlich genau ab, um den "richtigen" Ansatz zu wählen, und Sie müssen einen Teil dieser Arbeit selbst erledigen. Sie brauchen jedoch kein Sudo, und ich denke, die daraus resultierende Abfolge von Ereignissen ist relativ schmerzlos.

Die kurze Antwort

Verwendung udisksctlaus der udisks2Packung:

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

Ihr Benutzerkonto muss entsprechend autorisiert sein, damit die oben genannten Funktionen funktionieren. Unter Debian und Ubuntu bedeutet dies, dass Sie Ihr Konto zur plugdevGruppe hinzufügen .

Wenn Sie mit der Festplatte fertig sind:

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

So richten Sie die Dinge ein

Hier erfahren Sie, wie Sie die Einstellungen (über die Befehlszeile) vornehmen können, um die Verwendung der Festplatte so einfach wie möglich zu gestalten. Ich gehe davon aus, dass Sie das gesamte USB-Laufwerk als ein einziges Dateisystem verwenden möchten. Andere Konfigurationen erfordern Änderungen an den Anweisungen. Vorsichtsmaßnahme bei Variationen: Ich habe keine Möglichkeit gefunden, LVM in dem verschlüsselten Container zu verwenden, mit dem ein nicht privilegiertes Konto alles trennen kann. (Ich sehe keine Möglichkeit, eine Volume-Gruppe über zu deaktivieren udisksctl.)

Zur Veranschaulichung sagen wir, dass die Festplatte ist /dev/sda. Sie benötigen einen Namen für das Dateisystem, damit Sie später leichter darauf verweisen können. Ich werde " example" verwenden.

Partitionieren Sie die Festplatte

Führen sudo parted /dev/sdaund führen Sie die folgenden Befehle ein :

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

Der mkpartBefehl fordert Sie wahrscheinlich auf, die Parameter leicht anzupassen. Sie sollten in Ordnung sein, die empfohlenen Nummern zu akzeptieren.

Die Partition ist jetzt über verfügbar /dev/disk/by-partlabel/example-part.

Erstellen und mounten Sie die LUKS-Partition

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

Gehen Sie die Eingabeaufforderungen durch.

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

Das verschlüsselte Gerät ist jetzt unter verfügbar /dev/mapper/example-unlocked. Dies wird keine dauerhafte Sache sein; Es ist nur für den Einrichtungsprozess.

Erstellen Sie Ihr Dateisystem

Angenommen, das von Ihnen verwendete Dateisystem ist XFS. So ziemlich jedes andere traditionelle Dateisystem funktioniert genauso. Das Wichtigste ist, ein Etikett hinzuzufügen, auf das Sie später verweisen können:

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

Auf das Blockgerät des Dateisystems kann jetzt über zugegriffen werden /dev/disk/by-label/example.

Festlegen von Dateisystemberechtigungen

Standardmäßig ist das Dateisystem nur über root zugänglich. In den meisten Fällen möchten Sie wahrscheinlich, dass Ihr Benutzerkonto auf die Dateien zugreifen kann. Angenommen, Ihr Kontoname lautet " user":

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

Alles schließen

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

Verwenden Sie Ihr Dateisystem

Dies tun Sie regelmäßig. Nach dem Anschließen des USB-Laufwerks

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

Wenn Ihr Benutzerkonto " user" ist, wird das Dateisystem jetzt unter bereitgestellt /media/user/example.

So heben Sie die Bereitstellung des Dateisystems auf:

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

Jetzt können Sie das USB-Laufwerk trennen.


Ich habe ein Open-Source-Bash-Skript erstellt, das Ihren Abschnitt "Verwenden Sie Ihr Dateisystem" automatisiert und vereinfacht: github.com/JerichoJyant/usbkey . Es ist für USB-Sticks konzipiert. Ich plane, das hier beschriebene Setup auch in das Skript aufzunehmen.
Josh Patton

3

Die Antwort von Asciiphil scheint mir richtig zu sein und sollte als solche gekennzeichnet werden.

Es beginnt: "Ich kenne keinen einzigen Befehl, um dies zu tun." Ich auch nicht und habe eine entsprechende Feature-Anfrage geöffnet . Um dieses Problem zu umgehen, können Sie ein Wrapper-Skript erstellen, mit dem Sie eine Partition mit einem einzigen Befehl entsperren und bereitstellen können.

Angenommen, Sie verwenden Bash, speichern Sie das folgende Skript als z. B. unlock-and-mountmachen Sie es ausführbar und legen Sie es in einem Verzeichnis in Ihrem ab PATH. Anschließend können Sie ein Gerät in einem Schritt mit entsperren und einbinden unlock-and-mount /dev/disk/by-id/my-device-part-X.

Warnung: Dies hängt vom Parsen der udisksctlan stdout gesendeten Nachrichten und von der Stabilität der udisksctlBefehlszeilenschnittstelle ab. Dies ist fragil, laut der udisksctl Manpage , die sagt:

Das Programm [Dieses] ist nicht für die Verwendung durch Skripte oder andere Programme vorgesehen. Optionen / Befehle können sich in Zukunft auch in Wartungsversionen auf inkompatible Weise ändern.

In der Zwischenzeit ist hier das Skript, das jetzt funktioniert:

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

@guntbert, bitte lesen Sie meine Antwort noch einmal;)
sampablokuper

Hoppla, keine Ahnung, wie ich diesen 😬
Guntbert

@guntbert, keine sorge. System 1 kann das Gehirn so leicht entführen;)
sampablokuper

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.