
Hallo Liste,
ich will aus einer Webanwendung eine Authenifizierung machen. Der user gibt in einem Login-Screen seinen Usernamen und Passowrt ein. Dieser user ist dem linux-System bekannt.
Jetzt komme ich natürlich nicht an die /etc/shadow ran. klar. Ist ja auch richtig so.
Bietet Python nicht eine Funktion mit der ich das Passwort/User überprüfen kann. So was wie
"bool = chackPasswd(username, passwort)"
Ich brauche je nicht das passwort sondern nur ein True/False ob das angegebene Passowrt mit dem User übereinstimmt.
Google findet nichts. Allerdings habe ich C-Funktionen gefunden die so etwas können. (Was mir aber nicht wirklich weiter hilft) Wegen absoluter C-Nichtkennen-Wollen :)

On Friday 02 November 2007 15:42:21 Roland M. Kruggel wrote:
Hallo Liste,
ich will aus einer Webanwendung eine Authenifizierung machen. Der user gibt in einem Login-Screen seinen Usernamen und Passowrt ein. Dieser user ist dem linux-System bekannt.
Jetzt komme ich natürlich nicht an die /etc/shadow ran. klar. Ist ja auch richtig so.
Bietet Python nicht eine Funktion mit der ich das Passwort/User überprüfen kann. So was wie
"bool = chackPasswd(username, passwort)"
Ich brauche je nicht das passwort sondern nur ein True/False ob das angegebene Passowrt mit dem User übereinstimmt.
Google findet nichts. Allerdings habe ich C-Funktionen gefunden die so etwas können. (Was mir aber nicht wirklich weiter hilft) Wegen absoluter C-Nichtkennen-Wollen :)
Es gab mal ein PAM-modul. Aber dessen Verwendung ist ein bisschen speziell gewesen, uA musste der prozess unter root laufen - was aus anderen gesichtspunkten suboptimal ist.
Und wenn du schon ne C-funktion kennst, dann wird's halt Zeit fuer ctypes.
Diez

--On 2. November 2007 15:42:21 +0100 "Roland M. Kruggel" rk.liste@bbf7.de wrote:
Hallo Liste,
ich will aus einer Webanwendung eine Authenifizierung machen. Der user gibt in einem Login-Screen seinen Usernamen und Passowrt ein. Dieser user ist dem linux-System bekannt.
Jetzt komme ich natürlich nicht an die /etc/shadow ran. klar. Ist ja auch richtig so.
http://docs.python.org/lib/module-spwd.html
-aj

Am Freitag, 2. November 2007 schrieb Andreas Jung:
--On 2. November 2007 15:42:21 +0100 "Roland M. Kruggel" rk.liste@bbf7.de
wrote:
Hallo Liste,
ich will aus einer Webanwendung eine Authenifizierung machen. Der user gibt in einem Login-Screen seinen Usernamen und Passowrt ein. Dieser user ist dem linux-System bekannt.
Jetzt komme ich natürlich nicht an die /etc/shadow ran. klar. Ist ja auch richtig so.
Super! Genau das suche ich.
ABER
import spwd
Traceback (most recent call last): File "<string>", line 1, in <string> ImportError: No module named spwd

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Roland M. Kruggel schrieb:
Am Freitag, 2. November 2007 schrieb Andreas Jung:
--On 2. November 2007 15:42:21 +0100 "Roland M. Kruggel" rk.liste@bbf7.de
wrote:
Hallo Liste,
ich will aus einer Webanwendung eine Authenifizierung machen. Der user gibt in einem Login-Screen seinen Usernamen und Passowrt ein. Dieser user ist dem linux-System bekannt.
Jetzt komme ich natürlich nicht an die /etc/shadow ran. klar. Ist ja auch richtig so.
Super! Genau das suche ich.
ABER
import spwd
Traceback (most recent call last): File "<string>", line 1, in <string> ImportError: No module named spwd
Hast du auch Python >= 2.5 installiert? Das Modul gibt es nämlich erst ab 2.5.
Gruß Marcus

Hallo,
On Fri, 2 Nov 2007 18:19:22 +0100 "Roland M. Kruggel" rk.liste@bbf7.de wrote:
Super! Genau das suche ich.
ABER
import spwd
Traceback (most recent call last): File "<string>", line 1, in <string> ImportError: No module named spwd
Klar, um die Dokumentation zu zitieren: "New in version 2.5."
grüße, Marek

Roland M. Kruggel schrieb:
Am Freitag, 2. November 2007 schrieb Andreas Jung:
Super! Genau das suche ich.
ABER
import spwd
Traceback (most recent call last): File "<string>", line 1, in <string> ImportError: No module named spwd
spwd -- The shadow password database
Availability: Unix. New in version 2.5.
Welche Pythonversion benuzt du?
Chris

Hallo Roland,
On 2007-11-02 18:19, Roland M. Kruggel wrote:
Am Freitag, 2. November 2007 schrieb Andreas Jung:
--On 2. November 2007 15:42:21 +0100 "Roland M. Kruggel" rk.liste@bbf7.de wrote: [...] http://docs.python.org/lib/module-spwd.html
Super! Genau das suche ich.
aber auch hier wirst du wohl root-Rechte brauchen. Aus der Dokumentation:
""" You must have enough privileges to access the shadow password database (this usually means you have to be root). """
Falls das für dich nicht akzeptabel ist, würde ich es an deiner Stelle ruhig mal, wie Diez vorgeschlagen hat, mit dem ctypes-Modul versuchen. Das gehört seit Python 2.5 zur Standard-Distribution, sonst ist es getrennt erhältlich.
Viele Grüße Stefan

Am Freitag, 2. November 2007 schrieb Stefan Schwarzer:
Hallo Roland,
On 2007-11-02 18:19, Roland M. Kruggel wrote:
Am Freitag, 2. November 2007 schrieb Andreas Jung:
--On 2. November 2007 15:42:21 +0100 "Roland M. Kruggel" rk.liste@bbf7.de wrote: [...] http://docs.python.org/lib/module-spwd.html
Super! Genau das suche ich.
aber auch hier wirst du wohl root-Rechte brauchen. Aus der Dokumentation:
""" You must have enough privileges to access the shadow password database (this usually means you have to be root). """
Falls das für dich nicht akzeptabel ist, würde ich es an deiner Stelle ruhig mal, wie Diez vorgeschlagen hat, mit dem ctypes-Modul versuchen. Das gehört seit Python 2.5 zur Standard-Distribution, sonst ist es getrennt erhältlich.
agrr. Ich habe 2.4. Aber wenn des Module auch root rechte benötigt, dann nutze es mir auch nix.
ctypes; ja ok. Wenn ich nur die site wiederfinden würde, auf der ich das gestern gelesen habe. Ich habe so ca. 150 sites durchsucht. hmm : (
Danke euch allen aber trotzdem. Ich werde wohl einen eigene passwort-datei anlegen und mit crypt das passwort verschlüsseln. Ich glaube das ist der einfachere weg.

--On 3. November 2007 02:41:00 +0100 "Roland M. Kruggel" rk.liste@bbf7.de wrote:
Am Freitag, 2. November 2007 schrieb Stefan Schwarzer:
Hallo Roland,
On 2007-11-02 18:19, Roland M. Kruggel wrote:
Am Freitag, 2. November 2007 schrieb Andreas Jung:
--On 2. November 2007 15:42:21 +0100 "Roland M. Kruggel" rk.liste@bbf7.de wrote: [...] http://docs.python.org/lib/module-spwd.html
Super! Genau das suche ich.
aber auch hier wirst du wohl root-Rechte brauchen. Aus der Dokumentation:
""" You must have enough privileges to access the shadow password database (this usually means you have to be root). """
Falls das für dich nicht akzeptabel ist, würde ich es an deiner Stelle ruhig mal, wie Diez vorgeschlagen hat, mit dem ctypes-Modul versuchen. Das gehört seit Python 2.5 zur Standard-Distribution, sonst ist es getrennt erhältlich.
agrr. Ich habe 2.4. Aber wenn des Module auch root rechte benötigt, dann nutze es mir auch nix.
*Natürlich benötigt der Zugriff auf etc-shadow *immer* root Rechte** - das nennt sich Security.
ctypes; ja ok. Wenn ich nur die site wiederfinden würde, auf der ich das gestern gelesen habe. Ich habe so ca. 150 sites durchsucht. hmm : (
Danke euch allen aber trotzdem. Ich werde wohl einen eigene passwort-datei anlegen und mit crypt das passwort verschlüsseln. Ich glaube das ist der einfachere weg.
Ansonsten versuch den Zugriff via PAM:
http://pypi.python.org/pypi/pam/0.1.2
-aj

Jetzt komme ich natürlich nicht an die /etc/shadow ran. klar. Ist ja auch richtig so.
Bietet Python nicht eine Funktion mit der ich das Passwort/User überprüfen kann. So was wie
"bool = chackPasswd(username, passwort)"
Ich brauche je nicht das passwort sondern nur ein True/False ob das angegebene Passowrt mit dem User übereinstimmt.
Wie sollte denn ein solches Modul funktionieren? Es müsste ja wiederum auf die shadow-Datenbank zugreifen, und dazu benötigt es Rechte. Da ein Modul immer nur die Rechte des Prozesses hat, in dem es läuft, brauchst Du halt Root-Rechte für jedes Modul, dass in irgend einer Weise selbst die shadow-Datenbank liest.
Die einzige Möglichkeit ist, dass es einen *anderen* Prozess gibt, der als Root läuft, und den Du irgendwie fragen kannst. Dazu gibt es prinzipiell zwei Ansätze unter Unix:
1. s-bit-Programme. Du startest beispielsweise
/bin/su <username> -c /bin/true
und gibst das Passwort im Terminal ein (programmatisch) Falls der Exit-Status 0 ist, stimmt das Passwort, ansonsten nicht.
Das ist auch das Verfahren von Apaches mod-auth-shadow; das setuid-Programm liest da zwei Zeilen von der Standardeingabe (Nutzername und Passwort) und gibt dann im exit-Status das Prüfungsergebnis an.
2. Daemons. Du startest beispielsweise saslauthd, konfigurierst ihn auf shadow, und sendest an ihn dann Anfragen zur Passwortüberprüfung.
Ciao, Martin
participants (8)
-
"Martin v. Löwis"
-
Andreas Jung
-
Christopher Arndt
-
Diez B. Roggisch
-
Marcus Habermehl
-
Marek Kubica
-
Roland M. Kruggel
-
Stefan Schwarzer