verifica 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #!/bin/bash
  2. #CREADOR Henry Chumo | 06/06/2022
  3. #Alias : @ChumoGH
  4. # -*- ENCODING: UTF-8 -*-
  5. dropbear_pids () {
  6. port_dropbear=`ps aux|grep 'dropbear'|awk NR==1|awk '{print $17;}'`
  7. log=/var/log/auth.log
  8. loginsukses='Password auth succeeded'
  9. pids=`ps ax|grep 'dropbear'|grep " $port_dropbear"|awk -F " " '{print $1}'`
  10. for pid in $pids; do
  11. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  12. i=0
  13. for pidend in $pidlogs; do
  14. let i=i+1
  15. done
  16. if [ $pidend ];then
  17. login=`grep $pid $log |grep "$pidend" |grep "$loginsukses"`
  18. PID=$pid
  19. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'/ /g"`
  20. waktu=`echo $login |awk -F" " '{print $2"-"$1,$3}'`
  21. while [ ${#waktu} -lt 13 ]; do
  22. waktu=$waktu" "
  23. done
  24. while [ ${#user} -lt 16 ]; do
  25. user=$user" "
  26. done
  27. while [ ${#PID} -lt 8 ]; do
  28. PID=$PID" "
  29. done
  30. echo "$user $PID $waktu"
  31. fi
  32. done
  33. }
  34. mostrar_usuarios () {
  35. for u in `cat "/etc/passwd"|grep 'home'|grep 'false'|grep -v 'syslog' | cut -d: -f1`; do
  36. echo "$u"
  37. done
  38. }
  39. function_onlines () {
  40. users=$(cat /etc/passwd|grep 'home'|grep 'false'|grep -v 'syslog'|awk -F ':' '{print $1}')
  41. dpids=$(dropbear_pids)
  42. time=$(date +%s)
  43. [[ -e /etc/openvpn/openvpn-status.log ]] && ovpn_log=$(cat /etc/openvpn/openvpn-status.log)
  44. n='0'
  45. i='0'
  46. conect='0'
  47. for _user in $(mostrar_usuarios); do
  48. [[ -z "$(ps -u $_user|grep sshd)" ]] && sqd=0 || sqd=1
  49. [[ -z "$(echo $ovpn_log|grep -E ,"$_user",)" ]] && ovp=0 || ovp=1
  50. [[ -z "$(echo $dpids|grep -w "$_user")" ]] && drop=0 || drop=1
  51. conex=$(($sqd + $ovp + $drop))
  52. [[ $conex -ne 0 ]] && let conect++
  53. if [[ $(chage -l $_user |grep 'Account expires' |awk -F ': ' '{print $2}') != never ]]; then
  54. [[ $time -gt $(date '+%s' -d "$(chage -l $_user |grep "Account expires" |awk -F ': ' '{print $2}')") ]] && let n++
  55. fi
  56. done
  57. _tuser=$(echo "$users"|sed '/^$/d'|wc -l)
  58. #echo "${conect}" > /etc/adm-lite/onlines
  59. #echo "${n}" > /etc/adm-lite/vencidos
  60. #echo "${_tuser}" > /etc/adm-lite/total
  61. }
  62. fun_ovpn_onl () {
  63. for userovpn in `cat /etc/passwd | grep ovpn | awk -F: '{print $1}'`; do
  64. us=$(cat /etc/openvpn/openvpn-status.log | grep $userovpn | wc -l)
  65. [[ "$us" != "0" ]] && echo "$userovpn"
  66. done
  67. }
  68. function_usertime () {
  69. declare -A data
  70. declare -A time
  71. declare -A time2
  72. declare -A timefinal
  73. tempousers="./tempo_conexao"
  74. usr_pids_var="./userDIR"
  75. [[ ! -e $tempousers ]] && touch $tempousers
  76. _data_now=$(date +%s)
  77. for user in `cat "/etc/passwd"|grep 'home'|grep 'false'|grep -v 'syslog' | cut -d: -f1`; do
  78. unset ssh
  79. [[ -e $usr_pids_var/$user.pid ]] && source $usr_pids_var/$user.pid
  80. ssh+="$(ps -u $user | grep sshd |wc -l)+"
  81. ssh+="$(dropbear_pids | grep "$user" | wc -l)+"
  82. [[ -e /etc/openvpn/server.conf ]] && ssh+="$(fun_ovpn_onl | grep "$user" | wc -l)+"
  83. ssh+="0"
  84. user_pid=$(echo $ssh|bc)
  85. if [ "$user_pid" -gt "0" ]; then
  86. [[ "${data[$user]}" = "" ]] && data[$user]="$_data_now"
  87. fi
  88. if [ "$user_pid" = "0" ]; then
  89. unset data[$user]
  90. [[ -e "$usr_pids_var/$user.pid" ]] && rm -f $usr_pids_var/$user.pid
  91. [[ -e $usr_pids_var/$user.pid2 ]] && rm -f $usr_pids_var/$user.pid2
  92. fi
  93. if [ "${data[$user]}" != "" ]; then
  94. time[$user]=$(($_data_now - ${data[$user]}))
  95. time2[$user]=$(cat $tempousers | grep "$user" | awk '{print $2}')
  96. [[ "${time2[$user]}" = "" ]] && time2[$user]="0"
  97. timefinal[$user]=$((${time2[$user]} + ${time[$user]}))
  98. _arquivo=$(cat $tempousers |grep -v "$user")
  99. echo "$_arquivo" > $tempousers
  100. echo "$user ${timefinal[$user]}" >> $tempousers
  101. echo "data[$user]=$_data_now" > $usr_pids_var/$user.pid
  102. fi
  103. done
  104. }
  105. fun_net () {
  106. (
  107. log_1="/tmp/tcpdump"
  108. log_2="/tmp/tcpdumpLOG"
  109. usr_dir="/etc/adm-lite/userDIR/usr_cnx"
  110. [[ -e "$log_1" ]] && mv -f $log_1 $log_2
  111. [[ ! -e $usr_dir ]] && touch $usr_dir
  112. #ENCERRA TCP
  113. for pd in `ps x | grep tcpdump | grep -v grep | awk '{print $1}'`; do
  114. kill -9 $pd &> /dev/null
  115. done
  116. #INICIA TCP
  117. tcpdump -s 50 -n &> /dev/null
  118. #ANALIZA USER
  119. for user in `cat "/etc/passwd"|grep 'home'|grep 'false'|grep -v 'syslog' | cut -d: -f1`; do
  120. touch /tmp/$user
  121. ip_openssh $user > /dev/null 2>&1
  122. ip_drop $user > /dev/null 2>&1
  123. sed -i '/^$/d' /tmp/$user
  124. pacotes=$(paste -sd+ /tmp/$user | bc)
  125. rm /tmp/$user
  126. if [ "$pacotes" != "" ]; then
  127. if [ "$(cat $usr_dir | grep "$user")" != "" ]; then
  128. pacotesuser=$(cat $usr_dir | grep "$user" | awk '{print $2}')
  129. [[ $pacotesuser = "" ]] && pacotesuser=0
  130. [[ $pacotesuser != +([0-9]) ]] && pacotesuser=0
  131. ussrvar=$(cat $usr_dir | grep -v "$user")
  132. echo "$ussrvar" > $usr_dir
  133. pacotes=$(($pacotes+$pacotesuser))
  134. echo -e "$user $pacotes" >> $usr_dir
  135. else
  136. echo -e "$user $pacotes" >> $usr_dir
  137. fi
  138. fi
  139. unset pacotes
  140. done
  141. ) &
  142. }
  143. ip_openssh () {
  144. user="$1"
  145. for ip in `lsof -u $user -P -n | grep "ESTABLISHED" | awk -F "->" '{print $2}' |awk -F ":" '{print $1}' | grep -v "127.0.0.1"`; do
  146. packet=$(cat $log_2 | grep "$ip" | wc -l)
  147. echo "$packet" >> /tmp/$user
  148. unset packet
  149. done
  150. }
  151. ip_drop () {
  152. user="$1"
  153. loguser='Password auth succeeded'
  154. touch /tmp/drop
  155. for ip in `cat /var/log/auth.log | tail -100 | grep "$user" | grep "$loguser" | awk -F "from" '{print $2}' | awk -F ":" '{print $1}'`; do
  156. if [ "$(cat /tmp/drop | grep "$ip")" = "" ]; then
  157. packet=$(cat $log_2 | grep "$ip" | wc -l)
  158. echo "$packet" >> /tmp/$user
  159. echo "$ip" >> /tmp/drop
  160. fi
  161. done
  162. rm /tmp/drop
  163. }
  164. function_onlines > /dev/null 2>&1
  165. #function_usertime > /dev/null 2>&1
  166. #fun_net > /dev/null 2>&1
  167. killall verifica > /dev/null 2>&1