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).
Bon code !
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
##################################################
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 !
Posté le 06/05/06 à 18:03