Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Script zum autom. unzippen im Netzwerk

  1. #1
    Gast

    Question Script zum autom. unzippen im Netzwerk

    Hi,
    untenstehend mein Shellscript, das automatisch ZIP-Dateien entpackt. Es wird auf Viren gecheckt und auf Dateien, die typischerweise in Programmen enthalten sind, da meine Netzwerkbenutzer keine Viren oder Programme einschleppen sollen.

    Es in diesem noch ein Fehler, den ich noch nicht gefunden habe oder sonst etwas vergessen worden?
    MfG,
    Wernr

    <pre>
    #!/bin/bash
    # Shell-sript zum automatischen Entpacken von Zip-Dateien
    # Wechseln ins Einlauf-Verzeichnis

    # Verzeichnis aus dem Datei geholt wird
    INDIR="/ska_fs2/pool/skadaten/unzip/in/"
    # Verzeichnis wo Datei abgelegt wird
    OUTDIR="/ska_fs2/pool/skadaten/unzip/out/"
    # Verzeichnis wo Dateien abgelegt werden, wenn Virus entdeckt wird
    INFECT="/root/batches/unzip/ska_fs2/pool/skadaten/unzip/in/"
    # HOME Directory
    INFECTROOT="/root/batches/unzip"
    # Ablage f. virenverseuchte Zips
    VIRUS="/root/virus/"
    # HOME Directory
    ROOTDIR="/root/batches/unzip/"
    # Arbeitsverzeichnis f. Zipper
    ARBEIT="/root/batches/unzip/arbeit/"
    # Ablageverzeichnis f. Zips mit Programmen
    ABLAGE="/root/batches/unzip/ablage/"

    # Umleitung der Fehlerausgabe in zentrale Datei
    exec >>${ROOTDIR}unzip.log 2>&1

    # Suchen nach den ZIP-Dateien
    cd ${INDIR}
    # for i in *.zip
    for i in $(ls)
    do
    # Ausgabeverzeichnis erstellen
    cd ${INDIR}
    echo "Schleife $i"
    mkdir ${OUTDIR}$i
    # verschieben der Datei in ein Arbeitsverzeichnis auf dem Linux-Server
    # da sonst event. der Virenscanner auf dem Novellserver in den Ablauf
    # durch loeschen eingreift
    rm -r ${ARBEIT}*
    cp $i ${ARBEIT}$i
    rm ${INDIR}$i
    # Zipdatei auf Viren Pruefen,
    # verseuchte Dateien nach /root/d verschieben
    # /usr/local/uvscan/uvscan ${ARBEIT}$i -m ${INFECTROOT} --unzip -r --noexpire --analyse
    /usr/local/uvscan/uvscan ${ARBEIT}$i --unzip -r --noexpire --analyse >${ROOTDIR}viruswarnung
    # folgendes prueft, ob im benanten Verzeichnis Dateien
    # vorhanden sind,
    # wenn Dateien vorhanden sind wird die Schleife ausgefuehrt
    # wc -w zaehlt die Vorkommen
    if [ $? -eq 13 ] ;
    then
    # Bei Virenbefall Hinweisdatei in Ausgabeverzeichnis erstellen
    cp ${ROOTDIR}virushinweis ${OUTDIR}/$i/virushinweis
    # Dateien im Virenpruefverzeichnis loeschen
    # Orginalzip in Virusverzeichnis verschieben und in in $INDIR loeschen
    cp -r -f ${ARBEIT}$i ${VIRUS}
    rm ${ARBEIT}$i
    mail -s "Virus in $i gefunden " v-virus.sys@domaene.de<${ROOTDIR}viruswarnung
    else
    # Zipdatei in Arbeitsverzeichnis entpacken
    /usr/bin/unzip ${ARBEIT}$i -d ${ARBEIT}$i.dir
    # Dateien auf Programme testen
    # Dateien mit .exe, .dll, .ins usw
    # GROSS- und klein-Schreibung beachten, da unter LINUX relevant
    # Wenn Programm nur Datei mit Programmhinweis
    # nach Ausgabeverzeichnis kopieren
    cd ${ARBEIT}$i.dir
    # auch in Untervezeichnissen nach Dateien suchen und
    # in Datei ausgeben
    ls -R > ${ARBEIT}datei.gefunden
    # die Liste nach Mustern durchsuchen und die gefunden Stellen zaehlen
    DATANZAHL=$(cat ${ARBEIT}datei.gefunden |grep -f ${ROOTDIR}dateiliste|wc -w)
    if [ $DATANZAHL -ne 0 ] # Programminhalte gefunden
    then
    cp ${ROOTDIR}programmhinweis ${OUTDIR}/$i/programmhinweis
    rm ${ARBEIT}datei.gefunden
    mkdir ${ABLAGE}$i
    cp -r -f ${ARBEIT}$i ${ABLAGE}$i/
    rm -r ${ARBEIT}*
    mail -s "Programm in $i gefunden " w.ginzky@domaene.de<${ROOTDIR}programm
    else
    # kein Virus und keine Progamminhalte gefunden
    # Dateien werden dem Benutzer zur Verfuegung gestellt
    /usr/bin/unzip ${ARBEIT}$i -d ${OUTDIR}$i
    cd ${ROOTDIR}
    rm -r ${ARBEIT}*
    mail -s "Zip wurde entpackt" w.ginzky@domaene.de<${ROOTDIR}program.txt
    fi
    fi
    done # Ende for-schleife

    exit 0
    </pre>

  2. #2
    Gast

    Post

    Hallo,
    entschuldige, wenn ich es nicht richtig geschrieben habe. Das Script geht, aber das heißt nicht, das es wirklich fehlerfrei ist.
    Außerdem dachte ich mir, daß es vielleicht ganz nützlich ist, wenn auch mal Lösungen besprochen werden. Da kann man immer mal abkupfern :-) .
    Zu Deinen Fragen, das ist gewollt:
    1) es sollen nur Zip´s ausgepackt werden, die heißen immer so, oder?
    2) das Verzeichnis muß leer sein, sonst beeinflußt event. eine alte Datei die Virenprüfung.
    MfG,
    Werner

  3. #3
    pitu
    Gast

    Post

    <pre>

    cd ${INDIR}
    # for i in *.zip
    for i in $(ls) <- Funktioniert natuerlich nur, wenn
    wirklich alle Dateien Zips sind.

    do
    # Ausgabeverzeichnis erstellen
    cd ${INDIR}
    echo "Schleife $i"
    mkdir ${OUTDIR}$i
    # verschieben der Datei in ein Arbeitsverzeichnis auf dem Linux-Server
    # da sonst event. der Virenscanner auf dem Novellserver in den Ablauf
    # durch loeschen eingreift
    rm -r ${ARBEIT}* <- Mit jedem Schleifendurchgang loescht du
    hier den Inhalt vom Verzeichniss. Absicht?


    </pre>


    Der Rest schaut auf den ersten Blick OK aus. Wo taucht der Fehler denn auf? wie macht es sich bemerkbar, was tut das Script denn nicht?

    thorsten


    ------------------
    Thorsten Wandersmann
    SuSE GmbH, Nuernberg


    [Dieser Beitrag wurde von Thorsten Wandersmann am 22. September 2000 editiert.]

  4. #4
    pitu
    Gast

    Post

    Zu 1.
    Du laesst bei deiner Lösung zu, das ALLE sich im Verzeichniss befindlichen Dateien als Zips behandelt werden. Wenn jetzt was dareinkopiert wird, was kein Zip ist, wird die Datei trotzdem als solches behandelt.

    In der Annahme das Zip-Archive immer .zip heissen (oder .ZIP) ist das ls *.zip schon besser. wegen der Groß-/Kleinschreibung:

    for i in `ls *.[Zz][Ii][Pp]`

    Damit hast du alle Möglichkeiten der Schreibweise berücksichtigt.

    Eine andere Möglichkeit waere natürlich das file zu überpruefen:

    <pre>
    FILE=`file $i`
    case "$i" in
    *"Zip archive"*)
    echo $i ist ein Zip-Archiv
    ;;
    esac
    </pre>

    Damit ist die Namesgebung nun wirklich egal.

    Zu 2.: Ja klar, ich wollte nur sichergehen, das es das ist was du in dem Fall wolltest.

    zu nicht fehlerfrei: Wie macht sich das bemerkbar?

    zu besprechen: gute Idee. Schön waere es noch, wenn Leerzeilen ohne Probleme erhalten werden. Eine Idee an den Admin (für nach dem Urlaub ) : Wie waere es damit, das in den Scripten nach pre und /pre gesucht wird, und dazwischen die Leerzeilen zu einem /pre pre umgewandelt werden?

    thorsten

    ------------------
    Thorsten Wandersmann
    SuSE GmbH, Nuernberg

  5. #5
    Gast

    Post

    Hallo,
    vielen Dank für die Hilfe,
    mein Script scheint nun zu laufen :-) .
    MfG,
    Werner

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •