crypt gleiche verschlüsselung wie shadow suite



  • hi leute!
    ich hab mich aufgrund langerweile (ferien) dazu entschlossen mein altes projekt mal fertig zu stellen.

    also ich will mehere user zu system hinzufügen. darum adduser ausgeschlossen will ja nicht die ganze zeit tippen 🙂

    ich verwenden deshalb useradd -p passwd name. das passwd muss hierzu aber verschlüsselt sein.

    char str[MAXL]={0};
     char rndChar[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./";
    
      salt[0] = rndChar[random() % 64];
      salt[1] = rndChar[random() % 64];
      salt[3] = 0;
      passwd = crypt (passwd,salt);
    

    das ist der code ausschnitt. das prog läuft. meine verschlüsselten strings sind aber bei gleichen pass anders als die in der shadow

    => kann mich mit dem angelegten benutzer nicht einloggen. (is ja klar)

    wie macht das linux? was muss ich ändern?

    Danke

    Gruß waldi!



  • Die Verschlüsselung der Passwörter ist System bzw. Distibutions abhängig!
    Einfachste möglichkeit ist passwd mit der Option --stdin aufrufen:

    echo pass | passwd user --stdin
    

    Oder mittels chpasswd, falls vorhanden.

    gruss Christof



  • Du holst dir den salt key aus der shadow Datei. Wenn der salt key, wie bei dir Zufallsgeneriert ist, dann ist es klar, das du ein anderes Ergebnis als wie in der shadow hast.

    Du brauchst also zu deiner Verschlüsselung den selben salt key, wie er beim ersten mal verwendet wurde.

    Ich hab das bisher nur einmal just for fun gemacht, hier mal mein Prozedere.

    struct spwd *sp;
           char *typed_password= NULL, *correct_password = NULL, *encrypted = NULL, salt[2];
    
            sp = getspnam("root");
            correct_password = sp->sp_pwdp;
    
            memcpy(salt, correct_password, 2);
            typed_password = getpass("Password: ");
    
            encrypted = crypt (typed_password , salt); // [1]
    
            memset (typed_password , 0, strlen (typed_password ));
    

    [1] encrypted kannst du nun, falls das richtige Passwort eingegben wurde, in eine Datei schreiben oder was auch immer damit anfangen.



  • @patrick++ danke für den code, hat schon sehr geholfen.

    nur stellt sich mir folgende frage. ich hab diesen teile deines codes eingebaut.

    struct spwd *sp;
           char *typed_password= NULL, *correct_password = NULL, *encrypted = NULL, salt[2];
    
            sp = getspnam("root");
            correct_password = sp->sp_pwdp;
    
            memcpy(salt, correct_password, 2);
    

    wenn ich jetzt versuche andere pwds mit dem "root" salt zu verschlüsseln krieg ich auch ganz andere verschlüsselte strings als über adduser oder so.

    kann es sein das je nach usernamen erst der salt ermittelt wird oder so?
    habe dazu leider noch nicht viel im netz gefunden. bin noch auf der suche nach dem passwd code. das muss es ja drin stehen.

    Gruß martin


Anmelden zum Antworten