Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[gelöst] Bash Script: Benutzerdaten überprüfen

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
matmonst
Newbie
Newbie
Beiträge: 3
Registriert: 26. Jan 2005, 16:32

[gelöst] Bash Script: Benutzerdaten überprüfen

Beitrag von matmonst »

Hallo @ all.
Wir schreiben zZ in PHP, mysql an einem Teil unserer Schulwebseite und wollen einen bereich, in dem nur Schüler, die sich mit korrekten Netzwerkusername/Netzwerkpasswort eingelogged haben. das ganz läuft auf artkur - c't Komm. Server für Schulen. Niemand von uns hat AHnung von Bash bzw Linux. Wir haben dieses Bashscript rausgekramt, welches das NW Passwort eines User ändert:

Code: Alles auswählen

#!/bin/bash
#
# change.cgi
#
# Copyright (C) 1997 Andreas Furbach <zene@afu.ping.de>
# Anpassungen an V3.0 von Reiner Klaproth <klaproth@online.de>
# Neues Lock-Schema Klaus Werner < kwerner@ash.ks.he.schule.de>

passchange ()
{
 local SU_ID=SuSuSuSu
 local OK_ID=OkOkOkOk
 local LCK_ID=LCKLCK
 test -z "${FORM_newpass}" && return 2
 local RESULT="$(echo "${FORM_oldpass}" | /bin/su -s /bin/bash -l -c \
 "(echo "${SU_ID}"; \
      { echo "${FORM_oldpass}" | \
        sudo /usr/sbin/passchange ${FORM_newpass} > /dev/null ; \
      erg="\$\?" ; }; \
      if   [ "\$erg" -eq "0" ]; then echo "${OK_ID}" ; \
      elif [ "\$erg" -eq "3" ]; then echo "${LCK_ID}" ; \
      fi ) " \
 ${FORM_uid} )"
 test -n "$(echo "${RESULT}" | grep "${LCK_ID}")" && return 3
 test -n "$(echo "${RESULT}" | grep "${OK_ID}")" && return 0
 test -n "$(echo "${RESULT}" | grep "${SU_ID}")" && return 1
 return 2
}

read QUERY_STRING
export QUERY_STRING
eval `cgiparse -form` 

cgiutils -ct text/html -expires now

cat << xxxxxEOFxxxxx
<html>
<head>
<title>Passwort Abfrage</title>
</head>
<body background="whttxtr2.jpg">
<h1 align=center>Passwort &auml;ndern</h1>
<hr>
<h3 align=center><font color="#FF0000">Schlie&szlig;en Sie den Browser, bevor
Sie den Arbeitsplatz verlassen!</font></h3>
<hr>
<CENTER><H3>
xxxxxEOFxxxxx

if [ "${FORM_newpass}" = "${FORM_newpass1}" ]; then
	FEHLER=0
	# Stufe 1: Gibts den User?
	x=`grep "^${FORM_uid}:" /etc/passwd`
	if [ -z $x ]; then
		echo "<P><FONT COLOR=\"#800000\">Zugriff abgelehnt!</FONT><BR>"
		FEHLER=1
	    elif [ `echo $x | cut -d: -f3` -lt 1000 ]; then
		echo "<P><FONT COLOR=\"#800000\">Zugriff abgelehnt!</FONT><BR>"
		FEHLER=1
	fi
	# Zweite Stufe: Ist das Passwort brauchbar?
	lpass=${#FORM_newpass}
	if [ $lpass -lt 5 ]; then
	         echo "<P><FONT COLOR=\"#800000\">Das neue Passwort war zu kurz!</FONT><BR>"
		 FEHLER=1
	fi
	echo "${FORM_newpass}" | grep -q -v -E "[^A-Za-z0-9_-]"
	if [ $? != 0 ] ; then
		echo "<P><FONT COLOR=\"#800000\">Das neue Passwort enthielt ung&uuml;ltige Zeichen! </FONT><BR>"
		FEHLER=1
	fi
	# letzter Test: funzt das alte Passwort?
	echo "${FORM_oldpass}" | grep -q -v -E "[^A-Za-z0-9_-]"
	if [ $? != 0 -o ${#FORM_oldpass} -lt 3 ] ; then
	         echo "<P><FONT COLOR=\"#A00000\">Das alte Passwort war ung&uuml;ltig!</FONT><BR>"
		 FEHLER=1
	fi
	if [ $FEHLER = 0 ]; then
	       passchange  
	       RESULT="${?}"
	       if [ "${RESULT}" = "0" ]; then
	               echo "<P><FONT COLOR=\"#008000\">Passwort ge&auml;ndert!</FONT>"
        	 elif [ "${RESULT}" = "3" ]; then 
        	       echo "<P><FONT COLOR=\"#800000\">Interface-Anforderung in Bearbeitung</FONT><BR>"
		       FEHLER=1
	         else
	               echo "<P><FONT COLOR=\"#800000\">Zugriff abgelehnt!</FONT><BR>"
	               if test -s /tmp/passchange ; then
	                  cat /tmp/passchange
			  rm -f /tmp/passchange
	               fi 
	               FEHLER=1
	         fi
	     fi
	else
	     echo "<p>Sie haben sich bei der Eingabe des neuen Passworts vertippt!</p>"
	     FEHLER=1
fi

if [ $FEHLER = 1 ]; then
     echo "<p>Das Passwort wurde nicht ge&auml;ndert!</p>"
     echo "<p><a href=\"pass.htm\"><img src=\"redarrow.gif\" align=bottom border=0 width=25 height=13>Versuchen Sie es noch einmal! </a></p>"
fi

cat << xxxxxEOFxxxxx
</H3></CENTER>
<hr>
&copy; Klaus Werner, Reiner Klaproth, 01.10.1999
</body>
</html>
xxxxxEOFxxxxx
es wäre wirklich eine rieseig Hilfe, wenn einer von Euch Linuxpros dieses Script so umschreiben könnte, dass es bei korrekten oldpass / username einfach nur true zurück gibt und bei falschem halt false.
VIelen Vielen, Seeeeeeehr Vielen Dank!!!!!!!
Natürlich ist es auch eine Hilfe wenn jemand sagen könnte falls es mit einem einzigen linux befehl möglich ist (hab aber beim googln nix gefunden) username / passwort zu überprüfen!
MfG
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Re: Bash Script: Benutzerdaten überprüfen

Beitrag von regexer »

matmonst hat geschrieben:Natürlich ist es auch eine Hilfe wenn jemand sagen könnte falls es mit einem einzigen linux befehl möglich ist
Du kannst es doch mit der selben Methode machen, wie sie in deinem geposteten script verwendet wird:

Code: Alles auswählen

echo $passwort | su $user > /dev/null 2>&1
if [ $? = 0 ]
then
  echo erfolgreich
else
  echo nicht erfolgreich
fi
Die Umleitung nach /dev/null ist zu empfehlen, damit die Ausgaben von su nicht auf dem Bildschirm erscheinen. Die echos kannst du natürlich durch anderen Code ersetzen. Wenn du eine function schreiben willst, wäre vielleicht "return" angebracht.
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

ich glaube nicht, das man mit echo ein Passwort an su übergeben kann....

evtl ist sudo hier die bessere Variante.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

oc2pus hat geschrieben:ich glaube nicht, das man mit echo ein Passwort an su übergeben kann....
Doch! Geht! Getestet unter SuSE 7 und 8.
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

notoxp hat geschrieben:
oc2pus hat geschrieben:ich glaube nicht, das man mit echo ein Passwort an su übergeben kann....
Doch! Geht! Getestet unter SuSE 7 und 8.
ok, mein Test war verkehrt. Es klappte nicht weil ich im root Home-Verz stand und auf einen user "su-en" wollte ...


Ich habe so ein ähnliches Problem, aber noch keine Lösung dafür.

rpm -ba --sign xxx.spec fragt mein GPG-Mantra ab um ein rpm zu signieren. Und ich habe noch keine Möglichkeit gefunden das GPG-Mantra irgendwie per commandline zu übergeben... und es mürbt wenn man viele RPMs erstellt und signiert immer wieder sein Mantra einzutippen....
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

oc2pus hat geschrieben:rpm -ba --sign xxx.spec fragt mein GPG-Mantra ab um ein rpm zu signieren. Und ich habe noch keine Möglichkeit gefunden das GPG-Mantra irgendwie per commandline zu übergeben... und es mürbt wenn man viele RPMs erstellt und signiert immer wieder sein Mantra einzutippen....
Hmmm. Habe jetzt auf die Schnelle auch keine Lösung gefunden. Manchmal ist man anscheinend auf verlorenem Posten. Es gibt anscheinend binaries die sich hartnäckig weigern, von der Standardeingabe zu lesen. Ein Problem von mir: Die Korn-Shell sowohl unter TRU64 als auch unter SCO UnixWare akzeptiert das folgende Kontrukt:

Code: Alles auswählen

echo 1 2 3 | read a b c
echo $b
SuSE ignoriert den echo ganz einfach...
matmonst
Newbie
Newbie
Beiträge: 3
Registriert: 26. Jan 2005, 16:32

Beitrag von matmonst »

danke leute werds mal ausprobieren!
matmonst
Newbie
Newbie
Beiträge: 3
Registriert: 26. Jan 2005, 16:32

Beitrag von matmonst »

habs jetzt getestet funzt super! danke!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

matmonst hat geschrieben:habs jetzt getestet funzt super! danke!
Und wie hast du das Problem nun gelöst? Mit "su" oder mit "sudo"? Aus meiner Sicht hat "sudo" den Nachteil der notwendigen Konfiguration...
Benutzeravatar
nbkr
Guru
Guru
Beiträge: 2857
Registriert: 10. Jul 2004, 15:47

Beitrag von nbkr »

Geht um ein Shellscript -> Hinfort ins Konsolenforum damit *g*
Kann gar nicht sein, ich bin gefürchtet Wald aus, Wald ein.
Antworten