Automount com acesso autofs, encfs e keyring

1

Eu criei uma boa configuração:

Tenho pastas encfs criptografadas que podem ser montadas com o autofs, ou seja, quando eu inserir as pastas, elas serão descriptografadas automaticamente. Eu tenho a senha encfs adicionada ao meu chaveiro e escrevi um script personalizado que extrai a senha ( /usr/local/sbin/load-encfs veja abaixo).

A única desvantagem é que eu tenho que digitar minha senha de login para desbloquear o chaveiro na primeira visita de qualquer uma das pastas montadas automaticamente. Toda visita de outra pasta (ou a mesma depois que o tempo limite expirou) não me solicita o meu pw.

Pergunta: Existe alguma possibilidade de que também o primeiro prompt de senha possa ser de alguma forma automatizado?

/etc/autofs/auto.master :

Acabei de adicionar esta linha:

/-  /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 (script de peixe):

#!/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 '
/-  /etc/autofs/auto.encfs
' '\n' | grep '^DISPLAY=' | sed -r 's/.*=(.*)//') 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

Eu adicionei os vários argumentos para ser flexível, onde o arquivo de configuração para o encfs é armazenado.

    
por fehnomenal 13.06.2016 / 20:26

1 resposta

1

Eu finalmente encontrei a solução depois de ter problemas com o dbus após uma atualização. Novo script:

#!/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
    
por 02.09.2016 / 11:25