EncFSの自動マウントとKeyring(Gnome Keyring)
Live With Linux::technique
- TOP
- Articles
- Live With Linux
- EncFSの自動マウントとKeyring(Gnome Keyring)
序
(Dropboxのような)クラウドドライブで日記を共有したい、と考えたのがそもそもの話。
そこまで機密性が高いわけではないが、オープンにできるようなものでもない。 そのため、クラウドドライブ上では暗号化され、システム上では復号化されているようなものにしたい。
そこでEncFSを使うが、ポイントになるのはEncFSにある--extpass
オプションである。これによってパスワードプロンプトを外部プログラムにすることができる。
単純には
encfs --extpass="zenity --entry --text='Password for EncFS'" ~/.Private ~/Private
のようにすればGUIプロンプトを作ることができるが、
encfs --extpass="cat $HOME/path/to/private.key" ~/.Private ~/Private
のようにすれば鍵ファイルを用いることも可能だ。
ちなみに、encfsui
は標準入力から読む-S
オプションを使っていたが、あまり良い方法ではないように見える。
GNOME Keyringをコマンドラインで扱う
Manjaroにはpython-keyring
というパッケージがあり、このパッケージはkeyring
というコマンドを含んでいる。
これによってGNOME
KeyringやKwalletを扱うコマンドを得られるのだが、そもそもの話として/usr/bin/keyring
が存在している。
だだ、pacman -Qo /usr/bin/keyring
としても所属が不明であり、恐らく互換性があることから、上書きしてもよさそうだ。
EncFSをGNOME Keyringでマウントするためのシェルスクリプト
自動起動されることを想定しているため、通知はnotify-send
で行っている。
#!/bin/zsh
typeset -i retry=3
typeset ename="$1"
shift
mount_path="${@[-1]}"
if mount | grep -qF "$mount_path"
then
notify-send -a openEncfs -t 5 -i lock "$mount_path is already mounted."
exit 0
fi
if ! keyring get localencfs $ename > /dev/null
then
notify-send -a openEncfs -t 5 -i lock "$ename doesn't exist in keyring."
exit 1
fi
while (( retry >= 0 ))
do
if encfs --extpass="keyring get localencfs $ename" -S "$@" >>| $HOME/.open_encfs.$ename.log 2>&1
then
notify-send -a openEncfs -t 5 -i lock "$mount_path is now avilable."
exit
fi
notify-send -a openEncfs -t 5 -i lock "Failed to mount $mount_path, waiting for retry..."
(( retry-- ))
sleep 10
done
notify-send -a openEncfs -t 5 -i lock "Failed to mount $ename"
自動起動のための.desktopファイル
コマンドとして実行すれば良いため、別に .desktop ファイルは必要ないが、一応例として
[Desktop Entry]
Type=Application
Terminal=false
Name=EncFS with GNOME Keyring (docs)
Comment=Open EncFS with GNOME Keyring Script (docs)
Exec=open_encfs.zsh docs /home/jrh/.Private/docs /home/jrh/Private/docs
Icon=lock
Categories=Security;Settings;
鍵登録
当然ながら鍵が登録されていなければ意味がないので、
keyring set localencfs foo
のようにして鍵を登録しておく。
アップデートで鍵がない場合はチェックするようになった。