Audit linux
De BlaxWiki
Révision datée du 17 janvier 2017 à 10:05 par 127.0.0.1 (discussion)
Ce script sert à récuperer divers information qui peuvent etre nécessaire pour un audit
Script 1[modifier]
#!/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."
Script 2[modifier]
- Ce script est lié à un fichier .csv et s utilise comme suit : ./audit.sh -i rhel-centos.csv -o $(hostname)-$(date "+%Y%m%d")
audit.sh[modifier]
#!/bin/sh
# Uncomment to enable debugging from the start.
# Consider using the '-d' option instead.
#set -x
# Default mode: non-verbose
MODE="n"
# Default shell for command execution: sh
SHELL="/bin/sh"
# Default commands file: cmd-extract.csv
FILE="cmd-extract.csv"
# Base directory for extracted configuration.
BASE_DIRECTORY="audit"
# Parses command line options
while getopts “hvpdi:o:” OPTION;
do
case $OPTION in
d) # debug mode
set -x
;;
h) # shows usage
echo "USAGE: $0 [-i commands file] [-o output directory] [-v] [-d] [-h]"
echo " -i Specify commands file"
echo " -o Specify the output directory"
echo " -v Verbose mode"
echo " -p Pure mode"
echo " -d Debug mode"
echo " -h Display this message"
echo "Default commands file name: ${FILE}"
echo "Default output directory: ${BASE_DIRECTORY}"
exit 1
;;
i) # custom commands file
FILE="$OPTARG"
;;
o) # custom output directory
BASE_DIRECTORY="$OPTARG"
;;
v) # verbose mode
MODE="v"
;;
p) # silent mode
MODE="p"
;;
\?) # handles errors
echo "Invalid option '-$OPTARG'" >&2
exit 1
;;
:) # handles errors
echo "Option '-$OPTARG' requires an argument" >&2
exit 1
;;
esac
done
# Check whether the commands file exists
if [ ! -e "$FILE" ];
then
echo "Commands file '$FILE' does not exist"
exit 1
fi
# Check wheter we're running as root (mandatory)
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Creates the base folder
if [ ! -d "$BASE_DIRECTORY" ];
then
mkdir "$BASE_DIRECTORY"
else
echo "Base directory '$BASE_DIRECTORY' already exists, aborting."
exit 1
fi
# Count lines in the input command file
NUMBER_OF_COMMANDS=`cat $FILE | wc -l`
# Initialize the line counter to 0 (will be set to 1 when entering the first
# extraction loop)
i=0
# Extract and execute commands from the input CSV file
while [ $i -lt $NUMBER_OF_COMMANDS ];
do
# Cheap 'seq' reimplementation needed on AIX/HP-UX/etc.
i=$(($i + 1))
# Reads one line from the input file
LINE=`head -n $i "${FILE}" | tail -n 1`
# Check if the line starts with a sharp (#) or is empty
if echo "$LINE" | egrep -v "^\s*(#|$)" 2>&1 > /dev/null;
then
# Splits the line into tokens
ID=`echo "${LINE}" | cut -d ',' -f 1`
THEME=`echo "${LINE}" | cut -d ',' -f 2`
CMD=`echo "${LINE}" | cut -d ',' -f 3`
OPTS=`echo "${LINE}" | cut -d ',' -f 4`
DESC=`echo "${LINE}" | cut -d ',' -f 5`
else
# Is it an empty line?
if [ `echo "${LINE}" | egrep "^\s*$"` ];
then
# If so, don't do anything
continue
else
# If not, just display it
echo "********************************************************************************"
echo "$LINE"
echo "********************************************************************************"
continue
fi
fi
# Create the base folder for the current theme
THEME_DIRECTORY="${BASE_DIRECTORY}/${THEME}"
if [ ! -d "${THEME_DIRECTORY}" ];
then
mkdir "${THEME_DIRECTORY}"
fi
# Command execution
if [ "${MODE}" = "v" ];
then
echo -n "[CMD ${ID}] '${DESC}' - status: "
fi
# Export the command to the output file
OUTPUT_FILE="${THEME_DIRECTORY}/${ID}.txt"
if [ -e "${OUTPUT_FILE}" ];
then
echo "[${THEME} > ${ID}] ERROR - duplicated ID!"
exit 1
fi
# In pure mode we only save the output of the command
if [ "${MODE}" != "p" ];
then
# Save the command to the output file
echo "Running: ${CMD}" > "${OUTPUT_FILE}"
echo "Result:" >> "${OUTPUT_FILE}"
fi
# Replaces #OUTPUT_FOLDER# from the command with the correct output folder
CMD=`echo "${CMD}" | sed -e "s|#OUTPUT_FOLDER#|${THEME_DIRECTORY}|"`
# Export the result of the command to the output file
COMMAND_OUTPUT=`echo "${CMD}" | ("${SHELL}" >> "${OUTPUT_FILE}") 2>&1`
if [ $? -ne 0 ];
then
ERROR_FILE="${BASE_DIRECTORY}/errors.txt"
ERROR="[${THEME} > ${ID}] ERROR '${CMD}'"
echo "${ERROR}"
echo "${ERROR}" >> "${ERROR_FILE}"
echo "${COMMAND_OUTPUT}" >> "${ERROR_FILE}"
echo "" >> "${ERROR_FILE}"
if [ $MODE = "v" ];
then
echo "${COMMAND_OUTPUT}"
fi
else
echo "[${THEME} > ${ID}] SUCCESS"
fi
done
# EOF
rhel-centos.csv[modifier]
# Commands database generated on the jeudi 22 décembre 2016, 13:32:54 (UTC+0100) for the redhat distribution
# Users settings
etc_passwd,users,cat /etc/passwd,diff,liste des utilisateurs
etc_group,users,cat /etc/group,diff,liste des groupes
homes,users,ls -al /home,none,liste des repertoires home
bashrcs,users,for i in /home/*; do echo $i; cat $i/.bashrc; done,none,configuration bash de l'utilisateur
profiles,users,for i in /home/*; do echo $i; cat $i/.profile; done,none,fichier de profile utilisateur
bash_histories,users,for i in /home/*; do echo $i; cat $i/.bash_history; done,none,historique des commandes saisies par l'utilisateur
rhosts,users,for i in /home/*; do echo $i; cat $i/.rhosts; done,none,machines distantes accessibles par l'utilisateur
dot_sshs,users,for i in /home/*; do echo $i; ls -l $i/.ssh/; done,none,fichiers SSH de l'utilisateur
etc_profile,users,cat /etc/profile,diff,fichier de cfg profile utilisateur
bashrc,users,cat /etc/bashrc,diff,fichier de cfg profile utilisateur
profile_d,users,tar -chzvf #OUTPUT_FOLDER#/profild.tgz /etc/profile.d,none,fichier de cfg profile utilisateur
who,users,who,none,affiche les sessions utilisateurs en cours
id,users,id,diff,affiche les droits de l'utilisateurs en cours
users,users,users,none,affiche les noms des utilisateurs ayant ouvert une session
crontabs,users,for i in `awk -F: '{print $1}' /etc/passwd`; do echo $i " crontab"; crontab -u $i -l; done,none,recupere les contrabs des utilisateurs
securetty_txt,users,cat /etc/securetty,diff,list of terminals on which root is allowed to login
useradd_conf,users,cat /etc/default/useradd,diff,Default values for account creation
# Root account settings
bashrc,root,cat /root/.bashrc,diff,configuration bash de l'utilisateur
profile,root,cat /root/.profile,diff,fichier de profile utilisateur
ssh,root,ls -alR /root/.ssh/,none,fichier SSH pour l'utilisateur
path,root,echo $PATH,diff,PATH de l'utilisateur en cours
env,root,env,diff,liste des variables d'envrionnement
# Password settings
login_defs,passwd,cat /etc/login.defs,diff,politique de complexite des mdp
etc_pam_d,passwd,tar -chzvf #OUTPUT_FOLDER#/pamd.tgz /etc/pam.d,none,configuration detaillee des pam
pam_conf,passwd,cat /etc/pam.conf,diff,configuration globale des pam
etc_shadow,passwd,cat /etc/shadow,none,liste des password user
etc_gshadow,passwd,cat /etc/gshadow,none,liste des password group
# System settings
date,os-info,date,none,affiche la date courante du systeme
timezone,os-info,cat /etc/timezone,diff,affiche la zone de temps
uname_a,os-info,uname -a,diff,affiche les informations sur le noyau
redhat_release,os-info,cat /etc/redhat-release,diff,affiche la version du systeme
proc_cpuinfo,os-info,cat /proc/cpuinfo,none,information processeur
proc_meminfo,os-info,cat /proc/meminfo,none,information sur la memoire vive
rsrc_usage,os-info,top -n 1 -b,none,usage des ressources systeme
runlevel,os-info,runlevel,diff,runlevel
lsmod,os-info,lsmod,diff,liste des modules charges
ls_sysconf,os-info,ls -al /etc/sysconfig/,none,fichiers de configuration de l'OS
sysctl_conf,os-info,cat /etc/sysctl.conf,diff,durcissement du systeme
sysctl_all,os-info,sysctl -a,none,affiche les parametres noyau actifs
hostname,os-info,hostname,diff,affiche le nom de la machine
proc_version,os-info,cat /proc/version,diff,affiche la version du noyau et distrib
etc_motd,os-info,cat /etc/motd,none,affiche le message d'accueil du systeme
etc_issue,os-info,cat /etc/issue,none,affiche les informations lors d'une connexion en console
etc_issue_net,os-info,cat /etc/issue.net,none,affiche les informations lors d'une connexion en console
acl_support,os-info,zcat /proc/config.gz | grep "ACL",diff,indique si le kernel prend en charge les ACL
modprobe_c,os-info,/sbin/modprobe -c,none,Afficher la configuration courante des modules chargeables
authconfig_test,os-info,/usr/sbin/authconfig --test,diff,affiche des parametres lies a l auth
# Updates/patches settings
yum_update,updates,yum update,none,verification des maj disponibles
yum_repos,updates,tar -chzvf #OUTPUT_FOLDER#/yum-repo.tgz /etc/yum.repos.d,none,depot de maj
yum_conf,updates,cat /etc/yum.conf,diff,configuration de yum
yum_check,updates,yum check-update,diff,recherche des mises a jour disponibles
rpm_keys,updates,rpm -qi gpg-pubkey,diff,affiche les cle utilisee par rpm
rpm_integrity,updates,rpm -qVa | awk '$2 != "c" { print bash }' | awk '{print} END {if (NR == 0) print "none"}',diff,verification de l integrite des packages avec rpm
# Boot settings
grub_cfg,boot,cat /boot/grub/grub.cfg,diff,parametre de grub
grub_conf,boot,cat /etc/grub.conf,diff,parametre de grub
grub_menu,boot,cat /boot/grub/menu.lst,diff,liste des noyaux a booter
ls_boot,boot,ls -al /boot/,none,fichier du repertoire boot
lilo_conf,boot,cat /etc/lilo.conf,diff,parametre de lilo
etc_inittab,boot,cat /etc/inittab,diff,liste des services a demarrer au boot
# Network settings
etc_hosts,networking,cat /etc/hosts,diff,liste des machines sur le reseau
resolv_conf,networking,cat /etc/resolv.conf,diff,serveur DNS en utilisation
ifconfig_a,networking,ifconfig -a,diff,liste des interfaces reseaux
route6,networking,route -A inet6 -n,diff,route IPv6 de la machine
route,networking,route -n,diff,route appliquees sur la machine
nsswitch,networking,cat /etc/nsswitch.conf,diff,ordre de resolution des noms
netstat_an,networking,netstat -an,none,liste les connexions reseaux ouvertes
inetd_conf,networking,cat /etc/inetd.conf,diff,superdemon reseau
xinetd_conf,networking,cat /etc/xinetd.conf,diff,superdemon reseau
xinetd_d,networking,tar -chzvf #OUTPUT_FOLDER#/xinetd.tgz /etc/xinetd.d,none,superdemon reseau
iptables_conf,networking,iptables-save -c,none,firewall local IPv4
ip6tables_conf,networking,ip6tables-save -c,none,firewall local IPv6
net_ifaces,networking,tar -chzvf #OUTPUT_FOLDER#/networking.tgz /etc/sysconfig/networking,none,configuration reseau
net_network,networking,cat /etc/sysconfig/network,none,configuration reseau
net_scripts,networking,tar -chzvf #OUTPUT_FOLDER#/network-scripts.tgz /etc/sysconfig/network-scripts,none,configuration reseau
hosts_allow,networking,cat /etc/hosts.allow,diff,ACL sur le reseau
hosts_deny,networking,cat /etc/hosts.deny,diff,ACL sur le reseau
ip_show,networking,ip addr show,diff,affiche les interfaces reseaux
exports_nfs,networking,cat /etc/exports,diff,exports NFS
iwconfig,networking,/sbin/iwconfig,diff,show wireless networks
netstat_laptuen,networking,netstat -laputen,none,connexions en ecoute
# Applications settings
lsof,applications,lsof,none,liste les fichiers ouverts
rpm_qa,applications,rpm -qa,diff,liste les applications installees
ps_waux,applications,ps -waux,none,liste les applications en fonctionnement
netstat_tunap,applications,netstat -tunap,none,lien entre service et port en ecoute
ls_opt,applications,ls -Ral /opt/,none,liste des applications installes manuellement
crontab,applications,cat /etc/crontab,diff,tache recurrente
crontabs,applications,tar -chzvf #OUTPUT_FOLDER#/cron.tgz /etc/cron*,none,tache recurrente
ls_etc,applications,ls -Ral /etc/,none,liste des dossiers de configuration des applications
selinux,applications,tar -chzvf #OUTPUT_FOLDER#/selinux.tgz /etc/selinux,none,ACL sur les applications
chkconfig_list,applications,chkconfig --list,diff,liste les applications aux demarrages
ls_crontabs,applications,ls -alR /var/spool/cron/,none,affiche les taches planifiees
crontab_l,applications,crontab -l,diff,affiche les taches planifiees
cat_crontabs,applications,for i in /var/spool/cron/*; do cat $i; done,none,affiche les taches planifiees
rc_d,applications,tar -chzvf #OUTPUT_FOLDER#/all-initd.tgz /etc/rc*.d,none,liste des services alu demarrage
etc_services,applications,cat /etc/services,diff,liste les services et numeros de port
ls_tmp,applications,ls -Ral /tmp,none,liste les fichiers dans tmp
ls_dev,applications,ls -Ral /dev,none,liste les fichiers dans dev
ls_x11,applications,ls -Ral /usr/lpp/X11,none,liste les fichiers de l'environnement graphique
ls_usr_bin,applications,ls -Ral /usr/bin,none,liste des binaires
ls_usr_sbin,applications,ls -Ral /usr/sbin,none,liste des binaires systemes
ls_bin,applications,ls -Ral /bin,none,liste des binaires
ls_sbin,applications,ls -Ral /sbin,none,liste des binaires systemes
# Logs settings
syslog_conf,log,cat /etc/syslog.conf,diff,configuration de syslog*
logrotate_conf,log,cat /etc/logrotate.conf,diff,configuration de logrotate
logrotate_d,log,tar -chzvf #OUTPUT_FOLDER#/logrotate.tgz /etc/logrotate.d,none,configuration de logrotate
auditd_conf,log,cat /etc/audit/auditd.conf,diff,applications danalyse de configuration
auditd_rules,log,cat /etc/audit/audit.rules,diff,applications danalyse de configuration
ls_log,log,ls -Rla /var/log/*,none,liste des fichiers de logs
rsyslog_conf,log,cat /etc/rsyslog.conf,diff,configuration de syslog
rsyslog_d,log,tar -hczvf #OUTPUT_FOLDER#/rsyslogd.tgz /etc/rsyslog.d,none,configuration de syslog
auth_logs,log,cat /var/log/auth.log,none,affiche les logs d acces
syslog,log,cat /var/log/syslog,none,affiche les logs systeme
messages,log,cat /var/log/messages,none,affiche les logs systeme
secure,log,cat /var/log/secure,none,affiche les logs systeme
system,log,cat /var/log/system.log,none,affiche les logs systeme
authpriv,log,cat /var/log/authpriv,none,affiche les logs de connexions utilisateurs
last,log,last,none,precedentes connexions
# SSH settings
server_conf,ssh,cat /etc/ssh/sshd_config,diff,configuration du demon SSH
client_conf,ssh,cat /etc/ssh/ssh_config,diff,configuration du client SSH
ls_rights,ssh,ls -Rla /etc/ssh/*,none,droit sur les fichiers SSH
server_keys,ssh,/usr/bin/find /etc/ssh/ssh_host*_key -exec /bin/ls -l {} \; -exec /usr/bin/ssh-keygen -lf {} \;,none,Taille des clefs SSH server
# Security settings
sudoers,security,cat /etc/sudoers,diff,appropriation des droits admin
etc_security,security,tar -chzvf #OUTPUT_FOLDER#/security.tgz /etc/security,none,limitation sur l'usage du systeme
# Filesystem settings
mount,filesystem,mount,diff,partition monte
df_h,filesystem,df -h,none,usage des partitions en volume
fstab,filesystem,cat /etc/fstab,diff,partition monte au boot
writable_files,filesystem,find / -type f \( ! -wholename "/proc/*" ! -wholename "/sys/*" \) -perm +0002 -exec ls -lg {} \;,none,fichier inscriptible par tous
writable_folders,filesystem,find / -type d \( ! -wholename "/proc/*" ! -wholename "/sys/*" \) -perm +0002 -exec ls -ldg {} \;,none,dossier inscriptible par tous
setuid_files,filesystem,find / -type f \( ! -wholename "/proc/*" ! -wholename "/sys/*" \) -perm +6000 -exec ls -lg {} \;,none,fichier SetUID/SetGID
fdisk_l,filesystem,fdisk -l,none,info de partitionnement
lvdisplay,filesystem,lvdisplay,none,affichage des volumes LVM
ls_mapper,filesystem,for i in /dev/mapper/*; do cryptsetup status $i; done,diff,affiche le chiffrement des partitions
mtab,filesystem,cat /etc/mtab,diff,partition monte et active
lost_found,filesystem,ls -l /lost+found,none,affiche les fichiers recuperes suite a un incident du systeme
noowner_files,filesystem,find / \( ! -wholename "/proc/*" ! -wholename "/sys/*" \) -nouser -o -nogroup -exec ls -al {} \;,none,fichiers sans proprietaire
rootuid_files,filesystem,find / \( ! -wholename "/proc/*" ! -wholename "/sys/*" \) -user root -perm -4000 -exec ls -al {} \;,none,fichier setuid root
rootguid_files,filesystem,find / \( ! -wholename "/proc/*" ! -wholename "/sys/*" \) -user root -perm -2000 -exec ls -al {} \;,none,fichier setguid root
# NTP settings
client_conf,ntp,cat /etc/ntp.conf,diff,affiche les parametres ntp
server_conf,ntp,cat /etc/ntpd.conf,diff,affiche les parametres ntpd
ntpdate,ntp,cat /etc/default/ntpdate,diff,affiche les parametres ntp
# Postfix settings
postconf,postfix,postconf,diff,affiche la configuration de Postfix
# Dovecot settings
# SpamAssassin settings
# Amavis settings
# Apache settings
conf,apache,tar -chzvf #OUTPUT_FOLDER#/httpd.conf.tgz /etc/httpd/,none,configuration apache
infos,apache,apachectl -V,diff,informations sur le serveur
conf_check,apache,apachectl -S,diff,liste et verifie la configuration
fullstatus,apache,apachectl fullstatus,diff,etat et rapport complet du serveur
# nginx settings
# vsftpd settings
# MySQL settings
conf,mysql,cat /etc/my.cnf,diff,configuration MySQL (my.cnf uniquement)
# BIND settings
conf,dns,cat /etc/named.conf,diff,configuration DNS
# Redis settings
# Varnish settings
# OpenVPN settings
# Puppet settings
# drdb settings
# heartbeat settings
# memcache settings
# OpenVZ settings
# PHP settings
# LDAP client settings
conf,ldap,cat /etc/openldap/ldap.conf,diff,configuration client LDAP
# NRPE
conf,nrpe,tar -chzvf #OUTPUT_FOLDER#/nrpe.conf.tgz /etc/nagios/,none,configuration NRPE