(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 ermitteln

    Derzeit 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.html

    Gruss



  • 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 Funktion

    pam_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?


Anmelden zum Antworten