Installation et sécurisation d'une station Debian 3.0 stable15/05/2004 
  
	
	
	
	
	 
	 4. SECURISATION MODEREE
				
				 4.1. Notes sur le boot du système et sur le noyau
					
					
				
				 4.2. Sécurisation du système de fichiers 
				
				
				
				
				
				
				
				
				
				
				
			
			 4.3. Sécurisation des comptes
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
			
			 4.4. Recherche et modifications de droits de fichiers
				
				
				
				
				
				
				
				
			
			 4.5. Les administrateurs n'ont pas besoin de passer root
				
				
				
				
				
				
				
				
			
			 4.6. Synchronisation horaire avec un serveur NTP
				
				
				
				
				
				
				
				
				
				
			
			 4.7. Génération automatiséd'un rapport système
				
				
				
				
				
			
			 4.8. Installation et premiers pas avec Modular-Syslog
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
			
			 4.9. Vérification des empreintes des packages à installer
				
				
				
				
				
				
				
				
			
			 4.10. Système de fichiers ext3 avec un noyau 2.4 : de ext2 à ext3
				
				
				
				
				
			
			 4.11. Backup du système sur une partition spécifique
				
				
				
				
				
				
				
				
				
				
				
			
				
				
				
				
				
				
				
				
				
				
			
			 4.12. Préparation d'une restauration du système en cas d'incident
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
	  		
	  	
	
  
	
	
	
	
	 
	
 
  
				
				
 4.1. Notes sur le boot du système et sur le noyau 
  
					
					
						NDR : Il est futile d'indiquer  qu'un  individu  avec  un  accès  physique  au
						serveur implique que le serveur est compromis. 
						Un seul noyau doit être chargeable lors de l'invite par défaut. 
						Tout passage de paramètre au noyau lors du boot doit être interdit. 
						Le chargement dynamique de modules devrait être interdit.  
						Dans le cas ou cela est impossible,  appliquez  un  patch  permettant  de
						bloquer le chargement des modules après le boot. 
						 
						Il peut également être intéressant de modifier la séquence d'amorcage du  BIOS
						de facon à débuter par le chargement du MBR du disque dur.
					  
				
				
 4.2. Sécurisation du système de fichiers 
   
				
				
				
					NDR : Après ces modifications, n'oubliez pas que certaines  partitions  sont
					montées en lecture seule. Vous pouvez remonter une partition en lecture/
					écriture avec (par exemple) :
				  
				mount -o remount,rw /local  
				
					Editez le fichier /etc/fstab de facon à monter les  partitions  présentées  en
					1.5 selon le principe suivante :
				  
				/dev/sda1       /       ext2    errors=remount-ro       0       1
/dev/sda2       none    swap    sw                      0       0
proc            /proc   proc    defaults                0       0
/dev/fd0        /floppy auto    noauto,nosuid,nodev     0       0
/dev/cdrom      /cdrom  iso9660 ro,noauto,nosuid,nodev  0       0
/dev/sda3       /boot   ext2    ro,noexec,nosuid,nodev  0       2
/dev/sda5       /root   ext2    defaults                0       2
/dev/sda6       /var    ext2    nodev                   0       2
/dev/sda7       /var/log ext2   noexec,nosuid,nodev,sync        0       2
/dev/sda8       /tmp    ext2    noexec,nosuid,nodev     0       2
/dev/sda9       /usr    ext2    ro,nodev                0       2
/dev/sda10      /home   ext2    nodev                   0       2
/dev/sda11      /local  ext2    ro,noexec,nosuid,nodev  0       2  
				
					Si vous avez procédé à la préparation d'une partition pour un serveur web :
				  
				/dev/sda11  /var/www ext2   rw,nosuid,nodev		    0       2
/dev/sda12  /local   ext2   ro,noexec,nosuid,nodev      0       2  
				
					Si vous avez procédé à la préparation d'une partition pour un serveur was :
				  
				/dev/sda11  /var/www ext2   rw,nosuid,nodev		    0       2
/dev/sda12  /var/was ext2   rw,noexec,nosuid,nodev      0       2
/dev/sda13  /local   ext2   ro,noexec,nosuid,nodev      0       2  
				
					Pour prendre en compte ces modifications, rebootez le système ou remontez  les
					partitions. 
					Man : fstab, mount.
				  
			
			
 4.3. Sécurisation des comptes 
  
				
				
					Durcissement de la politique de mots de passe : 
					Modifiez le fichier /etc/login.defs de la facon suivante :
				  
				LOG_OK_LOGINS yes
SULOG_FILE /var/log/sulog
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin
UMASK 027
PASS_MAX_DAYS 30
DEFAULT_HOME no  
				
					MAN : login.defs 
					Suppression des utilisateurs et groupes inutiles : 
				  
				unalias userdel
for i in `echo games sync sys irc` ; do (echo -n "Removing user $i : " &&  \
  userdel $i 2> /dev/null && echo "done.") || echo "failed."; done
for i in `echo irc dialout fax  voice  audio  dip  video` ;  do  (echo  -n \
  "Removing group $i : " && groupdel $i 2>  /dev/null &&  echo "done.") || \
  echo "failed."; done
source ~/.bashrc  
				
					Désactivation des comptes inutiles :
				  
				for i in `echo lp list uucp news proxy postgres www-data nobody` ; do (echo\
  -n "Falsing $i : " && chsh -s /bin/false  $i &&  echo  "done.")  ||  echo\
  "failed."; done  
				
					MAN : userdel, chsh, false 
					Réappropriation des fichiers non affectés (N'oubliez pas  les  permissions  du
					système de fichier /usr !) : 
				  
				for i in `find / -nouser -o -nogroup` ; do echo  "Giving  $i  to  root" && \
  chown root:root $i && chmod 600 $i; done  
				
					Déconnexion des comptes en inactivité : 
					Ajoutez/Modifiez les lignes suivantes dans le fichier /etc/profile :
				  
				export TMOUT=300
umask 027  
				
					Aggrégation des comptes dans des groupes : 
					 
					Tous les comptes utilisateurs doivent faire partie de groupes appropriés. 
					Nous nous basons dans ce documents sur deux  groupes  existant,  mais  cette
					déclinaison est arbitraire. 
					 
					Le groupe adm est réservé aux administateurs (voir 4.5. Les  administrateurs
					n'ont pas besoin de passer root). 
					Le groupe users est réservé aux utilisateurs non administrateurs. 
					 
					Modifiez /etc/adduser.conf pour faire figurer :
				  
				USERGROUPS=no
DIR_MODE=0700  
				
					Modification des squelettes de création de compte :
				  
				/etc/skel/.bash_profile :
	umask 027
	if [ -f ~/.bashrc ]; then
	   source ~/.bashrc
	fi
	if [ -f ~/.alias ]; then
	   source ~/.alias
	fi
  /etc/skel/.alias :
	alias   ls='ls --color=auto'
	alias   md='mkdir'
	alias   rd='rmdir'
	alias   l='ls'
	alias   ll='l -l'
	alias   la='ll -a'
	alias   rm='rm -i'
	alias   cp='cp -i'
	alias   mv='mv -i'  
				
					Ajoutez les fichiers suivants :
				  
				/etc/skel/.bash_logout :
	case "`tty`" in
	  /dev/tty[0-9]) clear
	esac
  /etc/skel/.inputrc :
	set bell-style none  
				
					Donnez les droits :
				  
				chmod 640 /etc/skel/.bash_logout /etc/skel/.inputrc'  
				
					Mettez en place la méthode de suppression de comptes : 
					Modifiez /etc/deluser.conf pour faire figurer :
				  
				REMOVE_HOME = 1
BACKUP = 1  
				
					Créez le répertoire de backup des comptes supprimés :
				  
				mkdir /home/system/deleted_accounts
chown root:adm /home/system/deleted_accounts
chmod 1750 /home/system/deleted_accounts  
				
					Créez le fichier suivant :
				  
				mount -o remount,rw /usr  
				
					/usr/local/sbin/deluser.local :
				  
				#!/bin/sh
  if [ -d /home/system/deleted_accounts ] && [ $1 ]
  then
  
	echo "  deluser.local :"
	echo "  Moving $1.tar.bz2 to /home/system/deleted_accounts..."
  
	if  [ $PWD ]   &&  [ $PWD != "/home/system/deleted_accounts" ]  && \
  [ -f $1.tar.bz2 ]
	then
	  mv $1.tar.bz2 /home/system/deleted_accounts/$1.tar.bz2
	fi
  
	if [ -f /home/system/deleted_accounts/$1.tar.bz2 ]
	then
	  echo  "    Giving  admins  permissions  to  /home/system/deleted_\
	accounts/$1.tar.bz2"
	  chown root:adm /home/system/deleted_accounts/$1.tar.bz2
	else
	  echo "  Error : $1.tar.bz2 is no regular file !?!?!"
	fi
  
  else
  
	echo "deluser.local error:"
	if [ $1 ]
	then
	  echo "No backup directory to store $1.tar.bz2."
	else
	  echo "Error in arguments !?!?!"
	fi
  fi  
				
					Puis :
				  
				chmod 700 /usr/local/sbin/deluser.local
mount -o remount,ro /usr  
			
			
 4.4. Recherche et modifications de droits de fichiers 
  
				
				
					Recherche de tous les fichiers sgid et suid :
				  
				cd /root/tmp
find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -la {} \;  2> \
  /dev/null > sguid_original_list.txt  
				
					Suppression du flag suid/sgid quand cela n'est pas indispensable :
				  
				mount -o remount,rw /usr/
for i in `echo /bin/ping /bin/mount /bin/umount /usr/bin/at /usr/bin/newgrp\
  /usr/bin/chfn   /usr/bin/chsh   /usr/bin/gpg   /usr/bin/lpq  /usr/bin/lpr\
  /usr/bin/lprm /usr/bin/mtr`; do  echo "Removing  sguid bit  from  $i." &&\
  chmod -s $i ; done
mount -o remount,ro /usr/  
				
					Note : Attention à ces suppressions de privilèges si vos démons en ont besoin. 
					 
					Restreignez l'usage de l'utilitaire cron en créant un fichier /etc/cron.allow: 
				  
				touch /etc/cron.allow
chmod 640 /etc/cron.allow  
				
					=> Pour qu'un utilisateur soit autorisé à utiliser l'utilitaire  cron  et  ses
					dérives, vous devrez l'enregitrer dans ce fichier. 
					 
					MAN : cron, crontab
				  
			
			
 4.5. Les administrateurs n'ont pas besoin de passer root 
  
				
				
					Installation de sudo :
				  
				mount -o remount,rw /usr/
dselect => Installez le package sudo
mount -o remount,ro /usr/  
				
					Ajoutez les utilisateurs ADMINISTRATEURS requis {UserName} dans le groupe adm: 
				  
				usermod -g {UserName} -G adm,users {UserName}  
				
					Configuration de sudo : 
					Lancez visudo et éditez le fichier de facon à ajouter (raccourcis vi) :
				  
				# Cmnd alias specification
Cmnd_Alias REBOOT=/sbin/reboot
%adm ALL=NOPASSWD:REBOOT  
				
					MAN : usermod, sudoers visudo, sudo
				  
			
			
 4.6. Synchronisation horaire avec un serveur NTP 
  
				
				
					Installez les packages requis.
				  
				mount -o remount,rw /usr
dselect et installation des packages ntp, ntpdate, ntp-simple et ntp-doc :
  * Ne pas specifier de serveur NTP
  * Overwrite ntp.conf : Yes.
mount -o remount,ro /usr  
				
					Configurez le client ntp et le nouveau flux au niveau du firewall : 
					
						
							Ajoutez l'adresse IP de votre serveur NTP dans /etc/default/ntp-servers
						
						
							Ajoutez l'adresse IP de votre serveur dans le fichier  de  configuration  du
							firewall.
						
					
				  
				/etc/init.d/init_ipchains.sh restart  
				
					Stoppez le démon NTP et exécutez la synchronisation
				  
				/etc/init.d/ntp stop
update-rc.d -f ntp remove
/etc/init.d/ntpdate start  
				
					Ajoutez un appel au client ntp toutes les 6 heures dans /etc/crontab :
				  
				# Met a jour la date et l'heure du système grâce au serveur NTP
0 */6 * * * root /etc/init.d/ntpdate start > /dev/null  
				
					MAN : ntpdate
				  
			
			
 4.7. Génération automatiséd'un rapport système 
  
				
				
					Le script présent en annexe 'ANNEXE  2 -  Génération  automatisée  de  rapport
					système' peut être éxécute par la crontab à intervalles périodique. Il  génère
					un rapport système succinct qui peut être envoyé par mail aux  administrateurs
					ou stocké dans un répertoire. 
					 
					NDR : Attention à respecter l'indentation ! 
					 
					NDR : Je vous conseille de vérifier le script de façon à ce  qu'il  n'exécute
					que les commandes que  vous  désirez.  Ainsi,  le  script  récupère  par
					exemple les fichiers de logs présentés en '4.8. Installation et premiers
					pas avec Modular-Syslog'. 
					 
					Installation du script (nous utilisons le script présent en annexe qui envoie
					le rapport par mail) :
				  
				mkdir /home/system/scripts/reports/
chmod 750 /home/system/scripts/reports/system_report.sh  
				
					Configuration de /etc/crontab pour lancer le script tous les jours à 09H00 AM:
				  
				# Genere le rapport system
0 9 * * * root /home/system/scripts/reports/system_report.sh
chmod 640 /etc/crontab  
			
			
 4.8. Installation et premiers pas avec Modular-Syslog 
  
				
				
					Modular-Syslog est disponible à : http://sourceforge.net/projects/msyslog/  
					 
					Compilation : 
				  
				cd /home/system/applis
/usr/bin/md5sum /home/system/download/msyslog-v1_08e-src_tar.gz 
  c3700571c675d8896c643c276f5e2dad     /home/system/download/msyslog-v1_08e\
	-src_tar.gz
tar zxvf /home/system/download/msyslog-v1_08e-src_tar.gz
find ./msyslog-v1.08e/ -type f \( -perm -004000 -o -perm -002000 \)  -exec \
  ls -la {} \;
chown -R root:root msyslog-v1.08e/
cd msyslog-v1.08e/
./configure
make  
				
					NDR : Vous pouvez très bien  décider,  si  vous  en  comprennez  l'intérèt  de
					modifier le chemin du fichier  de  configuration  par  défaut  avant  de
					compiler le démon modular-syslog. 
					 
					Installation :
				  
				mount -o remount,rw /usr/
make install  
				
					On sauvegarde l'ancien syslogd et son fichier de configuration :
				  
				cp /etc/syslog.conf /etc/syslog.conf.orig2
cp /sbin/syslogd /sbin/syslogd.orig  
				
					On remplace l'ancien syslogd par le notre :
				  
				mv /usr/local/sbin/syslogd /sbin/syslogd
chown root:root /sbin/syslogd && chmod 755 /sbin/syslogd
mount -o remount,ro /usr/  
				
					On modifie le script d'initialisation du démon /etc/init.d/sysklogd :
				  
				SYSLOGD="-i linux -i unix"  
				
					On stoppe le démon klogd dont nous nous passerons désormais :
				  
				/etc/init.d/klogd stop  
				
					On le supprime des runlevels correspondants :
				  
				update-rc.d -f klogd remove  
				
					On redémmare le nouveau démon syslogd :
				  
				/etc/init.d/sysklogd start  
				
					Correction du script syslogd-listfiles : 
					 
					Ce script permet  de  lister  les  fichiers  de  logs  pour  permettre  leur
					rotation. Il se sert pour cela du fichier de configuration /etc/syslog.conf.
					Or, ce fichier de configuration peut désormais contenir des lignes au format
					modular-syslog, ce qui empêche une rotation correcte. 
					 
					Le patch est disponible en 'ANNEXE 3 - syslogd-listfiles.msyslog.patch'
				  
				mount -o remount,rw /usr/
cp /usr/sbin/syslogd-listfiles /usr/sbin/syslogd-listfiles.orig
cd /usr/sbin
patch -l -p0 < /root/tmp/syslogd-listfiles.msyslog.patch
mount -o remount,ro /usr/  
				
					MAN : syslogd, syslog.conf, im_* , om_* , syslogd-listfiles 
					 
					Premiers pas avec Modular-Syslog : 
					      
					NDR : Si vous ajoutez des fichiers de  log  dans  la  configuration,  prenez
					garde à faire un touch  du  fichier  destination  dans  le  répertoire
					concerné.
					
					Nous ajoutons deux régles qui permettent de filtrer les messages envoyés par
					le firewall ipchains à /etc/syslog.conf ainsi que deux  régles  permettant :
					l'enregistrement des  evenements  liés  aux  demandes  de  connexion  et  les
					évenèments libsafe.
				  
				#
# Filtres Modular-Syslog
#
# Filtres sur les evenements du firewall
kern.*	       %regex -m "Packet log.*LogDrop" %classic \
	/var/log/fw_deny.log
kern.*	       %regex -m "Packet log.*LogAcc"  %classic \
	/var/log/fw_accept.log
# Filtres sur divers evenements sécurité
auth,authpriv.*  %regex -m "(sshd.*password)|(PAM.*ssh)|(PAM.*su)\
	|(PAM.*failure)" %classic /var/log/sécurité.log
auth,authpriv.*  %regex -m "libsafe.so" %classic /var/log/sécurité.log
auth.*	       %regex -m "not receive identification" %classic\
	/var/log/sécurité.log
kern.*           %regex -m "Security" %classic /var/log/sécurité.log
kern.* 	       %regex -m "device.*promiscuous" %classic\
	/var/log/sécurité.log  
				
					Nous mettons en place les fichiers destination  et redémarrons  le  serveur
					syslog : 
				  
				touch /var/log/{sécurité,fw_{deny,accept}}.log
chown root:adm /var/log/{sécurité,fw_{deny,accept}}.log  
				
					Et si votre umask n'est pas conforme à celui de cette doc :
				  
				chmod 640 /var/log/{sécurité,fw_{deny,accept}}.log
/etc/init.d/sysklogd restart  
				
					Prise en compte des nouveaux fichiers pour la rotation des logs : 
					 
					Nous créons (s'il n'existe pas) un répertoire qui nous servira à stocker nos
					scripts appellés  par  la  crontab  et  dont  l'objectif  est  d'assurer  la
					stabilité du système :
				  
				mkdir /home/system/scripts/crond  
				
					Nous éditons un fichier /home/system/scripts/crond/sysklogd  (à  l'image  de
					celui présent dans /etc/cron.daily) :
				  
				#! /bin/sh
 
  test -x /usr/sbin/syslogd-listfiles || exit 0
  test -x /sbin/syslogd || exit 0
  test -d /usr/share/doc/sysklogd || exit 0
  set -e
 
  cd /var/log
  for SECU in `syslogd-listfiles -a | grep -E "fw|secu"`
	do
	   if [ -s $SECU ] ; then
		 savelog -g adm -m 640 -u root -c 7 $SECU > /dev/null   
	   fi
	done
  /etc/init.d/sysklogd reload-or-restart
chmod 750 /home/system/scripts/crond/sysklogd  
				
					Nous éditons /etc/crontab pour ajouter ce script :
				  
				# Tourne les logs sécurité chaque jour
5 0 * * * root /home/system/scripts/crond/sysklogd  
			
			
 4.9. Vérification des empreintes des packages à installer 
  
				
				
					Consultez d'abord : 'I. INFORMATIONS SUR LA GESTION DE PACKAGES DEBIAN -  Mise
					à jour du système avec apt' 
					 
					
						[ A compléter ]
					
				  
				mount -o remount,rw /usr
dselect => installation de 'debsums'
mount -o remount,ro /usr       
mkdir /home/system/debsums
cd /home/system/debsums  
				
					Obtenez la liste des packages ne possédant pas de signature : 
				  
				/usr/bin/debsums -l > nosig.txt  
				
					NDR : Si vous voulez vérifier les empreintes des fichiers d'un package : 
				  
				debsums -s package_name.  
				
					MAN : debsums
				  
			
			
 4.10. Système de fichiers ext3 avec un noyau 2.4 : de ext2 à ext3 
  
				
				
					Pour modifier le système de fichier d'une partition de facon à passer de  ext2
					à ext3, sans perte de données et sans reboot (si votre noyau est déja  compilé
					avec ce support bien sur), vous pouvez suivre la procédure suivante. 
					 
					Commencons par recompiler le noyau en ajoutant le support ext3 :
					
						
							Ajoutez 'File systems -> Ext3 journalling file system support'.
						
						
							Recompilez et installez le nouveau noyau.
						
						
							Modifiez /etc/lilo.conf
						
						
							Rebootez.
						
					
					Après le reboot, n'oubliez pas de mettre à jour la configuration  lilo  et  de
					sauvegarder la configuration du noyau. 
					 
					Prenons comme exemple la partition /backup du type (précisé  dans  /etc/fstab)
					suivant :  
				  
				/dev/hda13 /backup ext2 ro,noexec,nosuid,nodev,sync 0 2  
				
					La procédure à suivre est la suivante :
				  
				umount /dev/hda13
tune2fs -j /dev/hda13
Editez /etc/fstab pour remplacer l'ancienne ligne /dev/hda13 par :
  /dev/hda13 /backup auto ro,noexec,nosuid,nodev,sync 0 2
mount /dev/hda13  
			
			
 4.11. Backup du système sur une partition spécifique 
  
				
				
					Nous présentons ici un  moyen  de  sauvegarde  des  données  système  sur  une
					partition réservée à cet usage. 
					 
					Le backup du systéme est réalisé par un script  'fait maison'  permettant  une
					sauvegarde complète ou incrémentale des fichiers/répertoires à sauvegarder  et
					autorisant   le   backup   chiffre  (avec  openssl)  des  répertoires/fichiers
					parametrés. 
					 
					Ne sont pas presentes ici :
					
						
							La restauration du système à partir des données sauvegardées. Reférez vous
							à la partie '4.12.  Préparation  d'une  restauration  du  système  en  cas
							d'incident'.
						
						
							L'accès à cette partition depuis un serveur distant pour  un  stockage  de
							backup spécialisé. Vous pouvez vous  reférer  à  'VII.  INSTALLATION  D'UN
							SERVEUR SAMBA POUR UNE GESTION DE BACKUP' pour un accès Netbios via Samba.
						
					
					Vous devez avoir une partition /dev/sda13 dans /etc/fstab du type :
				  
				/dev/sda13  /backup ext2   ro,noexec,nosuid,nodev,sync  0  2
				
  mkdir /home/system/scripts/backup
  Et installez le  script /home/system/scripts/backup/system_backup.sh  présente
  en 'ANNEXE 8 - Script de backup'.
  chmod 750 /home/system/scripts/backup/system_backup.sh  
				
					Editez le script pour configurer les fichiers ou répertoires que vous  désirez
					sauvegarder en modifiant la variable 'BACKUP_FROM' : 
					 
					Créez  un   fichier   '/home/system/scripts/backup/include_but_ciphered'   qui
					contiendra les fichiers ou répertoires que vous voulez ajouter dans  l'archive
					chiffrée. Ce fichier doit exister mais peut être vide si vous  ne  voulez  pas
					utiliser cette fonctionnalité : 
					NDR : 
					
						
							Le backup chiffre est toujours en mode 'full'.
						
						
							Le script de  backup  effectuant  un  'cd /',  configurez  ce  fichier  en
							supprimant le premier '/' devant le chemin vers votre fichier/répertoire.
						
					
					J'ai personnellement renseigné ce fichier de la manière suivante : 
					/home/system/scripts/backup/include_but_ciphered :
				  
				etc/gshadow	
etc/gshadow-
etc/passwd
etc/passwd-
etc/samba/smbpasswd
etc/shadow
etc/shadow-
var/backups  
				
					NDR : Est il trivial d'indiquer que :
					
						
							vous devriez noter le mot de passe de chiffrement que vous  utilisez  dans
							le script ?
						
						
							le script ne doit être accessible que par root ?
						
					
				Créez un  fichier  '/home/system/scripts/backup/exclude'  qui  contiendra  les
				fichiers ou répertoires que vous ne désirez pas sauvegarder  par  rapport  aux
				arborescences que vous aurez définies dans la variable 'BACKUP_FROM'. 
				NDR : 
				
					
						Ce fichier doit exister mais peut être vide si vous ne désirez rien
						exclure.
					
					
						Le script de  backup  effectuant  un  'cd /',  configurez  ce  fichier  en
						supprimant le premier '/' devant le chemin vers votre fichier/répertoire.
					
				
					J'ai personnellement renseigné ce fichier de la manière suivante :
				  
				usr/src
var/lock
var/run
var/tmp  
				
					Créez  un  fichier  '/home/system/scripts/backup/cpioed'  qui  contiendra  les
					répertoires dont vous souhaitez conserver  les  localisations  et  permissions
					grâce à une archive cpio.
					
						
							Ce fichier doit exister mais peut  être  vide  si  vous  ne  désirez  rien
							exclure.
						
						
							Le script de  backup  effectuant  un  'cd /',  configurez  ce  fichier  en
							supprimant le premier '/' devant le chemin vers votre fichier/répertoire.
						
						
							SEULS LES REPERTOIRES INDIQUES SONT SAUVEGARDES !
						
					
					J'ai personnellement renseigné ce fichier de la manière suivante (je ne  tiens
					pas à sauvegarder /usr/src) :
				  
				backup
cdrom
floppy
initrd
local
lost+found
mnt
opt
proc
tmp
var/lock
var/run
var/tmp  
				
					Lancez le script pour le premier backup :
				  
				/home/system/scripts/backup/system_backup.sh
Backup: Full backup
Backup:   Remounting rw /backup
Backup:     Backuping /backup/full_060503-144947/bin_060503-144947.tar.gz
Backup:       Hash : c8f1b2863146f03ef686fa04d1fd0da5\
	/backup/full_060503-144947/bin_060503-144947.tar.gz
Backup:     Backuping /backup/full_060503-144947/boot_060503-144948.tar.gz
Backup:       Hash : 4bfd31759e05e14ed65b63dee26feb8d\
	/backup/full_060503-144947/boot_060503-144948.tar.gz
Backup:     Backuping /backup/full_060503-144947/dev_060503-144950.tar.gz
Backup:       Hash : e5fd2dd7df68aba2f176faed07f44cd5\
	/backup/full_060503-144947/dev_060503-144950.tar.gz
Backup:     Backuping /backup/full_060503-144947/etc_060503-144951.tar.gz
Backup:       Hash : 348d9dd3f309c23703a3c24c83dda609\
	/backup/full_060503-144947/etc_060503-144951.tar.gz
Backup:     Backuping /backup/full_060503-144947/home_060503-144952.tar.gz
Backup:       Hash : 5495f04c230f7feaecb893f879297753\
	/backup/full_060503-144947/home_060503-144952.tar.gz
Backup:     Backuping /backup/full_060503-144947/lib_060503-144954.tar.gz
Backup:       Hash : dce418f7fd12bd9621f5429141eaddbb\
	/backup/full_060503-144947/lib_060503-144954.tar.gz
Backup:     Backuping /backup/full_060503-144947/root_060503-144957.tar.gz
Backup:       Hash : 012a1be6fb9686c6ca49c3edd8a94c38\
	/backup/full_060503-144947/root_060503-144957.tar.gz
Backup:     Backuping /backup/full_060503-144947/sbin_060503-144958.tar.gz
Backup:       Hash : 0bf5b00b86826e195a9de88ef8d68a9f\
	/backup/full_060503-144947/sbin_060503-144958.tar.gz
Backup:     Backuping /backup/full_060503-144947/usr_060503-144959.tar.gz
Backup:       Hash : f3ec8f659a17daa0cb318d0f687d632c\
	/backup/full_060503-144947/usr_060503-144959.tar.gz
Backup:     Backuping /backup/full_060503-144947/var_060503-145357.tar.gz
Backup:       Hash : e200713da542da4c1bb0e8910b6aa76f\
	/backup/full_060503-144947/var_060503-145357.tar.gz
Backup:     Backuping excluded files into a cpio archive
Backup:       Hash : a323d013c942bf30a6e0c76f5ae2ed2b\
	/backup/full_060503-144947/excluded.cpio
Backup:     Backuping /home/system/scripts/backup/include_but_ciphered\
  files
Backup:       Ciphering /backup/full_060503-144947/\
	ciphered_060503-145357.tar.gz
Backup:       Removing /backup/full_060503-144947/\
	ciphered_060503-145357.tar.gz
Backup:       Hash : 228dc72dd72ab99b2e58e3d083e72e5f\
	/backup/full_060503-144947/\
	ciphered_060503-145357.tar.gz.des3
Backup:   Syncing disks
Backup:   Remounting ro /backup  
			ll -R /backup/
      /backup/:
      total 28
      drwxr-x--- 2 root  root       4096 May  6 14:54 full_060503-144947
      -rw-r----- 1 root  root         94 May  6 14:49 full_060503-144947.log
      -rw-r----- 1 root  root       1023 May  6 14:54 full_060503-144947.md5
      		
      /backup/full_060503-144947:
      total 335096
      -rw-r----- 1 root  root    1016158 May  6 14:49 bin_060503-144947.tar.gz
      -rw-r----- 1 root  root    4390293 May  6 14:49 boot_060503-144948.tar.gz
      -rw-r----- 1 root  root     592280 May  6 14:54 ciphered_060503-145357\
      .tar.gz.des3
      -rw-r----- 1 root  root      57067 May  6 14:49 dev_060503-144950.tar.gz
      -rw-r----- 1 root  root     478588 May  6 14:49 etc_060503-144951.tar.gz
      -rw-r----- 1 root  root      65024 May  6 14:54 excluded.cpio
      -rw-r----- 1 root  root    1152206 May  6 14:49 home_060503-144952.tar.gz
      -rw-r----- 1 root  root    2298150 May  6 14:49 lib_060503-144954.tar.gz
      -rw-r----- 1 root  root     418679 May  6 14:49 root_060503-144957.tar.gz
      -rw-r----- 1 root  root    1203847 May  6 14:49 sbin_060503-144958.tar.gz
      -rw-r----- 1 root  root   285132220 May  6 14:53 usr_060503-144959.tar.gz
      -rw-r----- 1 root  root   45928823 May  6 14:54 var_060503-145357.tar.gz
    du -ch /backup/
      328M    /backup/full_060503-144947
      328M    /backup
      328M    total  
				
					Vous avez désormais dans /backup :
					
						
							Une sauvegarde 'full' des fichiers ou répertoires que vous avez spécifiés.
						
						
							Un fichier de log contenant  les  erreurs  rencontrées -  vide  si  aucune
							erreur.
						
						
							Un  fichier   d'empreinte   md5   des   archives   créées    pour   chaque
							fichier/répertoire specifié.
						
					
					Dans /home/system/scripts/backup/.last_done (ou dans le fichier que vous  avez
					vous meme specifie), vous avez la date de ce dernier backup. 
					 
					Note : Les 328M de sauvegarde full réalisée précédemment l'ont été en  environ
					~5 minutes sur un PIII 700 avec 160Mo de RAM. 
					 
					Vous pouvez désormais réaliser un backup incrémental des données  sauvegardées
					précédemment. 
					 
					En appelant à nouveau le script :
				  
				Backup: Incremental backup beginning : Tue May  6 14:49:47 CEST 2003
Backup:   Remounting rw /backup
Backup:     Backuping /backup/incr_060503-152213/bin_060503-152213.tar.gz\
  (incremental)
Backup:       Hash : 081a6113dd90eb892d01548cd7179b62\
	/backup/incr_060503-152213/bin_060503-152213.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  boot_060503-152213.tar.gz (incremental)
Backup:       Hash : ae60b98501c0978f362e2f7826b671a5\
	/backup/incr_060503-152213/boot_060503-152213.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  dev_060503-152213.tar.gz (incremental)
Backup:       Hash : 3dcc660a2a296b8356ffa29d4c52d8d1\
	/backup/incr_060503-152213/dev_060503-152213.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  etc_060503-152214.tar.gz (incremental)
Backup:       Hash : b9649a2474ec6f8858841fa4eb3f1e5b\
	/backup/incr_060503-152213/etc_060503-152214.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  home_060503-152214.tar.gz (incremental)
Backup:       Hash : b91a69fceb9d176050d69fd300850d26\
	/backup/incr_060503-152213/home_060503-152214.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  lib_060503-152214.tar.gz (incremental)
Backup:       Hash : 718f76f85543429bbd32df86ce23e5b7\
	/backup/incr_060503-152213/lib_060503-152214.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  root_060503-152214.tar.gz (incremental)
Backup:       Hash : d357d47b59e75595087ab7d8cba58fdb\
	/backup/incr_060503-152213/root_060503-152214.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  sbin_060503-152214.tar.gz (incremental)
Backup:       Hash : 1688044981053d9e8e0d333509c54149\
	/backup/incr_060503-152213/sbin_060503-152214.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  usr_060503-152214.tar.gz (incremental)
Backup:       Hash : 2f95fb3bb6b8d9a0ab247bde96611baf\
	/backup/incr_060503-152213/usr_060503-152214.tar.gz
Backup:     Backuping /backup/incr_060503-152213/\
  var_060503-152223.tar.gz (incremental)
Backup:       Hash : 668d117769137b003cf427394d65b1a3\
	/backup/incr_060503-152213/var_060503-152223.tar.gz
Backup:     Backuping /home/system/scripts/backup/\
  include_but_ciphered files
Backup:       Ciphering /backup/incr_060503-152213/\
	ciphered_060503-152223.tar.gz
Backup:       Removing /backup/incr_060503-152213/\
	ciphered_060503-152223.tar.gz
Backup:       Hash : 9d11b72e4bfa25cbf81b4295717133cf /backup/\
	incr_060503-152213/ciphered_060503-152223.tar.gz.des3
Backup:   Syncing disks
Backup:   Remounting ro /backup  
				ll -R /backup/
  /backup/:
  total 36
  drwxr-x--- 2 root  root       4096 May  6 15:22 incr_060503-152213
  -rw-r----- 1 root  root          0 May  6 15:22 incr_060503-152213.log
  -rw-r----- 1 root  root        949 May  6 15:22 incr_060503-152213.md5
  
  /backup/incr_060503-152213:
  total 656
  -rw-r----- 1 root  root        166 May  6 15:22 bin_060503-152213.tar.gz
  -rw-r----- 1 root  root        196 May  6 15:22 boot_060503-152213.tar.gz
  -rw-r----- 1 root  root     592280 May  6 15:22 \
  ciphered_060503-152223.tar.gz.des3
  -rw-r----- 1 root  root        352 May  6 15:22 dev_060503-152213.tar.gz
  -rw-r----- 1 root  root       2179 May  6 15:22 etc_060503-152214.tar.gz
  -rw-r----- 1 root  root       1344 May  6 15:22 home_060503-152214.tar.gz
  -rw-r----- 1 root  root        543 May  6 15:22 lib_060503-152214.tar.gz
  -rw-r----- 1 root  root        275 May  6 15:22 root_060503-152214.tar.gz
  -rw-r----- 1 root  root        167 May  6 15:22 sbin_060503-152214.tar.gz
  -rw-r----- 1 root  root      29773 May  6 15:22 usr_060503-152214.tar.gz
  -rw-r----- 1 root  root       7973 May  6 15:22 var_060503-152223.tar.gz  
				
					Un simple 'tar ztvf {archive}.tar.gz | grep -v " 0 "' vous donnera  la  liste
					des fichiers qui ont été modifiés et pris en compte lors de cette  sauvegarde
					incrémentale. 
					 
					Vous pouvez appeler le script avec l'option '-f' : cela le forcera à suivre la
					procédure de sauvegarde 'full' en ne tenant pas compte  du  contenu  du  fichier
					'.last_done'. 
					 
					Nous pouvons maintenant éditer notre fichier /etc/crontab pour appeler  notre
					script de backup :
				  
				# Backup Full du système toutes les semaines à 00H30
30 0 * * 7 root /home/system/scripts/backup/system_backup.sh -f
# Backup incrémental du système toutes les 6 heures a xx:15
15 */6 * * * root /home/system/scripts/backup/system_backup.sh  
				
					Nous modifions également /etc/syslog.conf pour  que  les  messages  de  backup
					soient consignés dans notre fichier de log sécurité :
				  
				syslog.notice        %regex -m "Backup" %classic /var/log/sécurité.log  
				
					Puis : 
				  
				/etc/init.d/sysklogd restart  
				
					MAN : tar, gzip
				  
			
			
 4.12. Préparation d'une restauration du système en cas d'incident 
  
				
				
					Notre objectif est de préparer un moyen de restauration du  système  simple  à
					mettre en place et rapide à mettre en oeuvre en cas d'incident.
					Nous allons pour ce  faire  créer  une  'image'  de  notre  système  que  nous
					graverons sur un CD. Dans le cas d'un crash, il sera possible de booter sur le
					CD et de restaurer le système. 
					 
					NDR :
					
						
							La création de cette image nécessite  l'installation  du  package  mkisofs
							(n'installez pas le package cdrecord sauf si vous disposez d'un graveur  sur
							la station) et l'ajout du support 'Block devices -> Loopback device support'
							au noyau.
						
						
							Vous devriez  dédier  une  station à  cet  usage  et  non  installer  ces
							fonctionnalités sur votre serveur de production.
						
						
							L'espace disque requis est d'environ 1Go (~650Mo  environ,  mais  il  vaut
							mieux voir large :>).
						
					
					Nous allons tout d'abord créer  un  système  de  fichier  root  contenant  les
					binaires nécessaires à l'exécution du CD puis ajouter  nos  archives  dans  un
					répertoire et pour finir utiliser un script qui exécutera la  restauration  du
					système. 
					Pour ce faire, nous allons nous baser sur les fichiers fournis dans le jeu  de
					CD Debian. 
					 
					Récupération des fichiers nécessaires au boot et d'un système de fichier  root
					minimal : 
					 
					NDR : Je vais par la suite utiliser la partition /local comme  partition  de
					travail. Cette partition est, si vous avez suivi cette  documentation,
					une partition Ext2 inutilisée  et  occupant  l'espace  disque  restant
					après installation du système. 
					 
					Insérez le CD numero 1 de votre jeu Debian et montez le cdrom  (/cdrom  dans
					notre exemple).
				  
				mount -o remount,rw /local
mkdir /local/Debian
cp /cdrom/isolinux/isolinux* /local/Debian
cp /cdrom/isolinux/idepci.bin /local/Debian
mkdir /local/Debian/kernel
cp /cdrom/install/linpci /local/Debian/kernel/  
				
					Editez le fichier isolinux.cfg :
				  
				TIMEOUT 0
PROMPT 1
DEFAULT /kernel/linpci
APPEND root=/dev/ram ro initrd=idepci.bin ramdisk_size=16384\
	disksize=1.44 flavor=idepci
LABEL linux
	kernel /kernel/linpci
DISPLAY isolinux.txt  
				
					Editez le fichier isolinux.txt :  
					Debian-Secinst v0.1.5 Boot CD 
					 
					Modification du système de fichier root original : 
					 
					Nous montons maintenant le système de fichier root original :
				  
				cd /local
cp Debian/idepci.bin .
gunzip -S ".bin" idepci.bin
mount -t ext2 idepci /mnt/ -o loop  
				
					Modification de  l'initialisation  du  CD  pour  executer  notre  script  de
					restauration :
				  
				cd /mnt/  
				
					Editez le fichier etc/inittab :
				  
				# main setup program
<::respawn:/sbin/udbootstrap
>::respawn:-/restore.sh  
				
					Clavier Français et alias :
				  
				cd /mnt/etc/
tar zxvf keymaps.tgz i386/azerty/fr-latin1.bmap
echo "/sbin/loadkmap < /etc/i386/azerty/fr-latin1.bmap" > profile
echo "alias l='ls'" >> profile
echo "alias ll='l -l'" >> profile
echo "alias la='ll -a'" >> profile
echo "alias cp='cp -i'" >> profile
echo "alias rm='rm -i'" >> profile
echo "alias mv='mv -i'" >> profile  
				
					Ajout du binaire cpio :
				  
				cd /mnt
cp /lib/libnsl.so.1 ./lib/
cp /bin/cpio ./bin/  
				
					Ajout d'un binaire tar compilé en statique : 
					Récupérez la version 1.13.25 sur l'un des miroirs de www.gnu.org. 
					Compilez la en statique (avec le  support  uclibc  par  exemple)  ou  tout
					simplement avec :
				  
				env LDFLAGS=-static ./configure
make LDFLAGS=-static
cd /mnt
mv ./bin/tar ./bin/oldtar
Copiez votre nouveau binaire dans /mnt/bin/tar
chmod 755 /mnt/bin/tar  
				
					Ajoutez  le  script  de  restauration  présent  en  'ANNEXE 9 -  Script   de
					restauration' à  la  racine  (/mnt/restore.sh)  et  donnez  lui  les  droits
				  
				chmod 755 /mnt/restore.sh'.  
				
					Ajout des informations de backup : 
					 
					NDR : Ces informations sont évidemment celles du système à restaurer  et  non
					celles du système sur lequel vous créez ce CD !
				  
				mkdir /mnt/backup && chmod 755 /mnt/backup  
				
					Editez le fichier '/mnt/backup/server_infos' (ou le fichier  que  vous  avez
					configuré dans le script de restauration) pour ajouter les informations  que
					vous jugerez utile. Par exemple (/mnt/backup/server_infos) :
					This backup was created for {HOSTNAME} the 5 of May at 12:03.
					The server backuped is a Apache/Websphere server. 
					 
					Ajoutez les fichiers suivants dans '/mnt/backup' :
					
						
							un fichier 'disk_name' contenant le  nom  de  votre  périphérique  (ex :
							/dev/sda).
						
						
							un fichier 'fdisk_script' contenant les instructions à suivre pour créer
							les partitions sur le  disque  (voir  'ANNEXE  10 -  Exemple  de  script
							Fdisk')
						
						
							un fichier 'fstab_file' du type de celui obtenu par la commande :
							grep -E "ext|swap" /etc/fstab | awk '{ print $1" "$2" "$3 }'
=> Les points de montage logique (fd0, cdrom  et  proc)  ne  sont  pas
obligatoires.
=> Seuls les supports ext2 et swap sont geres pour l'instant.
						
						
							un fichier 'lilo_file' : copie de votre  /etc/lilo.conf  a  restaurer => 
							
								Attention au mot de passe en clair !!!
							
						
						
							un fichier 'partitions_table' : résultat de la commande '/sbin/fdisk -l'
						
					
					démontez le système de fichier et sauvegardez le :
				  
				cd /local
umount -d /mnt
gzip -S ".bin" idepci
mv idepci.bin Debian/  
				
					On ajoute maintenant le backup de notre système : 
					Connectez vous au système à sauvegarder et lancez  un  backup  full  via  le
					script de backup fourni en 'ANNEXE 8 - Script de backup'  ou  récuperez  les
					archives de votre dernier backup full.
					Sur la station que vous utilisez pour créer le cdrom  de  backup,  créez  le
					répertoire '/local/Debian/archives' et copiez vos archives à sauvegarder  à
					l'intérieur (en respectant le nommage des archives en .tar.gz ou .cpio !).
					Une    fois     cette     copie     éffectuée,     créez  un fichier
					/local/Debian/archives/infos.txt contenant les chemins vers les fichiers qui
					seront présents dans /mnt/archives/ (une fois le système  de  fichier  monté
					par le script de restauration).
					Je vous reccomande de créer ce fichier à la main plutôt  que  d'utiliser  un
					find. J'ai personnellement renseigné  ce  fichier  de  la  manière  suivante
					(Notez la présence de var_xxx avant usr_xxx) : 
				  
				/mnt/archives/infos.txt :
	/mnt/archives/bin_070503-153510.tar.gz
/mnt/archives/boot_070503-153511.tar.gz
/mnt/archives/dev_070503-153513.tar.gz
/mnt/archives/etc_070503-153514.tar.gz
/mnt/archives/home_070503-153515.tar.gz
/mnt/archives/lib_070503-153517.tar.gz
/mnt/archives/root_070503-153520.tar.gz
/mnt/archives/sbin_070503-153520.tar.gz
/mnt/archives/var_070503-153925.tar.gz
/mnt/archives/usr_070503-153522.tar.gz
/mnt/archives/deciphered_070503-153925.tar.gz
/mnt/archives/excluded.cpio  
				
					NDR : Je vous reccomande bien entendu de comparer  le  md5sum  des  fichiers
					générés par votre script de backup avec le md5sum des fichiers  copiés
					sur la station utilisée pour  créer  l'ISO  et  de  renouveller  cette
					opération pour les fichiers qui seront présents sur le CD gravé. 
					 
					
						Dans /local/Debian/archives, vous devez avoir un fichier  protégé  par  le
						mot de passe présent dans votre script de backup. Déprotegez ce fichier  avant
						de procéder à la création de l'ISO
					
					NDR : J'insiste sur le fait que ce CD de restauration contient une  sauvegarde
					de fichiers critiques et doit être protégé physiquement !!! 
					 
					Préparation de l'ISO : 
					Préparation de l'image iso à graver :
				  
				cd /local
mkisofs -o debian.iso -b isolinux.bin -c boot.cat -no-emul-boot\
	-boot-load-size 4 -boot-info-table -l -r Debian/  
				
					Vous avez désormais une image 'debian.iso' que vous pouvez graver sur un CD. 
					 
					Ce CD sera bootable et vous donnera accès au menu suivant : 
				  
				Debian-Secinst v0.1.5 Restore script
Enter alt-[F1-F4] to : have this menu, have a shell, look at the logs.
To reboot : ctrl-alt-del
				
      -------
      
      This backup was created for {HOSTNAME} the 25 of April at 16:52.
      
      The server backuped is a Apache/Websphere server.
      
      -------
      
      Menu
       (1) : Show actual partition table.
       (2) : Show backuped partition table.
       (3) : Show backuped fstab file.
       *****
       (4) : Write the backuped partition table to disk.
       (5) : Format disk using backuped fstab file.
       (6) : Mount disk partitions using backuped fstab file.
       (7) : Restore the system.
       (8) : Lilo the system using backuped lilo file.
       (9) : Syncing and unmounting restored system.
       *****
       (A) : Automated script (4-5-6-7-8-9).
       What do you want ?  
				
					NDR : La restauration du système pris comme en exemple en '4.11.  Backup  du
					système sur une partition spécifique' m'a pris 15 minutes sur un  PIII
					500 avec 128 Mo de RAM.
				  
	  		
	  	
	
 
 
		Copyright (c) 2003 Simon Castro, scastro [ at ] entreelibre.com. 
		 
		Permission is granted to copy, distribute and/or modify this document under the
		terms of the GNU Free Documentation License, Version 1.2  or  any later version
		published by the Free Software Foundation; with  the  Invariant  Sections being
		LIST THEIR  TITLES,  with  the  Front-Cover  Texts  being  LIST, and   with the
		Back-Cover Texts being LIST. 
		You must have received a copy of the license with this document and  it  should
		be présent in the fdl.txt file.  
		If you did not receive this file or if you don't think this  fdl.txt license is
		correct,  have  a  look  on  the  official  http://www.fsf.org/licenses/fdl.txt
		licence file.
	 
       |