Re: Shellscript ... mit mehr Quelltext
Moinsen, machen wir das mal noch unübersichtlicher und ich pack meine Meinung noch dabei ... Am Sonntag, 13. Mai 2001 19:48 schrieben Sie:
Boris Schauerte wrote:
Hi, da vielen ja der sinn nicht ganz klar wurde binde ich hier einfach mal eine kleine Version an, die den normalen Umgang zeigt, etc. an sich müsste alles funzen. Außer das Problem das ich vorher angesprochen habe, es ist mir auch bekannt, das eine Mail alle 24 STD bei einer Uhrzeit nicht genau vor 24:00 nicht alle Einträge zeigen würde, bei diesen "cut-Out" via datum ... es geht halt nur um dieses bereits gepostete Problem ...
Hmm, ohne mir die Funktion des Scripts näher analysiert zu haben, habe ich mal ein paar Kommentare eingefügt. [Bitte nicht falsch verstehen, ist nicht böse gemeint.]
kein problem ... solange die Vorwürfe begründet sind oder sich begründen lassen könnten ...
#!/bin/sh
Das ist kein /bin/sh-Script sondern ein astreines bash-Script, deshalb #! /bin/bash. oder #! /usr/bin/bash
hmm daran hab ich ehrlich garnicht gedacht ... das war mir auch eigentlich ziemlich egal, weil das so ein typisches 5min Script ist ...
################################################# # # # mails you some informations about your system # # and logs in your mailaccount. # # easy/fast coded shit ... # # there are lot other smaller ways ... # # # #################################################
# some variables mail_acc="shadow" # need to change this p.ex. root mail_to_send="mts" # a temporary file mail_subject="logging is securing ..." # the mailsubject
# tripwire-db options ... use in a function # U must specify path and filename like: var/log/tripwire/db # and where to copy it ... original_tripwire_db="a" copy_tripwire_db="b"
Useless quoting award :)
[Die Quotes sind überflüssig]
Ich glaub das hat schon jemand gesagt "lieber ein paar Quotes zuviel als ein paar zuwenig", naja ich hab mir die Schreibweise so angewöhnt und die paar Bytes stören hoffentlich niemanden, außerdem ist es besser sich das gleich anzugewöhnen als später mal "" zu haben das ohne quotes gibt mehr als genug probs umd diesen Aufwand zu rechtfertigen ...
# create tempfile ... touch $mail_to_send
Hiermit erzeugst Du die Datei nur, wenn sich nicht bereits existiert. Was machst Du wenn sie aber schon existiert, sie aber einem anderen User gehört? [Siehe auch man 1 mktemp]
hmmm ... interessanter aspekt, in einem script bin ich zwar nicht sehr für eine Generierung einer temporären Datei mit mktemp, sicher streitbar, aber naja, in diesem Fall geht mir die Dateiübersicht vor ...
# if U want to send other logs, just edit this part # use $(less TheFilePath) like the examples ... # of course U can run a file and send what it returns # look down for an example with nmap...
# after the examples there are some other progs called ... # in these calles I will use grep to get better infos! # nmap localhost # will can open tcp-ports, if U use other scanner # cut it out or put your scancommand in here... # messages # file with much infos, filter only this date # firewall # file, much infos very long and important # boot.msg # not very important I just use it, cause I auto # reboot one of my server automatically ... # lastlog # not much, comment out cause "access denied" on # much computers
# to filter the date we have to trick a little bit ... set $(date) # after this $2 = month $3 = day
brr, übler Hacker-Trick.
Sauberer, z.B.: month=`date +%m` day=`date +%e`
sauberer ja mag sein (mag nicht nur sein, ist so), aber naja, an dieser Stelle nochmal eine Frage, wie könnte ich bei einem Monatswechsel den Monatsnamen vom Monat davor herausfinden? ############################################
# some functions to work with, to activate # # them just call them from mailme.sh # ############################################
# gets an tripwire db-copy and diff it ... tripdb () { .. echo \ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° tripwire-database copy and diff 1st time it will build an tripwire-db copy and diff it everytime, so you will recognize changes °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° " if [ -f $original_tripwire_db ] && [ -f $copy_tripwire_db ]; then if [ "$(diff $original_tripwire_db $copy_tripwire_db)" = "" ]; then
Hier suchst Du vermutlich cmp (Siehe man cmp).
auch wieder sowas ... hmm eigentlich egal oder nicht ... ich sehe in diesem fall keinen Vorteil von cmp, lasse mich aber gerne eines besseren belehren (denkt der kritiker etwa an Geschwindigkeit) ... in diesem fall ist ein byte-cmp nämlich ähnlich einem normalen Dateidiff, da beiden ein Überschreiben bzw. weiterschreiben auffallen würde ...
echo "no changes in database detected" # we are not secure at this time, cause an attacker can # replace BOTH files ... so check this ... echo "file-informations" echo " Tripwire-DB: $(ls -l $original_tripwire_db)" echo " TW-DB-copy: $(ls -l $copy_tripwire_db)" else echo "DANGER: TRIPWIRE-DB DIFFS FROM COPY" fi else echo "tripwire-db and/or copy don't exist" if [ -f $original_tripwire_db ]; then cp $original_tripwire_db $copy_tripwire_db
Vermutlich cp --preserve ..
schon wieder so ein Detail ... hmmm ... Dateirechte bewahren ... hätte das wirklich Sinn?
echo "note: created a new tripwire-db copy" else echo "ERROR: TRIPWIRE-DB DOES NOT EXIST" fi fi } [..] echo -e \ "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° [..]
Soetwas macht man üblicherweise (Übersichtlicher, weniger fehlerträchig) mit here-Documenten (Siehe man bash) z.B.: cat << EOF text text EOF
jaja ein klassissche Here-Dokument, ich weiß ich weiß ...
################################################# # COMMENTS, NOTES & CUTTED CALLS # #################################################
# had a problem with user-rights and this call ... #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° #Program: /var/log/lastlog # last logged user ... and time #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° #$(/var/log/lastlog | grep '**Never logged in**' -v)
Hier sollt /usr/bin/lastlog verwendet werden und nicht /var/log/lastlog.
Hab ich in einer weiteren Antwort, gestern Abend bereits korrigiert, nachdem mich ein freundlicher poster drauf aufmerksam gemacht hat ...
# NOTES: # There is one problem with the dateextraction, if # you run it there can be different outputs, cause # files files can be logged in diff languages & # month-names "mai" (german) and "may" (english) # a log with two can't be extracted properly by # this script ...
Stichworte: i18n (==internationalization); Siehe auch: man 1 locale, man 3 setlocale, info gettext.
immernoch das gleiche Prob, ich müsste immernoch 2 Sprachen benutzen, weil in den Logs weiterhin 2 Sprachen stehen ...
Ein möglicher Workaround: LANG=C irgendwo vor dem Aufruf setzen.
# security-note: # everytime you should use the full path & filename # I don't use this in this script, cause in this way # it runs in default on more systems ... # but an attacker can easy manipulate this if U # don't use full path ...
... weshalb man das auch nicht tun sollte ;)
Jaja ... die gute alte Erfahrung manipulierter Home-Werte und anderer Kleinigkeiten ...
Ralf
THX für diesen kleinen Überflug ...
--------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
-------------------------------------------------------
On Mon, 14 Mai 2001, Boris Schauerte wrote:
Sauberer, z.B.: month=`date +%m` day=`date +%e`
sauberer ja mag sein (mag nicht nur sein, ist so), aber naja, an dieser Stelle nochmal eine Frage, wie könnte ich bei einem Monatswechsel den Monatsnamen vom Monat davor herausfinden?
Mit dem GNU date: date "+%B" -d 'last month'
# NOTES: # There is one problem with the dateextraction, if # you run it there can be different outputs, cause # files files can be logged in diff languages & # month-names "mai" (german) and "may" (english) # a log with two can't be extracted properly by # this script ...
Stichworte: i18n (==internationalization); Siehe auch: man 1 locale, man 3 setlocale, info gettext.
immernoch das gleiche Prob, ich müsste immernoch 2 Sprachen benutzen, weil in den Logs weiterhin 2 Sprachen stehen ...
egrep "`date "+%B"`|`LANG=en_US date +%B`" /var/log/messages -dnh -- Falls hier aber die Realität gemeint sein soll, so muss Ich sagen "Nichts ist so real wie die Wirklichkeit. Auch wenn manche das nicht wahr haben wollen." [Woko° in dag°]
Hallo David, Hallo Liste! Am 14.05.2001 schrieb David Haller:
On Mon, 14 Mai 2001, Boris Schauerte wrote:
Sauberer, z.B.: month=`date +%m` day=`date +%e`
sauberer ja mag sein (mag nicht nur sein, ist so), aber naja, an dieser Stelle nochmal eine Frage, wie könnte ich bei einem Monatswechsel den Monatsnamen vom Monat davor herausfinden?
Mit dem GNU date:
date "+%B" -d 'last month'
Hm, das ist zumindest bei mir unzuverlässig: :~ >date Sam Mär 31 00:00:27 CEST 2001 :~ >date "+%B" -d 'last month' März :~ > Nicht so cool IMHO... Ich habe deswegen mal sowas gemacht: ########### fixme! this is ugly #GNU date gives me --date='1 months ago' option #but this yields 03 if used on 31th march #so I use this workaround MONTH=$(date +%m) YEAR=$(date +%y) LASTMONTH=$(($MONTH-1)) LASTMONTH=$(printf %02d $LASTMONTH) DATE=$LASTMONTH-$YEAR # now that's ugly - isn't it? ################################################### Ach ja: :~ >date --version date (GNU sh-utils) 2.0 SuSE 6.4 Matthias -- "There are a thousand hacking at the branches of evil to one| who is striking at the root." -Henry David Thoreau| ------------------------------------------------------------+
On Mon, Mai 14, 2001 at 06:49:09 +0200, Matthias Pretzer wrote:
Am 14.05.2001 schrieb David Haller:
On Mon, 14 Mai 2001, Boris Schauerte wrote:
Stelle nochmal eine Frage, wie könnte ich bei einem Monatswechsel den Monatsnamen vom Monat davor herausfinden? Mit dem GNU date: date "+%B" -d 'last month'
Hm, das ist zumindest bei mir unzuverlässig:
:~ >date Sam Mär 31 00:00:27 CEST 2001 :~ >date "+%B" -d 'last month' März :~ >
In der Tat ziemlich merkwürdig. Das klappt bei mir auch mit anderen Monaten (immer mit dem letzten Tag des Monats getestet) nicht. Mal zieht er 28 Tage ab, mal 30 ... ?
########### fixme! this is ugly #GNU date gives me --date='1 months ago' option #but this yields 03 if used on 31th march #so I use this workaround MONTH=$(date +%m) YEAR=$(date +%y) LASTMONTH=$(($MONTH-1)) LASTMONTH=$(printf %02d $LASTMONTH) DATE=$LASTMONTH-$YEAR # now that's ugly - isn't it?
Yupp! Da sind wir nämlich wieder beim Thema Kompatibilität ;-) Nur so aus Jux mal die kompatible Version (Wehe Ihr lacht! ;-) last_month=`expr \`date +%m\` + \`date +%Y\` \* 12 - 1 - \ \( \`date +%m\` + \`date +%Y\` \* 12 - 1 \) / 12 \* 12` Das ist jetzt allerdings nur die Zahl, nicht der Monatsname :-( Ah, gerade fällt mir noch eine Version ein: Wenn am _Monatsende_ Stress aufkommt, dann legen wir das Referenzdatum doch einfach in die Monatsmitte ;-) date -d "`date +\"%b 15 %Y\"` 1 month ago" +%b liefert IMHO immer den korrekten Vormonat als abgekürzte Bezeichnung. Wenn das in eine Variable soll: last_month=`date -d "\`date +\"%b 15 %Y\"\` 1 month ago" +%b` Dumm kann man sein, man muss sich nur zu helfen wissen ;-) Jan
Hallo Jan, Hallo Liste! Am 14.05.2001 schrieb Jan Trippler:
On Mon, Mai 14, 2001 at 06:49:09 +0200, Matthias Pretzer wrote:
Am 14.05.2001 schrieb David Haller:
Mit dem GNU date: date "+%B" -d 'last month' Hm, das ist zumindest bei mir unzuverlässig: :~ >date Sam Mär 31 00:00:27 CEST 2001 :~ >date "+%B" -d 'last month' März :~ > In der Tat ziemlich merkwürdig. Das klappt bei mir auch mit anderen Monaten (immer mit dem letzten Tag des Monats getestet) nicht. Mal zieht er 28 Tage ab, mal 30 ... ?
Ah, gerade fällt mir noch eine Version ein: Wenn am _Monatsende_ Stress aufkommt, dann legen wir das Referenzdatum doch einfach in die Monatsmitte ;-)
date -d "`date +\"%b 15 %Y\"` 1 month ago" +%b
liefert IMHO immer den korrekten Vormonat als abgekürzte Bezeichnung.
Aber nur mit passendem Locale - bei deutschem Format bekommt man damit nur: :~ >date -d "`date +\"%b 15 %Y\"` 1 month ago" +%b date: invalid date `Mai 15 2001 1 month ago' Besser (glaub ich <g>): date -d "`date +\"%m/15/%y\"` 1 month ago" +%b Matthias -- "Because I'm a bastard, and proud of it!" - Linus Torvalds| -----------------------------------------------------------------------+
participants (4)
-
Boris Schauerte
-
David Haller
-
Jan.Trippler@t-online.de
-
Matthias Pretzer