SSH Client and pam Module on CentOS 7

Hello Cornelius,

i’m trying to achieve 2 things:

  1. SSH Key Management via privacyIDE3A [done]
  2. 2FA/MFA via SSH

So the user can login with SSH Key and as a second factor one of the multiple OTP tokens.

In my /etc/pam.d/sshd is now:

#%PAM-1.0
auth       required     pam_sepermit.so
#auth       substack     password-auth
auth       required     pam_python.so /opt/pam_python/build/lib/privacyidea_pam.py url=https://otp-test.itc.rwth-aachen.de nosslverify prompt=privacyIDEA_Authentication debug
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

So it should ask for the OTP after login, right?

UPDATE

the /etc/pam.d/sshd references /etc/pam.d/password-auth, so i tried the following in password-auth:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
#auth        sufficient    pam_unix.so nullok try_first_pass
auth        sufficient    pam_python.so /usr/lib/python2.7/site-packages/privacyidea_pam-2.11dev0-py2.7.egg/privacyidea_pam.py url=https://otp-test.itc.rwth-aachen.de nosslverify prompt=privacyIDEA_Authentication debug
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok


password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

In my log is now the following error:

Jan 22 13:39:56 otp-test /usr/lib/python2.7/site-packages/privacyidea_pam-2.11dev0-py2.7.egg/privacyidea_pam.py[16846]: Traceback (most recent call last):
Jan 22 13:39:56 otp-test /usr/lib/python2.7/site-packages/privacyidea_pam-2.11dev0-py2.7.egg/privacyidea_pam.py[16846]:   File "/usr/lib/python2.7/site-packages/privacyidea_pam-2.11dev0-py2.7.egg/privacyidea_pam.py", line 44, in <module>
Jan 22 13:39:56 otp-test /usr/lib/python2.7/site-packages/privacyidea_pam-2.11dev0-py2.7.egg/privacyidea_pam.py[16846]:     import requests
Jan 22 13:39:56 otp-test /usr/lib/python2.7/site-packages/privacyidea_pam-2.11dev0-py2.7.egg/privacyidea_pam.py[16846]: ImportError: No module named requests

But the “requests” module is installed:

pip install requests
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python2.7/site-packages

I’m using pam_python.so 1.0.7 and the latest privacyidea_pam.py