#!/bin/bash # # Example: mayor decrypt-backup --crypted-file=/home/backup/20110515-crypt.tgz # Az eredmény a $BACKUPDIR alá kerül az eredetileg elkódolt állomány nevéből # származtatott néven: file.kit --> file-decrypt.kit # # TODO: ellenőrizni kell még az openssl és az aespipe meglétét # OPT_SPEC="hf:d::" LONG_OPT_SPEC="help,file:,crypted-file:,dir:,backup-dir::" PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@") OPTIONS_RET=$? eval set -- "$PARSED_OPTIONS" help_usage() { cat <<EOF Decrypt-backup használata: mayor decrypt-backup [opciók] A parancs segítségével a korábban titkosított (ld. mayor help crypt-backup) mentést csomagolhatjuk ki. A kicsomagoláshoz szükséges az intézmény privát kulcsa, amit a program alapesetben az adatbázisban keres. Ha nincs más megadva, akkor a szkript "YYYYmmdd-crypt.tgz" néven keresi a kicsomagolandó állományt (pl. ${DATE}-crypt.tgz) A mentési könyvtár, a szükséges jelszavak és egyéb paraméterek beállításait a /etc/mayor/main.conf állományban kell megadni. Opciók: -h, --help: A parancs leírása (amit most olvasol...) -f, --file, --crypted-file: A kódolt állomány neve -d, --dir, --backup-dir: A mentési könyvtár elérési útja EOF } if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi FILE="${DATE}-crypt.tgz" while [ $# -ge 1 ]; do case $1 in --help | -h ) help_usage exit ;; --crypted-file | --file | -f ) shift FILE="$1" echo "Kódolt állomány: $FILE" ;; --backup-dir | --dir | -d ) shift BACKUPDIR="$1" echo "Backup könyvtár: $BACKUPDIR" ;; -- ) shift break ;; * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paraméterek exit ;; esac shift done # A mysql bináris ellenőrzése if [ ! -f $MYSQL ]; then echo -e "\n\nERROR: A mysql kliens nem található: $MYSQL\n" exit 1 fi # A login adatbázis eléréséhez szükséges adatok a konfig-ból DB=`grep db $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"` USER=`grep user $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"` PW=`grep pw $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"` # Ellenőrizzük, hogy van-e privát kulcs - regisztrált intézmény-e COUNT=`$MYSQL -e 'SELECT count(privateKey) FROM mayorSsl' -p$PW -u$USER $DB | grep -i -v count` if [ "$COUNT" -ne "1" ]; then echo "Privát kulcsok száma: $COUNT" echo "Nem regisztrált intézmény? A titkosított mentések kezelése csak regisztrált intézmények számára érhető el!" exit 2 fi # Backup könyvtár létrehozása if [ ! -e $BACKUPDIR ]; then mkdir $BACKUPDIR > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "Nem sikerült a ${BACKUPDIR} könyvtárat létrehozni!" echo "MaYoR Backup failure!" exit 3 fi fi chown $WEB_SERVER_USER $BACKUPDIR chmod 700 $BACKUPDIR # bejövő paraméterek feldolgozása (crypted-file) if [ ! -f $FILE ]; then echo -e " HIBA: Hiányzik a dekódolandó mentési állomámny: ${FILE}\n" FILE=$BACKUPDIR/${FILE} echo "Próbáljuk a mentési könyvtárban (${FILE})" if [ ! -f $FILE ]; then echo -e " HIBA: Hiányzik a dekódolandó mentési állomámny: ${FILE}\n" FILE=$BACKUPDIR/${PREFIX}${DATE}-crypt.tgz echo "Próbáljuk az alapértelmezett állományt (${FILE})" if [ ! -e $FILE ]; then echo " HIBA: Hiányzik a dekódolandó mentési állomámny: ${FILE}" exit 4 fi fi fi BASENAME=`basename $FILE` cd $BACKUPDIR tar xfz $FILE TARFILES=`tar tf $FILE` SUBDIR=`for f in $TARFILES; do echo $f; break; done` AESFILE=`echo $TARFILES | sed -e 's/ /\n/g' | grep '.aes'` AESBASE=`basename $AESFILE | sed -e 's/.aes//g'` DECRYPTFILE=`echo $AESBASE | sed -e 's/\.\([a-z]*\)$/-decrypt\.\1/'` # A privát kulcs lekérdezése echo 'SELECT privateKey FROM mayorSsl' | $MYSQL -p$PW -u$USER $DB | grep -v privateKey | sed -e 's/\\n/\n/g' > $BACKUPDIR/$SUBDIR/id_rsa # AES kulcs dekódolása openssl rsautl -decrypt -inkey $BACKUPDIR/$SUBDIR/id_rsa -in $BACKUPDIR/$SUBDIR/key.rsa -out $BACKUPDIR/$SUBDIR/key.txt # AES dekódolás (feltételezzük, hogy az eredmény tgz aespipe -P $BACKUPDIR/$SUBDIR/key.txt -d -e aes256 < $BACKUPDIR/$AESFILE > $BACKUPDIR/$DECRYPTFILE # Törlés rm -rf $BACKUPDIR/$SUBDIR echo -e "\nKicsomagolva: $BACKUPDIR/$DECRYPTFILE\n\n"