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
139
140
141
142
143
144
|
#!/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 <<EOF
Crypt-backup használata: mayor crypt-backup [opciók]
A parancs segítségével titkosíthatjuk meglévő mentési állományunkat. Az így kapott
állomány akár nyilvános tárhelyen is tárolható, kibontásához az intézmény privát
kulcsa szükséges.
A script alapértelmezetten az aktuális dátum alapján elnevezett mentési állományt
keres: "YYYYmmdd.tgz" alakban (pl. $DATE.tgz), ebből készít "YYYYmmdd-crypt.tgz"
nevű állományt (pl. ${DATE}-crypt.tgz).
A mentési könyvtár, a szükséges jelszavak és egyéb mentési 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, --backup-file: A mentési állomány neve
-d, --dir, --backup-dir: A mentési könyvtár elérési útja
EOF
}
#if [ $OPTIONS_RET -ne 0 ] || [ $# -le 1 ]; then help_usage; exit; fi
if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
BACKUPFILE="$DATE"
while [ $# -ge 1 ]; do
case $1 in
--help | -h ) help_usage
exit
;;
--backup-file | --file | -f ) shift
BACKUPFILE="$1"
echo "Backup fájl: $BACKUPFILE"
;;
--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
############################
# 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
# Login adatbázis eléréséhez szükséges paraméterek lekérdezése 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 publikus kulcs - regisztrált intézmény-e
COUNT=`$MYSQL -e 'SELECT count(publicKey) FROM mayorSsl' -p$PW -u$USER $DB | grep -i -v count`
if [ "$COUNT" -ne "1" ]; then
echo "Publikus kulcsok száma: $COUNT"
echo "Nem regisztrált intézmény? A mentés titkosítása 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
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"
|