Différences entre les versions de « Audit linux »

De BlaxWiki
Aller à la navigationAller à la recherche
(Page créée avec « Ce script sert à récuperer divers information qui peuvent etre nécessaire pour un audit <pre> #!/bin/sh # Script de récupération de configuration # Systèmes d'expl... »)
 
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 1 : Ligne 1 :
Ce script sert à récuperer divers information qui peuvent etre nécessaire pour un audit
Ce script sert à récuperer divers information qui peuvent etre nécessaire pour un audit


==== Script 1 ====
<pre>
<pre>
#!/bin/sh
#!/bin/sh
Ligne 14 : Ligne 15 :
#
#


echo "Script d'audit de configuration Linux, par Intrinsec"
echo "Script d'audit de configuration Linux"


STARTEND="=============================================================="
STARTEND="=============================================================="
Ligne 598 : Ligne 599 :
echo "Veuillez donner l'archive à Intrinsec, puis vous pourrez la supprimer."
echo "Veuillez donner l'archive à Intrinsec, puis vous pourrez la supprimer."


</pre>
==== Script 2 ====
* 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 =====
<pre>
#!/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
</pre>
===== rhel-centos.csv =====
<pre>
# 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
</pre>
</pre>


[[Catégorie:Script]]
[[Catégorie:Script]]

Version actuelle datée du 17 janvier 2017 à 10:05

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