8.13.3 login blockieren Aufgabenstellung

Ein Mitarbeiter hat längere Zeit Urlaub. Es soll kein Login auf seinem Account mehr möglich sein. Schreiben Sie ein Script in mit dem das Kennwort auf * d.h. NOLOGIN gesetzt wird. Das alte Kennwort soll im 5. Feld (GECOS-Teil )abgelegt werden. Das Script sollte mit BSD und System V (/etc/shadow ) zurechtkommen.

8.13.3.1 Login blockieren Lösung

  
#! /bin/ksh # ------------------------------------------------------------- # Erzeugt : 21.02.97 # Autor : root # Beschreibung : Sperrt einen Benutzer, indem /etc/passwd auf # nologin gesetzt wird # ------------------------------------------------------------- # Modif.Log : #: FPATH=/usr/local/lib/func_lib:/root/lib/func_lib autoload kopf prompt_jn pos cont # ------------------------------------------------------------- # Definieren Sie nachfolgend Ihre eigenen Funktionen # ------------------------------------------------------------- usage() { cat << !!! Das Script $0 sperrt den Login indem in /etc/passwd das Kennwort auf * d.h. NOLOGIN gesetzt wird. es darf nur von SU ausgeführt werden. !!! exit } # ------------------------------------------------------------- # Mainscript user_deny # ------------------------------------------------------------- kopf "User auf NOLOGIN setzen" echo if [ "$1" = "-?" ] ; then usage ; fi if [ ! -O /etc/passwd ] then echo "Sorry! Nur Su darf sperren " exit 1 fi # Nur user mit Usernummer > 100 herausgreifen user=`grep '^[^:]*:[^:]*:[1-9][0-9][0-9][0-9]*:' /etc/passwd | cut -f1 -d:` echo $user # Wir arbeiten an Kopien der Dateien pid=$$ new_passwd=/tmp/passwd${pid} new_shadow=/tmp/shadow${pid} cp /etc/passwd $new_passwd if [ -r /etc/shadow ] then cp /etc/shadow $new_shadow chmod 600 $new_shadow fi PS3="Ihre Wahl oder ^D " pos 4 0 select ausw in $user do echo echo "Antwort = $REPLY Selektiert $ausw " if [ ${#ausw} = 0 ] then echo "Auswahl ungültig (nicht vorhanden)" pos 4 0 continue # Überspringe Rest der Schleife fi cat $new_passwd | grep $ausw # zeige Satz sh_pw="" if [ -r $new_shadow ] then # extrahiere Kennwort aus der shadow Datei sh_pw=`cat $new_shadow | grep $ausw | cut -f2 -d:` cat $new_shadow | grep $ausw # zeige Satz an fi # ------------------------------------------------------------- # AWK wird für /etc/passwd und für /etc/shadow gerufen # # ------------------------------------------------------------- # hahn:x:503:100:Detlef Hahn,,,:/home/hahn:/bin/ksh # $1 $2 $3 $4 $5 $6 # ------------------------------------------------------------- awk -v user=$ausw -v sh_pw=$sh_pw ' BEGIN { FS = ":" ; OFS = ":" } $1 == user { if ( sh_pw == "" ) # steht Kennwort in passwd ? { $5 = $5 "@" $2 # ja, dann umsetzen $2 = "*" # und blockieren } else # Es existiert eine shadow Datei { # d.h das Kennwort wurde übergeben $5 = $5 "@" sh_pw } } { print $0 } ' $new_passwd > ${new_passwd}_awk # ------------------------------------------------------------- # hahn:Dx5eU4PktU/ZU:9909:0:30:15:10:19877: # $1 $2 # ------------------------------------------------------------- if [ -r $new_shadow ] then awk -v user=$ausw ' BEGIN { FS = ":" ; OFS = ":" } $1 == user { $2 = "*" } { print $0 } ' $new_shadow > ${new_shadow}_awk mv ${new_shadow}_awk $new_shadow fi # ------------------------------------------------------------- mv ${new_passwd}_awk $new_passwd pos 4 0 done pos 15 kopf cat $new_passwd cont kopf cat $new_shadow cont prompt_jn "Dateien zurückschreiben " if [ $? = 0 ] then cp /etc/passwd /etc/passwd_awk mv $new_passwd /etc/passwd if [ -r /etc/shadow ] then cp /etc/shadow /etc/shadow_awk mv $new_shadow /etc/shadow chmod 400 /etc/shadow fi fi


8.13.4 login zulassen Aufgabenstellung


Der Mitarbeiter ist zurückgekehrt. Schreiben Sie ein Script, welches das alte Kennwort restauriert.
   
#! /bin/ksh # ------------------------------------------------------------- # Erzeugt : 21.02.97 # Autor : root # Beschreibung : Schreibt Kennwort zurück, erlaubt Login # ------------------------------------------------------------- # Modif.Log : #: FPATH=/usr/local/lib/func_lib:/root/lib/func_lib autoload cont kopf pos prompt_jn # ------------------------------------------------------------- # Definieren Sie nachfolgend Ihre eigenen Funktionen # ------------------------------------------------------------- # ------------------------------------------------------------- # Mainscript login_allow # ------------------------------------------------------------- cat &lT;< !!! Schreiben Sie das Script, damit ein User wieder mit seinem alten Kennwort aktiviert wird. Hinweis : benutzen Sie pos=index(str,"@") und substr(str,pos+1) um das alte Kennwort zu extrahieren !!!