meta data for this page
  •  

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Következő változat
Előző változat
shell:find_shell_scripts [2019/05/14 16:03] – létrehozva adminshell:find_shell_scripts [2020/03/09 11:50] (aktuális) admin
Sor 1: Sor 1:
-Felderíti a hoszton lévő shell szkripteket, és megmutatja a sha hast-üket, a módosítási dátumukat, meg van-e hívva valakinek a crontab-jából, illetve van-e benne IP cím, vagy előre definiált parancsok valamelyike. +====== Shell szkript felderítő szkript ====== 
-Paraméterként meg lehet neki adni, hogy mely könyvtárra fusson, egyébként az egész fájlrendszerben keres. + 
-<file sh find_shell_scripts.sh>+Felderíti a hoszton lévő shell szkripteket, és megmutatja a sha hast-üket, a módosítási dátumukat, meg van-e hívva valakinek a crontab-jából, illetve van-e benne IP cím, email cím, vagy előre definiált parancsok valamelyike. 
 +Paraméterként meg lehet neki adni, hogy mely könyvtárra fusson, egyébként az egész fájlrendszerben keres. Illetve szkript lista fájl is megadható neki paraméterként, akkor az abban felsorolt szkripteket elemzi. Ilyen bemenetet gyárt kimenetként pl a crontab bejegyzésekből az alábbi szkript: 
 + 
 +<file sh collect_crontab_scripts.sh>
 #!/bin/sh #!/bin/sh
-COMMAND_LIST="ssh ftp sftp rsh rdist rsync scp dsh rdsh"+#grep -R ".*" /var/spool/cron/ | sed -e 's/^\/var\/spool\/cron\/crontabs\///' | grep -v ':#' | grep -v '^$' | egrep -v '(errclear|clcycle|dumpcheck|lpar2rrd|pmcfg|motd|mkpasswd|logrotate|dumpctrl|sa1|sa2|Internal-Function|======|at.allow)' 
 +find /var/spool/cron/ -type f | xargs -I{} cat {} | grep -v '^#' | grep -v '^$' | egrep -v '(errclear|clcycle|dumpcheck|lpar2rrd|pmcfg|motd|mkpasswd|logrotate|dumpctrl|sa1|sa2|Internal-Function|======|at.allow)' | sed -e 's/^[^/$]*//' -e 's/[ >].*$//' | sort | uniq | while read SOR; do 
 +        if echo $SOR | egrep -s '^\$'; then 
 +                VARIABLE=$(echo $SOR | sed 's/^.*\(\$[a-zA-Z0-9_]*\)[^a-zA-Z0-9_].*$/\1/'
 +                USER=$(grep -R "$SOR" /var/spool/cron/ | sed 's/^.*\/\([a-z]*\):.*/\1/'
 +                HOME=$(lsuser -a home $USER | awk -F'=' '{print $2}' | sed 's/\//\\\//g'
 +                echo "$SOR" | sed "s/$VARIABLE/$HOME/" 
 +        fi 
 +        echo $SOR 
 +done 
 +</file> 
 + 
 + 
 +<file sh find_shell_scripts.sh> 
 +#!/bin/ksh 
 +COMMAND_LIST="ssh ftp sftp rsh rdist rsync scp dsh rdsh mail sqlplus mutt" 
 +TMPFILE="/tmp/find_shell_scripts.sh.tmp" 
 +CSVFILE=$(hostname)_script_catalog.out 
 +>$CSVFILE
 if [[ -d $1 ]]; then if [[ -d $1 ]]; then
         STARTDIR="$1"         STARTDIR="$1"
 +elif [[ -f $1 ]]; then
 +        FILE_LISTA="$1"
 else else
         STARTDIR='/'         STARTDIR='/'
 fi fi
  
-echo "FILE NAME;SHASUM;MTIME;CRONTAB;HOSTS;COMMANDS" | awk -F';' '{printf "%-50s %-41s %-21s %-15s %-20s %-20s\n",$1,$2,$3,$4,$5,$6}' +echo "FILE NAME;MTIME;CRONTAB;IPS;COMMANDS;EMAILS" | awk -F';' '{printf "%-60s %-21s %-15s %-20s %-20s %-30s\n",$1,$2,$3,$4,$5,$6}' 
-find $STARTDIR -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \) | while read FILE; do +echo "FILE NAME;MTIME;CRONTAB;IPS;COMMANDS;EMAILS;SHASUM" | awk -F';' '{printf "%-60s;%-21s;%-15s;%-20s;%-20s;%-30s;%-41s\n",$1,$2,$3,$4,$5,$6,$7}' >> $CSVFILE 
-        if [[ $(file $FILE | grep -c ': shell script') -eq 1 ]]; then+if [[ -n $FILE_LISTA ]]; then 
 +        cat $FILE_LISTA > $TMPFILE 
 +else 
 +        find $STARTDIR -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \) > $TMPFILE 
 +fi 
 + 
 +cat $TMPFILE | grep -v '^$' | while read FILE; do 
 +    if [[ -f $FILE ]]; then 
 +        if [[ $(file $FILE | egrep -c '(: shell script|: commands text)') -eq 1 || -n $FILE_LISTA ]]; then
                 MTIME=$(istat $FILE | awk -F' ' '/Last modified/{print $8"."$4"."$5"-"$6}')                 MTIME=$(istat $FILE | awk -F' ' '/Last modified/{print $8"."$4"."$5"-"$6}')
  
Sor 23: Sor 54:
                 if [[ -n $CRONTABS && -n $ATJOBS ]]; then CRONTABS="$CRONTABS,$ATJOBS"; fi                 if [[ -n $CRONTABS && -n $ATJOBS ]]; then CRONTABS="$CRONTABS,$ATJOBS"; fi
  
-                HOSTS=$(egrep "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" "$FILE" | while read SOR; do +                IPS=$(egrep "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" "$FILE" | while read SOR; do 
-                        echo "$SOR"sed -ne 's/^[^0-9]*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*$/\1/gp#| sed --e "s/.*\((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1- +                        echo "$SOR"perl -wne'while(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/g){print "$&\n"}
-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\).*/\1/p+                done | sort | uniq | tr '\n' ',' | sed -e 's/^/ips:/' -e 's/,*$//'
-                done | sort | uniq | tr '\n' ',' | sed -e 's/^/hosts:/' -e 's/,*$//')+ 
 +                EMAILS=$(egrep "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}" "$FILE" while read SOR; do 
 +                        echo "$SOR" | perl -wne'while(/[\w\.\-]+@[\w\.\-]+\w+/g){print "$&\n"}' 
 +                done | sort | uniq | tr '\n' ',' | sed -e 's/^/emails:/' -e 's/,*$//')
  
                 COMMANDS=$(for COMMAND in $COMMAND_LIST; do                 COMMANDS=$(for COMMAND in $COMMAND_LIST; do
Sor 33: Sor 67:
                         fi                         fi
                 done | sort | uniq | tr '\n' ',' | sed -e 's/^/commands:/' -e 's/,*$//')                 done | sort | uniq | tr '\n' ',' | sed -e 's/^/commands:/' -e 's/,*$//')
-                echo "$FILE;$(shasum $FILE | awk '{print $1}');$MTIME;$CRONTABS;$HOSTS;$COMMANDS" | awk -F';' '{printf "%-50s %-41s %-21s %-15s %-20s %-20s\n",$1,$2,$3,$4,$5,$6}'+                echo "$FILE;$MTIME;$CRONTABS;$IPS;$COMMANDS;$EMAILS" | awk -F';' '{printf "%-60s %-21s %-15s %-20s %-20s %-30s\n",$1,$2,$3,$4,$5,$6}' 
 +                echo "$FILE;$MTIME;$CRONTABS;$IPS;$COMMANDS;$EMAILS;$(shasum $FILE | awk '{print $1}')" | awk -F';' '{printf "%-60s;%-21s;%-15s;%-20s;%-20s;%-30s;%-41s\n",$1,$2,$3,$4,$5,$6,$7}' | sed -e 's/crontab://' -e 's/emails://' -e 's/commands://' -e 's/ips://' -e 's/atjobs://' >> $CSVFILE
         fi         fi
 +    else
 +        echo "$FILE;Nem nyithato meg a fajl." | awk -F';' '{printf "%-60s %-41s\n",$1,$2}'
 +        echo "$FILE;Nem nyithato meg a fajl." | awk -F';' '{printf "%-60s;%-41s\n",$1,$2}' >> $CSVFILE
 +    fi
 done done
 +rm -f $TMPFILE
 </file> </file>