ホームディレクトリをログインパスワードで暗号化 - Linux / Debian/Ubuntu Advent Calendar 2017 - ダメ出し Blog

2017-12-10(Sun) [linux][sh][shell] [更新履歴]

Linux Advent Calendar 2017Debian/Ubuntu Advent Calendar 2017 兼用の 10日目の記事です。

FIXME: Debian sid の systemd では動かないようです。 core: link user session keyring to session keyring #6286 https://github.com/systemd/systemd/pull/6286 参照。

某弊社 では「社外に持ち出すノート PC のファイルシステムは暗号化してね」って言われているのですが、 システムまるごと暗号化するのは面倒そう(やったことがないので想像)だったので、 Linux-CryptHome というものを作ってホームディレクトリだけ暗号化しています。 今回はこれを紹介したいと思います。

要件

Linux と以下のパッケージが必要です。ディストリビューションは新し目の Debian / Ubuntu なら大丈夫だと思います。恐らく RHEL / CentOS も大丈夫です。

Linux-CryptHome 用の暗号化ホームディレクトリの作成

下記の手順で LVM 上に LUKS 暗号化ボリュームを作成し、 さらにその上にユーザーのホームディレクトリとして利用するファイルシステムを作成します。

  1. LVM で crypthome.<ユーザー名> という名前の論理ボリュームを作成する。
  2. 作成した論理ボリュームを LUKS ボリュームとして初期化する。 パスフレーズにはユーザーのログインパスワードを設定すること
  3. LUKS ボリュームをオープンする。 先に設定したパスフレーズ(パスワード)の入力が必要です。
  4. LUKS ボリュームにファイルシステムを作成する。
  5. LUKS ボリュームをクローズする。

TODO: 管理者が保守するためのパスフレーズを cryptsetup luksAddKey 〜 で追加する手順を追加。

ユーザー名 alice、論理ボリュームを作成する LVM ボリュームグループ名 VolGroup、ボリュームサイズ 10 GB、 ファイルシステム XFS を利用する場合の実行例を示します。

# lvcreate -n crypthome.alice -L 10g VolGroup
  Logical volume "crypthome.alice" created.
# cryptsetup luksFormat /dev/VolGroup/crypthome.alice

WARNING!
========
This will overwrite data on /dev/VolGroup/crypthome.alice irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: <ユーザー alice のログインパスワード>
Verify passphrase: <ユーザー alice のログインパスワード>
# cryptsetup luksDump /dev/VolGroup/crypthome.alice
LUKS header information for /dev/VolGroup/crypthome.alice

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha256
...省略...
# cryptsetup open /dev/VolGroup/crypthome.alice decrypthome.alice
Enter passphrase for /dev/VolGroup/crypthome.alice: <ユーザー alice のログインパスワード>
# mkfs -t xfs /dev/mapper/decrypthome.alice
...省略...
# mkdir -p -m 0755 ~alice
# mount /dev/mapper/decrypthome.alice ~alice
# cp -a /etc/skel/. ~alice/
# chown -R alice: ~alice
# chmod 0750 ~alice
# umount ~alice
# cryptsetup close decrypthome.alice

Linux-CryptHome のインストール

Linux-CryptHome のソースツリーを git clone 〜 などでダウンロードし、 付属のシェルスクリプトと systemd unit ファイルをインストールします。

$ git clone https://github.com/fumiyas/linux-crypthome.git
...省略...
$ cd linux-crypthome
$ sudo install -m 0755 crypthome-{pam,mount,umount} /usr/local/sbin/
$ sudo install -m 0644 crypthome@.service /lib/systemd/system/
$ sudo systemctl daemon-reload

PAM の設定

Debian / Ubuntu の場合

/etc/pam.d/common-auth ファイル内の # end of pam-auth-update config 行の後に pam_exec.so の行を追加します。

...省略...
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
auth	optional			pam_exec.so expose_authtok /usr/local/sbin/crypthome-pam

RHEL / CentOS の場合

/etc/pam.d/postlogi ファイルに pam_exec.so の行を追加します。 追加する場所はどこでも構いません。

...省略...
auth        optional      pam_exec.so expose_authtok /usr/local/sbin/crypthome-pam
...省略...

SSH デーモンの設定

Linux-CryptHome で暗号化ホームディレクトリをマウント/アンマウントするユーザーは、 ログイン時に PAM によるパスワード認証を受ける必要があります。 このため、SSH でのログインを公開鍵認証でのみ許可している場合は、 追加でパスワード認証も要求するように設定変更が必要です。

SSH デーモンの設定ファイル sshd_config(5) の設定例を示します。 (直接関係するディレクティブだけを抜粋)

AuthorizedKeysFile .ssh/authorized_keys /srv/home/%u/etc/ssh/authorized_keys

PubkeyAuthentication yes
PasswordAuthentication no
UsePAM yes

Match User alice
  PasswordAuthentication yes
  AuthenticationMethods publickey,password

Match Group crypthome-users
  PasswordAuthentication yes
  AuthenticationMethods publickey,password

簡単に解説しましょう。

制限など

su - alice には対応できません。代わりに次のような設定を sshd_config(5) に追加して ssh alice@localhost で代用しましょう。

Match Address 127.0.0.1 Group crypthome-users
  PasswordAuthentication yes
  AuthenticationMethods password
Match Address ::1 Group crypthome-users
  PasswordAuthentication yes
  AuthenticationMethods password

TODO リスト:


ところで、12月25日はクリスマスな上に、 OSS 界隈で地味に活躍されているふみやすさんの誕生日ですね!
http://www.amazon.co.jp/registry/wishlist/27M7TV8CEEF6G?sort=priority

逆に、あなたの書いた OSS や Blog や Advent Calendar が気に入ったら何か送りたく なってしまうかもしれないので、プロフィールや Web サイトに あなたの Amazon 欲しいものリストの URL を貼っておいてくださいね!


私が勤める OSSTech っていう某弊社で社員募集しているようです。 人材紹介会社を介さなければ、入社後に 20万円のボーナス! 「ふみやすっていう人に紹介された」と言ってもらえると私にもボーナス!! → https://www.osstech.co.jp/recruit/


よろしければ、これまで参加した/参加予定のほかの Advent Calendar もどうぞ。