(solved) Zugriff auf die Linux Benutzerverwaltung



  • @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?



  • Hi,

    das stimmt. Nur derzeit will ich eigentlich erstmal die PAM ans rennen bekommen. Ich wollte mir nur die Möglichkeit offen halten. Derzeit versuche ich eine reine lokale Lösung zu erstellen (auf ubuntu Ebene).

    Leider habe ich noch offensichtlich mit Speicherüberschreibung oder Pointerprobleme zu kämpfen. Habe mir erstmal ein Buch bei Amazon bestellt
    siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-237205.html
    Info hierzu folgen, wenn ich es in den Händen halte.

    Wenn die PAM läuft wollte ich später mich mal mit der Domain-Lösung beschäftigen.
    Nicht zu viel auf einmal.

    Gruss



  • Hallo Zusammen,

    eins meiner Probleme habe ich gefunden.
    Wenn ich den Benutzer verwende, mit welchem ich gerade unter Linux am arbeiten bin, dann funktioniert die Routine.

    Nicht aber, wenn es ein anderer Benutzer. Dann kommt der Fehler
    in retval

    PAM_NEW_AUTHTOK_REQD
    

    Bei einem erneuten setzen des Benutzer via

    retval = pam_set_item(pamh,PAM_USER,userID);
    retval = pam_set_item(pamh,PAM_AUTHTOK,upassword);
    

    bekomme ich den Fehler 29 DOMAINE unbekannt.

    Wenn ich dann mit

    retval = pam_set_item(pamh,PAM_RHOST,(char*) "myhost");
    

    ändert das an der Sache auch nichts.

    Meine PAM.d/config sieht so aus

    auth       required     pam_unix.so
    account    required     pam_unix.so
    

    Im Log steht dann auch nur:

    pam_unix(bdo:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=
    

    Hat jemand eine Idee ? 🙄

    Gruss


Anmelden zum Antworten