Dem moechte ich nichts hinzufuegen.
Seite 20 von 82
Manchmal hat man einfach nicht die Zeit um alles zu tun, woran man Spass hat. Aktuelles Beispiel ist bei mir OllyDbg. Hierbei handelt es sich um einen sogenannten Debugger. Damit hat man die Moeglichkeit Anwendungen zu diagnostizieren. Im Detail laueft das zum Beispiel so, dass man seine Zielanwendung startet und anschliessend OllyDbg an den Prozess „anhaengt“. Anschliessend hat man viele Moeglichkeiten um verschiedene Ziele zu erreichen. Mein Ziel war z.B. aus einer internen Anwendung, die zur Zeit entwickelt wird, *eigentlich* sensitive Informationen auszulesen. Das ist mir auch gelungen. Aber die Verwendung macht so viel Spass, dass ich da gerne wieder mehr Zeit mit verbringen wuerde. Aber das wird in den naechsten Tagen sicher nichts 🙂
Es ist viele Jahre her. Das Thema war Musik, bzw. Lieder, die mit „Musik“ kaum korrekt umschrieben werden koennen, bzw. wo sich einem durchaus auch „Akustischer Umweltschmutz“ als Umschreibung aufdraengt. Da meinte ein guter Freund, der Nils, dass wir irgendwann vielleicht alle nur noch „Lieder“ hoeren, die im Grunde nur noch ein langer 1kHz-Ton sind. Naja, da sind wir noch nicht…
Wer mich kennt weiss, dass ich manchmal auch Musik hoere, die man mit „ruppig“ beschreiben kann. Aber das was ich eben zufaellig gefunden habe, ist sogar mir ein Stueck weit zu hart.
Also dann doch lieber, im Vergleich mit obigem, eine entspannte Runde Iniquity 🙂 Und ich liebe ja die Kommentare auf Youtube. Einer, der mir im Zusammenhang mit obigem „Lied“ besonders gefaellt ist „Do they have a dinosaur as their vocalist?“ 😉
Ein weitere Abschnitt in meinem Leben neigt sich dem Ende. Dafuer schliesst sich ein neuer Abschnitt an. Ab dem 01.07.2011 bin ich Mitarbeiter des TUEV Rheinland. Ich bin sicher da werden viele tolle und spannende Aufgaben auf mich zu kommen.
Warum ich aber eigentlich den Beitrag schreibe. Im Rahmen einer solchen Aenderung gibt es natuerlich auch vieles zu beachten. Ein echtes Highlight war, man mag es kaum glauben, der geplante Urlaub. Eigentlich wollten wir im Mai zwei Wochen nach Kroatien fahren. Als klar war, dass ich Wechseln wuerde kam natuerlich die Frage, wie sinnvoll es ist, nach dem Urlaub noch vier Wochen „arbeiten“ zu gehen. Vor allem im Hinblick darauf, dass man dann auch ohne einen freien Tag von einem zum naechsten Arbeitgeber wechselt.
Problem… Alles war geplant, gebucht und organisiert. Da muss man dann mit dem Arbeitgeber, insbesondere mit dem Kollegen, der anschliessend Urlaub hat, sprechen. Da muss der Reiseveranstaler angesprochen werden, ob eine Umbuchung moeglich ist. Und *natuerlich* muss man das Thema auch mit der Familie, vor allem der Frau, besprechen. Da die Umbuchung Geld kostet, der Urlaub, weil spaeter, teuerer wird und man zeitweise komplettes Chaos hat, ist das alles in allem nicht lustig oder leicht.
Im Moment schaut alles so aus, als waere es moeglich, dass ich meinen Urlaub im Juni und nicht im Mai mache. Das wuerde mir natuerlich total entgegen kommen, da ich dann Ende Mai meinen letzten Arbeitstag habe, dann einen Monat frei und dann erholt meinen neuen Job beginnen kann. Dafuer, dass ich verschieben kann, muss ich auf jeden Fall mal meinem Kollegen Uwe danken! Du hast dir da echt mal ein Bier verdient.
Und wir alle haben ja manchmal Phasen in denen wir nicht zu geniessen sind, oder in denen der Umgang mit uns nicht ganz leicht ist. Deshalb muss ich auch meiner Frau danken, dass Sie mich, trotz ihrer ganzen Planung, bis jetzt nicht aus dem Haus geworfen hat! 🙂 Denn leicht war es die Tage mit mir sicher auch nicht. Danke! Ich liebe dich!
Hinweis on: Das ist ein Beitrag aus dem ehemaligen Projekt „adminstories.de“. Bitte hier fuer weitere Informationen schauen.Hinweis off
Vor einigen Tage wollte ich, wie auch mal in Arbeit auf vielen Servern beschrieben, einige Server auf einen aktuellen Stand bringen. Also eine neue lokale Konsole auf und ein beherztes ramon@zak:~$ for i in $(< server); do ssh $i „sudo aptitude update && sudo aptitude safe-upgrade“; done abgesetzt. Was erhalte ich als Meldung?
: Name or service not knownname srv-cgn-01
Ich gebe zu, ich war etwas verwundert, da in meiner ~/.ssh/config ein Eintrag fuer eben diesen und acht andere Server zu finden ist. Um sicher zu gehen, dass alles klappt, versuche ich mich haendisch mit dem Server zu verbinden.
ramon@zak ~ $ ssh srv-cgn-01
Linux srv-cgn-01 2.6.32-30-server #59-Ubuntu SMP Tue Mar 1 22:46:09 UTC 2011 x86_64 GNU/Linux
Ubuntu 10.04.2 LTSWelcome to the Ubuntu Server!
* Documentation: http://www.ubuntu.com/server/docSystem information as of Wed Mar 23 10:14:58 CET 2011
System load: 0.21 Processes: 143
Usage of /: 2.4% of 128.80GB Users logged in: 0
Memory usage: 7% IP address for eth0: 87.79.26.35
Swap usage: 0% IP address for eth1: 192.168.100.1
Temperature: 8 CGraph this data and manage this system at https://landscape.canonical.com/
0 packages can be updated.
0 updates are security updates.Last login: Tue Mar 22 07:54:16 2011 from foo.ptlx.de
ramon@zak
Klappte soweit. Jetzt wollte ich doch mal schauen, was mir hier mit einem echo angezeigt wird.
ramon@zak ~ $ for i in $(cat server_ptlx); do echo ssh $i ls; done
ls srv-cgn-01
ls srv-cgn-02
ls srv-cgn-03
ls srv-cgn-04
ls srv-cgn-05
ls srv-cgn-06
ls srv-cgn-07
ls srv-cgn-08
ls srv-cgn-09
ramon@zak
Das war definitiv nicht die Ausgabe, die ich erwartet hatte. Viel mehr waere etwas wie ssh srv-cgn-01 ls zu erwarten gewesen. Ich werde es nicht zu Spannend machen, moechte aber sagen, dass ich bei dem Problem sogar angefangen hatte strace in die Loesungssuche mit einzubeziehen. Nach einigen Mails zwischen Dirk und mir kam dann die entscheidende Frage „Deine .ssh/config ist eine Unix-Datei, oder?“.
ramon@zak:~$ file .ssh/config
.ssh/config: ASCII text
Ja, offensichtlich war die Datei „in Ordnung“. Aber was war mit meiner Datei, in der alle Server eingetragen sind?
ramon@zak ~ $ file server
server: ASCII text, with CRLF line terminators
Ja, da muss man erst mal drauf kommen. In der Datei war nicht, wie bei Linux-Dateien typisch, nur ein Line Feed, sondern ein Carriage Return mit anschliessendem Line Feed zu finden. In der Regel kommen Dateien mit einem CRLF aus dem Windows-Umfeld.
Als ich die Datei bereinigt hatte, hat auch mein oben genannte Aufruf endlich funktioniert. Viele Beispiele, wie so eine Bereinigung aussehen kann, finden sich unter HowTo: UNIX / Linux Convert DOS Newlines CR-LF to Unix/Linux Format. Unklar ist mir weiterhin, wieso die Datei bei mir auf einmal mit einem CRLF auftaucht 🙂
Hinweis on: Das ist ein Beitrag aus dem ehemaligen Projekt „adminstories.de“. Bitte hier fuer weitere Informationen schauen.Hinweis off
Aus gegebenem Anlass etwas „Wiederverwertung“ :). Die Tage wurde ich angesprochen, da ein Kollege ein Problem hatte. Es ging darum, dass eine SSH-Verbindung mit Authentifizierung via SSH-Key nicht funktionieren wollte. Im Detail stellte es sich so dar, dass der Client eine Kennwortabfrage brachte. Frage war nun, was hier der Grund fuer den Effekt war. Also haben wir uns erst mal an den Client gesetzt und die loebliche, aber nur selten verwendete Option -v, genutzt.
ramon@client ~/.ssh $ ssh -vvv ramon@server
debug1: Next authentication method: publickey
debug1: Trying private key: /home/ramon/.ssh/identity
debug3: no such identity: /home/ramon/.ssh/identity
debug1: Trying private key: /home/ramon/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug3: sign_and_send_pubkey
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 640 bytes for a total of 1767
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/ramon/.ssh/id_dsa
debug3: no such identity: /home/ramon/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
ramon@server’s password:
Hier kann man prima sehen, dass versucht wird mit id_dsa sich gegenueber dem Server zu authentifizieren. Allerdings schlaegt das fehl. Das sieht man daran, dass nach einem Kennwort gefragt wird. Schauen wir also mal wie es sich auf dem Server darstellt. Um den laufenden Betrieb nicht zu stoeren starten wir einen weiteren SSH-Daemon inklusive Debug-Option der auf Port 24 lauscht.
root@server:/# /usr/sbin/sshd -p 24 -ddd
Nun versuchen wir uns noch einmal via ssh -p 24 user@server am Server anzumelden und schauen, was der Server ausgibt.
debug1: trying public key file /home/ramon/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: bad ownership or modes for file /home/ramon/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1000/1000 (e=0/0)
debug1: trying public key file /home/ramon/.ssh/authorized_keys2
debug1: restore_uid: 0/0
Failed publickey for ramon from 10.0.0.194 port 41962 ssh2
Hier kann man nun prima sehen warum der Zugriff nicht wie geplant funktioniert. Der Ausloeser ist die falsch gesetzte Berechtigung auf der authorized_keys. Entweder setzt man nun also die Rechte „korrekt“, ausser dem Owner darf niemand W(rite) haben, oder man setzt StrictMode no. Letzteres ist allerdings nicht zu empfehlen. Wer interessiert ist findet die Pruefung auch im Quellcode von OpenSSH in der auth.c. Die Funktion nennt sich da secure_filename.
Hinweis on: Das ist ein Beitrag aus dem ehemaligen Projekt „adminstories.de“. Bitte hier fuer weitere Informationen schauen.Hinweis off
Heute gibt es mal was aus meiner „Grabbelkiste“. Aufgrund meiner Taetigkeit als Administrator, der sowohl Infrastruktur sowie auch punktuell Server betreut, muss ich auch immer wieder nach Problemen im Netzwerk suchen. Neben Dingen wie etwa „get flow“ und „snoop“ fuer Juniper kommt da natuerlich auch immer wieder gerne tcpdump zum Einsatz. Die Nutzung von tcpdump macht nicht nur Eindruck bei den Frauen, sondern hilft durchaus auch Probleme im Netzwerkverkehr zu identifizieren.
Da die Auswertung der angezeigten Informationen von tcpdump in Echtzeit nur was fuer die ganze Harten ist, schreibe ich mir die Ausgabe in der Regel in ein File weg.
tcpdump -n -i eth0 -w dump.pcap
Anschliessend schaue ich das Resultat in einem Wireshark an, da man damit die eigentliche Auswertung doch etwas angenehmer gestalten kann. In diesem Beispiel wird man sich moeglicherweise wundern, dass die mitgeschnittenen Pakete nur bis zu einer bestimmen Groesse mitgeschnitten wurden. Der Standard fuer snaplen, so nennt sich der Wert, ist laut manpage fuer IPv4 68 Bytes. Da ich immer Sorge habe etwas zu verpassen rufe ich tcpdump daher immer mit -s 0 auf. Somit werden alle Pakete komplett mitgeschnitten.
In der Regel beschraenke ich meine Filter auf so einfache Dinge wie etwa host a.b.c.d oder (not) port 22. Es geht aber auch feiner. Das ist vor allem dann interessant, wenn man spaeter keine Auswertung via Wireshark machen kann oder moechte.
Auf unserem gemeinsamen Server hatten wir vor einigen Wochen das Problem, dass unser Webserver wegen einer ungewoehnlich hohen Anzahl an Anfragen leiden musste. Alles sah nach einem Spam-Angriff von einigen wenigen Adressen aus. Das konnten wir nicht nur nicht nur an vielen Eintraegen im Log sehen, sondern auch mit Hilfe von tcpdump darstellen.
sudo tcpdump -c 30 -ne -i eth0 dst port 80 and ‚tcp[13] == 2‘ \
| awk ‚{print $10}‘ \
| cut -d. -f1,2,3,4 \
| sort \
| uniq -c \
| sort -n
Mit Hilfe dieses Aufrufes werden 30 Pakete gesammelt, die ausschliesslich das SYN-Flag gesetzt haben. Nach dem Einsammeln der Pakete wird die IP-Adresse mit awk und cut „extrahiert“ und anschliessend wird eine Liste (Aufsteigend) erstellt, in der die Hauefigkeit einer auftretenden IP-Adresse zu sehen ist. Doofer Satz, daher eine Beispielausgabe:
ramon@bar ~ $ sudo tcpdump -c 30 -ne -i eth0 dst port 80 and ‚tcp[13] == 2‘ \
| awk ‚{print $10}‘ \
| cut -d. -f1,2,3,4 \
| sort \
| uniq -c \
| sort -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0:1, link-type EN10MB (Ethernet), capture size 96 bytes
30 packets captured
30 packets received by filter
0 packets dropped by kernel
1 114.64.146.44
1 188.40.55.145
1 218.214.140.146
1 66.244.66.217
1 66.244.72.142
1 67.145.111.246
2 66.244.72.44
2 41.210.106.254
4 66.244.66.44
4 87.150.185.168
14 45.220.250.244
Die IP-Adressen sind randomized (kann man „verzufaelligt“ sagen? ;). Die Liste kann man anschliessend prima nutzen um, nach der Bearbeitung, z.B. via iptables die „fuehrenden“ IP-Adressen zu blockieren.
Aufgrund der haueslichen Situation schaue ich aktuell nicht so viel TV. Gestern aber konnte ich mir wieder mal zwei Folgen Heroes anschauen. Und was muss ich da sehen? In einer Szene steigt der Vater von Hiro in seine Limosine und auf dem Nummernschild ist „NCC-1701“ zu lesen 🙂 Das fand ich ja schon mal witzig. Noch besser ist allerdings, dass der Vater von George Takeis gespielt wird. Und er hat bereits in der Serie Enterprise als Steuermann mitgespielt. So schliesst sich der Kreis 🙂
Unser Jahr hat bisher schon sehr prima angefangen. Nachdem unsere Kleine Ende 2010 noch zwei mal schnell in der Notfallambulanz war haben wir im neuen Jahr gleich weiter gemacht. Milena hatte ein RS-Virus und musste einige Tage im Krankenhaus bleiben. Melanie ist natuerlich mit dabei geblieben. Allerdings hat meine Frau es sich nicht nehmen lassen vorher noch schnell eine Erkaeltung zu haben und anschliessend eine Mittelohrentzuendung mit perforiertem Trommelfell mit zu nehmen. Zwischendurch ist Niklas dann noch mal krank geworden und hatte einen Krupp-Keuchhusten, oder so, mit 40 Grad Fieber. Der ist Gott sei Dank weg. Ich auch besser so, da er jetzt auch eine Mittelohrentzuendung hat und der Keuchhusten dabei echt fies waere. Milena ist auch noch krank und ich warte drauf, dass es mich in den naechsten Tagen auch umhaut. Kann ja nicht sein, dass ausser mir alle krank sind.
Wenn wir endlich mal wieder alle Gesund sind werde ich mich mit dem Schwiegervater in der Garage einsperren und mal gemuetlich ein Bier trinken.
Hinweis on: Das ist ein Beitrag aus dem ehemaligen Projekt „adminstories.de“. Bitte hier fuer weitere Informationen schauen.Hinweis off
Ein immer gern vernachlaessigter Punkt bei der Erstellung von Scripte oder auch groesseren Programmen ist die Fehlerbehandlung und fehlenden Ausgaben. Ich habe eine Zeit lang Skripte fuer die Uebertragung von Daten geschrieben. Da gab es natuerlich so simple Anforderungen, die Datei abc.xyz von Laufwerk C: nach D: zu kopieren. Aber es gab da auch etwas anspruchsvollere Aufgaben. Hole die PGP-verschluesselte Datei NAME_Datum_von_gestern.txt via scp ab und entschluessele diese. Anschliessend bitte alle Daten in eine Datenbank importieren und die Datei dann via FTP auf einen Server verschieben. Damit es nicht langweilig wurde gab es dann auch regelmaessig Anforderungen eingetroffene und verarbeitete Dateien zu sichern, so dass im Fehlerfall noch einmal darauf zugegriffen werden kann.
Jetzt koennte ein einfacher Job, der taeglich um 01:00 Uhr laueft, wie folgt aussehen:
#!/bin/bash
#
cp /home/transfer/partner/abc.xyz /home/user/abc.xyz
Vermutlich wird der Job regelmaessig ohne Probleme laufen. Nun ruft aber der Fachbereich an und fragt ob die Datei vor drei Tagen an den Partner uebertragen wurde. Da ist es natuerlich prima, wenn man die Frage ausreichend beantworten kann. Das oben beschriebene Konstrukt glaenzt allerdings nicht mit hohem Informationsgehalt. Besser waere etwas wie beispielsweise:
#!/bin/bash
#
timestamp=$(date „+%Y%m%d-%H%M“)
echo $timestamp
echo „Starte Script ABC“
if cp /home/transfer/partner/abc.xyz /home/user/abc.xyz; then
echo „Datei abc.xyz von /home/transfer/partner/ nach /home/user/ kopiert“
else
echo „Kopiervorgang fehlgeschlagen“
fi
echo „Beende Script ABC“
Wird das Script nun via kopierjob.bash >> kopierjob.log aufgerufen hat man spaeter immer noch die Moeglichkeit zu pruefen, ob eine Datei kopiert wurde.
Das Script ist natuerlich sehr einfach gehalten. Und auch die Ausgabe in das Log ist so simpel, dass das anschauen aus optischen Gruenden keinen Spass macht. Es soll aber auch nur darstellen wie hilfreich es sein kann, wenn man sich nicht nur auf die eigentliche Aufgabe konzentriert. Wichtig ist auch, dass man im sinnvollen Rahmen Fehler abfragt und Informationen wegschreibt. Die Zeit die man in die Erstellung des etwas umfangreicheren Skriptes steckt, spart man nachher bei der moeglichen Fehlersuche.
Wie ist eure Erfahrung mit dem Thema? Ignoriert ihr Meldungen oder seit ihr bekennende „Logschreiber“?