Subversion Repositories ALCASAR

Rev

Rev 958 | Go to most recent revision | Details | Last modification | View Log

Rev Author Line No. Line
917 franck 1
#!/bin/bash
2
# $Id: alcasar-archive.sh 877 2012-06-02 06:58:50Z franck $
3
 
4
# alcasar-archive.sh
5
# by Franck BOUIJOUX and REXY
6
# This script is distributed under the Gnu General Public License (GPL)
7
 
8
# Script permettant 
9
#	- d'exporter 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.
11
#	- nettoyage des archives supérieures à 1 an (365 jours)
12
 
13
# This script allows 
14
#	- export 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.
16
#	- delete backup files older than one year (365 days)
17
 
18
DIR_SAVE="/var/Save"			# répertoire accessible par webs
19
DIR_LOG="/var/log"			# répertoire local des log
20
 
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
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
25
DIR_TMP="/tmp/archive-$NOW"		# Répertoire temporaire d'export
26
FILE="archive-$NOW.tar.gz"		# Nom du fichier de l'archive
27
EXPIRE_DAY=365				# Nbre de jour avant suppression des fichiers journaux
28
CRYPT="0"				# chiffrement des logs 		( 0=non / 1=oui --> Signature = 1(implicite))
29
SIGN="0"				# Signature/empreinte des logs 	( 0=non / 1=oui ) ATTENTION : nécessite la clé privée !!!
30
GPG_USER="OSSI-CIRISI-Lyon"		# utilisateur autorisé à déchiffrer les logs. Sa clé publique doit être connu dans le portefeuille gnupg de root (/root/.gnupg)
31
 
32
usage="Usage: alcasar-archive.sh {--clean or -c} | {--now or -n}"
33
 
34
nb_args=$#
35
args=$1
36
if [ $nb_args -eq 0 ]
37
then
38
	nb_args=1
39
	args="-h"
40
fi
41
 
42
 
43
function cleanup() {
44
  # Nettoyage des fichiers archives
45
      cd $DIR_SAVE
46
      find . \( -mtime +$EXPIRE_DAY \) -a \( -name '*.gz' -o -name '*.sql' -o -name '' -o -name 'gpg'  \) -exec rm -f {} \;
47
} # end function cleanup
48
 
49
 
50
function crypt() {
51
	# Chiffrement des logs dans /var/Save/
52
	find . \( -mtime -7 -o -ctime 0 \) -a \( -name '*log-*.gz' \) -exec gpg --output $DIR_ARCHIVE/$file/{}.gpg --encrypt --recipient $GPG_USER {} \;
53
} # end function crypt
54
 
55
function archive() {
56
		mkdir -p $DIR_ARCHIVE
57
		mkdir -p $DIR_TMP
58
		cp $(echo $(ls -rt $DIR_LOG/firewall/tracability.log*.gz | tail -n 1 -)) $DIR_TMP/
59
		cp $(echo $(ls -rt $DIR_BASE/radius-*.sql | tail -n 1 -)) $DIR_TMP/
60
		tar cvzf /tmp/$FILE $DIR_TMP/*
61
} # end archive
62
 
63
#  Core script
64
case $args in
65
	-\? | -h* | --h*)
66
		echo "$usage"
67
		exit 0
68
		;;
69
	--clean | -c)	
70
		cleanup
71
		;;
72
	--now | -n)
73
		cleanup
74
		archive
75
 		 if [ $CRYPT -eq "1" ]; then
76
		{
77
		 # 1 ) chiffrement/signature =1 ==> gpg --encrypt avec test de la clé présente
78
		    gpg --output $DIR_ARCHIVE/$FILE-crypt.gpg --armor --encrypt --recipient $GPG_USER  /tmp/$FILE
79
		}
80
		elif [ $SIGN -eq "1" ]; then
81
		{
82
		  # 2) signature = 1 Chiffrement = 0 --> gpg --encrypt   idem test de la clé présente
83
		    gpg --output $DIR_ARCHIVE/$FILE-sign.gpg --sign --recipient $GPG_USER  /tmp/$FILE
84
		    gpg --output $DIR_ARCHIVE/$FILE-sign.gpg --sign --recipient $GPG_USER --detach-sign  /tmp/$FILE
85
		}
86
		else
87
		{
88
		  # 3)  chiffrement/signature = 0  --> cp simple avec suppression des droits d'écriture
89
		    cp /tmp/$FILE $DIR_ARCHIVE/.
90
		}
91
		fi
92
		rm -rf /tmp/archive-*
93
		chown apache:apache $TO_SAVE/
94
		;;
95
	--update | -u)
96
	#	Mise à niveau de l'architecture d'export/archivage
97
		[ -d /tmp/save ] || mkdir -p /tmp/save
98
		[ -d $DIR_ARCHIVE/ ] || mkdir -p $DIR_ARCHIVE/	# utile une seule fois mais crée le répertoire si nécessaire
99
#		copie de l'archive au cas où ...
100
		rm -f $(ls *[0-9])	# effacer les fichiers n'ayant pas été compressés
101
		mv $TO_SAVE/firewall/tracabilite-* $DIR_ARCHIVE/.
102
		;;
103
	*)
104
		echo "Unknown argument :$1";
105
		echo "$usage"
106
		exit 1
107
		;;
108
esac
109
exit 0