Listen vergleichen

satriani

satriani

SysLion
Hallo liebe Community,

ich stehe wohl auf dem Schlauch und weiss nicht mehr weiter, vielleicht weil ich besser penne gehen sollte :D
Wie auch immer, ich baue einen Script der die eingeloggte User mit der Whiteliste abgleichen soll, das ganze sieht so aus:

Code:
        logged_host="$(who | awk '{print $6}' | sed s/"("// | sed s/")"//)"
         WHITELIST="123.12.34.23 211.45.65.87 87.65.34.76 45.87.345.43"
          for host in $logged_host
          do
          ip_addr="$(dig +short $host)"
          done
        for ip in $WHITELIST
        do
          if [ "$ip_addr" = "$WHITELIST" ]
            then
              logged_stat="OK"
            else
              logged_stat="Nicht gelistet!"
            fi
         echo $logged_stat
        done
Dabei muss natürlich beachtet werden, dass es viele User eingelogt werden können.

Danke im Voraus und schöne Träume :D
 
Sehr gute Idee. Ich glaube sowas mach ich auch :D ich setze mich später auch mal dran.
 
Danke für die Antwort, hilft mir aber nicht weiter :P
 
Na ausgeschlaffen? :D

der Host steht bei mir im Feld 5 (Debian Squeeze).

Code:
headcrash@atlantis:~/skriptEcke$ who
headcrash    pts/0        2013-01-11 16:00 (sokrates.#######.##)
headcrash@atlantis:~/skriptEcke$ who | awk '{print($5) }'
(sokrates.#######.##)

Willst du es einfach nur wissen, wenn eine ungwöhnliche Verbinung existiert oder willst du es verhindern?

Falls du es verhindern willst würde ich dir /etc/hosts.allow bzw. /etc/hosts.deny empfehlen.

mfg
HeadCrash
 
Hey HeadCrash,

Na ausgeschlaffen? :D
Nicht wirklich :(
Die Kids machen mich wahnsinnig, schon um 8:00 Uhr war der Lärm unerträglich :D

der Host steht bei mir im Feld 5 (Debian Squeeze).

Code:
headcrash@atlantis:~/skriptEcke$ who
headcrash    pts/0        2013-01-11 16:00 (sokrates.#######.##)
headcrash@atlantis:~/skriptEcke$ who | awk '{print($5) }'
(sokrates.#######.##)
Ah ok, ich fahre mit FreeBSD ;)

Willst du es einfach nur wissen, wenn eine ungwöhnliche Verbinung existiert oder willst du es verhindern?

Falls du es verhindern willst würde ich dir /etc/hosts.allow bzw. /etc/hosts.deny empfehlen.

Ich möchte es einfach überwachen, kleiner Monitorigscript halt :)
 
Versuchs mal so:

Code:
headcrash@atlantis:~/skriptEcke$ cat check_loggedin.sh
#!/bin/bash

logged_host="$(who | awk '{print $5}' | sed s/"("// | sed s/")"//)"
WHITELIST="10.0.0.12"

for host in $logged_host
do
        ip_addr="$(dig +short $host)"
#done  ### ist hier falsch

        for ip in $WHITELIST
        do
                #if [ "$ip_addr" = "$WHITELIST" ]  ### wir wollen nach IP schauen
                if [ "$ip_addr" = "$ip" ]
                then
                        logged_stat="OK"
                else
                        logged_stat="Nicht gelistet!"
                fi
                        echo $logged_stat
        done
done

######################

headcrash@atlantis:~/skriptEcke$ bash -x check_loggedin.sh
++ awk '{print $5}'
++ sed 's/(//'
++ sed 's/)//'
++ who
+ logged_host='sokrates.######.##
sokrates.######.##
10.0.0.60'
+ WHITELIST=10.0.0.12
+ for host in '$logged_host'
++ dig +short sokrates.######.##
+ ip_addr=10.0.0.12
+ for ip in '$WHITELIST'
+ '[' 10.0.0.12 = 10.0.0.12 ']'
+ logged_stat=OK
+ echo OK
OK
+ for host in '$logged_host'
++ dig +short sokrates.######.##
+ ip_addr=10.0.0.12
+ for ip in '$WHITELIST'
+ '[' 10.0.0.12 = 10.0.0.12 ']'
+ logged_stat=OK
+ echo OK
OK
+ for host in '$logged_host'
++ dig +short 10.0.0.60
+ ip_addr=
+ for ip in '$WHITELIST'
+ '[' '' = 10.0.0.12 ']'
+ logged_stat='Nicht gelistet!'
+ echo Nicht 'gelistet!'
Nicht gelistet!

Das Feld im awk nicht vergessen ;), und du bekommst kein Ergebnis zurück wenn "who" eine IP-Adresse anzeigt, zumindes hier bei der Debianmühle nicht.

mfg
HeadCrash
 
Danke HeadCrash,

wird klar was für ein Keks ich da gebaut habe, das komplette Script stimmt nicht.
das Ergebnis sieht so aus:
Code:
Nicht gelistet!
OK
Nicht gelistet!
Nicht gelistet!
Nicht gelistet!

und so sieht aus wenn sich zwei User aus der Whitelist einloggen.
Code:
Nicht gelistet!
Nicht gelistet!
Nicht gelistet!
Nicht gelistet!
Nicht gelistet!
Nicht gelistet!
OK
Nicht gelistet!
Nicht gelistet!
Nicht gelistet!

Jede einzelne IP aus der Whitelit wird ausgewertet und ausgegeben, wobei ein OK ausreichen würde.
Und wenn eine unberechtigte IP gefunden wurde, dann soll die IP angezeigt werden mit der Meldung "Nicht gelistet!"
Ich glaube da soll "diff" mit ins Spiel.
 
Hi,

ob eine IP-Adresse $IP in deiner $WHITELIST enthalten ist, kannst du ohne die for-Loop auch einfach mit grep, etwa
Code:
if echo $WHITELIST | tr " " "\n" | grep "^$IP$" >/dev/null; then
        echo $IP ist in Whitelist
else
        echo $IP ist nicht in Whitelist
fi
oder einem String-Match, etwa
Code:
case $(echo " " $WHITELIST " ") in
*" $IP "*)      echo $IP ist in Whitelist ;;
*)              echo $IP ist nicht in Whitelist ;;
esac
überprüfen ... Wenn die Schleife doch gewünscht sein sollte, kannst du sie ja im Erfolgsfall mit "break" verlassen, ungefähr so
Code:
logged_stat="nicht gelistet!"
for ip in $WHITELIST
do
        if [ "$ip_addr" = "$ip" ]
        then
                logged_stat="OK"
        break
fi
done
echo $ip_addr $logged_stat

Gruss, A.
 
Danke floyd62,

das mit dem case hat super geklappt :)
 

Ähnliche Themen

Switche abfragen über Script

HandbrakeCLI Shell Skript

Filtern und zuordnen

Shellskript - Fehler in Cron

Hilfe bei Scriptanpassung für VMWare 5.1 HA und USV Shutdown

Zurück
Oben