Werkzeuge ========= 0. Einleitung ============= |
next | back | 2017 - 1 | Fri Apr 7 14:46:38 CEST 2017 |
Unter UNIX gibt es viele kleine Werkzeuge, das jedes für sich nur eine kleine Aufgabe erfüllt. Das sie durch UNIX-spezifische Methoden sehr effektiv verknüpft werden können, ist es möglich aus vielen kleinen Werkzeugen ein großes Werkzeug zu generieren, das in der Lage ist eine komplexe Aufgabe zu lösen. Der Anwender muß dafür kaum über Programmierkenntnisse verfügen. Anstelle einer Einleitung - einige Beispiele 1. Private CA erstellen 2. Einrichtung eines Nutzers am Instiut für Informatik 3. Ändern eines Nutzerpasswortes 4. Überwachung von Rechnern via Netzwerk |
next | back | 2017 - 2 | Fri Apr 7 14:46:38 CEST 2017 |
1. Beispiel ----------- Scripte zur Verwaltung einer kleinen privaten CA. Dieses Script wird seit vielen Jahren mit OPENSSL ausgeliefert. Einsatzmöglichkeiten von Zertifkaten: 1. TLS - sichere Datenübertragung im Firmennetz 2. OPENVPN - virutelles privates Netz über Internet 3. LDAP 4. Mail (sendmail, imap, pop) Aufgaben: 1. CA erzeugen 2. Zertifikate für Hosts/Nutzer erzeugen Bestandteile: CA.sh - Shell-Script, Schnittstelle zu OPENSSL CA.pl - Perl-Script Quelle zum Anschauen: rabe:/opt/csw/ssl/misc/ - Solaris gruenau4:/usr/share/ssl/misc/ - Linux - SuSE 11.4 |
next | back | 2017 - 3 | Fri Apr 7 14:46:38 CEST 2017 |
2.Beispiel ---------- Einrichtung eines Nutzers am Instiut für Informatik 1. Nutzer füllt Formular auf dem WWW-Server aus. Mittel: - HTML-Seite - C-Programm Ergebnis: Ein geprüfter Datensatz auf dem WWW-Server 2. Der Account-Verwaltungsrechner holt sich diese Datensätze Mittel: - Shell-Script (get-new) Ergebnis: Datensätze auf dem Account-Verwaltungsrechner Datensätze auf dem WWW-Server gelöscht 3. Der Account wird erzeugt. Mittel: - Shell-Script (make, ldapadd, ...) Ergebnis: Account erzeugt (passwd-Eintrag, Netzgruppeneintrag, Mail-Eintrag, Homedirectory angelegt) Antrag wird gedruckt. |
next | back | 2017 - 4 | Fri Apr 7 14:46:38 CEST 2017 |
Datensatz, der von account.html (Formular) und account (C-Programm) auf dem WWW-Server erzeugt wird. Name="Musterfrau" Vorname="Gerlinde" Staat="deutsch" ImmNr="123456" ImmJahr="2004" Hauptf="Religionswissenschaften" Nebenf="Informatik" PLZ="12345" Ort="Motzen" Strasse="Nirgendwostr. 1" Telefon="030/123456" Dozent="Mustermann" IPAdresse="195.93.64.177" Dieser Datensatz wird von get-new auf auf den Account-Rechner kopiert. Anschließend wird dort "make-accounts" abgearbeitet. "make-accounts" überprüft noch einmal die eingegangenen Daten und generiert daraus alle notwendigen Daten für den Account. Anschließend wird ein Stammdatensatz für den Nutzer erzeugt. Dazu werden aus diesem Script weitere Scripte aufgerufen: useradd-script - Shell-Script, das den Nutzer in LDAP, NIS und Active-Dirctory anlegt netguseradd-script - Shell-Script, Zuordnen des Nutzers zu einer Netzgruppe mkhome - Shell-Script, Anlegen und Initialisieren des Homedirekctories (fob) addmail - Shell-Script, Erzeugen der Mailinformationen (mailbox) |
next | back | 2017 - 5 | Fri Apr 7 14:46:38 CEST 2017 |
Weitere benutzte UNIX-Werkzeuge: grep, find, awk, sed, make, dd, ls, ssh, ldapadd, latex, dvips, pwgen Erzeugter Stammdatensatz: Name="Musterfrau" Vorname="Gerlinde" Staat="deutsch" ImmNr="123456" ImmJahr="2004" Hauptf="Religionswissenschaften" Nebenf="Informatik" PLZ="12345 Ort="Motzen" Strasse="Nirgendwostr. 1" Telefon="030/123456" Dozent="Mustermann" IPAdresse="195.93.64.177" UID="musterfr" GRUPPE="nebenf04" DATE="Mon Oct 20 18:07:51 MET DST 2004" |
next | back | 2017 - 6 | Fri Apr 7 14:46:38 CEST 2017 |
3. Beispiel ----------- Ändern eines Nutzerpasswortes Problem: Der Nutzer will in einer Institution nur eine Identität mit einem Passwort benutzen. Man hat aber mehrere Betriebssysteme mit unterschiedlichem Passwort-Managment, z.B. UNIX (NIS, Kerberos, LDAP) , Windows. Jedes System hat eine eigene Passwortdatenbank mit unterschiedlichen Crypt-Algorithmen. Der Nutzer muß also bei jedem System sein Passwort einzeln neu setzen - sehr unfreundlich. Wunsch: Eingabe des Passwortes an einer zentralen Stelle und automatisches Verteilen des Passwortes auf die verschiedenen Datenbanken. |
next | back | 2017 - 7 | Fri Apr 7 14:46:38 CEST 2017 |
Probleme: --------- Identifikation des Nutzers auf dem WWW-Server Sichere Ablage der Informationen auf dem WWW-Server Sichere Übertragung des neuen Passwortes zu den Datenbanken Zeitweises Merken der Passwortänderung, falls ein Account-System z.Z. nicht funktionsfähig ist. Lösung: ------- WWW-Formular mit einigen Scripten ist dafür das geeignete Mittel. 1. html-Formular zur Eingabe von Nutzername, Altes Passwort, 2 mal neues Passwort 2. CGI-Script zur sicheren Ablage der Informationen auf dem WWW-Server 3. Übertragung der Informationen auf den Accountserver. Berechnung der verschiedenen gekrypteten Passworte. Einspeichern der Informationen in die Datenbasen |
next | back | 2017 - 8 | Fri Apr 7 14:46:38 CEST 2017 |
auf dem WWW-Server ------------------ Auf dem WWW-Server muß ein Formular bereitgestellt werden, das dem Anwender die Eingabe der notwendigen Daten ermöglicht. Notwendige Angaben sind: Nutzername altes Passwort neues Passwort (aus Sicherheitsgründen zweimal) Anschließend muß von dem Formular aus ein Programm aufgerufen werden, daß die Eingabedaten verarbeitet. Der WWW-Server sollte eine gewisse Sicherheit aufweisen!! |
next | back | 2017 - 9 | Fri Apr 7 14:46:38 CEST 2017 |
Das HTML-Formular: pass.shtml <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!--#include virtual="/head.html" --> <title>Ändern eines WWW-Passwortes</title> <h1>Ändern des Domain-Passwortes </h1> <h1>(rür UNIX und zentrale Windows-Domain)</h1> <hr size=1> <h4> Analog zum UNIX-Kommando "passwd" werden Nutzername und altes Passwort erfragt, um festzustellen, ob der Betreffende eine Änderung des Passwortes vornehmen darf. Um Tippfehler zu vermeiden, muss das neue Passwort zweimal angegeben werden. <br><br> Alle Studenten und die meisten Mitarbeiter haben Zugriff zur Domain "all" und ändern bitte dort ihr Passwort. <br><br> Mitarbeiter, die nur in einer Lehrstuhl-Domain bekannt sind, können ihr Domain-Passwort ändern, in dem sie die entsprechende Domain auswählen. <br><br> Das Passwort eines Nutzers wird grundsätzlich in allen Domainen geändert, in denen er bekannt ist (Unix und Windows). <br> <hr size=1> <br><br> |
next | back | 2017 - 10 | Fri Apr 7 14:46:38 CEST 2017 |
<form action= "https://base3.informatik.hu-berlin.de/cgi-bin/change-passwd" method="POST"> Domain: <br> <select type="text" name="Subdomain" value="all" > <option> all <option> sar <option> alkox </select> <br> Account: <br> <input type="text" name="User" > <br> Altes Passwort (nicht sichtbar): <br> <input type="password" name="oldPassword"> <br> Ein Passwort muss mindestens 7 Zeichen lang sein und mindestens einen Buchstaben, eine Ziffern und ein Sonderzeichen enthalten. Das neue Passwort sollte nicht mit dem alten Passwort identisch sein. <p> Neues Passwort (zur Sicherheit bitte zweimal eingeben): <br> <input type="password" name="Password1" > <input type="password" name="Password2" > <br> <input type="submit" value="Neues Passwort eintragen"> </p> </form> </h4> <!--#include virtual="/end.html" --> |
next | back | 2017 - 11 | Fri Apr 7 14:46:38 CEST 2017 |
Aufgerufenens CGI-Script Das Programm, das das die Eingabedaten prüft und dann ablegt, ist ein sogenanntes "CGI-Script". Es kann ein binäres Programm, ein Perl-Script, ein Shell-Script oder ... sein. Je nach Anwendungshäufigkeit sollte das Programm geschrieben sein - Scripte benötigen höhre Prozessorleistungen als binäre Programme!! In diesem Beispiel wird ein Shellscript benutzt, das folgende Funktionen realisiert: Prüfen der Aufrufparameter des Programmes. Prüfen des Nutzernamens und des alten Passwortes mittels LDAP-Abfrage. Prüfen der Identität der neu eingegeben Passworte. Prüfen der Komplexität des neu eingegebenen Passwortes. Verschlüsseln der Informationen und Abspeichern, damit sie später weiterverarbeitet werden können. Kommunikation mit dem Nutzer (Erfolgsmeldung oder Fehlermeldung) |
next | back | 2017 - 12 | Fri Apr 7 14:46:38 CEST 2017 |
Das CGI-Script(Shell-Script): change-passwd #!/bin/sh set -f TEMP=/tmp/XXXXX$$ TEMP1=/tmp/YYYYY$$ SUBMIT=/var/submit SLEEP=0 /usr/bin/echo $REMOTE_ADDR >>/tmp/logpass sendmsg() { if [ $SLEEP -ne 0 ] ; then sleep $SLEEP; fi /usr/bin/echo "Content-type: text/html\n" /usr/bin/echo '<!DOCTYPE html PUBLIC' \ '"-//W3C//DTD HTML 4.01 Transitional//EN">' /usr/bin/cat /var/apache2/htdocs/head.html /usr/bin/cat <<ERROR <TITLE>Ändern des Domain-Passwortes</TITLE> <H1> Ändern des Domain-Passwortes</H1> <body> <hr size=1> <br> <H3>$MESSAGE </H3> <br> <hr size=1> <font size=4> <A href="https://base3.informatik.hu-berlin.de/pass.shtml"> zurück zum Ändern des Domain-Passwortes</A> </font> ERROR /usr/bin/cat /var/apache2/htdocs/end.html } |
next | back | 2017 - 13 | Fri Apr 7 14:46:38 CEST 2017 |
if [ "X$REQUEST_METHOD" != "XPOST" ] ; then /usr/bin/cat <<EOF Content-type: text/html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="refresh" content="0; URL=http://www2.informatik.hu-berlin.de/"> </head> <body></body> </html> EOF exit 1 fi /usr/bin/cat > $TEMP SUBDOMAIN=`/usr/bin/awk '-F&' '{ split($1,F,"="); print F[2]; }' $TEMP` W1=`/usr/bin/awk '-F&' '{ split($2,F,"="); print F[2]; }' $TEMP` /usr/bin/awk '-F&' '{split($3,F,"=");printf("%s",F[2]);}' $TEMP > $TEMP1 chmod og-rwx $TEMP1 W2=`/usr/bin/cat $TEMP1` W3=`/usr/bin/awk '-F&' '{ split($4,F,"="); print F[2]; }' $TEMP` W4=`/usr/bin/awk '-F&' '{ split($5,F,"="); print F[2]; }' $TEMP` |
next | back | 2017 - 14 | Fri Apr 7 14:46:38 CEST 2017 |
# # Pruefen ob alle Felder ausgefuellt sind # if [ "x$W1" = "x" -o "x$W3" = "x" -o "x$W4" = "x" -o ! -s $TEMP1 ] ; then MESSAGE="Fehler: Ein Feld wurde nicht ausgefüllt." /usr/bin/rm -f $TEMP1 /usr/bin/rm -f $TEMP sendmsg exit fi # # Zugriffsberechtigung pruefen # /opt/csw/bin/ldapsearch -x -D \ uid=$W1,ou=People,ou=$SUBDOMAIN,dc=informatik,dc=hu-berlin,dc=de \ -y $TEMP1 -b ou=People,ou=$SUBDOMAIN,dc=informatik,dc=hu-berlin,dc=de \ uid=$W1 uid userPassword 2>/dev/null | \ /usr/bin/awk '/^uid:/{ print $2; } \ /^userPassword::/{ print $2; }' >$TEMP 2>/dev/null R1=`/usr/bin/head -1 $TEMP` R2=`/usr/bin/tail -1 $TEMP` /usr/bin/rm -f $TEMP1 /usr/bin/rm -f $TEMP if [ "x$R1" != "x$W1" -o "x$R2" = "x" ] ; then SLEEP=5 MESSAGE="Fehler: Nutzeridentifikation fehlgeschlagen - falscher Nutzer" sendmsg exit fi |
next | back | 2017 - 15 | Fri Apr 7 14:46:38 CEST 2017 |
if [ "x$W3" != "x$W4" ] ; then MESSAGE="Fehler: Eingaben neues Passwort nicht identisch)." sendmsg exit fi if [ "x$W2" = "x$W3" ] ; then MESSAGE="Fehler: Neues Passwort ist identisch mit dem alten Passwort." sendmsg exit fi # # Komplexitaet des Passwortes pruefen # /opt/csw/bin/gawk '{ if ( $1 ~ "[a-zA-Z]" ) RET=1; \ if ( $1 ~ "[0-9]" ) RET=RET+1; \ if ($1 ~ "[^0-9a-zA-Z\n]" ) RET=RET+1; \ if ( length($1) >= 7 ) RET=RET+1; } \ END { exit (RET) } ' <<EOF $W3 EOF RES=$? if [ $RES != 4 ] ; then MESSAGE="Fehler: Eingegebenes neues Passwort zu einfach!! \ <br> Mindestens 7 Zeichen, mit Buchstaben, \ Ziffern und Sonderzeichen" sendmsg exit fi |
next | back | 2017 - 16 | Fri Apr 7 14:46:38 CEST 2017 |
# # Nutzer beruhigen - Erfolgsmeldung ausgeben # MESSAGE="Passwort für Nutzer '$W1' zur Änderung vorgemerkt. \ <br> Änderung erfolgt spätestens in einer Stunde." sendmsg # # Informationen verschlüsseln und zur Abholung bereitstellen # /usr/bin/cat <<EOF | \ /opt/csw/bin/gpg -r ldaps -e >$SUBMIT/$W1.gpg 2>/dev/null $W1 $SUBDOMAIN $W1 $W3 $R2 EOF chmod og-rwx $SUBMIT/$W1.gpg exit |
next | back | 2017 - 17 | Fri Apr 7 14:46:38 CEST 2017 |
Folgende kleine Programme/Werkzeuge wurden benutzt: sh - Bourne-Shell - eine Scriptsprache rm - File löschen cat - Kopieren eines Textes von der Standardeingabe in ein File echo - Ausgabe eines Textes auf die Standarausgabe head - Anzeigen des Anfanges eines Files tail - Anzeigen des Ende eines Files awk, gawk - Kleiner Interpreter zur Verarbeitung von Textfiles gpg - Verschlüsseln eines Textes Damit ist auf dem WWW-Server alles fertig. Die Daten liegen gut verschlüsselt in einem Directory zur Abholung bereit. Sollte der WWW-Server gehackt werden, kann der Hacker mit den Daten nichts anfangen. |
next | back | 2017 - 18 | Fri Apr 7 14:46:38 CEST 2017 |
Auf dem Account-Server müssen jetzt zur gegebenen Zeit die Daten von dem WWW-Server abgeholt werden und den einzelnen Passwort-Datenbanken zugeführt werden. Dies geschieht durch das Script "get-passwd", das alle Stunde durch den "CRON" aufgerufen wird. Das Script realisiert dann folgende Dienste: Transport der verschlüsselten Informationen vom WWW-Server zum Account-Server Löschen der Informationen auf dem WWW-Server Auspacken der Informationen |
next | back | 2017 - 19 | Fri Apr 7 14:46:38 CEST 2017 |
Das Shell-Script: get-passwd #!/bin/sh BASE=/etc/YP/Passwd cd $BASE/New # holen von Nutzeraenderungen LS=`/usr/bin/ssh root@base3 /usr/bin/ls '/var/submit/*.gpg' 2>/dev/null` ERROR=0 if [ "x$LS" != "x" ] ; then /usr/bin/scp 'root@base3:/var/submit/*' $BASE/New for i in $LS do NAME=`basename $i` if [ ! -s $BASE/New/$NAME ] ; then echo "get-pass: Transportfehler bei $i" ERROR=1 fi done /usr/bin/chmod og-rwx * if [ $ERROR -eq 0 ] ; then /usr/bin/ssh root@base3 /usr/bin/rm '/var/submit/*.gpg' else echo "get-pass: kein rm auf base3, da Transportfehler" fi fi # Aenderung ausfuehren $BASE/change-passwd |
next | back | 2017 - 20 | Fri Apr 7 14:46:38 CEST 2017 |
Das Shell-Script: change-passwd #!/bin/sh # Uebernahme der Passwoerter in LDAP, NIS und Windows # # Programm-Basis BASE=/etc/YP/Passwd # # Quelle SUBMIT=$BASE/New # # NIS-Datenbasis NISBASE=/etc/YP # # nur benutzt wenn Windows nicht reagiert WINDOWSPASSWDSAVE=$BASE/Windows # # LDAP-Datenbasis-Account ACCESS="-x -D cn=Manager,dc=informatik,dc=hu-berlin,dc=de -w " ALLSUBDOMAINS="all alkox sar" # |
next | back | 2017 - 21 | Fri Apr 7 14:46:38 CEST 2017 |
# # Passwort an LDAP uebergeben # modify_ldap() { echo "Try modify Password in LDAP for user '$USER' in Domain '$SUBDOMAIN'" RES=`/opt/csw/bin/ldapsearch -x \ -b ou=People,ou=$SUBDOMAIN,dc=informatik,dc=hu-berlin,dc=de \ uid=$USER uid | /usr/bin/grep "uid:"` if [ "x$RES" = "x" ] ; then echo "LDAP: User '$USER' not in Domain '$SUBDOMAIN'\n" return fi /opt/csw/bin/ldapmodify $ACCESS `cat $BASE/Secure/ldap` <<EOF dn: uid=$USER,ou=People,ou=$SUBDOMAIN,dc=informatik,dc=hu-berlin,dc=de changetype: modify replace: shadowLastChange shadowLastChange: $AKTDATE - replace: userPassword userPassword: {crypt}$NEWCRYPT EOF return } |
next | back | 2017 - 22 | Fri Apr 7 14:46:38 CEST 2017 |
# # Passwort an NIS uebergeben # kann spaeter gestrichen werden # modify_nis() { echo "Try modify Password in NIS for user '$USER'" ONISPAS=`awk -F: "/^$USER:/{ print \\$2; }" $NISBASE/passwd` if [ "x$ONISPAS" != "x" ] ; then # Uebernahme in NIS-Datenbaseis /opt/csw/bin/gsed -iold -e "/^$USER:/s;${ONISPAS};${NEWCRYPT};" \ $NISBASE/passwd chmod og-rwx $NISBASE/passwd $NISBASE/passwd.old echo "NIS: For User '$USER' password changed." else echo "NIS: User '$USER' nicht in NIS-Datenbasis" fi return } |
next | back | 2017 - 23 | Fri Apr 7 14:46:38 CEST 2017 |
# # Passwort an Windows uebergeben # Passwort wird gemerkt, wenn Windows mal wieder nicht will!!!!! # modify_windows() { echo "Try modify Password in windows for user '$USER'" /usr/bin/ssh -l root spree cscript "//NoLogo" pw.vbs <<EOF $USER $UNCPASS EOF RES=$? if [ $RES -eq 0 ] ; then echo "Windows: For User '$USER' password changed." return fi cp $SUBMIT/$USERGPG $WINDOWSPASSWDSAVE/$USERPG chmod og-rwx $WINDOWSPASSWDSAVE/$USERPG if [ $RES -eq 6 ] ; then echo "Warnung!! User '$USER' Passwort fuer Windows falsch" return fi echo "Windows!! User '$USER' nicht in Windows bekannt." return } |
next | back | 2017 - 24 | Fri Apr 7 14:46:38 CEST 2017 |
cd $SUBMIT for USERGPG in * do if [ "x$USERGPG" = 'x*' ] ; then continue fi USER=`echo $USERGPG | /usr/bin/sed "s/\.gpg//"` # Klartextpassword Crypten, dazu mit gpg entschluesseln UNC=`cat $USERGPG | \ /opt/csw/bin/gpg -q --batch --passphrase-file $BASE/Secure/gpg -d` U=`/usr/bin/cat <<EOF | awk '{ print $3 }' $UNC EOF` if [ "x$U" != "x$USER" ] ; then echo "Warnung!! Aenderungssatz $USER.gpg nicht fuer User '$USER' \ - Passwort nicht veraendert" unset UNC continue fi SUBDOMAIN=`/usr/bin/cat <<EOF | awk '{ print $2 }' $UNC EOF` |
next | back | 2017 - 25 | Fri Apr 7 14:46:38 CEST 2017 |
RES=`/opt/csw/bin/ldapsearch -x \ -b ou=People,ou=$SUBDOMAIN,dc=informatik,dc=hu-berlin,dc=de \ uid=$USER uid | /usr/bin/grep "uid:"` if [ "x$RES" = "x" ] ; then echo "Warnung!! User '$USER' nicht in LDAP-Datenbasis -\ Passwort nicht veraendert" unset UNC continue fi # pruefen des alten Passwortes mit dem uebergebenen alten Passwort /opt/csw/bin/ldapsearch $ACCESS \ `cat $BASE/Secure/ldap` \ -b ou=People,ou=$SUBDOMAIN,dc=informatik,dc=hu-berlin,dc=de \ uid=$USER userPassword | \ awk '/^userPassword::/{ print $2; }' >/tmp/asdf$$ LNPA=`cat /tmp/asdf$$` rm -f /tmp/asdf$$ NPA=`/usr/bin/cat <<EOF | awk '{ print $5 }' $UNC EOF` if [ "x$NPA" != "x$LNPA" ] ; then echo "Veralteter Aenderungssatz fuer User '$USER' \ - Passwort nicht veraendert." unset UNC continue fi |
next | back | 2017 - 26 | Fri Apr 7 14:46:38 CEST 2017 |
# Aenderungsdatum AKTDATE=`/opt/csw/bin/gdate +%s` UNCPASS=`/usr/bin/cat <<EOF | awk '{ print $4 }' $UNC EOF` unset UNC export UNCPASS NEWCRYPT=`$BASE/Bin/passcrypt` # Uebernahme in LDAP in alle SUBDOMAIN for SUBDOMAIN in $ALLSUBDOMAINS do modify_ldap done # Uebernahme in nis modify_nis echo # Uebernahme in windows modify_windows # unset UNCPASS unset NEWCRYPT # löschen der übermittelten Daten rm $SUBMIT/$USERGPG done unset ACCESS --------------------------------------- |
next | back | 2017 - 27 | Fri Apr 7 14:46:38 CEST 2017 |
Kleines C-Programm, da es unter SOLARIS nicht das passende Werkzeug zum Erzeugen eines gecrypteten Passwortes gibt. passcrypt.c #include <stdio.h> #include <unistd.h> #include <stdlib.h> char chars[]="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; main(int argc,char *argv[]) { char *pass,ch[2]; pass=NULL; if ( argc == 2 ) { pass=argv[1]; } if ( NULL != getenv("UNCPASS")) if ( strcmp("UNCPASS",getenv("UNCPASS"))) pass=getenv("UNCPASS"); if ( pass == NULL ) exit(1); srand(time(NULL)%getpid()); ch[0]=chars[rand()%62]; ch[1]=chars[rand()%62]; printf("%s",crypt(pass,ch)); exit(0); } |
next | back | 2017 - 28 | Fri Apr 7 14:46:38 CEST 2017 |
4. Beispiel ----------- Überwachung von Rechnern via Netzwerk Ziel: Prüfen ob ein Rechner nocht im Netz ist (ping), Prüfen ob sich die MAC-Adresse eines existierenden Rechners geändert hat. Dadurch wird der Tausch von Rechnern erschwert. Notwendige Daten: Nutzer, die sich den Rechner vor Ort anschauen können Liste von zu überwachenden Rechner Liste der MAC-Adressen der zu überwachenden Rechner Arbeitsweise: Rechner anpingen MAC-Adresse im ARP-Stack auslesen MAC-Adresse prüfen eventuell Nachricht an anwesende Person versenden Probleme: Script möglichst nur einmal starten Fehlerhafte Rechner nur einmal melden |
next | back | 2017 - 29 | Fri Apr 7 14:46:38 CEST 2017 |
Liste der ständigen Administratoren: etc/users baerwolf kaempfer wozobule bell Liste der MAC-Adressen: etc/ethers adler 8:0:20:22:41:bc alex 0:1:2:1e:d5:45 ampere 0:0:c0:99:13:29 amsel 0:3:ba:a:e2:38 aqua 0:3:93:3:60:1a at286 0:a0:24:c1:74:59 beat 8:0:20:93:b7:98 spock 0:3:ba:9:5d:b9 staaken 0:1:2:1e:9f:f4 star 0:3:ba:1d:7f:2 zentusv 0:80:c8:aa:17:a8 Liste der zu überwachenden Rechner: etc/pools # # Linux-Pool III.2.12 19 Maschinen # marzahn III.2.12-ML4 tegel III.2.12-ML4 rudow III.2.12-ML3 dahlem III.2.12-ML2 |
next | back | 2017 - 30 | Fri Apr 7 14:46:38 CEST 2017 |
Script, das die MAC-Adressen überwacht: bin/ethers-check in crontab: 0,10,20,30,40,50 * * * * /usr/sbin/check/bin/ethers-check #!/bin/sh USERS=/usr/sbin/check/etc/users HOSTLIST=/usr/sbin/check/etc/pools ETHERS=/usr/sbin/check/etc/ethers LOCK=/usr/sbin/check/lock MYLOCK=/usr/sbin/check/lock/ethers-check LOG=/usr/sbin/check/log/ethers if [ -f ${MYLOCK} ] ; then exit 0 fi /bin/touch ${MYLOCK} for HOST in `/bin/awk '{ print $1 }' $HOSTLIST` do if [ \! -f ${LOCK}/$HOST -a "$HOST" != "#" ] ; then /bin/touch ${LOCK}/$HOST /usr/sbin/ping $HOST 10 >/dev/null RET=$? if [ $RET -eq 0 ] ; then IARP=`/usr/sbin/arp $HOST | /bin/awk '{ print $4 ; }'` SARP=`/bin/grep "^$HOST\>" $ETHERS | /bin/awk '{ print $2 }' ` if [ "x$IARP" = "xno" ] ; then /bin/rm -f ${LOCK}/$HOST continue fi |
next | back | 2017 - 31 | Fri Apr 7 14:46:38 CEST 2017 |
if [ "x$IARP" != "x$SARP" ] ; then echo Fehler IARP: $IARP SARP $SARP RAUM=`/bin/grep "^$HOST\>" $HOSTLIST | /bin/awk '{ print $2 }' ` for u in `/bin/cat $USERS` do /usr/ucb/mail -s "Achtung: Rechner $HOST in Raum $RAUM \ manipuliert" $u <<EOF Achtung!!! Die MAC-Adresse des Rechners $HOST hat sich geaendert. gefundene MAC-Adresse: $IARP soll MAC-Adresse: $SARP Standorte der Rechners: $HOST Raum: ${RAUM} Danke, Der elektronische Diensthabende PS: Systemadministrator knecht: Datei knecht:${LOCK}/$HOST streichen, wenn Schaden behoben!!! EOF done /bin/echo "`date`: \c" >>$LOG /bin/echo $HOST in Raum $RAUM manipuiliert >>$LOG else /bin/rm -f ${LOCK}/$HOST fi else /bin/echo "`date`: \c" >>$LOG /bin/echo $HOST in Raum $RAUM reagiert nicht auf ping >>$LOG fi fi done /bin/rm -f ${MYLOCK} |
next | back | 2017 - 32 | Fri Apr 7 14:46:38 CEST 2017 |
|
back | 2017 - 33 | Fri Apr 7 14:46:38 CEST 2017 |