[ Team LiB ] |
Recipe 9.2 Testing Login Passwords (CrackLib)9.2.1 ProblemYou want assurance that your login passwords are secure. 9.2.2 SolutionWrite a little program that calls the FascistCheck function from CrackLib: #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <crack.h> #define DICTIONARY "/usr/lib/cracklib_dict" int main(int argc, char *argv[]) { char *password; char *problem; int status = 0; printf("\nEnter an empty password or Ctrl-D to quit.\n"); while ((password = getpass("\nPassword: ")) != NULL && *password ) { if ((problem = FascistCheck(password, DICTIONARY)) != NULL) { printf("Bad password: %s.\n", problem); status = 1; } else { printf("Good password!\n"); } } exit(status); } Compile and link it thusly: $ gcc cracktest.c -lcrack -o cracktest Run it (the passwords you type will not appear on the screen): $ ./cracktest Enter an empty password or Ctrl-D to quit. Password: xyz Bad password: it's WAY too short. Password: elephant Bad password: it is based on a dictionary word. Password: kLu%ziF7 Good password! 9.2.3 DiscussionCrackLib is an offshoot of Alec Muffet's password cracker, Crack. It is designed to be embedded in other programs, and hence is provided only as a library (and dictionary). The FascistCheck function subjects a password to a variety of tests, to ensure that it is not vulnerable to guessing. 9.2.4 See AlsoLearn more about CrackLib at http://www.crypticide.org/users/alecm. Perl for System Administration (O'Reilly), section 10.5, shows how to make a Perl module to use CrackLib. PAM can use CrackLib to force users to choose good passwords. [Recipe 4.2] |
[ Team LiB ] |