web-dev-qa-db-ja.com

cryptsetupは/ etc / crypttabからマッピングを読み取ることができますか?

複数のパスワード保護された暗号化ボリュームをマウントする必要がある仮想化されたCentOS 7サーバーがあります。起動プロセス中に復号化パスワードを入力するためのコンソールにアクセスできないため、起動時にデバイスを自動的にマップできません。システムを再起動した後、手動で実行する必要があります

cryptsetup luksOpen <device> <name>

基盤となる各ブロックデバイスを暗号化されたデバイスにマップします。そのためには、基盤となる各ブロックデバイスのUUIDと、それがマップする名前をメモしておく必要があります。このプロセスを自動化する簡単な方法はありますか? noautoキーワードを使用して/etc/crypttabに情報を追加し、デバイスが起動時にマウントされないようにすることができます。ただし、cryptsetupでこのファイルの情報を使用できません。

cryptsetup luksOpen <name>のようなコマンドを使用して/etc/crypttabを読み取り、基礎となるブロックデバイスの名前を検索すると便利です(で定義できる方法と同様にmount <mountpoint>/etc/fstab)。

Cryptsetupで/etc/crypttabからマッピングを読み取る方法はありますか?

8
Craig Finch

cryptdisks_startcryptdisks_stop をご覧ください。まさにそのとおりです。

# cryptdisks_start <name>
# mount <mountpoint>
...stuff...
# umount <mountpoint>
# cryptdisks_stop <name>
5
Steven

使用できます

Sudo systemctl start systemd-cryptsetup@<name>

の代わりに

cryptsetup luksOpen UUID=... <name>

/ etc/crypttabに次のようなエントリがある場合:

<name> UUID=... none noauto

必要に応じて、パスフレーズの入力を求められます。

対応するユニットファイルは systemd-cryptsetup-generator によって自動的に生成されます。

次のコマンドを使用して、生成されたすべてのユニットファイルをリストできます。

systemctl list-unit-files| grep systemd-cryptsetup

3
phiresky

試してみたいと思います systemd-cryptsetup-generator

通常、このプロセスはinitramfsの起動中に実行され、動的に 各ブロックデバイスを復号化するsystemdユニット/etc/crypttab。その後、いつでもこれらのユニットを起動でき、必要なパスフレーズの入力を求められます。

これは仮想マシンであるため、仮想コンソールにアクセスできる必要があります。つまり、ファイルシステムを通常どおりに暗号化し、起動時にパスフレーズを提供できます。もちろん、パスフレーズをいつ入力したかに関係なく、仮想マシンで使用するだけで 暗号化されたファイルシステムのセキュリティはとにかく危険にさらされます

0
Michael Hampton

この場合のために特別にbashスクリプトを作成しました。
crypttabを解析して、開く/閉じるデバイスのuuidを取得し、
その後、マウントオプションを格納するためにfstabを使用します。

慣例として、暗号化されたデバイスを、/dev/mapperのデバイスノードのような名前のディレクトリのルートフォルダーにマウントしますが、大文字にします。
たとえば、crypttabのxsnlという名前のデバイスは/Xsnlにマウントされます。

注意:noautofstabの両方で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

要旨

0
maioman