( log69 | 2009. 01. 12., h – 20:45 )

Köszi mindenkinek az ötleteket.

Végül úgy döntöttem, hogy mégis írok egy scriptet a problémámra, mivel olyan megoldásra van szükségem, ami csak addig bontja ki a fájlomat a titkosított formátumból, amíg szerkesztem (pl. pár percre). Mivel be van kapcsolva a gépem folyamatosan, ezért egy fizikális hozzáférés esetén a blokk illetve userspace filerendszeres titkosítások nem nyújtanak megoldást (legalábbis ezt jobban preferálom).

Ez azért jobb nekem, mert olyan környezetben is biztosítani szeretném magamnak, hogy kényelmesen sokszor megnyithassam a titkosított dokumentumaimat, ahol nem akarok kernel szintű beállításokat végezni. Az encfs-t is fel kellene csatolni minden alkalommal, szóval fél megoldás nekem arra, ahogy szeretném.

Az alábbi módon működik (gpg_writeback.sh nevet adtam neki, de jó lenne valami normális név, amire 1 év múlva is könnyen asszociálok, ötlet?):
--------------------------
script.sh command file

pl:
script.sh gedit jelszavaim.gpg
script.sh vi mylist.gpg

Zenity használatával (és a GUI változó 1-re állításával) grafikusan kéri be a jelszót.


-----------------------------------------------------------
#!/bin/bash

# THIS SCRIPT OPENS A GPG PROTECTED FILE FOR EDITING
# AND THEN ENCRYPTS BACK ITS CONTENT
# WITH THE SAME PASSWORD KEPT IN MEMORY
#
# USAGE: script command filename
# Needed packages: gnupg, zenity
#


GUI=1
TEMP=`mktemp /dev/shm/tmp.XXXXXX`
rm -f $TEMP

HASH=`sha1sum $0`
COMMAND=$1
FILE=$2


# Ensure to remove file even after unexpected terminations
trap "{ rm -f $TEMP; }" 0 1 2 5 15


if [ "$GUI" == "0" ]
then
	echo $HASH
	echo -n "Give me the password to use:"
	read -s PW
	echo
else
	PW=`zenity --entry --hide-text --title="Warning!" --text="Enter password:"`
	#PW=`zenity --entry --hide-text --title="Warning!" --text="$HASH, Enter password:"`
fi


# Decrypt the file
echo $PW | gpg -q --decrypt --passphrase-fd 0 -o $TEMP $FILE &> /dev/null

if [ $? -ne 0 ]
then
	rm -f $TEMP
	echo "Error during decrypting!"
	echo "Exiting."
	echo
	exit 1
else
	# Open file
	$COMMAND $TEMP 2> /dev/null

	# Safety backup and delete (gpg cannot overwrite without confirmation)
	mv $FILE $FILE.bak

	# Encrypt back
	echo $PW | gpg -qc --cipher-algo aes256 --passphrase-fd 0 \
		-o $FILE $TEMP &> /dev/null
fi

rm -f $TEMP
exit

-----------------------------------
Szerk.: közben változtattam 1-2 dolgot amit kihagytam.
Elvileg most már végleges. Néhány hülyeséget kihagytam.