#!/bin/bash # # Example: mayor crypt-backup --backup-file=/tmp/wiki.tgz # Az eredmény a $BACKUPDIR/$DATE-crypt.tgz állományba kerül # (Vagy jobb lenne, ha a file nevéből venné a nevét?) # # TODO: ellenőrizni kell még, hogy van-e openssl és aespipe # OPT_SPEC="hf:d::" LONG_OPT_SPEC="help,file:,backup-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 < /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 CRYPTDIR=$BACKUPDIR/$DATE if [ ! -e $CRYPTDIR ]; then mkdir $CRYPTDIR fi chown $WEB_SERVER_USER $BACKUPDIR chmod 700 $BACKUPDIR if [ ! -f $BACKUPFILE ]; then # Próbáljuk meg a mai dátum szerinti backup-ot (alapértelmezés) echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: (${BACKUPFILE})\n" BACKUPFILE=$BACKUPDIR/${BACKUPFILE} echo "Próbáljuk a mentéi könyvtáron belül: ${BACKUPFILE}" if [ ! -f $BACKUPFILE ]; then echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: (${BACKUPFILE})\n" BACKUPFILE=$BACKUPDIR/${PREFIX}${DATE}.tgz echo "Próbáljuk az alapértelmezett állománynevet: ${BACKUPFILE}" if [ ! -e $BACKUPFILE ]; then echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: (${BACKUPFILE})\n" exit 3 fi fi fi BASENAME=`basename $BACKUPFILE` # Publikus kulcs lekérdezése echo 'SELECT publicKey FROM mayorSsl' | $MYSQL -p$PW -u$USER $DB | grep -v publicKey | sed -e 's/\\n/\n/g' > $CRYPTDIR/id_rsa.pub # Véletlen kulcs generálás a szimmetrikus AES kódoláshoz pwgen -nc 50 1 > $CRYPTDIR/key.txt # AES kódolás aespipe -P $CRYPTDIR/key.txt -e aes256 < $BACKUPFILE > $CRYPTDIR/$BASENAME.aes # A kulcsok RSA kódolása a publikus kulccsal openssl rsautl -encrypt -inkey $CRYPTDIR/id_rsa.pub -pubin -in $CRYPTDIR/key.txt -out $CRYPTDIR/key.rsa # Kulcsok törlése rm $CRYPTDIR/id_rsa.pub rm $CRYPTDIR/key.txt cd $BACKUPDIR tar cfz ${DATE}-crypt.tgz ${DATE} rm -rf $DATE echo -e "\nBecsomagolva: $BACKUPDIR/${DATE}-crypt.tgz\n\n"