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