Bladeren bron

Script for full audit HW & SW for any linux device

pmacko 2 maanden geleden
bovenliggende
commit
6b8cb9ffe9
1 gewijzigde bestanden met toevoegingen van 266 en 0 verwijderingen
  1. 266 0
      audit.sh

+ 266 - 0
audit.sh

@@ -0,0 +1,266 @@
+#!/bin/bash
+#########################################################################
+#                HW and SW inventory script for DEB/RHEL                #
+#                           Created by PM-DoIT                          #
+#                                   v 0.2                               #
+#########################################################################
+
+#----------------------------- VARIABLES -------------------------------#
+DMI=$(whereis dmidecode | awk '{print $2}')
+LSH=$(whereis lshw | awk '{print $2}')
+PCI=$(whereis lspci | awk '{print $2}')
+RPM=$(whereis rpm | awk '{print $2}')
+DPKG=$(whereis dpkg | awk '{print $2}')
+
+#------------------------------- TEMP ----------------------------------#
+LOG=/tmp/audit.log
+REP=/tmp/audit.rep
+SW=/tmp/audit.sw
+test -f $LOG && rm -rf $LOG 
+test -f $REP && rm -rf $REP
+test -f $SW && rm -rf $SW
+
+#------------------------------- AUDIT ---------------------------------#
+echo "=================================================="
+echo -e "         \e[1;32m*** AUDIT inventory by DoIT ***\e[0m"
+echo "=================================================="
+system(){
+echo -e '\E[33m'"HOSTNAME:" `hostname -s`
+echo "OS $(cat /etc/os-release | egrep -w NAME | sed 's/="/: /g' | sed 's/"//g')"
+echo "$(cat /etc/os-release | egrep -w VERSION | sed 's/="/: /g' | sed 's/"//g')"
+echo "KERNEL: $(uname -r)"
+echo "IP: $(hostname -I | awk '{print $1}')"
+echo -e "UPTIME: $(uptime -p)\e[0m"
+echo "=================================================="
+echo -e "               \e[1;36m*** DNS AUDIT ***\e[0m"
+echo "=================================================="
+cat /etc/resolv.conf | awk '{print $2}' | sort | uniq
+echo "=================================================="
+}
+hardware(){
+echo -e "               \e[1;36m*** CPU AUDIT ***\e[0m"
+echo "=================================================="
+echo "CORES: $(cat /proc/cpuinfo | grep processor | wc -l)"
+echo "LOAD:$(uptime | grep -o 'average.*' | cut -f2- -d:)"
+if [ -z $LSH ]; then
+  echo -e "\e[1;31m! lshw not installed\e[0m"
+else
+  $LSH -c cpu | egrep "product:|size:" | uniq | sed 's/^[ \t]*//'
+fi
+echo "=================================================="
+echo -e "               \e[1;36m*** RAM AUDIT ***\e[0m"
+echo "=================================================="
+if [ -z $DMI ]; then
+  echo -e "\e[1;31m! dmidecode not installed\e[0m"
+else
+  $DMI -t memory | egrep "Manufacturer|Part|Size|Speed" | \
+  egrep -v "Unknown|Not Installed|No Module Installed|Not Specified|Maximum|Supported|Connection" | \
+  sed 's/^[ \t]*//'
+fi
+echo -e "\e[1;35m- Memory Usage\e[0m"
+echo "--------------------------------------------------"
+free -h | grep -v + | awk '{print $1,$2,$3,$4}' | column -t
+echo "=================================================="
+echo -e "               \e[1;36m*** NET AUDIT ***\e[0m"
+echo "=================================================="
+if [ -z $LSH ]; then
+  echo -e "\e[1;31m! lshw not installed\e[0m"
+else
+  $LSH -c net | egrep "product:|size:"  | sed 's/^[ \t]*//'
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- Network interfaces\e[0m"
+echo "--------------------------------------------------"
+ip a | egrep -v "lo:|127.0" | egrep -w "mtu|inet" | awk '{print $2}' | sed 's/^[ \t]*//'
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- Network routes\e[0m"
+echo "--------------------------------------------------"
+route | sed 's/  */ /g;/^Kernel/d;/^Destination/d' | column -t
+echo "=================================================="
+echo -e "               \e[1;36m*** HDD AUDIT ***\e[0m"
+echo "=================================================="
+if [ -z $LSH ]; then
+  echo -e "\e[1;31m! lshw not installed\e[0m"
+else
+  $LSH -short -C disk
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- Locations\e[0m"
+echo "--------------------------------------------------"
+lsblk -o "NAME,SIZE,FSTYPE,MOUNTPOINT"
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- Partitions\e[0m"
+echo "--------------------------------------------------"
+df -l -P -T -B GB | grep -v tmp
+echo "=================================================="
+echo -e "              \e[1;36m*** BOARD INFO ***\e[0m"
+echo "=================================================="
+echo -e "\e[1;35m- MODEL\e[0m"
+echo "--------------------------------------------------"
+if [ -z $DMI ]; then
+	echo -e "\e[1;31m! [dmidecode] not installed\e[0m"
+else
+	CDM=$($DMI -t baseboard | egrep "Manufacturer|Product" | sed 's/^[ \t]*//' | head -1 | awk '{print $1}')
+	if [ ! -z $CDM ]; then
+		$DMI -t baseboard | egrep "Manufacturer|Product" | sed 's/^[ \t]*//'
+	else
+		echo -e "\e[1;37m- NOT present\e[0m"
+	fi
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- ONBOARD DEVICE\e[0m"
+echo "--------------------------------------------------"
+if [ -z $DMI ]; then
+	echo -e "\e[1;31m! dmidecode not installed\e[0m"
+else
+	CDM=$($DMI -t baseboard | grep Reference | sed 's/^[ \t]*//' | head -1 | awk '{print $1}')
+	if [ ! -z $CDM ]; then
+	$DMI -t baseboard | grep Reference | sed 's/^[ \t]*//'
+	else
+		echo -e "\e[1;37m- NOT present\e[0m"
+	fi
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- PCI DEVICE\e[0m"
+echo "--------------------------------------------------"
+if [ -z $PCI ];
+then
+  echo -e "\e[1;31m! lspci not installed\e[0m"
+else
+  $PCI -vm | grep Device: | grep -v 0[0-9] | grep -v "Device "
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- USB DEVICE\e[0m"
+echo "--------------------------------------------------"
+lsusb | cut -d" " -f7- | sort
+echo "" 
+usb-devices | grep Product | sort
+}
+authentification(){
+echo "=================================================="
+echo -e "             \e[1;36m*** AUTHENTIFICATION ***\e[0m"
+echo "=================================================="
+echo -e "\e[1;35m- SSSD Configuration\e[0m"
+echo "--------------------------------------------------"
+if [ -f /etc/sssd/sssd.conf ]; then
+	egrep -i "id_provider|auth_provider|ldap_uri|krb5_server" /etc/sssd/sssd.conf
+else
+	echo -e "\e[1;37m- NOT present\e[0m"
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- KERBEROS Configuration\e[0m"
+echo "--------------------------------------------------"
+if [ -f /etc/krb5.conf ]; then
+	grep -E "default_realm|kdc" /etc/krb5.conf
+else
+	echo -e "\e[1;37m- NOT present\e[0m"
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- LDAP Configuration\e[0m"
+echo "--------------------------------------------------"
+if [ -f /etc/sssd/sssd.conf ]; then
+	egrep -i "id_provider|auth_provider|ldap_uri" /etc/sssd/sssd.conf
+else
+	echo -e "\e[1;37m- NOT present\e[0m"
+fi
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- NSSWITCH (identity source)\e[0m"
+echo "--------------------------------------------------"
+grep -E "passwd|group|shadow" /etc/nsswitch.conf 2>/dev/null
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- SSH (effective configuration)\e[0m"
+echo "--------------------------------------------------"
+sshd -T 2>/dev/null | egrep -i "pam|kbd|permitrootlogin"
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- PASSWORD POLICY\e[0m"
+echo "--------------------------------------------------"
+cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE" | grep -v "^#"
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- CHECK (authorized keys)\e[0m"
+echo "--------------------------------------------------"
+AK1=$(find /home -name authorized keys 2>/dev/null | wc -l)
+AK2=$(find /root -name authorized keys 2>/dev/null | wc -l)
+if [ "$AK1" -eq "1" ] || [ "$AK2" -eq "1" ]; then
+	find /home -name authorized keys 2>/dev/null
+	find /root -name authorized keys 2>/dev/null
+else
+	echo -e "\e[1;37m- NOT present\e[0m"
+fi
+}
+users(){
+echo "=================================================="
+echo -e "              \e[1;36m*** USERS AUDIT ***\e[0m"
+echo "=================================================="
+echo -e "\e[1;35m- USERS LDAP\e[0m"
+echo "--------------------------------------------------"
+getent passwd |awk -F : '$3 >= 1000 && $3 < 65534' | sort
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- USERS all\e[0m"
+echo "--------------------------------------------------"
+awk -F: '($3<1000){print $1}' /etc/passwd | sort | grep -v "^_"
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- USERS (with bash)\e[0m"
+echo "--------------------------------------------------"
+egrep 'bash' /etc/passwd | cut -d: -f1 | sort
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- USERS (with home folder)\e[0m"
+echo "--------------------------------------------------"
+grep '/home/' /etc/passwd | cut -d: -f1 | sort
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- USERS (with password)\e[0m"
+echo "--------------------------------------------------"
+awk -F: '$2 != "*" && $2 !~ /^!/ {print $1}' /etc/shadow | sort
+}
+cronusr(){
+echo "=================================================="
+echo -e "              \e[1;36m*** CRON AUDIT ***\e[0m"
+echo "=================================================="
+awk '$1 ~ /([0-9]+|\*)/{print $0}' /etc/crontab | sed 's/&&/AND/g;s/||/OR/g' | nl | sed 's/^[ \t]*//'
+echo "--------------------------------------------------"
+echo -e "\e[1;35m- CRONTAB users\e[0m"
+echo "--------------------------------------------------"
+for i in $(awk -F: '{print $1}' /etc/passwd | sort | grep -v "^_"); do
+crontab -u $i -l | awk '$1 ~ /([0-9]+|\*)/{print $0}' | sed 's/&&/AND/g;s/||/OR/g' | nl
+done
+}
+software(){
+echo "=================================================="
+echo -e "              \e[1;36m*** SW AUDIT ***\e[0m"
+echo "=================================================="
+rm -rf $SW
+if [ -z $RPM ];
+then
+  echo -e "\e[1;31m! yum manager [RPM] not installed\e[0m"
+else
+  $RPM -qa | sort >> $SW
+  echo -e "\e[1;32m- Exporting SW[RPM] to => [$SW]\e[0m"
+fi
+if [ -z $DPKG ];
+then
+  echo -e "\e[1;31m! apt-get manager [DEB] not installed\e[0m"
+else
+  $DPKG -l | awk '{print $2}' | sort >> $SW
+  echo -e "\e[1;32m- Exporting SW[DEB] to => [$SW]\e[0m"
+fi
+echo "=================================================="
+echo -e "              \e[1;36m*** LOG AUDIT ***\e[0m"
+echo "=================================================="
+echo -e "\e[1;32m- Exporting LOGs to => [$LOG]\e[0m"
+echo "=================================================="
+find /var/log/ -type f | grep -Ev "(\.gz$|\.zip$|\.tar$|packages\/|scripts\/)" | sort > $LOG
+echo -e "              \e[1;36m*** FINAL REPORT ***\e[0m"
+echo "=================================================="
+echo -e "\e[1;32m- Exporting REPORT to => [$REP]\e[0m"
+echo "=================================================="
+}
+
+#----------------------------- CORE-CODE -------------------------------#
+Color_Off='\033[0m'
+clear
+echo -e "\e[1;32m***** Started analyzing host [`hostname -s`] *****\e[0m"
+system 
+hardware      
+authentification
+users                    
+cronusr
+software