Benutzer Shell für Profis

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von deadman, 13.09.2006.

  1. #1 deadman, 13.09.2006
    deadman

    deadman Grünschnabel

    Dabei seit:
    13.09.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo.

    Ich bin gerade in meiner Ausbildung und beschäftige mich viel mit Linux. Ich lese immer sehr viel hier in diesen Forum von Anderen.
    Nun habe ich mich auch mal hier angemeldet, weil ich einfach nicht weiterkomme.
    Ich bin kein Profi im Shell. Ich probiere gern mit Linux und mit der Shellprogammierung. Jetzt habe ich eine Aufgabe bekommen und zwar soll ich nen Script schreiben was folgendes macht:


    Überprüfung aller Benutzerkonten mit folgenden Kriterien:
    1. ist der letzte Zugriff(Anmeldung) älter als 1. Jahr dann den Benutzer und das Homeverzeichnis von Benutzer löschen.

    2.ist der letzte Zugriff älter als 6 Monate(bis 1 Jahr) dann soll der Benutzer eine E-Mail vom System(Root) bekommen mit folgenden Inhalt:
    "Letzter Zugriff(Anmeldung) am ....
    Passwort bitte ändern!"

    3.ist der letzte Zugriff äkter als 3 Monate(bis 6 Monate) dann soll der Benutzer ein Hinweis bei der Anmeldung bekommen und zwar:
    "Hallo, Sie waren lange nicht angemeldet."

    Ich habe auch schon nen paar Befehle gefunden:
    /usr/sbin/usermod
    /usr/sbin/userdel
    /usr/sbin/useradd
    /usr/bin/id

    lastlog --> weiß nicht ob das auch klappt???(

    Ich sitze schon zwei Tage dran bekomm das Script auch irgendwie nicht zusammen. Bin ich zu dumm oder mach ich nur etwas mit den Befehlen falsch?:(

    Danke
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 hoernchen, 13.09.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    poste doch mal, was du bis jetzt hast. dann koennen wir ueberpruefen was falsch ist.
     
  4. #3 phrenicus, 13.09.2006
    Zuletzt bearbeitet: 13.09.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    Hallo,

    die Anmeldungen werden unter Linux normalerweise in /var/log/wtmp gespeichert. Das Logfile kannst Du nicht mit einem Texteditor anschauen, aber mit "last" auslesen. In der Regel wird das Logfile von logrotate weggepackt, wenn es eine bestimmte Größe oder ein bestimmtes Alter erreicht hat. Bei mir gibt es da z.B. ein File, das wtmp-20060213.gz heißt.

    Du müsstest jetzt für Dein erstes Problem die wtmp-Files zusammenpacken, bis alles innerhalb des letzten Jahres in einem File steht. Alle User, die sich in diesem Zeitraum nicht angemeldet haben, werden dann gesperrt oder entfernt.

    Poste mal Deinen Versuch, das kriegen wir dann schon hin.

    EDIT: Und poste mal Deine Gedanken zum grundsätzlichen Design des Skripts. Woher kommen die Benutzer? Was bringt es, an einen User Mail zu schicken, der sich ohnehin nie anmeldet (und dann seine Mail nie liest) oder soll die Mail woanders hin, wo er sie liest? Wie bekommst Du die System-User von den echten Usern getrennt (Du willst ja keine System-User löschen)?

    Gruß
     
  5. #4 Wolfgang, 13.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Du hast eine Aufgabe bekommen, da macht es wenig Sinn diese hier lösen zu lassen.
    Wir werden dir sicher helfen, wenn du an einem Problem hängenbleibst.
    Bis dahin, solltest du aber erstmal ein paar eigene Ansätze versuchen.

    Schreib dir erstmal den Ablauf auf einen Zettel, und versuche dann die einzelnen Schritte umzusetzen.
    Lies dir dazu die Manpages der benutzen Programme durch.
    Was dir zur Verfügung steht, ist vom System und der verwendeten Shell abhängig.
    Grobe Vorgehensweise als Vorschlag:
    • Zeitpunkte in Tagen ermitteln (man date)
    • Beim ältesten Datum beginnen mit (lastlog -t xxx),
    • Benutzer die verarbeitet wurden kennzeichnen und Gruppieren.(Schnittmenge entfernen)
    • Die drei Benutzergruppen mit jeweiligen Aktionen abarbeiten.

    Noch ein paar Tipps:
    Um die Message zu erzeugen, kann bei einigen Systemen die Variable MOTD_FILE gesetzt werden, was dann die entsprechende Datei ausgibt statt /etc/motd auszugeben.

    Zum Mailen simpel mail user <<EOF ... also Heredocument verwenden.

    Nun viel Glück
    Gruß Wolfgang
     
  6. #5 deadman, 15.09.2006
    deadman

    deadman Grünschnabel

    Dabei seit:
    13.09.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo und danke erstmal für die Antworten

    also mein eigentliches Problem ist ich weiß nicht wie ich anfangen soll und vorallem wo???

    Wolfgang hat mir zwar schon nen paar heiße Tipps gegeben, aber trotzdem scheitere ich am Anfang.
     
  7. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Was hast Du bisher gemacht? Hast Du Wolfgangs Beitrag aufmerksam gelesen? Beschreibe in kleinen Stichpunkten, was das Du für Eingangsdaten hast, was das Skript damit anfangen soll und was als Ergebnis herauskommen soll.

    Gruss, Xanti
     
  8. #7 deadman, 19.09.2006
    deadman

    deadman Grünschnabel

    Dabei seit:
    13.09.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hi. Also hier mal mein Ablaufplan.

    1.Abfrage aller Benutzer

    2.Wenn der Benutzerzugriff älter als ein Jahr (365 Tage) ist
    , dann
    2.1.JA - Löschen des Benutzers + Homeverzeichnis
    2.2.NEIN - Weiter bei 3

    3. Wenn der Benutzerzugriff älter als 6 Monate (180 Tage) ist
    , dann
    3.1.JA - Benutzer bekommt eine E-Mail mit folgenden Text:
    "letzter Zugriff am:..." und "Bitte Passwort ändern"
    3.2.NEIN - Weiter bei 4

    4. Wenn der Benutzzugriff älter als 3 Monate (90 Tage) zst
    , dann
    4.1. JA - eine Nachricht schciken mit folgenden Inhalt:
    "Hallo, du warst lang nicht mehr angemeldet."
    4.2. NEIN - Nichts tun.

    So ich hab schonmal nen bisschen rumprobiert. Und zwar hab ich ein Problem den LASTLOG -t macht das mit den Tagen genau verkehrtherum.

    Muss ich das wenn mit if machen?

    Danke Vielmals
     
  9. #8 Wolfgang, 19.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Du musst die Bedingungen von der kürzesten Zeit an abfragen.
    lastlog -t10 gibt dir die User aus, die innerhalb der letzten 10 Tage eingelogt waren.
    Wenn du deine Userliste durchgehst, dann benutze die Filter von der kürzesten Zeit bis zur längsten. Verlasse die Abfrage wenn du einen Treffer hast.
    Wer also in den letzten 90 Tagen eingelogt war, war ja auch innerhalb des letzten jahres eingelogt. logesch ;)

    Also würdest du nun drei Gruppen erstellen. Entweder Array oder Dateien.

    • Userliste durchgehen
    • Abfragen ob innerhalb der letzten 90 Tage der User auftaucht. Wenn Ja, in Liste 1 eintragen und nächsten User ( continue)
    • Sonst abfragen ob länger als ein halbes Jahr.elif ¹Wobei du die Anzahl der Tage für ein halbes Jahr noch ermitteln musst!
      Wenn Ja, in Liste 2 eintragen und nächsten User ( continue)
    • Sonst abfragen ob länger als ein Jahr.elif
      Wenn Ja, in Liste 3 eintragen und nächsten User ( continue)
    • Benutzer war noch nie eingelogt.else
    ¹ Ein halbes Jahr ist nicht 180 Tage, und variiert abhängig davon in welchem Monat du stehst, wenn es nach Monaten berechnet wird. 1/2 Jahr = 6 Monate.
    Das ist aber eine Definitionsfrage des Aufgabenstellers.

    Also schau dir mal date an. Wenn du GNU date hast, hast du schon gewonnen. ;)

    Hier noch ein Link für eine sehr gute Einführung in die bash (hab gleich zu if then else verlinkt.)
    bashbefehle

    Gruß Wolfgang
     
  10. #9 deadman, 20.09.2006
    deadman

    deadman Grünschnabel

    Dabei seit:
    13.09.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo also ich habe hier mal die Shell, habe aber noch ein paar kleine Fragen. Habe es immer etwas leiner dahinter geschrieben.

    #!/bin/bash

    if [ lastlog -t 90 ]; then Ich weis hier nicht wie ich die Bedingung schreiben muss.
    #Uberprufung, welcher Benutzer in den letzten 90 Tagen angemeldet war

    #Eintragen der User in Liste1Wie trage ich etwas in eine Liste ein? Ich weis leider nicht wie man einen Array benutzt. Die Seite die du mir gegeben hast ist gut. Habe aber dort nichts zu einen Array an.

    elif [ lastlog -t 180 ]; then
    #Uberprufung, welcher Beuntzer in den letzten 180 Tagen angemeldet war

    #Eintagen der User in Liste2

    elif [ lastlog -t 365 ]; then
    #Uberprufung, welcher Benutzer in den letzen 365 Tagen angemeldet war

    #Eintragen der User in Liste3

    fi

    #Abarbeiten der Liste1
    #User eine Mitteilung schicken
    MODT_FILEWie wahle ich denn hier die User wieder aus, die in der Liste sind und wie benutze ich den diesen Befehl.

    #Abarbeiten der Liste2
    #User eine E-Mail schicken
    Mail user

    #Abarbeiten der Liste3
    userdel -m user




    Wenn ihr sonst noch irgend wo einen Fehler findet, dann teilt es mir bitte mit.

    Danke
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 Wolfgang, 20.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Du hast hier keine Shell, sondern Codefragmente für ein Skript.
    Wie ich sehe, fehlen dir aber wirklich essentielle Grundlagen, was du nachholen solltest. Sonst wirst du diese Aufgabe definitiv nicht lösen können.

    Ein fertiges Skript würde dir insofern auch nix bringen, da du nicht verstehen würdest was da passiert.
    Also schau dir erstmal die Variablentypen an.
    Schau dir an, wie du mit Returnwerten von Befehlen umgehst.
    Schau dir an, wie du über eine datei iterierst und die Eingabe bearbeitest.
    Schau dir die Verwendung von grep an.
    Das finsdest du übrigens alles in den von mir gegebenen Link sehr ausführlich.
    Du musst dir halt die Zeit nehmen.

    Kleines Beispiel wie ich eine Datei einlese und das Ergebnis auswerte.
    Hier lese ich alle user aus der /etc/passwd ein und gebe den user in die Datei userliste aus.
    Du musst also die Ausgabe von lastlog nach den usern durchsuchen.

    Ich gebe dir mal noch einen Schnellschuss, der die halbe Arbeit macht.
    Aber er wird dir erst etwas nützen, wenn du verstehst was da passiert.
    Code:
    while read  line ;
     do
     U="$(echo $line|cut -d: -f1)";
       if [ "$(lastlog -t90|grep "$U")" ];
       then
       echo "$U war vor 90 Tagen hier";
       continue;
       elif [ "$(lastlog -t120|grep "$U")" ];
       then
       echo "$U war vor 120 Tagen hier";
       continue;
       else   
       echo "$U war schon lange nicht hier";
       fi;
    done</etc/passwd 
    
    Verstehen kannst du das, wenn du dir mal die man :rtfm: zu den verwendeten Befehlen durchschaust.
    Tipp:
    Achte auf das continue, was weitere Abfragen unterbindet wenn die erste bedingung erfüllt ist und die nächste Runde einleitet.
    Noch ein Tipp:
    echo "Ich bin gleich in Datei liste1">>liste1
    Schreibt den Text in Datei liste1
    ;)
    Gruß Wolfgang
     
  13. #11 deadman, 21.09.2006
    deadman

    deadman Grünschnabel

    Dabei seit:
    13.09.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hi. Danke Wolfgang du bist der Beste.

    Also ich habe die Shell mal zuende gebracht.

    Ich fuehre mir heute abend nochmal die komplette Bashanleitung, die du mir gegeben hast zu Gemuehte.

    Ich ueberpruefe es heute abend nochmal zu Hause, denn hier hab ich nur DSL(Damn Small Linux) und das kennt nicht alle Befehle.

    Falls Ihr noch einen Fehler findet, teilt ihn mir bitte mit.

    Danke
     
Thema:

Benutzer Shell für Profis

Die Seite wird geladen...

Benutzer Shell für Profis - Ähnliche Themen

  1. Shell Script zum Benutzer anlegen

    Shell Script zum Benutzer anlegen: Hallo, ich suche mir schon nun einige Zeit die Finger im Internet wund und habe auch schon einiges gefunden aber nichts hat mich bisher weiter...
  2. Shell-Skript soll nach Abmeldung des Benutzers weiterlaufen

    Shell-Skript soll nach Abmeldung des Benutzers weiterlaufen: Hi, Ich habe ein Shell-Script geschrieben, dass auf einem Server laufen soll. Diesen erreiche ich per ssh. Das Skript kann unter Umständen...
  3. eigenes shell-script zum erstellen von benutzern

    eigenes shell-script zum erstellen von benutzern: hallo zusammen, Ich möchte ein eigenes Script erstellen, welches einen Benutzer anlegt und für diesen noch zusätzlich in dessen...
  4. PHP Skripte werden nur im Verzeichnis des jeweiligen Benutzers ausgeführt

    PHP Skripte werden nur im Verzeichnis des jeweiligen Benutzers ausgeführt: Hallo zusammen, ich bin mit meinen Domains auf einen neuen Webserver umgezogen. Ein Teil meiner Domains lief auf Drupal als...
  5. Bareos 15.2 mit neuer Benutzeroberfläche

    Bareos 15.2 mit neuer Benutzeroberfläche: Die freie Backup-Lösung Bareos wurde in Version 15.2 veröffentlicht. Die Neuerungen der aktuellen Version umfassen unter anderem eine verbesserte...