linux pam with u2f and fprintd

all the auth options

SEAN K.H. LIAO

linux pam with u2f and fprintd

all the auth options

pam auth

pam is the thing that controls auth to a linux system. It's supposed to be a serial chain of options, a sufficient module should terminate an auth process with success, while include should just include everything from a file.

u2f and fprintd

What I want: auth by fingerprint, yubikey, or password, in that order. The important flows for me are system login (tty) and sudo.

Reading through the include chains of auth, I thought login was: login -> system-local-login -> system-login -> system-auth and sudo was: sudo -> system-auth. I thought that I could just add both pam_fprintd.so and pam_u2f.so to system-auth.

However, when I tried that, sudo worked, but logging in to a tty would trigger all 3 auth options, then still fail. Some experimenting later, I realized that it was pam_shells.so that was somehow interfering with the login process. So I could either remove the module or place both pam_fprintd.so and pam_u2f.so somewhere before pam_shells.so was called.

/etc/pam.d/

Here's the auth chains I ended up with:

login
1auth       required     pam_securetty.so
2auth       requisite    pam_nologin.so
3auth       include      system-local-login
system-local-login
1auth      sufficient 		       pam_fprintd.so       max-tries=2 timeout=15
2auth      sufficient 		       pam_u2f.so           cue origin=pam://hwaryun appid=pam://hwaryun authfile=/etc/u2f_keys [cue_prompt=touche]
3auth      include   system-login
system-login
1auth       required   pam_shells.so
2auth       requisite  pam_nologin.so
3auth       include    system-auth
system-auth
1auth       sufficient 		       pam_fprintd.so       max-tries=2 timeout=15
2auth       sufficient 		       pam_u2f.so           cue origin=pam://hwaryun appid=pam://hwaryun authfile=/etc/u2f_keys [cue_prompt=touche]
3-auth      [success=2 default=ignore]  pam_systemd_home.so
4auth       [success=1 default=bad]     pam_unix.so          try_first_pass nullok nodelay
5auth       [default=die]               pam_faillock.so      authfail
6auth       optional                    pam_permit.so
7auth       required                    pam_env.so
8auth       required                    pam_faillock.so      authsucc
sudo
1auth		include		system-auth