IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Installation et sécurisation d'une station Debian 3.0 stable


précédentsommairesuivant

IV. Sécurisation modérée

 

IV-A. 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'amorçage du BIOS de façon à débuter par le chargement du MBR du disque dur.

IV-B. 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) :

 
Sélectionnez
mount -o remount,rw /local

Éditez le fichier /etc/fstab de facon à monter les partitions présentées en I.E selon le principe suivante :

 
Sélectionnez
/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 :

 
Sélectionnez
/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 :

 
Sélectionnez
/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.

IV-C. Sécurisation des comptes

Durcissement de la politique de mots de passe :
Modifiez le fichier /etc/login.defs de la façon suivante :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 !) :

 
Sélectionnez
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 :

 
Sélectionnez
export TMOUT=300
umask 027

Agrégation des comptes dans des groupes :

Tous les comptes utilisateurs doivent faire partie de groupes appropriés. Nous nous basons dans ce document sur deux groupes existant, mais cette déclinaison est arbitraire.

Le groupe adm est réservé aux administrateurs (voir 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 :

 
Sélectionnez
USERGROUPS=no
DIR_MODE=0700

Modification des squelettes de création de compte :

 
Sélectionnez
/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 :

 
Sélectionnez
/etc/skel/.bash_logout :
	case "`tty`" in
	  /dev/tty[0-9]) clear
	esac

  /etc/skel/.inputrc :
	set bell-style none

Donnez les droits :

 
Sélectionnez
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 :

 
Sélectionnez
REMOVE_HOME = 1
BACKUP = 1

Créez le répertoire de backup des comptes supprimés :

 
Sélectionnez
mkdir /home/system/deleted_accounts
chown root:adm /home/system/deleted_accounts
chmod 1750 /home/system/deleted_accounts

Créez le fichier suivant :

 
Sélectionnez
mount -o remount,rw /usr

/usr/local/sbin/deluser.local :

 
Sélectionnez
#!/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 :

 
Sélectionnez
chmod 700 /usr/local/sbin/deluser.local
mount -o remount,ro /usr

IV-D. Recherche et modifications de droits de fichiers

Recherche de tous les fichiers sgid et suid :

 
Sélectionnez
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 :

 
Sélectionnez
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/

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:

 
Sélectionnez
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'enregistrer dans ce fichier.

MAN : cron, crontab

IV-E. Les administrateurs n'ont pas besoin de passer root

Installation de sudo :

 
Sélectionnez
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:

 
Sélectionnez
usermod -g {UserName} -G adm,users {UserName}

Configuration de sudo :
Lancez visudo et éditez le fichier de façon à ajouter (raccourcis vi) :

 
Sélectionnez
# Cmnd alias specification
Cmnd_Alias REBOOT=/sbin/reboot
%adm ALL=NOPASSWD:REBOOT

MAN : usermod, sudoers visudo, sudo

IV-F. Synchronisation horaire avec un serveur NTP

Installez les packages requis.

 
Sélectionnez
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.

 
Sélectionnez
/etc/init.d/init_ipchains.sh restart

Stoppez le démon NTP et exécutez la synchronisation

 
Sélectionnez
/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 :

 
Sélectionnez
# 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

IV-G. 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.

Attention à respecter l'indentation !

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 Installation et premiers pas avec Modular-Syslog.

Installation du script (nous utilisons le script présent en annexe qui envoie le rapport par mail) :

 
Sélectionnez
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:

 
Sélectionnez
# Genere le rapport system
0 9 * * * root /home/system/scripts/reports/system_report.sh
chmod 640 /etc/crontab

IV-H. Installation et premiers pas avec Modular-Syslog

 

Modular-Syslog est disponible à : http://sourceforge.net/projects/msyslog/

Compilation :

 
Sélectionnez
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

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 :

 
Sélectionnez
mount -o remount,rw /usr/
make install

On sauvegarde l'ancien syslogd et son fichier de configuration :

 
Sélectionnez
cp /etc/syslog.conf /etc/syslog.conf.orig2
cp /sbin/syslogd /sbin/syslogd.orig

On remplace l'ancien syslogd par le notre :

 
Sélectionnez
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 :

 
Sélectionnez
SYSLOGD="-i linux -i unix"

On stoppe le démon klogd dont nous nous passerons désormais :

 
Sélectionnez
/etc/init.d/klogd stop

On le supprime des runlevels correspondants :

 
Sélectionnez
update-rc.d -f klogd remove

On redémarre le nouveau démon syslogd :

 
Sélectionnez
/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'

 
Sélectionnez
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 :

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 événements liés aux demandes de connexion et les événements libsafe.

 
Sélectionnez
#
# 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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 appelés par la crontab et dont l'objectif est d'assurer la stabilité du système :

 
Sélectionnez
mkdir /home/system/scripts/crond

Nous éditons un fichier /home/system/scripts/crond/sysklogd (à l'image de celui présent dans /etc/cron.daily) :

 
Sélectionnez
#! /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 :

 
Sélectionnez
# Tourne les logs sécurité chaque jour
5 0 * * * root /home/system/scripts/crond/sysklogd

IV-I. Vérification des empreintes des packages à installer

Consultez d'abord : 'Informations sur la gestion de packages Debian - Mise à jour du système avec apt'

 
Sélectionnez
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 :

 
Sélectionnez
/usr/bin/debsums -l > nosig.txt

Si vous voulez vérifier les empreintes des fichiers d'un package :

 
Sélectionnez
debsums -s package_name.

MAN : debsums

IV-J. Système de fichiers ext3 avec un noyau 2.4 : de ext2 à ext3

Pour modifier le système de fichier d'une partition de façon à passer de ext2 à ext3, sans perte de données et sans reboot (si votre noyau est déjà compilé avec ce support bien sur), vous pouvez suivre la procédure suivante.

Commençons 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 :

 
Sélectionnez
/dev/hda13 /backup ext2 ro,noexec,nosuid,nodev,sync 0 2

La procédure à suivre est la suivante :

 
Sélectionnez
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

IV-K. 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 paramétrés.

Ne sont pas présentes ici : La restauration du système à partir des données sauvegardées. Référez-vous à la partie 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 référer à 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 :

 
Sélectionnez
/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

Éditez 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 :

 
Sélectionnez
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 :

 
Sélectionnez
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) :

 
Sélectionnez
backup
cdrom
floppy
initrd
local
lost+found
mnt
opt
proc
tmp
var/lock
var/run
var/tmp

Lancez le script pour le premier backup :

 
Sélectionnez
/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
 
Sélectionnez
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 spécifié. Dans /home/system/scripts/backup/.last_done (ou dans le fichier que vous avez-vous-même spécifié), 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 :

 
Sélectionnez
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
 
Sélectionnez
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 :

 
Sélectionnez
# 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é :

 
Sélectionnez
syslog.notice        %regex -m "Backup" %classic /var/log/sécurité.log

Puis :

 
Sélectionnez
/etc/init.d/sysklogd restart

MAN : tar, gzip

IV-L. 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 œuvre 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 numéro 1 de votre jeu Debian et montez le cdrom (/cdrom dans notre exemple).

 
Sélectionnez
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/

Éditez le fichier isolinux.cfg :

 
Sélectionnez
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

Éditez 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 :

 
Sélectionnez
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 exécuter notre script de restauration :

 
Sélectionnez
cd /mnt/

Éditez le fichier etc/inittab :

 
Sélectionnez
# main setup program
<::respawn:/sbin/udbootstrap
>::respawn:-/restore.sh

Clavier Français et alias :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
env LDFLAGS=-static ./configure
make LDFLAGS=-static

cd /mnt
mv ./bin/tar ./bin/oldtar

Copiez votre nouveau binaire dans /mnt/bin/tar

 
Sélectionnez
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

 
Sélectionnez
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 !

 
Sélectionnez
mkdir /mnt/backup && chmod 755 /mnt/backup

Éditez 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 gérés 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 :

 
Sélectionnez
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écupérez 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 effectué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 recommande 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) :

 
Sélectionnez
/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 recommande 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 renouveler 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éprotégez 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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 Backup du système sur une partition spécifique m'a pris 15 minutes sur un PIII 500 avec 128 Mo de RAM.


précédentsommairesuivant

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.