Subversion Repositories ALCASAR

Rev

Rev 1263 | Rev 1300 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 1263 Rev 1266
1
#!/bin/bash
1
#!/bin/bash
2
# $Id: alcasar-archive.sh 1263 2013-12-14 13:25:22Z richard $
2
# $Id: alcasar-archive.sh 1266 2013-12-15 21:12:46Z richard $
3
 
3
 
4
# alcasar-archive.sh
4
# alcasar-archive.sh
5
# by Franck BOUIJOUX and REXY
5
# by Franck BOUIJOUX and REXY
6
# This script is distributed under the Gnu General Public License (GPL)
6
# This script is distributed under the Gnu General Public License (GPL)
7
 
7
 
8
# Script permettant 
8
# Script permettant 
9
#	- d'exporter dans un seul fichier les logs de traçabilités et la base des usagers (à des fins d'archivages).
9
#	- d'exporter dans un seul fichier les logs de traçabilités et la base des usagers (à des fins d'archivages).
10
# 	- Une fonction de chiffrement des logs a été implémentée dans ce script. Lisez la documentation d'exploitation pour l'activer.
10
# 	- Une fonction de chiffrement des logs a été implémentée dans ce script. Lisez la documentation d'exploitation pour l'activer.
11
#	- nettoyage des archives supérieures à 1 an (365 jours)
11
#	- nettoyage des archives supérieures à 1 an (365 jours)
12
 
12
 
13
# This script allows 
13
# This script allows 
14
#	- export in one file the log files and user's base (in order to archive them).
14
#	- export in one file the log files and user's base (in order to archive them).
15
# 	- a cypher fonction allows to protect these files. Read the exploit documentation to enable it.
15
# 	- a cypher fonction allows to protect these files. Read the exploit documentation to enable it.
16
#	- delete backup files older than one year (365 days)
16
#	- delete backup files older than one year (365 days)
17
 
17
 
18
DIR_SAVE="/var/Save"			# répertoire accessible par webs
18
DIR_SAVE="/var/Save"			# répertoire accessible par webs
19
DIR_LOG="/var/log"			# répertoire local des log
19
DIR_LOG="/var/log"			# répertoire local des log
20
 
20
 
21
#DIR_SERVICE="squid httpd firewall"	# répertoires contenant des logs utiles à exporter
21
#DIR_SERVICE="squid httpd firewall"	# répertoires contenant des logs utiles à exporter
22
DIR_BASE="/var/Save/base"		# répertoire de sauvegarde de la base de données usagers
22
DIR_BASE="/var/Save/base"		# répertoire de sauvegarde de la base de données usagers
23
DIR_ARCHIVE="$DIR_SAVE/archive"		# répertoire de sauvegarde de la base de données usagers
23
DIR_ARCHIVE="$DIR_SAVE/archive"		# répertoire de sauvegarde de la base de données usagers
24
NOW="$(date +%G%m%d-%Hh%M)"  		# date et heure du moment
24
NOW="$(date +%G%m%d-%Hh%M)"  		# date et heure du moment
25
DIR_TMP="/tmp/archive-$NOW"		# Répertoire temporaire d'export
25
DIR_TMP="/tmp/archive-$NOW"		# Répertoire temporaire d'export
26
FILE="archive-$NOW.tar.gz"		# Nom du fichier de l'archive
26
FILE="archive-$NOW.tar.gz"		# Nom du fichier de l'archive
27
EXPIRE_DAY=365				# Nbre de jour avant suppression des fichiers journaux
27
EXPIRE_DAY=365				# Nbre de jour avant suppression des fichiers journaux
28
CRYPT="0"				# chiffrement des logs 		( 0=non / 1=oui) --> Si oui alors la signature est automatiquement activée
28
CRYPT="0"				# chiffrement des logs 		( 0=non / 1=oui) --> Si oui alors la signature est automatiquement activée
29
					# log files encryption		( 0=no / 1=yes) --> if yes, the signature is automaticly enabled 
29
					# log files encryption		( 0=no / 1=yes) --> if yes, the signature is automaticly enabled 
30
SIGN="0"				# Signature/empreinte des logs 	( 0=non / 1=oui ) ATTENTION : nécessite la clé privée !!!
30
SIGN="0"				# Signature/empreinte des logs 	( 0=non / 1=oui ) ATTENTION : nécessite la clé privée !!!
31
					# Signature of log files	( 0=no / 1=yes )  ATTENTION : need the private key !!!
31
					# Signature of log files	( 0=no / 1=yes )  ATTENTION : need the private key !!!
32
GPG_USER=""				# utilisateur autorisé à déchiffrer les logs. Sa clé publique doit être connu dans le portefeuille gnupg de root (/root/.gnupg)
32
GPG_USER=""				# utilisateur autorisé à déchiffrer les logs. Sa clé publique doit être connu dans le portefeuille gnupg de root (/root/.gnupg)
33
					# user allowed to decrypt the log files. Its public key must be known in the root keyring (/root/.gnupg)
33
					# user allowed to decrypt the log files. Its public key must be known in the root keyring (/root/.gnupg)
34
 
34
 
35
usage="Usage: alcasar-archive.sh {--clean or -c} | {--now or -n}"
35
usage="Usage: alcasar-archive.sh {--clean or -c} | {--now or -n}"
36
 
36
 
37
nb_args=$#
37
nb_args=$#
38
args=$1
38
args=$1
39
if [ $nb_args -eq 0 ]
39
if [ $nb_args -eq 0 ]
40
then
40
then
41
	nb_args=1
41
	nb_args=1
42
	args="-h"
42
	args="-h"
43
fi
43
fi
44
 
44
 
45
 
45
 
46
function cleanup() {
46
function cleanup() {
47
  # Nettoyage des fichiers archives
47
  # Nettoyage des fichiers archives
48
      cd $DIR_SAVE
48
      cd $DIR_SAVE
49
      find . \( -mtime +$EXPIRE_DAY \) -a \( -name '*.gz' -o -name '*.sql' -o -name '' -o -name 'gpg'  \) -exec rm -f {} \;
49
      find . \( -mtime +$EXPIRE_DAY \) -a \( -name '*.gz' -o -name '*.sql' -o -name '' -o -name 'gpg'  \) -exec rm -f {} \;
50
} # end function cleanup
50
} # end function cleanup
51
 
51
 
52
 
52
 
53
function crypt() {
53
function crypt() {
54
	# Chiffrement des logs dans /var/Save/
54
	# Chiffrement des logs dans /var/Save/
55
	find . \( -mtime -7 -o -ctime 0 \) -a \( -name '*log-*.gz' \) -exec gpg --output $DIR_ARCHIVE/$file/{}.gpg --encrypt --recipient $GPG_USER {} \;
55
	find . \( -mtime -7 -o -ctime 0 \) -a \( -name '*log-*.gz' \) -exec gpg --output $DIR_ARCHIVE/$file/{}.gpg --encrypt --recipient $GPG_USER {} \;
56
} # end function crypt
56
} # end function crypt
57
 
57
 
58
function archive() {
58
function archive() {
59
		mkdir -p $DIR_ARCHIVE
59
		mkdir -p $DIR_ARCHIVE
60
		mkdir -p $DIR_TMP 
60
		mkdir -p $DIR_TMP 
-
 
61
		nb_files=`ls $DIR_LOG/firewall/tracability.log*.gz 2>/dev/null | wc -w`
-
 
62
		if [ $nb_files -ne 0 ]; then
61
		mv $(echo $(ls -rt $DIR_LOG/firewall/tracability.log*.gz | tail -n 1 -)) $DIR_TMP/tracability-HTTP.log-$NOW.gz
63
			mv $(echo $(ls -rt $DIR_LOG/firewall/tracability.log*.gz | tail -n 1 -)) $DIR_TMP/tracability-HTTP.log-$NOW.gz
-
 
64
		fi
-
 
65
		nb_files=`ls $DIR_BASE/radius-*.sql 2>/dev/null | wc -w`
-
 
66
		if [ $nb_files -ne 0 ]; then
62
		mv $(echo $(ls -rt $DIR_BASE/radius-*.sql | tail -n 1 -)) $DIR_TMP/
67
			mv $(echo $(ls -rt $DIR_BASE/radius-*.sql | tail -n 1 -)) $DIR_TMP/
-
 
68
		fi
63
		cd /var/log/nfsen/profiles-data/live/ipt_netflow
69
		cd /var/log/nfsen/profiles-data/live/ipt_netflow
-
 
70
		nb_files=`find . -mtime -7 -name 'nfcapd.[0-9]*' | wc -l`
-
 
71
		if [ $nb_files -ne 0 ]; then
64
		find .  -mtime -7 -name 'nfcapd.[0-9]*' | xargs tar -cf $DIR_TMP/tracability-ALL.log-$NOW.tar;
72
			find .  -mtime -7 -name 'nfcapd.[0-9]*' | xargs tar -cf $DIR_TMP/tracability-ALL.log-$NOW.tar;
-
 
73
		fi
65
		cd /tmp/
74
		cd /tmp/
-
 
75
		nb_files=`ls archive-$NOW/* 2>/dev/null | wc -w`
-
 
76
		if [ $nb_files -ne 0 ]; then
66
		tar cvzf /tmp/$FILE archive-$NOW/*
77
			tar cvzf /tmp/$FILE archive-$NOW/*
-
 
78
		else echo "no file to archive"
-
 
79
		fi
67
} # end archive
80
} # end archive
68
 
81
 
69
#  Core script
82
#  Core script
70
case $args in
83
case $args in
71
	-\? | -h* | --h*)
84
	-\? | -h* | --h*)
72
		echo "$usage"
85
		echo "$usage"
73
		exit 0
86
		exit 0
74
		;;
87
		;;
75
	--clean | -c)	
88
	--clean | -c)	
76
		cleanup
89
		cleanup
77
		;;
90
		;;
78
	--now | -n)
91
	--now | -n)
79
		cleanup
92
		cleanup
80
		archive
93
		archive
-
 
94
 		if [ -e /tmp/$FILE ]; then 
81
 		 if [ $CRYPT -eq "1" ]; then
95
			if [ $CRYPT -eq "1" ]; then
82
		{
96
			{
83
		 # 1 ) chiffrement/signature =1 ==> gpg --encrypt avec test de la clé présente
97
				# 1 ) chiffrement/signature =1 ==> gpg --encrypt avec test de la clé présente
84
		    gpg --output $DIR_ARCHIVE/$FILE-crypt.gpg --armor --encrypt --recipient $GPG_USER  /tmp/$FILE
98
				gpg --output $DIR_ARCHIVE/$FILE-crypt.gpg --armor --encrypt --recipient $GPG_USER  /tmp/$FILE
85
		}
99
			}
86
		elif [ $SIGN -eq "1" ]; then
100
			elif [ $SIGN -eq "1" ]; then
87
		{
101
			{
88
		  # 2) signature = 1 Chiffrement = 0 --> gpg --encrypt   idem test de la clé présente
102
				# 2) signature = 1 Chiffrement = 0 --> gpg --encrypt   idem test de la clé présente
89
		    gpg --output $DIR_ARCHIVE/$FILE-sign.gpg --sign --recipient $GPG_USER  /tmp/$FILE
103
				gpg --output $DIR_ARCHIVE/$FILE-sign.gpg --sign --recipient $GPG_USER  /tmp/$FILE
90
		    gpg --output $DIR_ARCHIVE/$FILE-sign.gpg --sign --recipient $GPG_USER --detach-sign  /tmp/$FILE
104
				gpg --output $DIR_ARCHIVE/$FILE-sign.gpg --sign --recipient $GPG_USER --detach-sign  /tmp/$FILE
91
		}
105
			}
92
		else
106
			else
93
		{
107
			{
94
		  # 3)  chiffrement/signature = 0  --> cp simple avec suppression des droits d'écriture
108
				# 3)  chiffrement/signature = 0  --> cp simple avec suppression des droits d'écriture
95
		    cp /tmp/$FILE $DIR_ARCHIVE/.
109
				cp /tmp/$FILE $DIR_ARCHIVE/.
96
		}
110
			}
-
 
111
			fi
97
		fi
112
		fi
98
		rm -rf /tmp/archive-*
113
		rm -rf /tmp/archive-*
99
		chown root:apache $DIR_ARCHIVE/*
114
		chown root:apache $DIR_ARCHIVE/*
100
		;;
115
		;;
101
	--live | -l)
116
	--live | -l)
102
		mkdir -p /tmp/live 
117
		mkdir -p /tmp/live 
103
		gap=$(($(date +%d)-1))
118
		gap=$(($(date +%d)-1))
104
		cd /var/log/nfsen/profiles-data/live/ipt_netflow
119
		cd /var/log/nfsen/profiles-data/live/ipt_netflow
105
		find .  -mtime -$gap -name 'nfcapd.[0-9]*' | xargs tar -cf /tmp/live/tracability.log-$NOW.tar;
120
		find .  -mtime -$gap -name 'nfcapd.[0-9]*' | xargs tar -cf /tmp/live/tracability.log-$NOW.tar;
106
		cp $(echo $(ls -rt $DIR_BASE/radius-*.sql | tail -n 1 -)) /tmp/live/
121
		cp $(echo $(ls -rt $DIR_BASE/radius-*.sql | tail -n 1 -)) /tmp/live/
107
		cp /var/log/firewall/tracability.log /tmp/live/
122
		cp /var/log/firewall/tracability.log /tmp/live/
108
		tar -czf $DIR_ARCHIVE/tracability-$NOW.tar.gz /tmp/live/*
123
		tar -czf $DIR_ARCHIVE/tracability-$NOW.tar.gz /tmp/live/*
109
		rm -rf /tmp/live
124
		rm -rf /tmp/live
110
		;;
125
		;;
111
	--update | -u)
126
	--update | -u)
112
	#	Mise à niveau de l'architecture d'export/archivage
127
	#	Mise à niveau de l'architecture d'export/archivage
113
		[ -d /tmp/save ] || mkdir -p /tmp/save
128
		[ -d /tmp/save ] || mkdir -p /tmp/save
114
		[ -d $DIR_ARCHIVE/ ] || mkdir -p $DIR_ARCHIVE/	# utile une seule fois mais crée le répertoire si nécessaire
129
		[ -d $DIR_ARCHIVE/ ] || mkdir -p $DIR_ARCHIVE/	# utile une seule fois mais crée le répertoire si nécessaire
115
		;;
130
		;;
116
	*)
131
	*)
117
		echo "Unknown argument :$1";
132
		echo "Unknown argument :$1";
118
		echo "$usage"
133
		echo "$usage"
119
		exit 1
134
		exit 1
120
		;;
135
		;;
121
esac
136
esac
122
exit 0
137
exit 0
123
 
138