(solved) Zugriff auf die Linux Benutzerverwaltung
-
Hallo Zusammen,
wer kennt die Funktionen für den Zugriff auf die Linux-Benutzerverwaltung ?
Ich möchte eine eigene Login Funktion in meiner Anwendung
erstellen und hierbei auf die Benutzerverwaltung von Linux zurückgreifen.- Passwort prüfen
- Benutzergruppe ermittelnDerzeit habe ich nur funktionen gefunden, welche durch die /etc/password
browsen.
Wie funktioniert der Spass im Netzwerk ? Gibt es hier nicht auch Funktionen
wie unter Windows via LDAP ?Gruss
Lösung: Hauptproblem lag in den fehlenden rootrechten
-
Passwort prüfen: man: crypt(3)
Userdaten: man: getpwnam(3)
-
Danke für die schnelle Antwort.
Gruss
-
Besser wäre libpam.
-
Wie darf ich das verstehen ?
libpam sagt mir nichts
Gruss
-
Ritchie schrieb:
Wie darf ich das verstehen ?
libpam sagt mir nichts
PAM ist flexibler. Siehe hier: http://en.wikipedia.org/wiki/Pluggable_Authentication_Modules
-
Hi,
ich versuche es erstmal mit der Funktion. Ist schnell erstellt.
Derzeit bekomme ich jedoch in <pointer>->pw_passwd nur ein 'x' zurueck !
Was hat das zu bedeuten ?
Gruss
-
@Ritchie
idR hat man die Passwortinfos nicht mehr in /etc/passwd liegen, wo sie allen zugänglich wären, sondern in /etc/shadow, damit nur root auf sie Zugreifen kann. Daher schau dir lieber libpam an.
-
du musst bedenken, dass libpam im allgemeinen erwartet, dass dein programm mit root rechten läuft. welche art von programm willst du denn schreiben? möglicherweise gibt es dafür eine bessere lösung als setuid.
-
Das wesentliche an libpam ist, dass die Passwörter nicht zwangsweise in /etc/shadow liegen. Ich kann meine Benutzer beispielsweise gegen einen LDAP-Server authentifizieren. Oder ich lege meine Benutzerdatenbank in eine Mysql-Datenbank. Oder ich verwende die User von einem Windows-Domänen-controller auf meiner Linux-box. Mit libpam ist das ganze transparent.
-
tntnet schrieb:
Das wesentliche an libpam ist, dass die Passwörter nicht zwangsweise in /etc/shadow liegen. Ich kann meine Benutzer beispielsweise gegen einen LDAP-Server authentifizieren. Oder ich lege meine Benutzerdatenbank in eine Mysql-Datenbank. Oder ich verwende die User von einem Windows-Domänen-controller auf meiner Linux-box. Mit libpam ist das ganze transparent.
Auf der anderen Seite ist PAM aber auch dafür da, dass andere Anwendungen eben auch die Möglichkeit haben, Nutzer zu authentifizieren. Z.b. nutzt SSH oder der GDM PAM eben dafür.
-
Hallo Zusammen,
ich hatte gestern abend schon auf PAM umgestellt. Ist ja eigentlich nicht wirklich schwer. Nur die Stolperfallen beim linken
und die Libs installieren.
Derzeit habe ich aber das Problem, das beim Passwort prüfen, mir das Program stehen bleibt (im Debugger jedenfalls).
Ich verwende KUbunutu 8.10 mit Kdevelop 3.0.
retval = pam_start("check_user", user, &conv, &pamh); if (retval == PAM_SUCCESS) retval = pam_authenticate(pamh, 0); /* is user really user? */ if (retval == PAM_SUCCESS) retval = pam_acct_mgmt(pamh, 0); /* permitted access? */ /* This is where we have been authorized or not. */ if (retval == PAM_SUCCESS) { fprintf(stdout, "Authenticated\n"); } else { fprintf(stdout, "Not Authenticated\n"); }
Hier im Aufruf "pam_authenticate". .
Auch habe ich noch nicht die ganze Dok. durchgelesen, wie man Gruppennamen und sowas abfragen kann. Ich benötige noch die Benutzergruppen.@Besserwisser:
Mein Programm darf nur mit normalen Userrechten arbeiten. Wir wollen es doch nicht wie Windoof manchen oder ?Gruss
-
Hi,
habe ermittelt, das auf der Console das Password abgefragt wird !:?
Siehe auch Thread:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-135098-and-highlight-is-pamstart.htmlGruss
-
Ritchie schrieb:
Mein Programm darf nur mit normalen Userrechten arbeiten. Wir wollen es doch nicht wie Windoof manchen oder ?
dann kannst du nicht gegen /etc/shadow authentifizieren.
-
Ritchie schrieb:
@Besserwisser:
Mein Programm darf nur mit normalen Userrechten arbeiten. Wir wollen es doch nicht wie Windoof manchen oder ?Brauch es ja auch nicht komplett. Du setzt bei deinem Programm das SETUID-Bit und sobald du den Nutzer authentifiziert hast, lässt du den Prozess einfach zu dieser Nutzer-ID wechseln.
-
verschiedene distributionen versuchen, die anzahl der setuid programm zu verringern. es wäre wirklich gut, wenn Ritchie mal verraten würde, wieso sein programm diese authentifizierung braucht. solange nicht wirklich die notwendigkeit von pam gesichert ist, soll er es lieber nicht verwenden.
-
Hallo,
ich schreibe portiere eine Anwendung, welches eine Benutzerverwaltung
verwendet. Hierbei möchte ich die bestehende Benutzerverwaltung von
KDE oder später eines Domaincontroller verwenden.Wieso das rad zweimal erfinden.
Gruss
-
dann wirst du um pam und womöglich das winbind module für pam nicht herumkommen.
-
Hallo Besserwisser,
was bitte verstehe ich jetzt unter winbind modul ? Reicht die normale PAM nicht aus ? Siehe auch zweiten Thread von mir zu PAM.
Zusatz:
Ich habe jedesfalls festgestellt, das mein Programm offensichtlich den Speicher überschreibt. Ich Quellcode liegt das Password
zwar vor der Datenstruktur "Conv" aber nach Aufruf der Funktionpam_start("check_user", userID, &conv, &pamh);
wird hier der Speicher überschrieben und ich weiss nicht was mir hier in die Suppe spuckt. Ich verwende die Standard Strukuren und das Programm
ist noch nicht in meine "Conv" Routine eingesprungen (breakpoint gesetzt)
und die Var. des Speichers ist überschrieben.Welche Hilfsmittel gibt es hier ? evtl. "Valgrind"
Gruss
-
Ritchie schrieb:
was bitte verstehe ich jetzt unter winbind modul ? Reicht die normale PAM nicht aus ? Siehe auch zweiten Thread von mir zu PAM.
winbind ist ein module für pam. es ermöglicht die authentifizierung zu einer windows domain. das war doch, was du brauchst, oder?