私は自分で素敵なセットアップを構築しました:
Autofsでマウント可能な暗号化されたencfsフォルダーがあります。つまり、フォルダーに入ると、自動的に復号化されます。キーリングにencfsパスワードを追加し、パスワードを抽出するカスタムスクリプトを作成しました(/usr/local/sbin/load-encfs
下記参照)。
唯一の欠点は、自動マウントされたフォルダへの最初のアクセス時にキーリングのロックを解除するためにログインパスワードを入力する必要があることです。別のフォルダにアクセスするたびに(またはタイムアウトの期限が切れた後も同じように)、pwの入力を求められません。
質問:最初のパスワードプロンプトも何らかの方法で自動化できる可能性はありますか?
/etc/autofs/auto.master
:
この行を追加しました:
/- /etc/autofs/auto.encfs
/etc/autofs/auto.encfs
:
/home/user/Privat -fstype=Fuse :load-encfs\#user\:/home/user/encfs-keys/private.xml\:/home/user/Dropbox/.private
/home/user/BTU -fstype=Fuse :load-encfs\#user\:/home/user/encfs-keys/btu.xml\:/home/user/Dropbox/.btu
/home/user/TUD -fstype=Fuse :load-encfs\#user\:/home/user/encfs-keys/tud.xml\:/home/user/Dropbox/.tud
/usr/local/sbin/load-encfs
(魚のスクリプト):
#!/usr/bin/fish
function usage
echo "need at least two arguments"
echo " 1. <user name>:[<config>]:<crypt folder>"
echo " 2. <mount folder>"
exit 1
end
if test (count $argv) -lt 2
usage
end
set split (string split ':' $argv[1])
if test $status -ne 0
usage
else if test (count $split) -eq 2
set USER_NAME $split[1]
set CONFIG_PATH ""
set CRYPT_PATH (realpath $split[2])
else
set USER_NAME $split[1]
set CONFIG_PATH (realpath $split[2])
set CRYPT_PATH (realpath $split[3])
end
set MOUNT_PATH (realpath $argv[2])
set PID (ps aux | sed -e '/sed/d;/$USER_NAME.*xinit/!d;s/^.*xserverrc \(:[0-9\.]*\).*/aaa/' | awk '{ print $2 }')
if test -n "$PID"
set DISPLAY (cat /proc/$PID/environ | tr '\0' '\n' | grep '^DISPLAY=' | sed -r 's/.*=(.*)/\1/')
end
if test -z "$DISPLAY"
set DISPLAY ":0.0"
end
set PASS (env DISPLAY=$DISPLAY Sudo -H -u $USER_NAME secret-tool lookup server $CRYPT_PATH)
if test -n $CONFIG_PATH
set COMMAND "env ENCFS6_CONFIG=$CONFIG_PATH"
end
set COMMAND $COMMAND "encfs --public --extpass='echo \'$PASS\'' $CRYPT_PATH $MOUNT_PATH"
eval $COMMAND
Encfsの構成ファイルが格納される場所に柔軟に対応するために、さまざまな引数を追加しました。
更新後にdbusに問題が発生した後、ようやく解決策を見つけました。新しいスクリプト:
#!/usr/bin/fish
function usage
echo "need at least two arguments"
echo " 1. <user name>:[<config>]:<crypt folder>"
echo " 2. <mount folder>"
exit 1
end
if test (count $argv) -lt 2
usage
end
set split (string split ':' $argv[1])
if test $status -ne 0
usage
else if test (count $split) -eq 2
set USER_NAME $split[1]
set CONFIG_PATH ""
set CRYPT_PATH (realpath $split[2])
else
set USER_NAME $split[1]
set CONFIG_PATH (realpath $split[2])
set CRYPT_PATH (realpath $split[3])
end
set MOUNT_PATH (realpath $argv[2])
set PASS (Sudo -H -u $USER_NAME bash -c "env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/`id -u $USER_NAME`/bus secret-tool lookup server $CRYPT_PATH")
if test -n $CONFIG_PATH
set COMMAND "env ENCFS6_CONFIG=$CONFIG_PATH"
end
set COMMAND $COMMAND "encfs --public --extpass='echo \'$PASS\'' $CRYPT_PATH $MOUNT_PATH"
eval $COMMAND