samedi, avril 20, 2024
Nom d'utilisateur : Mot de passe :
Home > Scripts Bash > Shell quickies > Surveiller ses dossiers temporaires
[NEWS]
Envoyé par unreal
Si vous avez lu ce guide vous saurez que le risque de se faire "pirater" son serveur augmente à partir du moment où l'on héberge du contenu Web dynamique (php, perl, cgi...). Alors un admin souhaitant réduire les risques au minimum cherchera des méthodes pour blinder et surveiller son (ses) machine(s) afin d'agir rapidement si une intrusion se présente.
Le stricte minimum est de monter /tmp avec l'option "noexec" dans /etc/fstab et de faire pointer les autres dossiers temporaires (/var/tmp) vers /tmp à l'aide d'un lien symbolique. En effet, les personnes mal intentionnées qui s'introduisent dans un serveur ont besoin d'un dossier où télécharger les scripts/binaires qu'ils vont ensuite essayer d'exécuter. Le fait de rendre /tmp "noexec" peut dans pas mal de cas empêcher l'exécution du code, protégeant ainsi le serveur.

Le petit script qui suit s'utilise avec un crontab et avertit l'administrateur quand il y'a des fichiers suspects dans /tmp, c'est-à-dire des fichiers qui appartiennent à l'utilisateur Apache, sans être classiquement les fichiers qu'Apache pourrait déposer dans /tmp.

Les lignes en gras seront certainement à modifier.

^ indique un début de chaîne, $ indique une fin de chaîne (pour en savoir plus, lisez mon dossier sur les regex).


#!/bin/sh


##################################################
TMP=/tmp
APACHE_USER=httpd
SAFE_FILES="^sess_"
UNSAFE_FILES=".tar$ .gz$ .bz2$ .zip$"
MAIL_TO="root@localhost"
MAIL_SUBJ="Suspicious temp files."
##################################################

cd $TMP
FOUND=`find . -user $APACHE_USER`

for ONE_SAFE_FILE in $SAFE_FILES; do
        [[ $ONE_SAFE_FILE == ^* ]] && ONE_SAFE_FILE=`echo $ONE_SAFE_FILE | sed 's:\^:^./:'`

        BUILD_SAFE="-e $ONE_SAFE_FILE $BUILD_SAFE"
done


RES1=`echo "$FOUND" | grep -iv $BUILD_SAFE`

for ONE_UNSAFE_FILE in $UNSAFE_FILES; do
        BUILD_UNSAFE="-e $ONE_UNSAFE_FILE $BUILD_UNSAFE"
done

RES2=`echo "$FOUND" | grep -i $BUILD_UNSAFE`

RES=`echo -e "$RES1$RES2" | sort | uniq`


if [ "$RES" != "" ]; then
        RES=`echo -e "Some suspicious files were found in $TMP folder:\n\n$RES"`
        echo "$RES" | mail -s "$MAIL_SUBJ" "$MAIL_TO"
fi


Bon code ! happy.gif

Posté le 06/05/06 à 18:03

Commentaires...[1-1]


RE: Surveiller ses dossiers temporaires

unreal

[AVATAR]

Messages : 15
Inscrit le : 07/03/04
Contribution d'un ami qui a implémenté un système de cache (pour pas récevoir 500 fois les mêmes mails) et la suppression de fichiers exécutables qui n'ont rien à faire dans /tmp.

#!/bin/bash

##################################################
TMP=/tmp
APACHE_USER="www-data"
SAFE_FILES="^sess_ ^horde ^ml.txt$ ^export_factures ^impat"
UNSAFE_FILES=".tar$ .gz$ .bz2$ .zip$ .pl$"
MAIL_TO="root"
MAIL_SUBJ="Suspicious temp files."
##################################################

cd $TMP
FOUND=`find . -user $APACHE_USER`
EXEC=`find . -user $APACHE_USER -perm +0111`


for ONE_SAFE_FILE in $SAFE_FILES; do
    [[ $ONE_SAFE_FILE == ^* ]] && ONE_SAFE_FILE=`echo $ONE_SAFE_FILE | sed 's:\^:^./:'`

    BUILD_SAFE="-e $ONE_SAFE_FILE $BUILD_SAFE"
done


RES1=`echo "$FOUND" | grep -iv $BUILD_SAFE`

for ONE_UNSAFE_FILE in $UNSAFE_FILES; do
    BUILD_UNSAFE="-e $ONE_UNSAFE_FILE $BUILD_UNSAFE"
done

RES2=`echo "$FOUND" | grep -i $BUILD_UNSAFE`

RES=`echo -e "$RES1\n$RES2" | sort | uniq`

#Delete executable files

if [ "$EXEC" != "" ]; then
    for FILE in $EXEC
    do
        rm -Rf $FILE
    done
    RES=`echo -e "Executable files have been deleted\n\n$RES"`
fi

if [ "$RES" != "" ]; then
    RES=`echo -e "Some suspicious files were found in $TMP folder:\n\n$RES"`

    #Check for already sent mail
    if [ -e $TMP/latest_mail.txt ]; then
        #Old one exists
        echo "$RES" >$TMP/temp_mail.txt
        diff $TMP/latest_mail.txt $TMP/temp_mail.txt >/dev/null
        if [ $? -ne 0 ]; then
            #There is a diff between the old and the new mail
            #Mail is sent
            echo "$RES" | mail -s "$MAIL_SUBJ" "$MAIL_TO"
            #Mail is saved
            echo "$RES" >$TMP/latest_mail.txt
        fi
        #Removing temp file
        rm $TMP/temp_mail.txt
    else
        #No mail has been sent
        #Mail is sent
        echo "$RES" | mail -s "$MAIL_SUBJ" "$MAIL_TO"
        #Mail is saved
        echo "$RES" >$TMP/latest_mail.txt
    fi
fi


Message édité par unreal le 29/08/06 à 10:48

Posté le 29/08/06 à 10:45

Surveiller ses dossiers temporaires
Vous pourriez commenter si vous aviez un compte !