Audit linux
De BlaxWiki
Révision datée du 16 janvier 2017 à 13:30 par 127.0.0.1 (discussion)
Ce script sert à récuperer divers information qui peuvent etre nécessaire pour un audit
#!/bin/sh
# Script de récupération de configuration
# Systèmes d'exploitation Linux
# Testé compatible pour :
# Debian-based (Debian, Ubuntu)
# Red Hat-based (RHEL)
#
# Auteur :
# Aurélien Marteau
#
echo "Script d'audit de configuration Linux"
STARTEND="=============================================================="
SEPARATOR=" =======> "
read -p "Entrez le nom de la mission : " MISSION
TARGET="`uname -n`"
HOUR=`date '+%s'`
BASEDIR="/tmp/Intrinsec_Linux_configuration_$HOUR"
NOTEMP=""
#NOTEMP=" -name tmp -prune -o "
FINDALL="nice -19 find -L / -mount $NOTEMP "
# si les répertoires /dirA, /dirB et /dirC ne doivent pas être testés
# FINDALL="find / ( -name dirA -o -name dirB -o -name dirC ) -prune -o "
mkdir $BASEDIR
do_test()
{
echo "$DESCRIPTION"
echo $STARTEND >> $OUTFILE
echo $MISSION >> $OUTFILE
echo "Cible : $TARGET" >> $OUTFILE
echo "Description : $DESCRIPTION" >> $OUTFILE
echo "Commande : $COMMAND" >> $OUTFILE
echo "Etat récolté le `date`" >> $OUTFILE
echo $STARTEND >> $OUTFILE
$COMMAND >> $OUTFILE 2>&1
echo $STARTEND >> $OUTFILE
}
### Comptes utilisateur
COMMAND="cat /etc/passwd"
DESCRIPTION="Contenu du fichier /etc/passwd contenant la base de définition des utilisateurs"
OUTFILE=$BASEDIR/passwd.txt
do_test
COMMAND="cat /etc/shadow"
DESCRIPTION="Contenu du fichier /etc/shadow contenant la base sécurisée de définition des utilisateurs"
OUTFILE=$BASEDIR/shadow.txt
do_test
COMMAND="ls -alLi /etc/shadow"
DESCRIPTION="Droits d'accès sur le fichier /etc/shadow contenant la base sécurisée de définition des utilisateurs"
OUTFILE=$BASEDIR/shadow.perm.txt
do_test
COMMAND="cat /etc/group"
DESCRIPTION="Contenu du fichier /etc/group contenant la base de définition des groupes"
OUTFILE=$BASEDIR/group.txt
do_test
COMMAND="cat /etc/shells"
DESCRIPTION="Contenu du fichier /etc/shells définissant les shells reconnus par le système"
OUTFILE=$BASEDIR/shells.txt
do_test
# En attendant de debug
for shell in $(grep -v '^#' /etc/passwd | cut -s -d : -f 7 | sort | uniq); do ls -alLi $shell >> $BASEDIR/shells_users.txt; done
#COMMAND="for shell in $(grep -v '^#' /etc/passwd | cut -s -d : -f 7 | sort | uniq); do ls -alLi $shell; done"
#DESCRIPTION="Droits d'accès aux shells des utilisateurs"
#OUTFILE=$BASEDIR/shells_users.txt
#do_test
COMMAND="umask"
DESCRIPTION="Umask par défaut pour root"
OUTFILE=$BASEDIR/umask.txt
do_test
COMMAND="last"
DESCRIPTION="Liste des dernières personnes connnectées"
OUTFILE=$BASEDIR/last.txt
do_test
COMMAND="find /etc ( -name profile -o -name cshrc -o -name csh.login -o -name .login -o -name login ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers génériques de configuration des environnement des utilisateurs"
OUTFILE=$BASEDIR/generic.profile.txt
do_test
COMMAND="find /home /root ( -name .*profile* -o -name .*shrc* -o -name .*login* -o -name .*logout* ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers personnels de configuration des environnement des utilisateurs"
OUTFILE=$BASEDIR/perso.profile.txt
do_test
### Contrôle d'accès
COMMAND="find /etc -name sudoers -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Contenu des fichiers de configuration sudo"
OUTFILE=$BASEDIR/sudo.txt
do_test
COMMAND="find /etc/sudoers.d -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Contenu des fichiers de configuration sudo"
OUTFILE=$BASEDIR/sudo.txt
do_test
COMMAND="find /home /root ( -name .rhosts -o -name .shosts ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers individuels de configuration des relations de confiance .rhosts"
OUTFILE=$BASEDIR/rhosts.txt
do_test
COMMAND="cat /etc/securetty"
DESCRIPTION="Liste des TTY autorisés"
OUTFILE=$BASEDIR/securetty.txt
do_test
### Divers
COMMAND="find /etc -name snmpd.conf -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Fichier de configuration de snmp"
OUTFILE=$BASEDIR/snmpd.conf.txt
do_test
COMMAND="xhost"
DESCRIPTION="Configuration de la sécurité de X-Windows"
OUTFILE=$BASEDIR/xhost.txt
do_test
COMMAND="ulimit -a"
DESCRIPTION="Limites pour le compte"
OUTFILE=$BASEDIR/ulimit.txt
do_test
COMMAND="cat /etc/ntp.conf"
DESCRIPTION="Contenu du fichier /etc/ntp.conf contenant la configuration liée à la configuration du serveur temps"
OUTFILE=$BASEDIR/ntp.txt
do_test
COMMAND="grep ctrlaltdel /etc/inittab"
DESCRIPTION="Configuration de ctrl + alt + del pour le reboot"
OUTFILE=$BASEDIR/ctrl_alt_del.txt
do_test
COMMAND="grep -rin ctrl-alt-del.target /lib/systemd/system/"
DESCRIPTION="Configuration de ctrl + alt + del pour le reboot"
OUTFILE=$BASEDIR/ctrl_alt_del.txt
do_test
COMMAND="cat /lib/systemd/system/ctrl-alt-del.target"
DESCRIPTION="Configuration de ctrl + alt + del pour le reboot"
OUTFILE=$BASEDIR/ctrl_alt_del.txt
do_test
### Journalisation
COMMAND="cat /etc/syslog.conf"
DESCRIPTION="Contenu du fichier /etc/syslog.conf définissant la configuration de syslog"
OUTFILE=$BASEDIR/syslog.conf.txt
do_test
COMMAND="cat /etc/rsyslog.conf"
DESCRIPTION="Contenu du fichier /etc/rsyslog.conf définissant la configuration de rsyslog"
OUTFILE=$BASEDIR/rsyslog.conf.txt
do_test
COMMAND="find -L /etc/syslog.d ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de syslog"
OUTFILE=$BASEDIR/syslog.d.files.txt
do_test
COMMAND="find -L /etc/rsyslog.d ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de rsyslog"
OUTFILE=$BASEDIR/rsyslog.d.files.txt
do_test
COMMAND="find -L /var/log ( -type l -o -type f ) -exec ls -ailL {} ;"
DESCRIPTION="Droits d'accès sur les fichiers de log"
OUTFILE=$BASEDIR/logs.perm.txt
do_test
COMMAND="cat /var/log/syslog"
DESCRIPTION="Fichier syslog le plus récent"
OUTFILE=$BASEDIR/syslog.txt
do_test
COMMAND="ls -ailL /var/run/utmp /var/log/wtmp"
DESCRIPTION="Droits d'accès sur les fichiers d'enregistrement des connexions"
OUTFILE=$BASEDIR/utmp.wtmp.perm.txt
do_test
### Logiciels installés
# Debian-based
COMMAND="dpkg -l"
DESCRIPTION="Liste des packages installés"
OUTFILE=$BASEDIR/package.txt
do_test
# Red Hat-based
COMMAND="yum list installed"
DESCRIPTION="Liste des packages installés"
OUTFILE=$BASEDIR/package.txt
do_test
# Red Hat-based
COMMAND="rpm -qa"
DESCRIPTION="Liste des packages installés"
OUTFILE=$BASEDIR/package.txt
do_test
COMMAND="find -L /etc/apt ( -type l -o -type f ) -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="List et contenu des fichiers sources lists"
OUTFILE=$BASEDIR/etc.apt.txt
do_test
### Mises à jour
# Debian
COMMAND="cat /etc/debian_version"
DESCRIPTION="Version de Debian"
OUTFILE=$BASEDIR/version.txt
do_test
# Red Hat
COMMAND="cat /etc/redhat-release"
DESCRIPTION="Version de RHEL"
OUTFILE=$BASEDIR/version.txt
do_test
COMMAND="cat /etc/issue"
DESCRIPTION="Banniere d'accueil"
OUTFILE=$BASEDIR/etc_issue.txt
do_test
COMMAND="cat /etc/issue.net"
DESCRIPTION="Banniere d'accueil réseau"
OUTFILE=$BASEDIR/etc_issue.net.txt
do_test
COMMAND="uname -a"
DESCRIPTION="Identification de la version du système d'exploitation"
OUTFILE=$BASEDIR/uname.txt
do_test
COMMAND="$FINDALL -type f -perm -002000 -exec ls -ailL {} ; -exec file {} ;"
DESCRIPTION="Liste des fichiers ayant le bit SGID"
OUTFILE=$BASEDIR/sgid.txt
do_test
COMMAND="$FINDALL -type f -perm -004000 -exec ls -ailL {} ; -exec file {} ;"
DESCRIPTION="Recherche des fichiers ayant le bit SUID"
OUTFILE=$BASEDIR/suid.txt
do_test
### Authentification
COMMAND="cat /etc/pam.conf"
DESCRIPTION="Contenu du fichier /etc/pam.conf qui contient la configuration des fonctions d'authentification"
OUTFILE=$BASEDIR/pam.conf.txt
do_test
COMMAND="find -L /etc/pam.d ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de PAM"
OUTFILE=$BASEDIR/pam.d.txt
do_test
COMMAND="cat /etc/libuser.conf"
DESCRIPTION="configuration authentification"
OUTFILE=$BASEDIR/libuser.conf.txt
do_test
COMMAND="cat /etc/login.defs"
DESCRIPTION="Configuration du mecanisme d'authentification"
OUTFILE=$BASEDIR/login.defs.txt
do_test
### Réseau
COMMAND="cat /etc/sysctl.conf"
DESCRIPTION="configuration pile TCP"
OUTFILE=$BASEDIR/sysctl.conf.txt
do_test
COMMAND="cat /etc/inetd.conf"
DESCRIPTION="Contenu du fichier /etc/inetd.conf définissant la configuration des services réseau"
OUTFILE=$BASEDIR/inetd.conf.txt
do_test
COMMAND="cat /etc/xinetd.conf"
DESCRIPTION="Contenu du fichier /etc/xinetd.conf définissant la configuration des services réseau"
OUTFILE=$BASEDIR/xinetd.conf.txt
do_test
COMMAND="cat /etc/resolv.conf"
DESCRIPTION="Contenu du fichier /etc/resolv.conf définissant la résolution des noms de domaine"
OUTFILE=$BASEDIR/resolv.conf.txt
do_test
COMMAND="cat /etc/services"
DESCRIPTION="Contenu du fichier /etc/services définissant la référence des ports TCP et UDP"
OUTFILE=$BASEDIR/services.txt
do_test
COMMAND="iptables -L -v"
DESCRIPTION="Règles de filtrage iptables"
OUTFILE=$BASEDIR/iptables.rules.txt
do_test
COMMAND="iptables -L -v -t nat"
DESCRIPTION="Règles de filtrage iptables"
OUTFILE=$BASEDIR/iptables.rules.nat.txt
do_test
COMMAND="iptables -L -v -t mangle"
DESCRIPTION="Règles de filtrage iptables"
OUTFILE=$BASEDIR/iptables.rules.mangle.txt
do_test
COMMAND="netstat -rn"
DESCRIPTION="Contenu de la table de routage"
OUTFILE=$BASEDIR/netstat.r.txt
do_test
COMMAND="rpcinfo -p"
DESCRIPTION="Liste des services RPC actifs"
OUTFILE=$BASEDIR/rpcinfo.txt
do_test
COMMAND="ifconfig -a"
DESCRIPTION="Liste et caracteristiques des interfaces réseau"
OUTFILE=$BASEDIR/ifconfig.txt
do_test
COMMAND="cat /etc/ftpusers"
DESCRIPTION="Contenu du fichier /etc/ftpusers définissant les restrictions FTP"
OUTFILE=$BASEDIR/ftpusers.txt
do_test
COMMAND="cat /etc/exports"
DESCRIPTION="Contenu du fichier /etc/exports définissant la configuration des exports NFS"
OUTFILE=$BASEDIR/exports.txt
do_test
COMMAND="cat /etc/hosts"
DESCRIPTION="Contenu du fichier /etc/hosts définissant les noms de machines"
OUTFILE=$BASEDIR/hosts.txt
do_test
COMMAND="cat /etc/hosts.equiv"
DESCRIPTION="Contenu du fichier /etc/hosts.equiv définissant la configuration des relations de confiance"
OUTFILE=$BASEDIR/hosts.equiv.txt
do_test
COMMAND="cat /etc/netgroup"
DESCRIPTION="Contenu du fichier /etc/netgroup contenant la base de définition des netgroup"
OUTFILE=$BASEDIR/netgroup.txt
do_test
COMMAND="cat /etc/nsswitch.conf "
DESCRIPTION="Contenu du fichier /etc/nsswitch.conf qui définit la configuration de la résolution de noms"
OUTFILE=$BASEDIR/nsswitch.conf.txt
do_test
COMMAND="cat /etc/hosts.allow"
DESCRIPTION="Contenu du fichier /etc/hosts.allow définissant la configuration des TCP Wrappers"
OUTFILE=$BASEDIR/hosts.allow.txt
do_test
COMMAND="cat /etc/hosts.deny"
DESCRIPTION="Contenu du fichier /etc/hosts.deny définissant la configuration des TCP Wrappers"
OUTFILE=$BASEDIR/hosts.deny.txt
do_test
COMMAND="ypwhich"
DESCRIPTION="Test de l'état d'activation de NIS"
OUTFILE=$BASEDIR/nis.txt
do_test
COMMAND="ypcat passwd"
DESCRIPTION="Contenu de la table NIS de mots de passe"
OUTFILE=$BASEDIR/nispasswd.txt
do_test
COMMAND="ypcat hosts"
DESCRIPTION="Contenu de la table NIS des noms de machine"
OUTFILE=$BASEDIR/nishosts.txt
do_test
COMMAND="ypcat group"
DESCRIPTION="Contenu de la table NIS des groupes"
OUTFILE=$BASEDIR/nisgroup.txt
do_test
COMMAND="find -L /etc/samba ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de samba"
OUTFILE=$BASEDIR/samba.txt
do_test
COMMAND="find -L /proc/sys/net/ipv4 ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Paramètres de configuration de la pile IP"
OUTFILE=$BASEDIR/ipv4.param.txt
do_test
COMMAND="find /home /root -name .netrc -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers individuels de configuration FTP .netrc"
OUTFILE=$BASEDIR/netrc.txt
do_test
### Ressources
COMMAND="top -b -n 1"
DESCRIPTION="Charge du serveur"
OUTFILE=$BASEDIR/top.txt
do_test
COMMAND="df -h"
DESCRIPTION="Utilisation de l'espace disque"
OUTFILE=$BASEDIR/df.txt
do_test
COMMAND="cat /etc/fstab"
DESCRIPTION="Contenu du fichier /etc/fstab définissant les montages de systèmes de fichiers"
OUTFILE=$BASEDIR/fstab.txt
do_test
COMMAND="mount"
DESCRIPTION="Liste des systèmes de fichiers montés"
OUTFILE=$BASEDIR/mount.txt
do_test
COMMAND="showmount -e"
DESCRIPTION="Liste des répertoires partagés par le service NFS"
OUTFILE=$BASEDIR/showmount.txt
do_test
### Services et processus
COMMAND="find -L /etc/xinetd.d ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration des services réseaux xinetd"
OUTFILE=$BASEDIR/xinetd.d.files.txt
do_test
COMMAND="netstat -i"
DESCRIPTION="Liste et caractéristique des interfaces réseau"
OUTFILE=$BASEDIR/netstat.i.txt
do_test
COMMAND="netstat -anp"
DESCRIPTION="Liste des connexions réseau actives"
OUTFILE=$BASEDIR/netstat.a.txt
do_test
COMMAND="find /etc /usr/local/etc ( -name sshd_config -o -name ssh2d_config ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de SSH"
OUTFILE=$BASEDIR/ssh.txt
do_test
COMMAND="ps -eF"
DESCRIPTION="Liste des processus tournant sur le système"
OUTFILE=$BASEDIR/ps.txt
do_test
COMMAND="find /etc ( -name sendmail.cf -o -name aliases ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de Sendmail"
OUTFILE=$BASEDIR/sendmail.txt
do_test
### Système de fichiers
COMMAND="cat /root/anaconda-ks.cfg"
DESCRIPTION="Configuration du déploiement automatique par Kickstart"
OUTFILE=$BASEDIR/anaconda-ks.cfg.txt
do_test
COMMAND="find -L /etc/security ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu du répertoire de sécurité"
OUTFILE=$BASEDIR/etc.security.txt
do_test
COMMAND="find /dev -exec ls -ailL {} ;"
DESCRIPTION="Droits d'accès sur fichiers devices"
OUTFILE=$BASEDIR/dev.perm.txt
do_test
COMMAND="find -H / -maxdepth 30 -mount -ls"
DESCRIPTION="Liste des fichiers présents sur le disque"
OUTFILE=$BASEDIR/ls.all.txt
do_test
COMMAND="$FINDALL -type d -perm -002 -exec ls -adilL {} ;"
DESCRIPTION="Liste des répertoires accessibles en écriture à tous les utilisateurs"
OUTFILE=$BASEDIR/wwd.txt
do_test
COMMAND="$FINDALL -type f -perm -002 -exec ls -ailL {} ;"
DESCRIPTION="Liste des fichiers accessibles en écriture à tous les utilisateurs"
OUTFILE=$BASEDIR/wwf.txt
do_test
### Système d'exploitation
COMMAND="sestatus"
DESCRIPTION="Etat de SELinux"
OUTFILE=$BASEDIR/sestatus.txt
do_test
COMMAND="lsmod"
DESCRIPTION="Liste des modules chargés "
OUTFILE=$BASEDIR/lsmod.txt
do_test
COMMAND="set"
DESCRIPTION="Contenu des variables d'environnement"
OUTFILE=$BASEDIR/set.txt
do_test
COMMAND="find -L /etc/rc?.d -type l -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers d'initialisation du système"
OUTFILE=$BASEDIR/rc.txt
do_test
COMMAND="find -L /etc/init ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration définissant la configuration de l'initialisation du système"
OUTFILE=$BASEDIR/init.txt
do_test
### Tâches planifiées
COMMAND="cat /etc/cron.allow"
DESCRIPTION="Contenu du fichier /etc/cron.allow définissant les droits d'accès à cron"
OUTFILE=$BASEDIR/cron.allow.txt
do_test
COMMAND="cat /etc/cron.deny"
DESCRIPTION="Contenu du fichier /etc/cron.deny définissant les droits d'accès à cron "
OUTFILE=$BASEDIR/cron.deny.txt
do_test
COMMAND="cat /etc/anacrontab"
DESCRIPTION="Contenu du fichier anacrontab"
OUTFILE=$BASEDIR/anacrontab.txt
do_test
COMMAND="find -L /var/spool/cron ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de l'outil cron"
OUTFILE=$BASEDIR/cron.txt
do_test
COMMAND="find -L /etc/cron.* ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de l'outil cron.d"
OUTFILE=$BASEDIR/cron.d.txt
do_test
COMMAND="find -L /var/spool/cron /var/ ( -type l -o -type f ) -exec ls -ailL {} ;"
DESCRIPTION="Droits d'accès sur les fichiers de cron"
OUTFILE=$BASEDIR/cron.perm.txt
do_test
COMMAND="find -L /var/spool/anacron ( -type l -o -type f ) -exec echo $SEPARATOR {} ; -exec ls -ailL {} ; -exec cat {} ;"
DESCRIPTION="Liste et contenu des fichiers de configuration de l'outil anacron"
OUTFILE=$BASEDIR/anacron.txt
do_test
COMMAND="date"
DESCRIPTION="Date de fin d'exécution"
OUTFILE=$BASEDIR/resultat.txt
do_test
echo "Fin de la récupération de la configuration.\n"
echo "Création de l'archive..."
tar zcf $BASEDIR.tar.gz $BASEDIR
rm -rf $BASEDIR
echo "Archive créée dans /tmp"
echo "Veuillez donner l'archive à Intrinsec, puis vous pourrez la supprimer."