【LPIC・Linux】データの暗号化を行うCryptsetupコマンド

  • URLをコピーしました!
目次

はじめに

こんにちは。ネットワークエンジニアの「だいまる」です。

今回は、データの暗号化を行うためのコマンド「cryptosetup」についてまとめていきたいと思います。

ディスクの暗号化とは?

ディスクの暗号化とは、ハードディスク等に保管するデータを暗号化し、セキュリティ品質を高めることができます。

私の場合は、バックアップデータ等のハードディスクを暗号化することでセキュリティを高めています。

暗号化には「dm-crypt」と呼ばれるブロックデバイスを暗号化する方法がよく利用されます。

これは、カーネル動作となる「device-mapper」を利用することになります。

暗号化後のファイルは「/dev/mapper」経由でのアクセスとなる

この「dm-crypt」を使ってディスクの暗号化を行うのが、今回学ぶ「cryptsetup」になります。

cryptsetupコマンドの使い方

この章では、cryptsetupコマンドの使い方をまとめていきたいと思います。

書式

#cryptsetup (オプション) (アクション) (引数)

オプションはあまり利用しないため、ここではアクションを紹介していきます。

アクション詳細
create (名前)(デバイス名)(デバイス名)の暗号化マッピングを(名前)で作成
remove(名前)(名前)の暗号化マッピングを削除
status(名前)(名前)の暗号化マッピング状態を表示

ディスク暗号化方法

cryptsetupを使った暗号化手法は以下のフローで実施することになりそうです。

STEP
暗号化マッピングの作成

まず、以下のコマンドで暗号化マッピングの作成を行います。

#cryptsetup create (名前)(デバイス)
STEP
ファイルシステムの作成

暗号化マッピングの作成後は、(名前)で作成したマッピングのファイルシステムを作成します。

#mkfs -t ext3 /dev/mapper/(名前)
STEP
暗号化マッピングとファイルシステムのマウント

最後に作成したファイルシステムのマウントを行います。

#mount -t ext3 /dev/mapper/(名前) /mnt/XXX

Linuxのファイルシステム暗号化手法

「dm-crypt」はブロックデバイスを暗号化するカーネル機能でしたが、暗号化手法はこれだけではありません。

Linuxのファイルシステムを暗号化する「LUKS」と呼ばれる手法があります。

この「LUKS」は異なるシステムやファイルシステムで利用できる特徴を持っています。

基本的に「cryptsetup」コマンドの「アクション」で指定するため、書式等に大きな違いはありません。

#cryptsetup (オプション) (アクション) (引数)
アクション詳細
luksFormat(デバイス名)指定したデバイスのLUKS化、パーティションの初期化
luksOpen(デバイス名)(名前)LUKSパーティションを開く
luksClose(名前)LUKSパーティションを閉じる
luksDump(デバイス名)指定デバイスの状態表示

LUKSによる暗号化方法の説明は、以下の記事にまとめているので、ご参照頂ければと思います。

プログリット(PROGRIT)

実際に暗号化してみよう

ここまで暗号化の概要を理解したところでLinuxサーバ上で実際に試してみましょう。

今回は「daimaru_test」という名前を使って暗号化したいと思います。

Step1:暗号化状態の確認

各種コマンドを利用し暗号化前の状態を見ていきましょう。

daimaru@raspi:~ $ sudo ls /dev/mapper
control

上記より、「/dev/mapper」に「daimaru_test」がないため、暗号化されていないことがわかります。

daimaru@raspi:~ $ sudo fdisk -l
<snip>
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HD-PNFU3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: XXXXXXXX

Device     Start        End    Sectors   Size Type
/dev/sda1   2048 1953523711 1953521664 931.5G Linux filesystem

今回暗号化するデバイスは「/dev/sda」として認識されている1TBの外付けHDDを利用します。

Step2:暗号化マッピングの作成

暗号化前の状態を確認した後は、実際に暗号化を行っていきましょう。

daimaru@raspi:~ $ sudo cryptsetup create daimaru_test /dev/sda
WARNING: Device /dev/sda already contains a 'dos' partition signature.

WARNING!
========
Detected device signature(s) on /dev/sda. Proceeding further may damage existing data.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda:<パスワード>

上記で「YES」を入力する場合、capital lettersと書いてある通り大文字で入力しましょう。

その後、パスワードを入力したら完了です。

マッピング後の状態を確認してみましょう。

daimaru@raspi:~ $ sudo cryptsetup status daimaru_test
/dev/mapper/daimaru_test is active.
  type:    PLAIN
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  key location: dm-crypt
  device:  /dev/sda
  sector size:  512
  offset:  0 sectors
  size:    1953525168 sectors
  mode:    read/write
daimaru@raspi:~ $ sudo ls /dev/mapper
control  daimaru_test

上記の通り、PLAINによる暗号化が行われており、「/dev/mapper」配下にも「daimaru_tesh」が作成されていることがわかります。

Step3:ファイルシステムの作成

暗号化マッピング後は、ファイルシステムを作成していきます。

daimaru@raspi:~ $ sudo mkfs -t ext4 /dev/mapper/daimaru_test
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 244190646 4k blocks and 61054976 inodes
Filesystem UUID: XXXXXX
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
	102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information: done

Step4:ファイルシステムのマウント

暗号化とファイルシステムの作成を行った後は、ハードディスクにアクセスするためにマウントします。

今回は、「/mnt/hdd1」にマウントしようと思います。

daimaru@raspi:~ $ mount | grep daimaru_test
daimaru@raspi:~ $ sudo mount -t ext4 /dev/mapper/daimaru_test /mnt/hdd1
daimaru@raspi:~ $ mount | grep daimaru_test
/dev/mapper/daimaru_test on /mnt/hdd1 type ext4 (rw,relatime)

これで暗号化の完了となります。

+αで覚えよう!cryptsetupの暗号化削除

「cryptsetup」で作成した暗号化の削除は簡単です。

まず、対象のディスク状況を確認します。

daimaru@raspi:~ $ sudo fdisk -l /dev/sda
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HD-PNFU3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2a516171

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux

daimaru@raspi:~ $ sudo fdisk -l /dev/mapper/daimaru_test
Disk /dev/mapper/daimaru_test: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

daimaru@raspi:~ $ sudo cryptsetup status daimaru_test
/dev/mapper/daimaru_test is active.
  type:    PLAIN
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  key location: dm-crypt
  device:  /dev/sda
  sector size:  512
  offset:  0 sectors
  size:    1953525168 sectors
  mode:    read/write

今回の対象は、暗号化名「daimaru_test」です。

これは「/dev/sda1」と「/dev/mapper/daimaru_test」が紐づけられています。

削除前の状態だと「daimaru_test」が「active」になっていることがわかります。

では、「cryptsetup remove」コマンドで削除してみましょう。

daimaru@raspi:~ $ sudo cryptsetup remove daimaru_test

daimaru@raspi:~ $ sudo cryptsetup status daimaru_test
/dev/mapper/daimaru_test is inactive.

daimaru@raspi:~ $ sudo fdisk -l /dev/mapper/daimaru_test
fdisk: cannot open /dev/mapper/daimaru_test: No such file or directory
daimaru@raspi:~ $ sudo fdisk -l /dev/sda
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HD-PNFU3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2a516171

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux

削除前と変わり、「active」から「inactive」に変更になりました。

最後に

今回は、セキュリティ品質向上のための「cryptsetup」、「dm-crypt」についてまとめてみました。

  • URLをコピーしました!

この記事を書いた人

目次