autofs, encfs 및 키링을 사용하여 자동 마운트에 액세스

autofs, encfs 및 키링을 사용하여 자동 마운트에 액세스

나는 나 자신을 위해 좋은 설정을 만들었습니다.

autofs를 사용하여 마운트할 수 있는 encfs 폴더를 암호화했습니다. 즉, 폴더에 들어가면 자동으로 암호가 해독됩니다. 내 키링에 encfs 비밀번호를 추가하고 비밀번호를 추출하는 사용자 정의 스크립트를 작성했습니다( /usr/local/sbin/load-encfs아래 참조).

유일한 단점은 자동 마운트된 폴더에 처음 액세스할 때 키링의 잠금을 해제하려면 로그인 비밀번호를 입력해야 한다는 것입니다. 다른 폴더(또는 시간 초과 후 동일한 폴더)에 액세스할 때마다 비밀번호를 묻는 메시지가 표시되지 않습니다.

질문:첫 번째 비밀번호 프롬프트도 어떻게든 자동화될 수 있나요?


/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의 구성 파일을 유연하게 저장하기 위해 다양한 매개변수를 추가했습니다.

답변1

업데이트 후 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

관련 정보