cryptmountコマンドの使い方

#1 cryptmountコマンドとは?
cryptmountは、暗号化ファイルシステムのマウント、アンマウントを行うコマンドです。

#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。

```console:CentOS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
```

```console:カーネル版数
[root@server ~]# uname -r
4.18.0-240.el8.x86_64
```



#3 インストール方法


##3.1 関連パッケージのインストール
私の環境では、device-mapper-develパッケージが必要でした。
これがないと`configure`実行時にエラーがでました。

```console:関連パッケージのインストール
[root@server ~]# dnf --enablerepo=powertools install device-mapper-devel
```


##3.2 cryptmountコマンドのインストール
圧縮ファイルに含まれる`INSTALL`ファイルにしたがってインストールしました。

```console:圧縮ファイルのダウンロード
[root@server ~]# wget -c https://sourceforge.net/projects/cryptmount/files/latest/download -O cryptmount.tar.gz
```

```console:圧縮ファイルの確認
[root@server ~]# ls -l cryptmount.tar.gz
-rw-r--r--. 1 root root 545925  1月  2 00:36 cryptmount.tar.gz
```

```console:圧縮ファイルの解凍
[root@server ~]# tar xvf cryptmount.tar.gz
[root@server ~]# cd cryptmount-5.3.3/
[root@server cryptmount-5.3.3]#
```

```console:コンパイルおよびインストール
[root@server cryptmount-5.3.3]# ./configure && make && make install
```

```console:版数の確認
[root@server cryptmount-5.3.3]# cryptmount --version
cryptmount-5.3.3
```


#4 オプション一覧

```console:オプション一覧
[root@server cryptmount-5.3.3]# cryptmount --help
usage: cryptmount [OPTION [target ...]]

  available options are as follows:

    -h | --help
    -a | --all
    -c | --change-password <target>
    -k | --key-managers
    -l | --list
    -S | --status
    -m | --mount <target>
    -u | --unmount <target>
    --generate-key <key-size> <target>
    --reuse-key <src-target> <dst-target>
    --prepare <target>
    --release <target>
    --config-fd <num>
    --passwd-fd <num>
    --swapon <target>
    --swapoff <target>
    --version

  please report bugs to <cryptmount@rwpenney.uk>
```

#5 暗号化ファイルシステムの作成方法
暗号化ファイルシステムの作成方法は2通りあります。
ここでは、`cryptmount-setup`を使ってみます。
・cryptmount-setupを使う方法（こちらの方が簡単に作成できる）
・cryptmountを使う方法

`cryptmount-setup`実行中に指定したのは、暗号化ファイルシステムの
ターゲット(`test`)だけです(以下の★印)。それ以外は、全て`Enter`キーを押下しました。
ターゲットとは、暗号化ファイルシステムを一意に識別するための名前です。

```console:実行結果
[root@server ~]# cryptmount-setup

------------------------------
cryptmount setup script

This program will allow you to setup a secure filing-system that will
be managed by "cryptmount". You will be able to select basic features
such as the location and size of the filesystem - if you want more
advanced features, you should consult the cryptmount manual page.

cryptmount version 5.3.3, (C)Copyright 2007-2021 RW Penney
cryptmount comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under
certain conditions - see the file 'COPYING' in the source directory.

------------------------------
Each cryptmount filesystem is identifed by a short name which is used
when mounting or configuring that filesystem. This name should be a
single word (without spaces), such as "opaque".
The following target names have already been used:    (NONE)

  Please enter a target name for your filesystem
  [opaque]: test  ★


The test filesystem can be configured to be owned by a nominated
user, who will be able to create top-level files & directories
without needing to involve the superuser.

  Which user should own the filesystem (leave blank for "root")
  []:


In order to access the test filesystem, it must be mounted on top of
an empty directory.

  Please specify where "test" should be mounted
  [/home/crypt]:


The maximum available size of your filesystem needs to be chosen so
that enough space can be reserved on your disk.

  Enter the filesystem size (in MB)
  [64]:


The actual encrypted filesystem will be stored in a special file,
which needs to be large enough to contain your entire encrypted
filesystem.

  Enter a filename for your encrypted container
  [/home/crypto.fs]:


Access to your encrypted filesystem is protected by a key that is
kept in a separate small file. The key is locked by a password that
you must enter whenever you mount the filesystem.

  Enter a location for the keyfile
  [/etc/cryptmount/test.key]:

------------------------------
Your filing system is now ready to be built - this will involve:
 - Creating the directory "/home/crypt"
 - Creating a 64MB file, "/home/crypto.fs"
 - Adding an extra entry ("test") in /etc/cryptmount/cmtab
 - Creating a key-file ("/etc/cryptmount/test.key")
 - Creating an ext3 filingsystem on "/home/crypto.fs"
If you do not wish to proceed, no changes will be made to your system.

  Please confirm that you want to proceed (enter "yes")
  [no]: yes
Making mount-point (/home/crypt)... done
Creating filesystem container (/home/crypto.fs)... done
Taking backup of cryptmount master config-file (/etc/cryptmount/cmtab.bckp-setup)... done
Generating filesystem access key (/etc/cryptmount/test.key)...
Generating random key; please be patient...
Enter new password for target "test":
Confirm password:
Formatting encrypted filesystem...
Enter password for target "test":

------------------------------
Your new encrypted filesystem is now ready for use - to access, try:
    cryptmount test
    cd /home/crypt
After you have finished using the filesystem, try:
    cd
    cryptmount --unmount test

Please take great care NOT to delete or damage your keyfile
("/etc/cryptmount/test.key"). Without that file, and the associated
password, it will be virtually impossible to access your encrypted
filesystem. You may want to keep a separate backup copy of the
keyfile.
```

ターゲットの基本情報を確認してみます。
暗号化ファイルシステム(`test`)が`/home/crypt`にマウントされることを示しています。

```console:ターゲットの基本情報表示
[root@server ~]# cryptmount --list
test              [to mount on "/home/crypt" as "ext3"]
```

なお、`cryptmount-setup`コマンドを実行すると、以下のファイルが作成されます。

```console:cmtabファイルの確認
[root@server crypt]# cat /etc/cryptmount/cmtab
# /etc/cryptmount/cmtab - encrypted filesystem information for cryptmount
# try 'man 8 cryptmount' or 'man 5 cmtab' for more details


# Entry automatically generated by setup-script:
test {
    dev=/home/crypto.fs
    dir=/home/crypt
    fstype=ext3
    mountoptions=defaults
    cipher=aes
    keyformat=builtin
    keyfile=/etc/cryptmount/test.key
}
```


#6 マウント方法(-m)
ターゲット(`test`)を指定して、暗号化ファイルシステムをマウントします。

```console:暗号化ファイルシステムのマウント
[root@server ~]# cryptmount -m test
Enter password for target "test": ★cryptmount-setup実行時に指定したパスワードを入力
e2fsck 1.45.6 (20-Mar-2020)
```

ターゲットの状態を確認すると、マウントされていることがわかります。

```console:ターゲットの状態
[root@server ~]# cryptmount -S
test              mounted
```


dfコマンドを実行すると、`/dev/mapper/test`が`/home/crypt`にマウント
されていることがわかります。

```console:dfコマンドの実行結果
[root@server ~]# cd /home/crypt/
[root@server crypt]# df -hT .
ファイルシス     タイプ サイズ  使用  残り 使用% マウント位置
/dev/mapper/test ext3      58M  1.3M   54M    3% /home/crypt
```


#7 アンマウント方法(-u)
ターゲット名(`test`)を指定して、暗号化ファイルシステムをアンマウントします。

```console:暗号化ファイルシステムのアンマウント
[root@server ~]# cryptmount -u test
```

ターゲットの状態を確認すると、アンマウントされていることがわかります。

```console:ターゲットの状態
[root@server ~]# cryptmount --status
test              not_mounted
```



dfコマンドを実行すると、`/dev/mapper/test`ではなく`/dev/sda3`が
`/home/crypt`にマウントされていることがわかります。

```console:dfコマンドの実行結果
[root@server ~]# df -hT /home/crypt
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
/dev/sda3      xfs       20G   11G  9.4G   53% /
```


#8 パスワードの変更方法(-c)
`-c`オプションを指定して`test`ターゲットのパスワードを変更します。
★1で現在のパスワード、★2で変更するパスワードを指定します。

```console:パスワードの変更
[root@server ~]# cryptmount -c test
Enter password for target "test": ★1
Enter new password for target "test": ★2
Confirm password: ★2
Backup of previous key is in "/etc/cryptmount/test.key-old"
```

#9 OS起動時、自動的にマウントする方法


#Z 参考情報
[cryptmount](https://sourceforge.net/projects/cryptmount/)
[改訂新版 徹底攻略 LPIC Level3 303 教科書+問題集](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88-%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5-LPIC-Level3-Version/dp/4295001562/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=lpic+303&qid=1615206103&sr=8-1)
[Protecting filesystems and swap space with Cryptmount](https://www.linux.com/news/protecting-filesystems-and-swap-space-cryptmount/)