Kann Cryptsetup Zuordnungen aus / etc / crypttab lesen?

8

Ich habe einen virtualisierten CentOS 7-Server, der mehrere kennwortgeschützte verschlüsselte Volumes bereitstellen muss. Ich kann die Geräte beim Booten nicht automatisch zuordnen, da ich während des Startvorgangs keinen Zugriff auf die Konsole habe, um das Entschlüsselungskennwort einzugeben. Nach dem Neustart des Systems muss ich manuell ausführen

cryptsetup luksOpen <device> <name>

um jedes zugrunde liegende Blockgerät einem verschlüsselten Gerät zuzuordnen. Dazu müssen Sie die UUID jedes zugrunde liegenden Blockgeräts und den Namen, dem es zugeordnet ist, notieren. Gibt es eine einfache Möglichkeit, diesen Prozess zu automatisieren? Ich kann die Informationen /etc/crypttabmit dem noautoSchlüsselwort hinzufügen , um zu verhindern, dass die Geräte beim Booten gemountet werden. Ich kann Cryptsetup jedoch nicht dazu bringen, die Informationen aus dieser Datei zu verwenden.

Es wäre großartig, wenn es einen solchen Befehl cryptsetup luksOpen <name>gäbe, der lesen würde /etc/crypttab, um den Namen des zugrunde liegenden Blockgeräts zu finden (ähnlich wie Sie es können, mount <mountpoint>wenn es in definiert ist /etc/fstab).

Gibt es eine Möglichkeit, Cryptsetup zum Lesen der Zuordnungen zu erhalten /etc/crypttab?

Craig Finch
quelle

Antworten:

5

Schauen Sie sich cryptdisks_start und cryptdisks_stop an , genau das tun sie.

# cryptdisks_start <name>
# mount <mountpoint>
...stuff...
# umount <mountpoint>
# cryptdisks_stop <name>
Steven
quelle
8
Diese Debian-Ismen sind auf den meisten Linux-Distributionen nicht verfügbar.
Michael Hampton
3

Sie können verwenden

sudo systemctl start systemd-cryptsetup@<name>

anstatt

cryptsetup luksOpen UUID=... <name>

Wenn Sie einen Eintrag wie folgt in Ihrer / etc / crypttab haben:

<name> UUID=... none noauto

Bei Bedarf werden Sie zur Eingabe der Passphrase aufgefordert.

Die entsprechende Einheitendatei wird automatisch vom systemd-cryptsetup-generator generiert .

Sie können alle generierten Einheitendateien mit auflisten

systemctl list-unit-files| grep systemd-cryptsetup

Phiresky
quelle
Sie können sudo systemctl daemon-reloadnach der Bearbeitung ausführen /etc/crypttab, um die Einheiten neu zu generieren.
Vladimir Panteleev
0

Ich denke du willst damit experimentieren systemd-cryptsetup-generator.

Normalerweise wird dieser Prozess während des Starts von initramfs ausgeführt, um dynamisch systemd-Einheiten zu generieren , die jedes in aufgelistete Blockgerät entschlüsseln/etc/crypttab . Sie können diese Einheiten dann jederzeit starten, und Sie werden aufgefordert, die erforderlichen Passphrasen einzugeben.

Da es sich um eine virtuelle Maschine handelt, sollten Sie Zugriff auf die virtuelle Konsole haben. Dies bedeutet, dass Sie Ihre Dateisysteme einfach normal verschlüsseln und die Passphrase beim Booten angeben können. Natürlich wird die Sicherheit der verschlüsselten Dateisysteme ohnehin beeinträchtigt , indem sie einfach in einer virtuellen Maschine verwendet werden, unabhängig davon, wann Sie die Passphrase eingeben.

Michael Hampton
quelle
0

Ich habe speziell für diesen Fall ein Bash-Skript erstellt,
das analysiert crypttab, um die UUID des Geräts zum Öffnen / Schließen abzurufen, und
anschließend fstabzum Speichern von Mount-Optionen verwendet wird.

Als Konvention mounte ich das verschlüsselte Gerät im Stammordner in einem Verzeichnis, das wie der Geräteknoten benannt, /dev/mapperaber groß geschrieben ist.
Beispielsweise wird ein xsnlin crypttab genanntes Gerät gemountet /Xsnl.

NB: Sie müssen die noautoOption in beiden fstabund verwenden crypttab.

#!/bin/bash

usage(){
  echo "usage:   ./crypt.sh [open|close] <encrypted_dev>"
}

OP=$1
TARGET=$2

# we bail out in case no first argument is passed
if [[ $OP != 'close' ]] && [[ $OP != 'open' ]]; then
  usage
  echo "Exiting: first argument must be either 'lock' or 'unlock'."
  exit
fi

# we bail out in case no second argument is passed
if [[ -z $TARGET ]]; then
  usage
  echo "Exiting: second argument must be the name of the entry in fstab."
  exit
fi

# our convention is to give same name to fstab mount point (upperfirst) and crypttab name (lower)
MAPPDEV=$(echo $TARGET | awk '{print tolower($0)}')

ENCRYPTED_DEV=$(sudo grep -w $MAPPDEV /etc/crypttab)

# we bail out if we don't match a device in crypttab
if [[ -z $ENCRYPTED_DEV ]]; then
  usage
  echo "Exiting: no device named $MAPPDEV found in crypttab."
  exit
fi

SEC_FIELD=$( echo $ENCRYPTED_DEV | sed -r 's/\s+/ /g' | cut -d' ' -f2)

# now we have all the info,
# depending on $OP (operation mode) we decide what to do
if [[ $OP == 'close' ]]; then
  sudo umount /$TARGET
  sudo cryptsetup luksClose $MAPPDEV
  exit
fi

# if we get here we need to open and mount
sudo cryptsetup luksOpen $SEC_FIELD $MAPPDEV
sudo mount /$TARGET

Kern

maioman
quelle