[linux] vergelijking in script

Pagina: 1
Acties:

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01-2025
Ik ben bezig een scriptje te maken waarbij ik 2 variablen moet vergelijken, de eerste komt hier vandaan:

more /etc/passwd|mawk -F: '$3 < 500 {print $1}'|while read PASSWD

de 2e hier vandaan:

more /var/log/messages|
grep 'FAILED LOGIN'|
mawk '{print $12}'|
sed s/,//|
sort|
uniq -c|
mawk '{print $2}'|while read FLOGIN

Zoals je ziet lees ik ze per regel in omdat ze ook per regel vergeleken moeten worden, nu lukt dit niet helemaal omdat ik een beetje met de 2x do en done in de
knoop kom.

weet iemand hoe ik dit op kan lossen?

De bedoeling van dit script moet trouwens worden om de mislukte logins weer te geven, maar niet die van een gebruiker die zijn wachtwoord verkeerd typt, en ook
niet die van gebrukikers die niet bestaan.

  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 03-04 22:46

jvhaarst

Eendracht maakt macht

AtlonXP1800 schreef op 24 February 2003 @ 10:43:
De bedoeling van dit script moet trouwens worden om de mislukte logins weer te geven, maar niet die van een gebruiker die zijn wachtwoord verkeerd typt, en ook
niet die van gebrukikers die niet bestaan.
Huh ?
Welke logins hou je dan over?

If you don’t have enough time, stop watching TV.


  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01-2025
als het goed is niet veel, maar de bedoeling is dat je wel output krijgt als gebruikers bijvoorbeeld onder de naar "news" of "root" proberen in te loggen

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01-2025
ik ben nog even wat dingen verder gaan uitwerken, het hele script ziet er nu zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
echo " -------------------- Failed logins Begin --------------------"
echo " "

more /etc/passwd|mawk -F: '$3 < 500 {print $1}'|while read PASSWD
do

        more /var/log/messages|
        grep 'FAILED LOGIN'|
        mawk '{print $12}'|
        sed s/,//|
        sort|
        uniq -c|
        mawk '{print $2}'|while read FLOGIN
        do

                echo "$FLOGIN $PASSWD"
                test $FLOGIN = $PASSWD
                if (("$?" == "0"))
                        then
                        echo "gelijk"
                else
                        echo "ongelijk"
                fi

        done
done


echo " "
echo " ---------------------- failed logins End --------------------"


dit script geeft een output zoals:
-------------------- Failed logins Begin --------------------

bla root
ongelijk
news root
ongelijk
root root
gelijk

---------------------- failed logins End --------------------
Ik heb ff een paar keer fout ingelogd zoals je ziet. zoals te zien is worden de
foute logins alleen met root vergeleken (de eerste regel uit de passwd file), de bedoeling is dus om alle regels uit de passwd file te vergelijken met de mislukte logins uit /var/log/messages

[ Voor 14% gewijzigd door AtlonXP1800 op 25-02-2003 08:44 ]


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
tip: zet je code tussen [code] tags ipv [quote] tags om de opmaak te behouden.

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


Verwijderd

Vooruit, omdat got weer in de lucht is:
code:
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

for line in `cat /var/log/messages|grep "FAILED\ LOGIN"`; do
    USER=`echo $line | awk '{print $12}'`
    REAL_USER=`cat /etc/passwd|grep $USER`
    if [ -z $REAL_USER ]; then
                echo "user $USER is unknown to this system"
    else
        echo "user $USER is a system user"
    fi
done

Wat jij doet is alleen maar checken of de user een bestaande user is. Waar je geen rekening mee houd, is username probing. Met bovenstaand script maak je wel dat onderscheid

[ Voor 10% gewijzigd door Verwijderd op 24-02-2003 23:38 ]


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
Zo, jij moet wel heel blij zijn dat GoT het weer doet!
Namens de stichting tegen nutteloos 'cat' gebruik wilde ik wel nog even toevoegen dat 'grep "FAILED\ LOGIN" /var/log/messages' en 'grep $USER /etc/passwd' ipv. de varianten hierboven ook prima zullen werken. ;)

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


Verwijderd

op uniprocessoren wel ja, op multi processor systemen kan/gaat dit sneller dan grep alleen (al scheelt het weinig) :)

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 09-05 19:42

odysseus

Debian GNU/Linux Sid

Verwijderd schreef op 24 February 2003 @ 23:50:
op uniprocessoren wel ja, op multi processor systemen kan/gaat dit sneller dan grep alleen (al scheelt het weinig) :)

offtopic:
Je hebt kans dat het laden van /bin/cat langer duurt dan de tijd die je wint door er twee processen van te maken...alleen bij een erg zware cat en grep heb je denk ik voordeel - al betwijfel ik of het echt meetbaar wordt :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Wat je ook kunt doen ipv catten en greppen, is id $USER doen, dat is dan wel zeker een milliseconde trager dan grep $USER /etc/passwd, maar het is foolproof. Omdat grep geen onderscheid maakt tussen usernames in /etc/passwd, en bijvoorbeeld de realnames en shells van personen. Als je nu bijvoorbeeld op de user 'bash' grept, zal het een false positive opleveren, omdat de string 'bash' vast wel ergens in passwd voorkomt, terwijl id bash netjes niks vindt, en returncode 1 oplevert.

[ Voor 25% gewijzigd door blaataaps op 25-02-2003 00:01 ]


Verwijderd

offtopic:
Ik verwerk op m'n werk vele gb's aan ascii door cat, sed, grep en awk pipes, en het scheelt iets :) En persoonlijk vind ik de cat methode er duidelijker uitzien dan de grep methode:

code:
1
2
3
grep "some-key" /path/to/some/datafile | sed -e "s/bla/alb/g"
of
cat /path/to/some/datafile | grep "some-key" | sed -e "s/bla/alb/g"

offtopic:
maar dat is weer een andere flamewar :P


en nu weer ontopic :)

[ Voor 6% gewijzigd door Verwijderd op 25-02-2003 00:04 ]

Pagina: 1