audit.sh 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. #!/bin/bash
  2. #########################################################################
  3. # HW and SW inventory script for DEB/RHEL #
  4. # Created by PM-DoIT #
  5. # v 0.2 #
  6. #########################################################################
  7. #----------------------------- VARIABLES -------------------------------#
  8. DMI=$(whereis dmidecode | awk '{print $2}')
  9. LSH=$(whereis lshw | awk '{print $2}')
  10. PCI=$(whereis lspci | awk '{print $2}')
  11. RPM=$(whereis rpm | awk '{print $2}')
  12. DPKG=$(whereis dpkg | awk '{print $2}')
  13. #------------------------------- TEMP ----------------------------------#
  14. LOG=/tmp/audit.log
  15. REP=/tmp/audit.rep
  16. SW=/tmp/audit.sw
  17. test -f $LOG && rm -rf $LOG
  18. test -f $REP && rm -rf $REP
  19. test -f $SW && rm -rf $SW
  20. #------------------------------- AUDIT ---------------------------------#
  21. echo "=================================================="
  22. echo -e " \e[1;32m*** AUDIT inventory by DoIT ***\e[0m"
  23. echo "=================================================="
  24. system(){
  25. echo -e '\E[33m'"HOSTNAME:" `hostname -s`
  26. echo "OS $(cat /etc/os-release | egrep -w NAME | sed 's/="/: /g' | sed 's/"//g')"
  27. echo "$(cat /etc/os-release | egrep -w VERSION | sed 's/="/: /g' | sed 's/"//g')"
  28. echo "KERNEL: $(uname -r)"
  29. echo "IP: $(hostname -I | awk '{print $1}')"
  30. echo -e "UPTIME: $(uptime -p)\e[0m"
  31. echo "=================================================="
  32. echo -e " \e[1;36m*** DNS AUDIT ***\e[0m"
  33. echo "=================================================="
  34. cat /etc/resolv.conf | awk '{print $2}' | sort | uniq
  35. echo "=================================================="
  36. }
  37. hardware(){
  38. echo -e " \e[1;36m*** CPU AUDIT ***\e[0m"
  39. echo "=================================================="
  40. echo "CORES: $(cat /proc/cpuinfo | grep processor | wc -l)"
  41. echo "LOAD:$(uptime | grep -o 'average.*' | cut -f2- -d:)"
  42. if [ -z $LSH ]; then
  43. echo -e "\e[1;31m! lshw not installed\e[0m"
  44. else
  45. $LSH -c cpu | egrep "product:|size:" | uniq | sed 's/^[ \t]*//'
  46. fi
  47. echo "=================================================="
  48. echo -e " \e[1;36m*** RAM AUDIT ***\e[0m"
  49. echo "=================================================="
  50. if [ -z $DMI ]; then
  51. echo -e "\e[1;31m! dmidecode not installed\e[0m"
  52. else
  53. $DMI -t memory | egrep "Manufacturer|Part|Size|Speed" | \
  54. egrep -v "Unknown|Not Installed|No Module Installed|Not Specified|Maximum|Supported|Connection" | \
  55. sed 's/^[ \t]*//'
  56. fi
  57. echo -e "\e[1;35m- Memory Usage\e[0m"
  58. echo "--------------------------------------------------"
  59. free -h | grep -v + | awk '{print $1,$2,$3,$4}' | column -t
  60. echo "=================================================="
  61. echo -e " \e[1;36m*** NET AUDIT ***\e[0m"
  62. echo "=================================================="
  63. if [ -z $LSH ]; then
  64. echo -e "\e[1;31m! lshw not installed\e[0m"
  65. else
  66. $LSH -c net | egrep "product:|size:" | sed 's/^[ \t]*//'
  67. fi
  68. echo "--------------------------------------------------"
  69. echo -e "\e[1;35m- Network interfaces\e[0m"
  70. echo "--------------------------------------------------"
  71. ip a | egrep -v "lo:|127.0" | egrep -w "mtu|inet" | awk '{print $2}' | sed 's/^[ \t]*//'
  72. echo "--------------------------------------------------"
  73. echo -e "\e[1;35m- Network routes\e[0m"
  74. echo "--------------------------------------------------"
  75. route | sed 's/ */ /g;/^Kernel/d;/^Destination/d' | column -t
  76. echo "=================================================="
  77. echo -e " \e[1;36m*** HDD AUDIT ***\e[0m"
  78. echo "=================================================="
  79. if [ -z $LSH ]; then
  80. echo -e "\e[1;31m! lshw not installed\e[0m"
  81. else
  82. $LSH -short -C disk
  83. fi
  84. echo "--------------------------------------------------"
  85. echo -e "\e[1;35m- Locations\e[0m"
  86. echo "--------------------------------------------------"
  87. lsblk -o "NAME,SIZE,FSTYPE,MOUNTPOINT"
  88. echo "--------------------------------------------------"
  89. echo -e "\e[1;35m- Partitions\e[0m"
  90. echo "--------------------------------------------------"
  91. df -l -P -T -B GB | grep -v tmp
  92. echo "=================================================="
  93. echo -e " \e[1;36m*** BOARD INFO ***\e[0m"
  94. echo "=================================================="
  95. echo -e "\e[1;35m- MODEL\e[0m"
  96. echo "--------------------------------------------------"
  97. if [ -z $DMI ]; then
  98. echo -e "\e[1;31m! [dmidecode] not installed\e[0m"
  99. else
  100. CDM=$($DMI -t baseboard | egrep "Manufacturer|Product" | sed 's/^[ \t]*//' | head -1 | awk '{print $1}')
  101. if [ ! -z $CDM ]; then
  102. $DMI -t baseboard | egrep "Manufacturer|Product" | sed 's/^[ \t]*//'
  103. else
  104. echo -e "\e[1;37m- NOT present\e[0m"
  105. fi
  106. fi
  107. echo "--------------------------------------------------"
  108. echo -e "\e[1;35m- ONBOARD DEVICE\e[0m"
  109. echo "--------------------------------------------------"
  110. if [ -z $DMI ]; then
  111. echo -e "\e[1;31m! dmidecode not installed\e[0m"
  112. else
  113. CDM=$($DMI -t baseboard | grep Reference | sed 's/^[ \t]*//' | head -1 | awk '{print $1}')
  114. if [ ! -z $CDM ]; then
  115. $DMI -t baseboard | grep Reference | sed 's/^[ \t]*//'
  116. else
  117. echo -e "\e[1;37m- NOT present\e[0m"
  118. fi
  119. fi
  120. echo "--------------------------------------------------"
  121. echo -e "\e[1;35m- PCI DEVICE\e[0m"
  122. echo "--------------------------------------------------"
  123. if [ -z $PCI ];
  124. then
  125. echo -e "\e[1;31m! lspci not installed\e[0m"
  126. else
  127. $PCI -vm | grep Device: | grep -v 0[0-9] | grep -v "Device "
  128. fi
  129. echo "--------------------------------------------------"
  130. echo -e "\e[1;35m- USB DEVICE\e[0m"
  131. echo "--------------------------------------------------"
  132. lsusb | cut -d" " -f7- | sort
  133. echo ""
  134. usb-devices | grep Product | sort
  135. }
  136. authentification(){
  137. echo "=================================================="
  138. echo -e " \e[1;36m*** AUTHENTIFICATION ***\e[0m"
  139. echo "=================================================="
  140. echo -e "\e[1;35m- SSSD Configuration\e[0m"
  141. echo "--------------------------------------------------"
  142. if [ -f /etc/sssd/sssd.conf ]; then
  143. egrep -i "id_provider|auth_provider|ldap_uri|krb5_server" /etc/sssd/sssd.conf
  144. else
  145. echo -e "\e[1;37m- NOT present\e[0m"
  146. fi
  147. echo "--------------------------------------------------"
  148. echo -e "\e[1;35m- KERBEROS Configuration\e[0m"
  149. echo "--------------------------------------------------"
  150. if [ -f /etc/krb5.conf ]; then
  151. grep -E "default_realm|kdc" /etc/krb5.conf
  152. else
  153. echo -e "\e[1;37m- NOT present\e[0m"
  154. fi
  155. echo "--------------------------------------------------"
  156. echo -e "\e[1;35m- LDAP Configuration\e[0m"
  157. echo "--------------------------------------------------"
  158. if [ -f /etc/sssd/sssd.conf ]; then
  159. egrep -i "id_provider|auth_provider|ldap_uri" /etc/sssd/sssd.conf
  160. else
  161. echo -e "\e[1;37m- NOT present\e[0m"
  162. fi
  163. echo "--------------------------------------------------"
  164. echo -e "\e[1;35m- NSSWITCH (identity source)\e[0m"
  165. echo "--------------------------------------------------"
  166. grep -E "passwd|group|shadow" /etc/nsswitch.conf 2>/dev/null
  167. echo "--------------------------------------------------"
  168. echo -e "\e[1;35m- SSH (effective configuration)\e[0m"
  169. echo "--------------------------------------------------"
  170. sshd -T 2>/dev/null | egrep -i "pam|kbd|permitrootlogin"
  171. echo "--------------------------------------------------"
  172. echo -e "\e[1;35m- PASSWORD POLICY\e[0m"
  173. echo "--------------------------------------------------"
  174. cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE" | grep -v "^#"
  175. echo "--------------------------------------------------"
  176. echo -e "\e[1;35m- CHECK (authorized keys)\e[0m"
  177. echo "--------------------------------------------------"
  178. AK1=$(find /home -name authorized keys 2>/dev/null | wc -l)
  179. AK2=$(find /root -name authorized keys 2>/dev/null | wc -l)
  180. if [ "$AK1" -eq "1" ] || [ "$AK2" -eq "1" ]; then
  181. find /home -name authorized keys 2>/dev/null
  182. find /root -name authorized keys 2>/dev/null
  183. else
  184. echo -e "\e[1;37m- NOT present\e[0m"
  185. fi
  186. }
  187. users(){
  188. echo "=================================================="
  189. echo -e " \e[1;36m*** USERS AUDIT ***\e[0m"
  190. echo "=================================================="
  191. echo -e "\e[1;35m- USERS LDAP\e[0m"
  192. echo "--------------------------------------------------"
  193. getent passwd |awk -F : '$3 >= 1000 && $3 < 65534' | sort
  194. echo "--------------------------------------------------"
  195. echo -e "\e[1;35m- USERS all\e[0m"
  196. echo "--------------------------------------------------"
  197. awk -F: '($3<1000){print $1}' /etc/passwd | sort | grep -v "^_"
  198. echo "--------------------------------------------------"
  199. echo -e "\e[1;35m- USERS (with bash)\e[0m"
  200. echo "--------------------------------------------------"
  201. egrep 'bash' /etc/passwd | cut -d: -f1 | sort
  202. echo "--------------------------------------------------"
  203. echo -e "\e[1;35m- USERS (with home folder)\e[0m"
  204. echo "--------------------------------------------------"
  205. grep '/home/' /etc/passwd | cut -d: -f1 | sort
  206. echo "--------------------------------------------------"
  207. echo -e "\e[1;35m- USERS (with password)\e[0m"
  208. echo "--------------------------------------------------"
  209. awk -F: '$2 != "*" && $2 !~ /^!/ {print $1}' /etc/shadow | sort
  210. }
  211. cronusr(){
  212. echo "=================================================="
  213. echo -e " \e[1;36m*** CRON AUDIT ***\e[0m"
  214. echo "=================================================="
  215. awk '$1 ~ /([0-9]+|\*)/{print $0}' /etc/crontab | sed 's/&&/AND/g;s/||/OR/g' | nl | sed 's/^[ \t]*//'
  216. echo "--------------------------------------------------"
  217. echo -e "\e[1;35m- CRONTAB users\e[0m"
  218. echo "--------------------------------------------------"
  219. for i in $(awk -F: '{print $1}' /etc/passwd | sort | grep -v "^_"); do
  220. crontab -u $i -l | awk '$1 ~ /([0-9]+|\*)/{print $0}' | sed 's/&&/AND/g;s/||/OR/g' | nl
  221. done
  222. }
  223. software(){
  224. echo "=================================================="
  225. echo -e " \e[1;36m*** SW AUDIT ***\e[0m"
  226. echo "=================================================="
  227. rm -rf $SW
  228. if [ -z $RPM ];
  229. then
  230. echo -e "\e[1;31m! yum manager [RPM] not installed\e[0m"
  231. else
  232. $RPM -qa | sort >> $SW
  233. echo -e "\e[1;32m- Exporting SW[RPM] to => [$SW]\e[0m"
  234. fi
  235. if [ -z $DPKG ];
  236. then
  237. echo -e "\e[1;31m! apt-get manager [DEB] not installed\e[0m"
  238. else
  239. $DPKG -l | awk '{print $2}' | sort >> $SW
  240. echo -e "\e[1;32m- Exporting SW[DEB] to => [$SW]\e[0m"
  241. fi
  242. echo "=================================================="
  243. echo -e " \e[1;36m*** LOG AUDIT ***\e[0m"
  244. echo "=================================================="
  245. echo -e "\e[1;32m- Exporting LOGs to => [$LOG]\e[0m"
  246. echo "=================================================="
  247. find /var/log/ -type f | grep -Ev "(\.gz$|\.zip$|\.tar$|packages\/|scripts\/)" | sort > $LOG
  248. echo -e " \e[1;36m*** FINAL REPORT ***\e[0m"
  249. echo "=================================================="
  250. echo -e "\e[1;32m- Exporting REPORT to => [$REP]\e[0m"
  251. echo "=================================================="
  252. }
  253. #----------------------------- CORE-CODE -------------------------------#
  254. Color_Off='\033[0m'
  255. clear
  256. echo -e "\e[1;32m***** Started analyzing host [`hostname -s`] *****\e[0m"
  257. system
  258. hardware
  259. authentification
  260. users
  261. cronusr
  262. software