19:00Temat wykladu:
Bash: Praktyczne zastosowania basha w administracji systemem (by DJ_cool_, 08.04.2006) @ wyklady.net
19:00DJ_cool_No to jedziemy.
DJ_cool_Witam was na wykładzie "Praktyczne zastosowania bash'a w administracji systemem.".
DJ_cool_Ja jestem DJ_cool_, i będę wam nawijał.
19:01DJ_cool_Mam nadzieję że podstawy basha znacie,
DJ_cool_Przygotujcie sobie konsole z uruchomioną waszą ulubioną powłoką ;p
DJ_cool_Jak gotowi to pisać.
damiantak
prawndaj mi shella ;d
no_nametak
19:02damianmam aż 5
mealReady to go
skal|offlol
lux_mam konsole
lux_:D
DJ_cool_Ok
DJ_cool_Zaczniemy od
DJ_cool_Pipe'a, czasem zwanego potokiem.
19:03DJ_cool_(czyli znaczek |, shift+\ jak ktoś nie widzi).
DJ_cool_Otóż przekierowuje on stdout pierwszego polecenia, do stdin drugiego
DJ_cool_stdout=Standardowe wyjście
DJ_cool_stdin=standardowe wejście
DJ_cool_Przykładowo
19:04DJ_cool_
cat /etc/passwd | less
DJ_cool_Polecenie to wypisze zawartość pliku /etc/passwd i przekieruje do polecenia less, które chyba wiadomo jak działa.
DJ_cool_Nie gadać mi tu nawet nickami,
19:05DJ_cool_Wszystko jasne jeśli chodzi o | ?
phoenix__re | znaki pl dobre zmiencie sobie kodowani | sry za wtracenie
damianokej
damianpipe
DJ_cool_Cześć phoenix__.
lux-BEZ PL ZNAKOW
damianpiszesz w PIPE :D
jaro300018:03 <@DJ_cool_> Mam nadzieję że podstawy basha znacie (...) 18:05 <@DJ_cool_> Pipe'a, czasem zwanego potokiem.
prawnbez azs ;d
phoenix__lux-: zmioen se kodowanie
jaro3000WTF ?
damianu mnie w irssi dziala
DJ_cool_jaro3000: Mówiąc podstawy miałem na myśli totalne podstawy.
phoenix__jaro3000: ?
jaro3000aha.
DJ_cool_Możemy przechodzić dalej ?
lux-u mnie w irssi nie:D
jaro3000spoko
19:06sianotak
skalniakjaro3000: pewnie chodzilo mu o cd .. :)
phoenix__;]
DJ_cool_;d
DJ_cool_Mam nadzieję że wiecie także co to jest > i <.
DJ_cool_Teraz trochę praktyki.
19:07DJ_cool_Ale najpierw opiszę kilka poleceń które wykorzystam.
DJ_cool_ps - wyświetla listę procesów.
DJ_cool_grep - wyświetla linie pasujące do danego wzorca
DJ_cool_no_name: Domyślna powłoka w systemach linuksowych.
DJ_cool_A teraz cicho
19:08DJ_cool_Kontynuuję
DJ_cool_Chcąć wyświetlić wszystkie procesy `irssi' w naszym systemie
DJ_cool_Zastosujemy polecenie
DJ_cool_
ps uaxf | grep irssi
19:09DJ_cool_zaksztusil_sie_slina_ze_: Nie gadać!
DJ_cool_Przejdźmy dalej.
DJ_cool_Omówię podstawianie poleceń, czyli ``
19:10DJ_cool_...
DJ_cool_;p
DJ_cool_
DJ_cool_Ok, kontynuując
DJ_cool_` ` wykorzystujemy gdy chcemy wstawić wynik jednego polecenia w drugie, np:
19:11DJ_cool_
cat /etc/pa`echo ss`wd
DJ_cool_Mam nadzieję że to jasne
DJ_cool_Oczywiście zamiast prostego echo
DJ_cool_Możemy używać doowolnie długich poleceń,
DJ_cool_Przykładowo:
19:12DJ_cool_
kill -9 `ps uaxf | grep ekg | grep -v djcool | awk '{print $2}'`
DJ_cool_(cześć Anni ;p)
DJ_cool_Czy wszystko w tym przykładzie jest jasne?
skalniakmozna pytanie z sali ?
no_ciekawe_ciekaweCo to jest grep, co to jest awk
mealDrugi grep odnosi sie do ekg?
no_ciekawe_ciekaweco to za opcje auxf w ps
no_ciekawe_ciekawei co to jest kill?
no_ciekawe_ciekawe:P
skalniakno_ciekawe_ciekawe: grep bylo omawiane
DJ_cool_O grepie mówiłem,
19:13mealDJ_cool_: Drugi grep odnosi sie do ekg?
phoenix__no_ciekawe_ciekawe: kill to zabicie
no_nameaux*** pokazywanie procesow
mtsprosto zauwazyc ten styl :)
skalniakDJ_cool_: czym zatem rozni sie ` od potokow skoro potokami tez moge wynik jednego programu skierowac do drugiego?
no_namekill zabijanie ich
DJ_cool_meal: Drugi grep, usuwa z wyniku linie zawierające djcool
AnnihilatorNo dobra.
hawkDJ mozna inaczej jeszcze
AnnihilatorAle ja wciąż nie wiem co to jest powłoka.
mealAha
Annihilator:P
meal:P
DJ_cool_awk - za manem 'pattern scanning and processing language'
mealDJ_cool_: przetłumacz ;]
KosiarZLudzie, apel, nie robcie burdelu chociaz >
19:14phoenix__Annihilator: jest to konsola linuxowa
DJ_cool_W skrócie - awk '{print $2}' wyświetla tylko 2 wyraz z danej linii.
Annihilatorphoenix__, też źle
mealphoenix__: źle
DJ_cool_Przejdźmy dalej,
Annihilatorphoenix__, będzie tu jakiś n00b
hawknp killall -9 kadu
DJ_cool_Mów.
cholera_nie_skonczylemI nie będzie wiedział o co kaman
phoenix__Annihilator: powloka to tytul mojego okna co z niego pisze
cholera_nie_skonczylemBardziej plebsowate slownictwo
cholera_nie_skonczylemJa tak mysle
cholera_nie_skonczylem:P
19:15phoenix__no mam :}
DJ_cool_Dobra, kończta.
DJ_cool_Do podstawiania poleceń można także wykorzystać $( )
DJ_cool_Zamiast ` `
DJ_cool_ALe ja wolę ` `, i tej wersji się będziem trzymać.
19:16DJ_cool_Ok, dalej
DJ_cool_Zmienne znacie?
mtsta
phoenix__EJ
KosiarZtak sobie. Wiem ze sa
DJ_cool_Nie gadać nickami, od tego jest -m.
KosiarZopowiedz cos.
phoenix__ZMIANA NICKOW == KICK
skal|offnom
skal|offpowinno tak byc
DJ_cool_OK to opowiem pokrótce.
19:17phoenix__JESLI KILKA RAZY ZMIENISZ NICK TO KB!!!!!!!
DJ_cool_Zmienne w bashu nie mają typów
DJ_cool_Ich deklaracja wygląda następująco:
DJ_cool_ZMIENNA=wartość
DJ_cool_Można używać dowolnej wielkości liter ale ja przyzwyczaiłem się do dużych ;p
19:18DJ_cool_Aby za zmienną podstawić wynik jakiegoś polecenia, robimy po prostu tak:
DJ_cool_A=`cat plik | grep cośtam`
DJ_cool_Aby wykorzystać zmienną w poleceniu, używamy $ZMIENNA lub ${ZMIENNA}
DJ_cool_Dlaczego ten drugi sposób? O tym zaraz.
19:19DJ_cool_W bashu istnieje zmienna $SHELL oznaczająca aktualną powłokę (/bin/bash oczywiście)
DJ_cool_I teraz mamy takie polecenie:
DJ_cool_echo Moja powłoka to $SHELL
19:20DJ_cool_A jeśli chcemy dopisać coś po $SHELL *bez spacji* to używamy wówczas tego drugiego zapisu.
DJ_cool_Napiszemy teraz krótki skrypt w bashu, który będzie wykorzystywał to co do tej pory poznaliśmy.
DJ_cool_#!/bin/bash
19:22DJ_cool_A=`cat /var/log/messages | grep sshd | grep djcool | awk '{print $11}'`
19:23DJ_cool_B=`echo $A | tail -1`
DJ_cool_echo Użytkownik djcool logował się łącznie `echo $A | wc -l` razy, a ostatnio z IP ${B}.
damian_klimek;p
DJ_cool_Coś jest niejasne ?
19:24damian_klimekodbanuj mnie na #
TeMPOraLDJ_cool_: ja rozumiem ;)
jaro3000powiedz o usuwaniu suffixa ( for file in *.in; do sth < %{file} >%{file%.in}.out; done; )
hawkja tez a jeszcze mozesz dac jakies cwiczenie do zrobienia przez nas ;]
jaro3000i o ${zmienna:2:5}
19:25DJ_cool_jaro3000: Ja tu wykładam ;p
KosiarZXD
KosiarZale jaro3000 sie zna
amethis;]
DJ_cool_Ok skoro rozumiecie to,, przechodzimy dalej
DJ_cool_Każdy skrypt basha, można zapisać w 1 linii.
DJ_cool_Można do tego wykorzystać ; albo &&
19:26DJ_cool_Różnica:
phoenix__;]
DJ_cool_&& Uruchamia następne polecenie tylko gdy poprzednie zwróciło kod wyjścia 0.
DJ_cool_Czyli zakończyło się poprawnie.
19:27DJ_cool_Istnieje także ||, które jest jakby przeciwieństwem && (tylko gdy kod wyjścia nie jest równy 0).
DJ_cool_Teraz pokrótce o pętli for.
DJ_cool_Składnia:
19:28DJ_cool_for zmienna in cośtam; do polecenia; done
DJ_cool_Czyli przykładowo
19:30DJ_cool_for i in `ls /home | sed -e 's/\///'`; do echo User $i wykorzystuje `du -sm /home/${i}/ | awk '{print $1}'` MB.; done
19:31DJ_cool_Tutaj wprowadziłem polecenie sed, które służy do filtowania i zamiany tekstu, w tym przykładzie bło to wyrażenie regularne s/\//// które usuwa wszystkie slashe.
DJ_cool_Z kolei du -sm plik wyświetla ile zajmuje plik (w megabajtach)
19:32DJ_cool_Wsyztsko jasne jak do tej pory?
ConSimhm
jaro3000da
KosiarZpolecenie jest wykonywane dla i rownego kolejnym liniom tego co po in ta?
Stasiektojataaaaaaaaak
DJ_cool_KosiarZ: Zasadniczo to słowom.
19:33KosiarZSłowom, ok.
DJ_cool_Np for i in "słowo1 słowo2"; do cośtam; done wykona się dla i=słowo1 i i=słowo2
ConSi[;
KosiarZfor i in "słowo1\ słowo2"; do cośtam; done - tutaj się tylko raz wykona, right?
19:34DJ_cool_tak.
DJ_cool_hm, czekajta. POkręciłem coś.
19:35DJ_cool_for i in słowo1 słowo2; do cośtam;done wykona się dwa razy.
DJ_cool_Jak chcemy aby pętla wykonała się ileśtam razy, możemy użyć seq
19:36DJ_cool_Przykładowo for i in `seq 1 10`; do echo Wykonuję się $i raz;done
DJ_cool_Oczywiście między do i done może być więcej niż 1 polecenie
19:37amethis;]
DJ_cool_Proszę.
ConSino
Stasiektoja;]
ConSia czy trzeba je jakos oddzielac
ConSi?
ConSibo zielony z basha jestem :P
DJ_cool_Jeśli piszesz w 1 linii to ;
ConSiacha
19:38ConSityle :)
DJ_cool_Można oczywiście zapisać wszystko tak
DJ_cool_for i in `seq 1 10`; do
amethisa jak nie w 1
DJ_cool_polecenie 1
DJ_cool_polecenie 2
amethis:P
DJ_cool_done
ConSiacha
ConSinie tzreba zakanczac linii
ConSi?
DJ_cool_Nie
ConSimhm
ConSinext please :P
amethis;]
DJ_cool_Pokażę kilka przykładów z życia.
19:39DJ_cool_Oczywiście nie tylko dotyczących for.
DJ_cool_
kill -9 `ps uaxf | grep fork | awk '{print $2}'`
DJ_cool_Tutaj chyba wiadomo o co chodzi.
19:41DJ_cool_A=`cat /etc/passwd | grep djcool | awk -F: '{print $7}'`;echo User djcool używa shella $A
DJ_cool_Być może jest dla was niejasne co znaczy -F:
DJ_cool_Otóż patrząc na strukturę pliku /etc/passwd
DJ_cool_djcool:x:1000:100:,,,:/home/djcool:/bin/bash
DJ_cool_Widzimy że pola są rozdzielone dwukropkami
19:42DJ_cool_Co umiemożliwia użycie po prostu awk '{print $7}'
DJ_cool_-F ustala znak który rozdziela pola.
19:43DJ_cool_Bo piszę kolejny przykład.
DJ_cool_netstat -ep | grep ircd | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq
19:44DJ_cool_Rozumiecie ten przykład?
KosiarZnie ;q
sianonie
ConSiy niebardzo
siano;)
amethis:D
prophetuniq?
mealmeal@gandalf:~$ netstat -ep | grep kadu | awk '{print $5}' | awk -F: '{print $>
meal(Not all processes could be identified, non-owned process info
mealwill not be shown, you would have to be root to see it all.)
mealSTREAM
mealunused-21701704514
DJ_cool_uniq usuwa powtarzające się linie
mealmeal@gandalf:~$
sianoo dokladnie to mam ;P
prophetaha
19:45DJ_cool_Jeśli odpalicie to z roota, otrzymacie mniej więcej coś takiego
Papa_SmerfDJ_cool_: mozna prosic bez polskich znakow ? :)
amethiswlasnie
B1tL4n:)
phoenix__nie
ConSibe
DJ_cool_
fanthom.math.put.p
DJ_cool_
gateway.php.pl
DJ_cool_
gw.becomo.com
DJ_cool_
hc178.internetdsl.
DJ_cool_
host-217-172-242-1
DJ_cool_
ip-83-238-121-130.
DJ_cool_
irc.lublin.pl
DJ_cool_
ircnet.pl
amethiskrzaki sie robia
ConSiiso nie maja
B1tL4nbo same fiflaki :P
ConSi:]
phoenix__amethis: to zmien kodowanie
amethistylko tu tak mam :D
19:46DJ_cool_Rozumiecie już ten przykład ?
meal;]
DJ_cool_netstat wypisuje nawiązane połączenia
ConSizara sprawdze
DJ_cool_grep ircd - tylko połączenia z portem ircds
DJ_cool_ircd*
DJ_cool_pierwszy awk wypisuje 7 wyraz
19:47DJ_cool_Czyli np
DJ_cool_open.pl.ircnet.net:ircd
DJ_cool_Drugi awk wyciąga z niego samą nazwę serwera
DJ_cool_sort sortuje, a uniq usuwa powtarzające się nazwy
ConSino teraz jarze
ConSi:P
DJ_cool_Ok
DJ_cool_To teraz
19:48ConSidlugo jeszcze
DJ_cool_POkażę wam taki skrypcik co osobom mającym sshd z pewnością się przyda
prophet:D
ConSimam czas do 20 :/
DJ_cool_#!/bin/bash
DJ_cool_MESS=/var/log/messages
DJ_cool_SEARCHSTRING="Did not receive identification string from"
DJ_cool_while [ 1 ]; do
DJ_cool_BLOCK=`cat $MESS | grep "$SEARCHSTRING" | grep -v "10.0." | awk '{print $12}' | tr '
DJ_cool_' ' '`
DJ_cool_for ip in $BLOCK; do
DJ_cool_if ! grep -q "$ip" /etc/hosts.deny
DJ_cool_then
DJ_cool_echo "ALL: $ip" >> /etc/hosts.deny
DJ_cool_echo "Zablokowalem IP: $ip"
DJ_cool_fi
DJ_cool_done;
DJ_cool_sleep 20
DJ_cool_done;
19:49DJ_cool_Teraz na bieżąco jego omówienie i pytania.
mealI co to robi?
ConSikumam
ConSio dziwo
ConSi:D
mealBlokuje IP
DJ_cool_tak
mealAle po jakiej czynności
ConSita
ConSijak sie nie zidentyfikuje chyba
ConSi:P
mealCo ten koles musi zrobić żeby go zablokowało?
19:50DJ_cool_Blokuje IP które nie wysyłają do sshd identification stringa.
mealAha
ConSiha dobrze myslalem
ConSi:D
mealA no..czytać trzeba
mealGłupi mealek ;[[
DJ_cool_Czyli 95% skanowań bruteforce,
DJ_cool_Wiadomo jak to denerwuje.
ConSi[;
TeMPOraLDJ_cool_
TeMPOraLi jak sie domyslam
TeMPOraLwszystkie niedokonczone logowania w SSH
19:51DJ_cool_Ten skrypt jest przystosowny do uruchamiania go na screenie,
TeMPOraLczyli np. jak sie domyslam
TeMPOraLtak mnie zablokowales raz
DJ_cool_TeMPOraL: Możliwe, nic nie jest doskonałe
TeMPOraLi dopiero po tygodniu odblokowales [na kewlu] :D
DJ_cool_Jeśli chcemy np. uruchamiać go z crona to pozbywamy się pętli while [ 1 ].
19:52DJ_cool_Oczywiście można go przerabiać na swoje potrzeby itp.
DJ_cool_Jakieś pytania ?
19:53DJ_cool_Ok, brak pytań, No to w takim razie dziękuję za uwagę.
DJ_cool_Mam nadzieję ze moj wykład chociaż trochę się wam przydał.