aboutsummaryrefslogtreecommitdiffstats
path: root/mayor-jav/mayor-base-jav/bin/decrypt-backup.sh
blob: 9eca43753a4115569a55ee4580c9ab98e8da9179 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/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"