crt_sfx_enc.sh - create self-extracting encoded file

A probléma: Szeretnék nem megbízható csatornán keresztül továbbítani bizalmas anyagot, és a másik fél dolgát maximálisan meg szeretném könnyíteni.

A szkript létrehoz egy önkicsomagoló fáljt, ami jelszóval alapú, 256 bites AES titkosítással kódolt formában tárolja az első paraméterben megadott fájl vagy mappa tartalmát. Mappa megadása esetén a mappa teljes tartalma tömörítve majd titkosítva kerül tárolásra, normál fájl esetén viszont nem kerül sor tömörítésre. Az eredményül kapott 'enc' kiterjesztésű fájl önmaga is egy szkript, amely - ha futtatod - a helyes jelszó megadása után dekódolja és az aktuális munkakönyvtárba menti a tárolt fájlt/fájlokat. Mivel a tárolt fájlok teljes tartalma titkosításra kerül, az esetleges támadónak vagy fel kell törnie az AES kódolást, vagy ki kell totóznia a jelszót. Ez következésképpen a jelszófeledékeny kedves felhasználókra is igaz...

Implementációs részletek: A szkript openssl-t és GNU tar-t használ a feladat elvégzéséhez. Bár ezek a legtöbb linuxon alapból telepítésre kerülnek, bizonyos unixokon nem. Ezt tartsuk szem előtt. Említésre méltó továbbá azt, hogy az önkicsomagoló csak ASCII karaktereket tartalmaz, ami egy kis méretbeli növekedés árán lehetővé teszi a copy-paste jellegű továbbítást, például IRC, putty, telnet stb használatát.


#!/bin/sh

if [ -z $1 ]; then
	cat <<-EOF
	[ create self extracting encrypted file :: http://lithium.io7.org/ ]
	echo "Usage: $0 file
	
	The script creates a self-extracting AES256 encrypted file, holding the
	contents of a regular file or a directory provided as the first argument.
	Running the resulting file will restore the encrypted files to the current
	working directory.
	EOF
elif [ -f $1 ]; then
	cat > $(basename $1.enc) <<-EOF
	#!/bin/sh
	
	# self extracting encrypted file (http://lithium.io7.org/)
	tail -n +7 \$0 | openssl enc -d -aes-256-cbc -a -out \$(basename \${0%.enc}) || echo "bad password?"
	exit 0
	
	EOF
	openssl enc -a -aes-256-cbc -salt -in $1 >> $(basename $1.enc)
elif [ -d $1 ]; then
	cat > $(basename $1.enc) <<-EOF
	#!/bin/sh
	
	# self extracting encrypted archive (http://lithium.io7.org/)
	tail -n +7 \$0 | openssl enc -d -aes-256-cbc -a | tar xz || echo "bad password?"
	exit 0
	
	EOF
	tar cz $1 | openssl enc -a -aes-256-cbc -salt >> $(basename $1.enc)
else
	echo "aborting: $1 is not a regular file of directory." && exit 1
fi
© 2003-2020 lithium.io7.org
Erre a weblapra a Creative Commons Nevezd meg! - Így add tovább! 3.0 Unported Licensz vonatkozik.