PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : User-Passwort-Abgleich



gorgophol
23-03-2009, 13:50
Hallo,

ich bräuchte eine Idee, wie ich folgendes Problem lösen kann:

Ich hab auf meinem Linux-Server viele User in mehreren Gruppen organisiert. Alle User die angelegt sind, sind berechtigt meine Tools für den Build zu nutzen.

Ich möchte jetzt also eine vorhandene User-Passwort-Kombination in mein Script übergeben und einfach als Ergebnis ein OK oder NOTOK erhalten.

Wie kann ich das realisieren?
Ich habs per sudo versucht, aber dann müsste ich erst alle für sudo berechtigen. Das ist zuviel Aufwand.

Hat jemadn ne andere möglichst einfache Idee?

Vielen Dank und schöne Grüße,
Gorgophol

msi
23-03-2009, 18:14
was du suchst ist das auth_pam modul für apache.
unter debian libapache2-mod-auth-pam

gorgophol
24-03-2009, 06:50
Unter Apache hab ich ja keine Probleme. Wenn das ganze über ne Webseite läuft kümmert sich der Webserver automatisch um die Prüfung.

Aber wie komm ich da von außen ran?

User und Passwort werden später über nen eigenen Autorisierungsdialog eingegeben. Das kann ich ja nicht einfach vom Apache prüfen lassen, oder?

Linux hat ja die Funktionalität, die müsste doch über ein "einfaches" Shell-Script nutzbar sein, oder?

msi
24-03-2009, 16:41
wie verwenden denn deine nutzer die tools? über das web? oder anderst?

wenn sie es übers web machen kannst du dem apache sagen, dass er die nutzern authentifizieren und autorisieren soll. das geht mit dem angebgeben modul.



User und Passwort werden später über nen eigenen Autorisierungsdialog eingegeben.

:eek: user und passwort werden für die authentifizierung verwendet, das hat erstmal mit der autorisierung gar nichts zu tun

wenn du das ganze nur mit einem script machen willst, googel mal nach pam.

gorgophol
25-03-2009, 07:56
Momentan läuft die Authentifizierung über den Apache, weil sich die User die Tools über ne Webseite starten müssen.

Der Teil fällt in Zukunft weg, weil ich meine Tools in Eclipse integriere. Die neuen Eclipse-Plugins kommunuzieren über einen XML-Datenstrom mit einem kleinen Java-Server-Progrogramm, das die jeweiligen Aktionen auf dem Build-Server startet und die Ergebnisse wieder per XML-Strom ans Eclipse-Plugin zurück liefert.

Das funktioniert soweit alles. Nur hab ich keinen Apache mehr. Daher sollen sich die User einmalig in einem Eclipse-Dialog anmelden und ich möchte irgendwie nur ganz einfach überprüfen, ob diese User-/Passwort-Kombination auf dem Server vorhanden ist.

Das CVS-Plugin von Eclipse schafft das ja auch irgendwie. Jeder vorhandene User, kann sich mit dem CVS auf dem Server verbinden, mit seiner User-/Passwort-Kombination.

PAM bzw JPam ermöglichen das sicher auch, sobald ich das mal durchschaut hab. :-) Ich wollte mich nur idealerweise nicht in noch mehr neues einarbeiten und hab auf ne Lösung gehofft wie :

logon USER PASSWORT
return 0 wenn erfolgreich, 1 wenn nicht erfolgreich

Und schon kann ich das meinem Eclipse-Plugin zurückmelden.
Wenn das irgendwie so einfach ginge würde es mir die Arbeit mit JPam ersparen. Das war mein Anliegen :-)

jan61
25-03-2009, 19:40
Moin,

vielleicht hilft Dir das hier:

jan@jack:~/tmp> apropos chkpwd
unix2_chkpwd (8) - helper binary that verifies the password of the current user
unix_chkpwd (8) - helper binary that verifies the password of the current user
jan@jack:~/tmp> man unix_chkpwd
Jan

gorgophol
21-04-2009, 07:48
Hallo,

Danke für den Tipp. Allerdings hat mich das auch nicht wirklich weitergebracht.
chkpwd gibts bei mir gar nicht. Auch sonst hab ich keine Man-page gefunden, die mein Problem beschreiben würde ...

Hat noch jemand eine Idee?
Kann doch nicht sein, dass das noch nie jemand machen wollte :-)

jan61
21-04-2009, 21:42
Hallo,

Danke für den Tipp. Allerdings hat mich das auch nicht wirklich weitergebracht.
chkpwd gibts bei mir gar nicht...

Die Kommandos heißen ja auch unix_chkpwd bzw. unix2_chkpwd. Steht doch in der apropos-Ausgabe drin! *Maul-Modus: Wer lesen kann ist stark im Vorteil*

Jan

gorgophol
22-04-2009, 06:45
Meine apropos-Ausgabe liefert aber NICHTS!

chkpwd: nothing appropriate

Dass die Kommandos mit unix anfangen hatte ich schon gemerkt ;-) Aber als das nicht ging, dachte ich such selbst und hab festgestellt, es gibt nix mit chkpwd ...

Maul-Modus also bitte wieder deaktivieren :-)

undefined
22-04-2009, 10:42
Ich möchte jetzt also eine vorhandene User-Passwort-Kombination in mein Script übergeben und einfach als Ergebnis ein OK oder NOTOK erhalten.
Kurz und bündig NEIN weil:
Ein Passwort wird nur einmal zum login verglichen - das war es dann. Danach kannst du nur noch die user Permissions verwalten.
Es spricht gegen jede Sicherheits Philosophie das man unter Linux während einer Sitzung oder sonst irgendwie Passwörter einlesen kann.
Wenn du so etwas steuern willst Lese die docu von sudo in verbindung mit den Gruppen rechten.

jan61
23-04-2009, 19:43
Moin,


Kurz und bündig NEIN weil:
Ein Passwort wird nur einmal zum login verglichen - das war es dann. Danach kannst du nur noch die user Permissions verwalten.
Es spricht gegen jede Sicherheits Philosophie das man unter Linux während einer Sitzung oder sonst irgendwie Passwörter einlesen kann.
Wenn du so etwas steuern willst Lese die docu von sudo in verbindung mit den Gruppen rechten.

Was soll dagegen sprechen, einen Usernamen nebst Passwort in einer Anwendung abzufragen und zu prüfen? Wird doch ständig gemacht - bei der Anmeldung hier im Forum z. B.

Und gegen welche Datenbasis das gemacht wird, das ist dann eben Sache der Anwendung. Warum soll das nicht gegen die Benutzerdatenbank des Unix-Systems gehen? Eine ausgewachsene Single-Sign-On-Lösung wäre wahrscheinlich der bessere Weg, aber auch der deutlich aufwändigere.

@gorgophol: Ich habe hier mal nachgeguckt.
unix_chkpwd liegt bei mir unter /sbin und ist Bestandteil des RPM pam-1.0.2-13.3 (open SuSE 11.1). Vielleicht hilft Dir das beim Suchen.

Wo liegen bei Dir die Benutzerdaten? Noch traditionell in /etc/passwd und /etc/shadow? Wenn ja, dann hätte ich ein kleines C-Programm für Dich - aber mit deutlicher Warnung in Bezug auf Risiken und Nebenwirkungen ;-)

undefined
24-04-2009, 08:16
Moin,
Was soll dagegen sprechen, einen Usernamen nebst Passwort in einer Anwendung abzufragen und zu prüfen? Wird doch ständig gemacht - bei der Anmeldung hier im Forum z. B.

Also nochmal - Passwörter werden einmal zum Login verglichen (auch in diesem Foren wird das so gemacht) danach wird alles über die ID oder Beutzerrichtlinien gesteuert.
Ein Passwort kann man nicht einlesen (oder sollte nicht einlesbar sein) und so wie er es beschrieben hat dieses während einer Sitzung zu vergleichen geht definitiv nicht. Weil ein Passwort nicht in einer Session gespeichert wird. (Wer so etwas macht sollte sich mal Gedanken über die Sicherheit von Session daten machen).
Du kannst natürlich, z.B: mit pam und sasl für bestimmte Programme ein Passwort abfrage einbauen. Aber mal ehrlich - geben wir nicht schon genug Passwörter ein?
Das geht mit einer gut aufgebauten Gruppen Struktur und einer Gruppen Richtlinie in sudo wesentlich einfacher und vor allem effizienter.
Ich weiß auch nicht was ihr hier mit Aufwand meint, ich brauche dafür max. 10 Minuten und bin in hinsicht von neuen Benutzern einpflegen Modular.

jan61
24-04-2009, 19:33
Moin,


Also nochmal - Passwörter werden einmal zum Login verglichen (auch in diesem Foren wird das so gemacht) danach wird alles über die ID oder Beutzerrichtlinien gesteuert.

Ja, und ganz genau das will der OP ja:

Daher sollen sich die User einmalig in einem Eclipse-Dialog anmelden und ich möchte irgendwie nur ganz einfach überprüfen, ob diese User-/Passwort-Kombination auf dem Server vorhanden ist.
Es handelt sich also um einen ganz normalen Login in eine Anwendung, die webbasiert läuft und für die es bisher eine vorgeschaltete Authentifizierung durch den Webserver gab - die fällt weg und er sucht einen Ersatz.

Ich kenne zwar die Einzelheiten der Anwendungsstruktur nicht, aber es scheint mir aus den Postings eindeutig hervorzugehen, dass die Leute sich eben nicht lokal auf dem Server anmelden - damit fallen die ganzen schönen Ideen mit Gruppenrechten, sudo usw. weg.

Die Idee, es den Benutzern ersparen zu wollen, sich eine zusätzliche Benutzerkennung merken zu müssen und die offenbar schon existierenden Kennungen auf dem System zu nutzen, ist doch schon mal ein Schritt in die richtige Richtung.

Jan

gorgophol
27-04-2009, 07:56
Danke Jan, du hast mein Problemchen gut zusammengefasst.
Es ging mir hier ja nicht um Grundsatzdiskussionen, sondern einfach um die Nutzung vorhandener User auf einem Server. Und offenbar geht das ja, schließlich können das diverse Eclipse-Plugins, die sich an anderen Servern anmelden müssen und da die vorhandenen User nutzen (Z.B. ein CVS-Plugin oder das RSE-Plugin).
Ein Kollege hat mir jetzt aus dem RSE-Authentifizierungsmechanismus ein Perl-Script "extrahiert", das offenbar genau das macht, was ich beschrieben habe.

Mal sehen wie gut das jetzt funktioniert :-)
Danke für eure Hilfe.

PS: JA, natürlich geben wir schon viel zu viele Passwörter ein ... Das steht ja außer Frage, aber die Arbeitswelt ist nunmal nicht so perfekt, wie wir sie gerne hätten. Ich kann nicht "auf der grünen Wiese" anfangen und das alles korrekt designen. Das bezahlt mir leider niemand. Klar lohnt es sich langfristig, aber heutzutage will jeder gleich Ergebnisse sehen, und die kann ich liefern oder nicht ... Und es ist ja schön, dass manche Experten hier das alles sehr sehr schnell realisieren können, aber auch da gilt, es sitzen nicht nur solche Experten in den Büros. Und leider gibt einem auch hier keiner die Zeit, sich in alle wünschenswerten Gebiete so gut einzuarbeiten. Wir müssen mit dem auskommen, was wir an Kenntnissen haben und auf dieser Basis Lösungen finden, die wir später auch betreuen können und vor allem die später auch wer anders im Vertretungsfall betreuen kann.

Ganz allgemein:
Ich finde Foren ja eigentlich echt toll und hab selbst schon viele Sachen gefunden, die mir weitergeholfen haben (und ab und an, kann ich auch mal wem helfen :-) ) Ich finde es aber fast jedes Mal extrem schade, dass immer nebenher auch eine Grundsatzdiskussion geführt werden muss, warum man etwas überhaupt macht und warum man nicht "ne richtige Lösung" herstellen will. Ich mein, das kann man ja in so nen Thread mal anmerken, aber es hilft einem doch letztendlich nicht weiter, wenn man nunmal ein Problem hat, das es zu lösen gilt, mit Mitteln auf die man wenig Einfluss hat. Manchmal wünsch ich mir einfach weniger Grundsatz und mehr Problembezug.

jan61
27-04-2009, 18:49
Moin,


...Ein Kollege hat mir jetzt aus dem RSE-Authentifizierungsmechanismus ein Perl-Script "extrahiert", das offenbar genau das macht, was ich beschrieben habe.

Wenn es geht, würde ich das Script gern mal sehen - interessiert mich ;-)

Zu dem Thema "Grundsatzdiskussion" - das wirst Du nicht wegkriegen und ich finde das auch gar nicht schlimm. Notfalls muss man eben seinen Standpunkt nochmal klar darlegen, aber der berühmte "Blick über den Tellerrand" hilft oft, prinzipielle Fehler zu vermeiden - andere Leute haben eben einen anderen Blick auf Dein Problem als Du und sind vielleicht deshalb manchmal auch gute Ideengeber, wie man an seine Probleme anders rangehen kann.

Jan

undefined
27-04-2009, 22:34
Also über solche aussagen kann ich wieder nur fassungslos den Kopf schütteln.
Etwas irgendwie hinbiegen was gegen jede Logik wiederspricht - Hauptsache es läuft. So etwas nennt man in unserer Firma Russisch reparieren. (abgleitet von unseren Auslands einsätzen zu Kommunismus Zeiten wo man froh sein konnte wenn ein Netzteil etc. vorhanden war). Das ist mit einer der Gründe warum in den letzten Jahren viel Software mal so richtig sche.... geworden ist.

gorgophol
28-04-2009, 06:49
Zu dem Thema "Grundsatzdiskussion" - das wirst Du nicht wegkriegen und ich finde das auch gar nicht schlimm. Notfalls muss man eben seinen Standpunkt nochmal klar darlegen, aber der berühmte "Blick über den Tellerrand" hilft oft, prinzipielle Fehler zu vermeiden - andere Leute haben eben einen anderen Blick auf Dein Problem als Du und sind vielleicht deshalb manchmal auch gute Ideengeber, wie man an seine Probleme anders rangehen kann.
Jan

Ich finde es nicht schlimm, wenn man mich darauf aufmerksam macht, dass man ein Problem im Grundsatz anders lösen könnte / müsste. (Das Versuch ich in meinem Job auch, anderen zu erklären.) Ich bin ja gern bereit immer dazuzulernen :-) Nur es hilft halt irgendwann nicht mehr weiter ...

Das Script kann ich posten, sobald ich weiß, dass das funktioniert und wie.

@undefined
Nochmal: Es geht nicht darum etwas hinzubiegen, sondern mit dem auszukommen was man hat. Es ist super, wenn du in deiner Firma das Problem nicht hast und Probleme vom Grundsatz her angehen kannst. Ja das ist besser, aber diese paradiesischen Zustände hat leider nicht jeder!
Und noch eines: Ich kann nicht nachvollziehen, dass das jeder Logik widerspricht. Wie gesagt, ich erstelle Plugins für Eclipse, und habe dort gesehen, dass sämtliche Authentifizierung über User/Passwort auf dem Server läuft (die Beispiele hab ich genannt). Logischerweise würde ich das für mein eigenes Plugin gerne genauso haben. Ich finde das nur konsequent. Ich verstehe nicht, wieso es verkehrt sein soll, ein vorhandenes Authentifizierungsverfahren weiter zu benutzen ...

gorgophol
07-05-2009, 13:15
Für alle Interessierten:
So kann man das in Perl realisieren



#!/usr/bin/perl -w

use Shell;

if (!defined($ARGV[0]) || !defined($ARGV[1]))
{
print("command usage:\n");
print("auth.pl USER, PATH, PORT, TIMEOUT, TICKET\n");
0;
}
else
{
$userIN = $ARGV[0];
$pwdIN = $ARGV[1];
chomp($pwdIN);

@passwdStruct = getpwnam($userIN);

if (@passwdStruct == 0)
{
print("invalid user name\n");
0;
}
else
{
$passwd=$passwdStruct[1];
$encryptedPWD = crypt($pwdIN, $passwd);

if ($passwd eq $encryptedPWD)
{
print("success\n");
1;
}
else
{
print("incorrect password\n");
0;
}
}
}



Gruß,
gorgophol

RHBaum
14-05-2009, 13:37
Mal ne frage, auf welchen systemen hasst das script getestet ???

"normal" sollten die gecrypteten passwoerter doch in der shadow datei liegen, auf die kann nur der root drauf ....

das heisst, dein prog muesste unter root rechten, oder mit SUID und root eigentuemer laufen.
oder du muesstest die shadow datei allen zugaenlich machen....

Jedem linux System Administrator muessten natuerlich hier jetzt die Haare vom kopf abstehen, wie nach ner direkten Beruehrung mit nem Blitz ^^

und es bleibt die Frage, was ist mit systemen die sich gegen einen NIS oder Cerberos dienst autentifizieren, also ein linux client der selber gar keine user (ausser root) kennt ???

Um User gegen das betriebssystem zu authentifizieren,(und ja das ist eine öfters genutzte und gefragte funktion) gibts halt PAM ... damit es ned jeder selber machen muss. Die PAM Schnittstelle ist aber gar ned so kompliziert. Meist ist die schneller implementiert, als wie man sich mit anderen ueber Grundsaetze streitet ^^

Klar kann man immer Kompromisse machen. Aber kompromisse sollten ned lange leben ....
Mach deine authentifizierung modular ... nutze von mir aus erst mal die "dirty" variante ... aber tausch die so schnell es geht gegen eine "sicherere" aus.

Btw, was fuer Administratoren habt ihr, die sowas zulassen wuerden ???

Ciao ...

jan61
15-05-2009, 20:53
Moin,

im Prinzip hast Du recht - aber es ging hier nur um ein konkretes System. Dass man diese Lösung nicht verallgemeinern kann, ist natürlich klar.

Jan