Precedent Haut Suivant


8.2.2 -  Notions sur Linux en général et les serveurs Debian en particulier :

Le présent paragraphe regroupe les quelques astuces et notions importantes à connaître lors de l’utilisation d’un serveur Debian. Il permet la mise en place de quelques mécanismes permettant de gagner du temps lors de l’exploitation et de l’utilisation ultérieure des serveurs.

è      Phase d’installation :

     - la seule difficulté lors de l’installation d’un serveur Debian consiste a bien créer une partition différente pour les points de montage suivants :

           - « / » (au minimum 500Mo)

           - « /usr » (au minimum 1Go)

           - « /var » (au minimum 500Mo)

           - « /var/log » (au minimum 100Mo)

           - « /tmp » (si possible)

           - « /home » (dans le cas d’un serveur de fichiers)

     - il est interessant d’installer au minimum les packages suivants :

           - « vim » (vi évolué)

           - « less » (plus évolué que more)

           - « manpages-fr » (les pages du manuel en français)

           - « ssh » (pour une administration sécurisée du serveur)

           - « findutils » (pour pouvoir beneficier des commandes locate et updatedb)

           - « apt-file » (pour pouvoir beneficier des commandes apt-cache search/show)

           - « dlocate » (pour pouvoir beneficier de la commande dlocate permettant de retrouver le nom du package contenant un fichier donné ou encore d’obtenir le status des différents packages)

 

è      Mise en place de l’environnement français :

           - à l’issue de l’installation il suffit d’effectuer les opérations suivantes :

                - dpkg-reconfigure locales

                - export LANG= « fr_FR »

                - locale

 

è      Suppression de l’affichage de la commande « dselect » au démarrage :

           - création d’un alias dselect= « dselect –expert »

 

è      Installation/MAJ des packages en mode ligne de commande :

           - utilisation de la commande apt-get install nom_package

           - utilisation de la commande apt-get update

 

è      Definition des sources de mise à jour Debian :

           - modification du fichier /etc/apt/sources.list. Le fichier du serveur Hercule est donné ci dessous :

 

deb http://ftp.fr.debian.org/debian stable main contrib non-free

deb http://ftp.fr.debian.org/debian testing main contrib non-free

deb http://ftp.fr.debian.org/debian-non-US/ stable/non-US main contrib non-free

# La ligne deb-src permet d’indiquer ou récupérer les sources ayant

# permises la création d’un package donné à l’aide de la commande

# apt-get source nom_package

deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

 

è      Pour rechercher un libelle dans la liste des packages Debian :

      - apt-cache search libelle1 [libelle2 … libellen]

 

è      Pour afficher la description d’un package Debian :

      - apt-cache show nom_package

 

è      Pour afficher la liste des packages Debian installés sur le système :

      - dpkg -l

 

è      Pour empêcher la mise à jour de packages (opération indispensable des que l’on recompile un package existaant sans changer son numéro de version) :

      - lancer dselect ;

      - se placer sur le package considéré et appuyer sur la touche « H » comme « Hold ».

8.2.2.A -  Logiciels utiles a posséder sur le poste client Windows :

Dans le cas ou il est souhaité pouvoir administrer les différents serveurs Unix depuis une station Windows, il est utile d’installer les deux logiciels suivants :

      - Putty  : client SSH

      - WinSCP : client SCP (copie de fichiers sécurisée via SSH)

8.2.2.B -  Les cages UNIX :

Linux comme tout UNIX permet « d’encager » les démons. La notion de cage consiste a changer la racine « / » pour un répertoire donné lors du lancement d’un démon. Cette nouvelle racine doit contenir toutes les ressources dont le démon a besoin pour fonctionner correctement mais uniquement celles-ci. De cette manière un pirate reussissant à exploiter une faille d’un démon donné ne peut avoir accès qu’aux données utilisées par le démon en question et jamais à l’ensemble du système.

Le mécanisme de mise en cage peut être inclus dans le fonctionnement même du démon (ex : Postfix) ou forcé au démarrage à l’aide de la commande suivante :

è      Chroot nouvelle_racine commande_a_executer_depuis_la_nouvelle_racine

 

Dans le cadre de la maquette les démons sont systématiquement encagés. Le script de création des cages est donné ci-dessous :

#!/bin/bash

#

# Emplacement : Maquette de test SGA

# Description : Script permettant la création de cages chroot

# Serveur     : Tous

# Copyright   : marc.boget@gendarmerie.org

 

echo "------------------------------------"

echo " Création de cages"

echo " sur noyau Debian 2.4.18

echo " Marc BOGET - Mastere SIO - "

echo " marc.boget@gendarmerie.org

echo "------------------------------------"

echo ""

 

# Fonction copiant les fichiers "de base"

function recopie_lien

{

     # Mise a zero des variables

     REP=""

     REP1=""

     LIEN=""

     FICLIE=""

 

     # Test pour savoir si c'est un lien symbolique

     LIEN=$(ls -al $FICHIER_TRAITE|cut -d'>' -f2|cut -d' ' -f2)

     if [ "$LIEN" != "" ]; then

          REP=$(dirname $LIEN)

          FICLIE=$(basename $LIEN)

          # Test pour savoir si c'est dans le meme repertoire ou pas

          # Si le dirname ne peut etre trouvé, dirname renvoie '.' !!!

          if [ "$REP" == "." ]; then REP=$(dirname $FICHIER_TRAITE); fi

          # Traitement des liens relatifs

          REP1=""

          if [ "$(echo $REP|cut -c 1-2)" == ".." ]

          then

                REP1=$(dirname $FICHIER_TRAITE)

                REP=${REP1}/${REP}

          fi

          # Ne recopie le fichier pointé par le lien que s'il n'existe deja pas

          if ! test -f ${REP}/${FICLIE}

          then

                mkdir -p ${HOME_CAGE}${REP}

                rsync -a "${REP}/${FICLIE}" "${HOME_CAGE}${REP}/${FICLIE}" >/dev/null 2>&1

          fi

          if [ "$REP1" != "" ]

          then

                REP=$REP1

          else

                REP=$(dirname $FICHIER_TRAITE)

          fi

     else

          REP=$(dirname $FICHIER_TRAITE)

     fi  

}

 

function recopie_fichier

{

     if test $FICHIER_COPIE

     then

          echo "Traitement de $FICHIER_COPIE"

          REPFIC=$(dirname $FICHIER_COPIE)

          NOMFIC=$(basename $FICHIER_COPIE)

          mkdir -p "${HOME_CAGE}/${REPFIC}" >/dev/null 2>&1

          FICHIER_TRAITE=$FICHIER_COPIE

          recopie_lien

          if ! test -f ${HOME_CAGE}${REP}/${NOMFIC}

          then

                rsync -a "${FICHIER_COPIE}" "${HOME_CAGE}${REP}/${NOMFIC}" >/dev/null 2>&1

          fi

     fi

}

 

function creation_base

{

     umask 022

    

     echo "- Creation des repertoires"

     mkdir $HOME_CAGE             > /dev/null 2>&1

     mkdir ${HOME_CAGE}/var       > /dev/null 2>&1

     mkdir "${HOME_CAGE}/var/log" > /dev/null 2>&1

     mkdir "${HOME_CAGE}/var/run" > /dev/null 2>&1

     mkdir "${HOME_CAGE}/dev"     > /dev/null 2>&1

     mkdir "${HOME_CAGE}/lib"     > /dev/null 2>&1

     mkdir "${HOME_CAGE}/root"    > /dev/null 2>&1

     mkdir "${HOME_CAGE}/tmp"     > /dev/null 2>&1

     chmod 1777 "${HOME_CAGE}/tmp"

    

     echo "- Création des périphériques"

     cd "${HOME_CAGE}/dev"

     mknod null  c 1  3

     mknod random  c 1  8

     mknod urandom  c 1  9

     chown root:root null

     chmod 0666 null

    

     echo "- Copie des fichiers de base necessaires"

     for FICHIER_COPIE in /etc/shadow /etc/group /etc/passwd /etc/hosts /etc/protocols /etc/resolv.conf /etc/services

     do

          recopie_fichier

     done

    

     echo "- Copie des bibliotheques utilisées"

     for FICHIER_COPIE in $(ldd $DAEMON|cut -d'>' -f2|cut -d' ' -f2)

     do

          recopie_fichier

     done

 

     # Recuperation des fichiers ouverts au lancement du demon

     echo "- Arret du démon s'il tourne..."

     $COMMANDE_DAEMON stop >/dev/null 2>&1

     echo "- Lancement du demon pour recuperation des fichiers ouverts ..."

     strace $DAEMON start 2>/tmp/cage.temp

     sleep 2

     echo "- Arret du démon ..."

     killall $DAEMON >/dev/null 2>&1

     for FICHIER_COPIE in $(grep open /tmp/cage.temp|cut -d'"' -f2|grep -v "/dev/null" |grep -v "\/\.")

     do

          recopie_fichier

     done

 

     # Gestion du fichier /etc/localtime

     echo "- Gestion du fichier /etc/localtime"

     cd ${HOME_CAGE}

     FICHIER_COPIE="/usr/share/zoneinfo/Europe/Paris"

     recopie_fichier

     rm -f ${HOME_CAGE}/etc/localtime

     ln -s ../usr/share/zoneinfo/Europe/Paris etc/localtime

 

     # Copie du demon lui meme

     REP=$(dirname $DAEMON)

     mkdir -p ${HOME_CAGE}${REP}

     cp $DAEMON ${HOME_CAGE}$DAEMON

     return 0;

}

 

# Fonction creant la cage pour postfix

function creation_cage_postfix

{

# La mise en cage de postfix est automatique : cf directive queue_directory

# dans le fichier /etc/postfix/main.cf por trouver la definition de la cage. Le

# fichier /etc/postfix/master.cf permet de definir quels sont les services qui

# doivent etre chrootés (signe '-' dans la colonne chroot) ou pas (signe 'n'

# dans la colonne chroot)

 

# Le seul repertoire a creer est le repertoire ci dessous pour que le script

# de postfix puisse arriver a créer un lien : petit bug !!!

 

     mkdir -p ${HOME_CAGE}/usr/lib/zoneinfo

}

 

# Fonction creant la cage pour syslog

function creation_cage_syslog

{

     creation_base

}

 

# Fonction creant la cage pour apache

function creation_cage_apache

{

     creation_base

    

     # Copie des fichiers specifiques

     echo "- Copie des fichiers specifiques ..."

     for FICHIER_COPIE in $(find /usr/lib/libdb* /usr/lib/perl5* /var/www /usr/lib/cgi* /usr/lib/libsasl* /usr/lib/libgdbm* /usr/kerberos /usr/bin/perl* /usr/lib/apache-ssl /usr/share/ldapexplorer /etc/ldapexplorer 2>/dev/null)

     do

          recopie_fichier

     done

}

 

function creation_cage_ssh

{

     creation_base

    

     # Creation des terminaux

     rsync -a /dev/pty* ${HOME_CAGE}/dev >/dev/null 2>&1

     rsync -a /dev/tty* ${HOME_CAGE}/dev >/dev/null 2>&1

     echo "- Copie des fichiers specifiques"

    

     # Creation des repertoires specifiques

     mkdir -p ${HOME_CAGE}/var/run/sshd

     chmod 755 ${HOME_CAGE}/var/run/sshd

 

     # Serveur et client SSH

     for FICHIER_COPIE in $(find /etc/ssh* /lib/libncurses.so.5* /usr/bin/ssh /bin/ls /lib/librt.so.1 /lib/libpthread.so.* /usr/bin/ssh 2>/dev/null)

     do

          recopie_fichier

     done

 

     # Pour permettre le bash

     for FICHIER_COPIE in $(find /bin/bash /lib/libncurses.so.5* 2>/dev/null)

     do

          recopie_fichier

     done

 

     # Pour permettre la commande ls

     for FICHIER_COPIE in $(find /bin/ls /lib/librt.so.1 /lib/libpthread.so.* 2>/dev/null)

     do

          recopie_fichier

     done

 

     # Pour permettre l'authentification PAM LDAP

     for FICHIER_COPIE in $(find /etc/ldap* /lib/libnss* /lib/libpam* /etc/pam* /etc/libnss* /lib/security/* /usr/lib/libldap* /usr/lib/liblber* /lib/libresolv* /etc/nsswitch.conf /etc/hosts.* /usr/lib/libsasl* /usr/lib/libssl* /lib/libdb2* 2>/dev/null)

     do

          recopie_fichier

     done

}

 

function creation_cage_ldap

{

     creation_base

 

     # Recopie des bases ldap

     for FICHIER_COPIE in $(find /var/lib/ldap 2>/dev/null)

     do

          recopie_fichier

     done

 

     # Pour permettre l'authentification PAM LDAP

     for FICHIER_COPIE in $(find /etc/ldap* /lib/libnss* /lib/libpam* /etc/pam* /etc/libnss* /lib/security/* /usr/lib/libldap* /usr/lib/liblber* /lib/libresolv* /etc/nsswitch.conf /etc/hosts.* /usr/lib/libsasl* /usr/lib/libssl* /lib/libdb2* 2>/dev/null)

     do

          recopie_fichier

     done

}

 

# Recuperation des arguments de la ligne de commande

PROG=$1

 

# Verification de la presence de l'utilitaire rsync permettant de copier

# facilement les fichiers souhaités

test -f /usr/bin/rsync || PROG="rsync_absent"

 

# Recuperation des variables de traitement

echo -n "Repertoire de cage (sans / final) : "

read HOME_CAGE

echo -n "Nom du démon a encager : "

read NOM_DAEMON

DAEMON=$(which $NOM_DAEMON)

echo -n "Emplacement du démon ($DAEMON) : "

read DAEMON

if [ "$DAEMON" == "" ]; then DAEMON=$(which $NOM_DAEMON); fi

echo -n "Commande permettant d'arreter/redemarrer le demon (/etc/init.d/$NOM_DAEMON) : "

read COMMANDE_DAEMON

if [ "$COMMANDE_DAEMON" == "" ]; then COMMANDE_DAEMON="/etc/init.d/$NOM_DAEMON"; fi

 

case "$PROG" in

     postfix) creation_cage_postfix

                ;;

 

     syslog) creation_cage_syslog

                ;;

 

     apache)

                creation_cage_apache

                ;;

     ssh)

                creation_cage_ssh

                ;;

     ldap)

                creation_cage_ldap

                ;;

     rsync_absent)

                echo "L'utilitaire rsync doit etre installé à l'aide de la commande apt-get install"

                ;;

     *)

                echo "Usage : $0 postfix|syslog|apache|ssh|ldap"

                ;;

esac

echo ""

echo "Votre serveur est desormais prét à etre encagé dans le repertoire $HOME_CAGE"

echo ""

echo "Pensez a modifier vos fichiers de demarrage (/etc/init.d/*) en rajoutant :"

echo "  - soit l'option de lancement du demon $NOM_DAEMON permettant d'indiquer"

echo "    le repertoire de cage"

echo "  - soit la commande chroot $HOME_CAGE $DAEMON"

8.2.2.C -  La gestion des taches automatiques sous Unix :

Les systèmes d’exploitation Unix permettent d’automatiser des taches données. Cette automatisation s’effectue à l’aide de la commande « cron » qui examine le fichier « /etc/crontab » pour déterminer quelles actions effectuer …

 

Le démon « anacron » présente la possibilité de gérer ces taches de manière journalière, hebdomadaire, mensuellement ou encore toutes les heures.

 

L’installation de ce démon (version  2.3-6) s’effectue de la façon suivante :

è      Apt-get install cron anacron

 

Ce package dépend des packages suivants :

   - libc6 (version >= 2.2.2-2) ;

   - debianutils (version >= 1.7) ;

   - sysklogd ou system-log-daemon ;

   - exim ou mail-transport-agent.

 

Les taches à effectuer sont alors définies dans les répertoires « /etc/cron.hourly », « /etc/cron.daily », « /etc/cron.weekly » et « /etc/cron.monthly ».



Precedent Haut Suivant