Sans aucunement critiquer la méthode présentée dans le journal, je me permets de présenter ma propre solution.
Elle est basée sur GnuPG (pour le chiffrement) et udisksctl (pour la manipulation de volumes, en gros la même chose que ce pour quoi est utilisé losetup dans le journal, mais sans avoir besoin de sudo).
J’utilise GnuPG plutôt que cryptsetup pour pouvoir « ouvrir le coffre » avec ma carte OpenPGP.
Sans fioritures, le code complet :
#!/bin/bash# vault - Manages encrypted archives# Copyright (C) 2014,2015 Damien Goutte-Gattat# # Copying and distribution of this file, with or without modification,# are permitted in any medium without royalty provided the copyright# notice and this notice are preserved.encrypted_vault_dir=${XDG_DATA_HOME:-$HOME/.local/share}/vaults
decrypted_vault_dir=$XDG_RUNTIME_DIR/vaults
default_size=8
die(){echo"${0##*/}: $@" >&2
exit}
usage(){
cat <<EOUUsage: [1] vault new <name> [size] Create a new vault with the specified name and size (in Mb). If size is not specified, default is ${default_size}Mb. [2] vault open <name> Open the specified vault. [3] vault close <name> Close the specified vault. [4] vault dclose [name] Close the specified vault without saving changes. If no vault is specified, all currently opened vaults are closed. [5] vault is-open [name] Return 0 if the specified vault is open, 1 otherwise. A default vault name may be specified in the DEFAULT_VAULT environment variable.EOUexit 0
}
open_vault(){local encrypted_vault=$encrypted_vault_dir/1ドル.gpg
local decrypted_vault=$decrypted_vault_dir/1ドル.img
[ -f $decrypted_vault]&& die "Vault 1ドル is already opened"[ -f $encrypted_vault]|| die "Cannot found vault 1ドル"if ! gpg2 -o $decrypted_vault -d $encrypted_vault;then
rm -f $decrypted_vault
die "Cannot decrypt vault 1ドル"filoop_device=$(udisksctl loop-setup --file $decrypted_vault| sed -nre 's,Mapped file .+ as (.+)\.,1,円p')
udisksctl mount --block-device $loop_device --options fmask=0177
}
close_vault(){local encrypted_vault=$encrypted_vault_dir/1ドル.gpg
local decrypted_vault=$decrypted_vault_dir/1ドル.img
[ -f $decrypted_vault]|| die "Vault 1ドル is not opened"volume_name=$(echo1ドル| tr a-z A-Z)loop_device=$(mount | grep /run/media/$USER/$volume_name| cut -d' ' -f1)
udisksctl unmount --block-device $loop_device
udisksctl loop-delete --block-device $loop_deviceif["x2ドル"= x1 ];then
gpg2 -o $encrypted_vault.$$ -e $decrypted_vault\&& mv $encrypted_vault.$$$encrypted_vaultfi
rm $decrypted_vault}
close_all_vault(){
ls $decrypted_vault_dir/*.img 2>/dev/null |whileread vault ;dovault=${vault##*/}
close_vault ${vault%.img} 0
done}
new_vault(){
dd if=/dev/zero of=1ドル.img bs=1M count=2ドル
/sbin/mkfs.vfat -n $(echo1ドル| tr a-z A-Z)1ドル.img
gpg2 -o $encrypted_vault_dir/1ドル.gpg -e 1ドル.img
rm 1ドル.img
}[ -d $encrypted_vault_dir]|| mkdir -p $encrypted_vault_dir[ -d $decrypted_vault_dir]|| mkdir -p $decrypted_vault_dircase"1ドル" in
-h|--help|"")
usage
;;
-v|--version)
sed -n '2,/^$/ s/^# //p'0ドルexit 0
;;
new)[ -n "2ドル"]|| die "Missing vault name"
new_vault 2ドル${3:-$default_size};;
open)vault=${2:-$DEFAULT_VAULT}[ -n "$vault"]|| die "Missing vault name"
open_vault $vault;;
close)vault=${2:-$DEFAULT_VAULT}[ -n "$vault"]|| die "Missing vault name"
close_vault $vault 1
;;
dclose)vault=2ドルif[ -n "$vault"];then
close_vault $vault 0
else
close_all_vault
fi;;
is-open)vault=${2:-$DEFAULT_VAULT}[ -f $decrypted_vault_dir/$vault.img ]&&exit 0||exit 1
;;esac
Petite subtilité supplémentaire permise par l’utilisation d’une carte OpenPGP : j’ai un script ~/.gnupg/scd-event appelé automatiquement par GnuPG à chaque « évènement » sur le lecteur de carte (insertion ou retrait de carte), avec le code suivant :
#!/bin/bashcard_status=8ドルcase"$card_status" in
NOCARD)
vault dclose
;;esac
qui me permet de refermer automatiquement le coffre simplement en retirant ma carte OpenPGP du lecteur.
# Ma version
Posté par gouttegd . En réponse au journal un vrai coffre fort numérique. Évalué à 10.
Sans aucunement critiquer la méthode présentée dans le journal, je me permets de présenter ma propre solution.
Elle est basée sur GnuPG (pour le chiffrement) et udisksctl (pour la manipulation de volumes, en gros la même chose que ce pour quoi est utilisé losetup dans le journal, mais sans avoir besoin de sudo).
J’utilise GnuPG plutôt que cryptsetup pour pouvoir « ouvrir le coffre » avec ma carte OpenPGP.
Sans fioritures, le code complet :
Petite subtilité supplémentaire permise par l’utilisation d’une carte OpenPGP : j’ai un script
~/.gnupg/scd-eventappelé automatiquement par GnuPG à chaque « évènement » sur le lecteur de carte (insertion ou retrait de carte), avec le code suivant :qui me permet de refermer automatiquement le coffre simplement en retirant ma carte OpenPGP du lecteur.