Ubuntuでホームディレクトリを暗号化するのを止めた

背景

MacをPXEサーバにしてExpress5800/S70タイプRBにUbuntu16.04をインストールしてみた · hnakamur’s blog at githubでホームディレクトリを暗号化してみたのですが、OS起動後に鍵認証でsshしようとすると鍵は正しく指定しているのに Permission denied (publickey). と拒否されてしまうケースがありました。コンソールで一度ログインするとsshでもログイン出来るようになります。

これはホームディレクトリを暗号化した影響で ~/.ssh/authorized_keys が読めない状態になっているようです。

authorized_keys をホームディレクトリの外に置く手もある

Ubuntu server ssh after reboot: Permission denied (publickey) - Ask Ubuntuによると /etc/ssh/sshd_configAuthorizedKeysFile の設定を変える手もあるようです。

変更前の状態は

#AuthorizedKeysFile     %h/.ssh/authorized_keys

とデフォルト値がコメントアウトされて書かれていました。

Ubuntu Manpage: sshd_config — OpenSSH SSH daemon configuration fileによると %h はホームディレクトリに展開されます。ユーザ名に展開される %u というのもあるそうです。

ここでは /etc/%u/.ssh/authorized_keys に変更するのを試してみました。 先に自分のユーザID hnakamur 用のディレクトリを作って所有者を変更します。

sudo mkdir -p /etc/hnakamur/.ssh
sudo chmod -R 700 /etc/hnakamur
sudo chown -R hnakamur: /etc/hnakamur
cp ~/.ssh/authorized_keys /etc/hnakamur/.ssh/authorized_keys

その後 sudo vi /etc/ssh/sshd_config を実行し以下の行を追加します。

AuthorizedKeysFile /etc/%u/.ssh/authorized_keys

これでOSを再起動後、コンソールでログインしない状態でもsshで鍵認証でログンできることを確認しました。

ただし、ログインは出来ましたが、暗号化の解除は手動で行う必要がありました。作ったはずの ~/.bash_profile が無いので気付きました。ホームディレクトリの中身は以下のようになっていました。

hnakamur@express:~$ ls -la
合計 8
dr-x------ 2 hnakamur hnakamur 4096  5月  2 01:31 .
drwxr-xr-x 4 root     root     4096  5月  2 01:31 ..
lrwxrwxrwx 1 hnakamur hnakamur   33  5月  2 01:31 .Private -> /home/.ecryptfs/hnakamur/.Private
lrwxrwxrwx 1 hnakamur hnakamur   34  5月  2 01:31 .ecryptfs -> /home/.ecryptfs/hnakamur/.ecryptfs
lrwxrwxrwx 1 hnakamur hnakamur   56  5月  2 01:31 Access-Your-Private-Data.desktop -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.desktop
lrwxrwxrwx 1 hnakamur hnakamur   52  5月  2 01:31 README.txt -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.txt

README.txt を見てみました。

hnakamur@express:~$ cat README.txt
THIS DIRECTORY HAS BEEN UNMOUNTED TO PROTECT YOUR DATA.

From the graphical desktop, click on:
 "Access Your Private Data"

or

From the command line, run:
 ecryptfs-mount-private

ecryptfs-mount-private を実行してログインパスワードを入力し cd /home/hnakamur でホームディレクトリに入り直すと、復号化された内容が見えるようになりました。

hnakamur@express:~$ ecryptfs-mount-private
Enter your login passphrase:
Inserted auth tok with sig [d094f2376006dce9] into the user session keyring

INFO: Your private directory has been mounted.
INFO: To see this change in your current shell:
  cd /home/hnakamur

hnakamur@express:~$ ls -la
合計 8
dr-x------ 2 hnakamur hnakamur 4096  5月  2 01:31 .
drwxr-xr-x 4 root     root     4096  5月  2 01:31 ..
lrwxrwxrwx 1 hnakamur hnakamur   33  5月  2 01:31 .Private -> /home/.ecryptfs/hnakamur/.Private
lrwxrwxrwx 1 hnakamur hnakamur   34  5月  2 01:31 .ecryptfs -> /home/.ecryptfs/hnakamur/.ecryptfs
lrwxrwxrwx 1 hnakamur hnakamur   56  5月  2 01:31 Access-Your-Private-Data.desktop -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.desktop
lrwxrwxrwx 1 hnakamur hnakamur   52  5月  2 01:31 README.txt -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.txt
hnakamur@express:~$ cd /home/hnakamur
hnakamur@express:~$ ls -la
合計 128
drwx------ 6 hnakamur hnakamur 4096  5月  2 12:43 .
drwxr-xr-x 4 root     root     4096  5月  2 01:31 ..
lrwxrwxrwx 1 hnakamur hnakamur   33  5月  2 01:31 .Private -> /home/.ecryptfs/hnakamur/.Private
-rw------- 1 hnakamur hnakamur 1908  5月  2 12:43 .bash_history
-rw-r--r-- 1 hnakamur hnakamur  220  5月  2 01:31 .bash_logout
-rw-r--r-- 1 hnakamur hnakamur  100  5月  2 08:50 .bash_profile
-rw-r--r-- 1 hnakamur hnakamur 3771  5月  2 01:31 .bashrc
drwx------ 2 hnakamur hnakamur 4096  5月  2 01:36 .cache
lrwxrwxrwx 1 hnakamur hnakamur   34  5月  2 01:31 .ecryptfs -> /home/.ecryptfs/hnakamur/.ecryptfs
-rw------- 1 hnakamur hnakamur   41  5月  2 09:00 .lesshst
-rw-r--r-- 1 hnakamur hnakamur  675  5月  2 01:31 .profile
drwx------ 2 hnakamur hnakamur 4096  5月  2 01:38 .ssh
-rw-r--r-- 1 hnakamur hnakamur    0  5月  2 01:38 .sudo_as_admin_successful
-rw------- 1 hnakamur hnakamur 6841  5月  2 12:43 .viminfo
drwxr-xr-x 2 hnakamur hnakamur 4096  5月  2 03:13 docs
drwxr-xr-x 5 hnakamur hnakamur 4096  5月  2 08:47 gocode

LVM暗号化を使っているのでホームディレクトリの暗号化は止めることにした

[all variants] Encrypted LVM vs Encrypted Homeを見ると、ホームディレクトリを暗号化してもスワップや /tmp などが暗号化されていないので情報漏えいのリスクがあるので、ホームディレクトリの暗号化よりもLVMの暗号化のほうが良いとのことです。

そもそも自宅サーバでユーザは私だけということもあり、ホームディレクトリの暗号化は止めることにしました。

以下のページを参考にしつつやってみました。

バックアップ用のディレクトリを作って、所有者を変えます。

sudo mkdir /home/hnakamur.backup
sudo chown hnakamur:hnakamur /home/hnakamur.backup

tar でバックアップして .encryptfs ディレクトリは消します。シンボリックリンクもそのままコピーしたいので tar を使っています。

(cd /home/hnakamur; tar cf - .) | (cd /home/hnakamur.backup; tar xf -)
rm -rf /home/hnakamur.backup/.ecryptfs

ホームディレクトリを暗号化するためのパッケージをアンインストールしました。

sudo apt-get remove ecryptfs-utils libecryptfs0

上記は手順ミスです。先に別の管理者ユーザを作って元のユーザ hnakamur はログアウトし、別の管理ユーザで作業すべきでした。

df -h で確認すると hnakamur ユーザのホームディレクトリがマウントされたままになっていました。

root@express:~# df -h
Filesystem                    Size  Used Avail Use% Mounted on
udev                          7.8G     0  7.8G   0% /dev
tmpfs                         1.6G  8.8M  1.6G   1% /run
/dev/mapper/express--vg-root  131G  2.1G  122G   2% /
tmpfs                         7.8G  4.0K  7.8G   1% /dev/shm
tmpfs                         5.0M     0  5.0M   0% /run/lock
tmpfs                         7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sdc1                     472M   55M  393M  13% /boot
tmpfs                         100K     0  100K   0% /run/lxcfs/controllers
/home/hnakamur/.Private       131G  2.1G  122G   2% /home/hnakamur

この後、別のユーザを作りました。セカンダリグループに sudo を指定して sudoroot になれるようにします。

sudo useradd -m -G sudo -s /bin/bash hnakamur2
sudo mkdir -p /etc/hnakamur2/.ssh
sudo chmod -R 700 /etc/hnakamur2
sudo cp /etc/hnakamur/.ssh/authorized_keys /etc/hnakamur2/.ssh/
sudo chown -R hnakamur2: /etc/hnakamur2

パスワードが空だとsshログイン出来ないので、パスワードを設定します。

root@express:~# passwd hnakamur2
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました

これで hnakamur2 ユーザの作成が終わったので、Macからsshで hnakamur2 ユーザにログインします。

ssh hnakamur2@express

root ユーザになって作業します。

sudo -i
umount /home/hnakamur

df -h を実行してマウントが解除されたことを確認しました。 /home/hnakamur の中身を確認すると以下のようになっていました。

root@express:~# ll -a /home/hnakamur
合計 8
dr-x------ 2 hnakamur hnakamur 4096  5月  2 01:31 ./
drwxr-xr-x 7 root     root     4096  5月  2 14:42 ../
lrwxrwxrwx 1 hnakamur hnakamur   33  5月  2 01:31 .Private -> /home/.ecryptfs/hnakamur/.Private/
lrwxrwxrwx 1 hnakamur hnakamur   34  5月  2 01:31 .ecryptfs -> /home/.ecryptfs/hnakamur/.ecryptfs/
lrwxrwxrwx 1 hnakamur hnakamur   56  5月  2 01:31 Access-Your-Private-Data.desktop -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.desktop
lrwxrwxrwx 1 hnakamur hnakamur   52  5月  2 01:31 README.txt -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.txt

hnakamur のホームディレクトリを消して、バックアップした内容に戻します。

rm -rf /home/hnakamur
mv /home/hnakamur.backup/ /home/hnakamur

戻した中身を確認します。

root@express:~# ll -a /home/hnakamur/
合計 56
drwx------ 6 hnakamur hnakamur 4096  5月  2 13:04 ./
drwxr-xr-x 6 root     root     4096  5月  2 14:53 ../
lrwxrwxrwx 1 hnakamur hnakamur   33  5月  2 01:31 .Private -> /home/.ecryptfs/hnakamur/.Private/
-rw------- 1 hnakamur hnakamur 1908  5月  2 12:43 .bash_history
-rw-r--r-- 1 hnakamur hnakamur  220  5月  2 01:31 .bash_logout
-rw-r--r-- 1 hnakamur hnakamur  100  5月  2 08:50 .bash_profile
-rw-r--r-- 1 hnakamur hnakamur 3771  5月  2 01:31 .bashrc
drwx------ 2 hnakamur hnakamur 4096  5月  2 01:36 .cache/
-rw------- 1 hnakamur hnakamur   41  5月  2 09:00 .lesshst
-rw-r--r-- 1 hnakamur hnakamur  675  5月  2 01:31 .profile
drwx------ 2 hnakamur hnakamur 4096  5月  2 01:38 .ssh/
-rw-r--r-- 1 hnakamur hnakamur    0  5月  2 01:38 .sudo_as_admin_successful
-rw------- 1 hnakamur hnakamur 6841  5月  2 12:43 .viminfo
drwxr-xr-x 2 hnakamur hnakamur 4096  5月  2 03:13 docs/
drwxr-xr-x 5 hnakamur hnakamur 4096  5月  2 08:47 gocode/

.Private も不要なので消します。

rm /home/hnakamur/.Private

これで Mac から元のユーザ hnakamur でsshログイン可能になります。 念のため hnakamur2 はログインしたままにしておいて、ターミナルの別端末でログインしました。

ssh hnakamur@express

/etc/ssh/sshd_configAuthorizedKeysFile の設定も元に戻すことにします。 sudo vi /etc/ssh/sshd_config を実行し以下の行を削除します。

AuthorizedKeysFile /etc/%u/.ssh/authorized_keys

以下のコマンドで sshd を再起動します。

sudo systemctl restart sshd

/etc/hnakamur 以下に置いた hnakamur ユーザの鍵もディレクトリごと消します。

sudo rm -r /etc/hnakamur

Mac のターミナルの別端末から hnakamur ユーザでsshログインできることと、sudoでrootになれることを確認しました。

hnakamur2 ユーザのほうはログアウトして、 hnakamur ユーザでログインした端末で hnakamur2 ユーザを削除します。メールスプールのディレクトリが無いというメッセージが出ますが問題ありません。

root@express:~# sudo userdel -r hnakamur2
userdel: hnakamur2 のメールスプール (/var/mail/hnakamur2) がありません
root@express:~# echo $?
0

/etc/hnakamur2 以下に置いた hnakamur2 ユーザの鍵もディレクトリごと消します。

sudo rm -r /etc/hnakamur2

その後

sudo shutdown -r now

で再起動して、コンソールでLVM暗号化のパスフレーズを入力して起動し、コンソールでログインすることなしに、ssh鍵認証でログインできることを確認しました。

余談ですが、ちょっと不思議なのは、今まで構築したLinux環境ではsshで繋いで sudo shutdown -h nowsudo shutdown -r now を実行すると接続が切れていたのが、今回の環境ではプロンプトに戻らないまま残ってしまうということです。Ctrl-Cを入力すると Host is down と表示されていました。

root@express:~# shutdown -r now
packet_write_poll: Connection to 192.168.0.201: Host is down

まとめ

今回のサーバのユーザは自分1人なのでホームディレクトリの暗号化は不要と判断し、解除しました。