[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]


Securing Debian Manual
Annexe E - Exemple de script pour changer l'installation par défaut de BIND

Ce script automatise la procédure de modification d'installation par défaut du serveur de noms bind version 8 pour qu'il ne fonctionne pas en tant que superutilisateur. Remarquez que bind version 9 dans Debian fait déjà cela par défaut[85], et que vous devriez plutôt l'utiliser que bind version 8.

Ce script est laissé pour des raisons historiques et montre comment automatiser ce type de modifications globales du système. Le script créera les utilisateur et groupe définis pour le serveur de noms et modifiera à la fois /etc/default/bind et /etc/init.d/bind pour que le programme soit exécuté en tant que cet utilisateur. Utilisez-le avec la plus grande attention car il n'a pas été testé rigoureusement.

Vous pouvez aussi créer l'utilisateur vous-même et utiliser le correctif disponible pour le script d'initialisation par défaut attaché au rapport de bogue nº 157245.

     #!/bin/sh
     # Modifier la configuration par défaut du BIND v8 de Debian pour qu'il
     # s'exécute en tant qu'utilisateur et groupe non superutilisateur.
     #
     # Ne pas utiliser cela avec la version 9, utiliser plutôt debconf pour le
     # configurer.
     #
     # Attention : ce script n'a pas été testé rigoureusement, veuillez
     # vérifier les modifications effectuées sur les scripts d'initialisation.
     
     # (c) 2002 Javier Fernández-Sanguino Peña
     #
     #    This program is free software; you can redistribute it and/or modify
     #    it under the terms of the GNU General Public License as published by
     #    the Free Software Foundation; either version 1, or (at your option)
     #    any later version.
     #
     #    This program is distributed in the hope that it will be useful,
     #    but WITHOUT ANY WARRANTY; without even the implied warranty of
     #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     #    GNU General Public License for more details.
     #
     #     Please see the file `COPYING' for the complete copyright notice.
     #
     
     restore() {
     # Au cas où, restaurer le système si la modification échoue
       echo "Attention : restauration de la configuration précédente car il"
       echo "            est impossible de la modifier correctement."
       echo "Attention : veuillez vérifier le script $INITDERR."
       mv $INITD $INITDERR
       cp $INITDBAK $INITD
     }
     
     
     USER=named
     GROUP=named
     INITD=/etc/init.d/bind
     DEFAULT=/etc/default/bind
     INITDBAK=$INITD.preuserchange
     INITDERR=$INITD.changeerror
     AWKS="awk ' /\/usr\/sbin\/ndc reload/ { print \"stop; sleep 2; start;\"; noprint = 1; } /\\\\$/ { if ( noprint != 0 ) { noprint = noprint + 1;} } /^.*$/ { if ( noprint != 0 ) { noprint = noprint - 1; } else { print \$0; } } '"
     
     [ `id -u` -ne 0 ] && {
       echo "Ce script doit être exécuté en tant que superutilisateur"
       exit 1
     }
     
     RUNUSER=`ps eo user,fname |grep named |cut -f 1 -d " "`
     
     if [ "$RUNUSER" = "$USER" ] 
     then
       echo "Attention : le démon de serveur de noms est déjà exécuté en tant"
       echo "            que $USER."
       echo "Erreur :    ce script ne modifiera pas la configuration."
       exit 1
     fi
     if [ ! -f "$INITD" ]
     then
       echo "Erreur :    ce système n'a pas de $INITD (ce que ce script tente de"
       echo "            modifier)"
       RUNNING=`ps eo fname |grep named`
       [ -z "$RUNNING" ] && \
       echo "Erreur :    en fait, le démon de serveur de noms n'est même pas en"
       echo "            cours d'exécution (est-il installé ?)"
       echo "Erreur :    aucune modification ne sera apportée au système."
       exit 1
     fi
     
     # Vérifier si les options sont déjà configurées
     if [ -e "$DEFAULT" ]
     then
       if grep -q ^OPTIONS $DEFAULT; then
         echo "Erreur :    le fichier $DEFAULT a déjà des options configurées."
         echo "Erreur :    aucune modification ne sera apportée au système."
       fi
     fi
     # Vérifier si le groupe named existe
     if [ -z "`grep $GROUP /etc/group`" ] 
     then
       echo "Création du groupe $GROUP :"
       addgroup $GROUP
     else
       echo "Attention : le groupe $GROUP existe déjà. Il ne sera pas créé."
     fi
     # Pareil pour l'utilisateur
     if [ -z "`grep $USER /etc/passwd`" ] 
     then
       echo "Création de l'utilisateur $USER :"
       adduser --system --home /home/$USER \
       --no-create-home --ingroup $GROUP \
       --disabled-password --disabled-login $USER
     else
       echo "Attention : l'utilisateur $USER existe déjà. Il ne sera pas créé."
     fi
     
     # Modifier le script init.d
     
     # D'abord faire une sauvegarde (vérifier qu'il n'y en a pas déjà une)
     if [ ! -f $INITDBAK ] 
     then
       cp $INITD $INITDBAK
     fi
     
     # Puis l'utiliser pour la modifier
     cat $INITDBAK |
     eval $AWKS > $INITD
     
     # Enfin placer les options dans le fichier /etc/default/bind
     cat >>$DEFAULT <<EOF
     # Utiliser l'utilisateur défini pour exécuter bind
     OPTIONS="-u $USER -g $GROUP"
     EOF
     echo "Attention : le script $INITD a été modifié, tentative de test des"
     echo "            modifications."
     echo "Redémarrage du démon named (vérification des erreurs en cours)."
     
     $INITD restart
     if [ $? -ne 0 ]
     then
       echo "Erreur :    échec du redémarrage du démon."
       restore
       exit 1
     fi
     
     RUNNING=`ps eo fname |grep named`
     if [ -z "$RUNNING" ] 
     then
       echo "Erreur :    named n'est pas en cours d'exécution, c'est sans doute"
       echo "            dû à un problème avec les modifications."
       restore
       exit 1
      fi
     
     # Vérifier que named fonctionne comme prévu
     RUNUSER=`ps eo user,fname |grep named |cut -f 1 -d " "`
     
     if [ "$RUNUSER" = "$USER" ] 
     then
       echo "Tout s'est bien passé, named semble maintenant fonctionner en tant"
       echo "            que $USER."
     else
       echo "Erreur :    le script a échoué à modifier automatiquement le système."
       echo "Erreur :    named fonctionne actuellement en tant que $RUNUSER."
       restore
       exit 1
     fi
     
     exit 0

Le script précédent, exécuté sur le bind (version 8) personnalisé de Woody (Debian 3.0), modifiera le fichier initd après création de l'utilisateur et du groupe « named ».


[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]


Securing Debian Manual

Version: 3.13, Sun, 08 Apr 2012 02:48:09 +0000

Javier Fernández-Sanguino Peña jfs@debian.org
Auteurs, Section 1.1