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
!!!