diff options
author | Halfwalker <deano-gitea@areyes.com> | 2024-12-21 18:41:43 -0700 |
---|---|---|
committer | Nicholas Johnson <mail@nicholasjohnson.ch> | 2025-01-29 00:00:00 +0000 |
commit | 40489e5b26bc741b15bbea5cf2ee634880d40384393bdc319d23c482b89a62c8 (patch) | |
tree | 3701e54b660fc89eded5541aab18cc94506d75cbc489ad17a3b9c4d06f3f2761 | |
parent | 9cdb5bbeaf8412b8931beb206431eb897fcfc6b40e02dd763d2d4068382550b5 (diff) | |
download | ansible-role-google-authenticator-40489e5b26bc741b15bbea5cf2ee634880d40384393bdc319d23c482b89a62c8.tar.gz ansible-role-google-authenticator-40489e5b26bc741b15bbea5cf2ee634880d40384393bdc319d23c482b89a62c8.zip |
Add option for nullok on google_authenticator.so in /etc/pam.d/sshd
-rw-r--r-- | README.md | 6 | ||||
-rw-r--r-- | defaults/main.yml | 5 | ||||
-rw-r--r-- | tasks/main.yml | 17 |
3 files changed, 27 insertions, 1 deletions
@@ -14,6 +14,12 @@ It will update `/etc/ssh/sshd_config.d` to ensure that a token is required for a Edit `defaults/main.yml` or override on cmdline to set `google_auth_force: true`. This will ensure that TOTP code entry is required regardless of use of SSH key for login. This creates a `/etc/ssh/sshd_config.d/71-google_auth.conf` and modifies `/etc/pam.d/sshd` to comment out the **@include common-auth** line. +### Allowing no-token logins when ~/.google_authenticator does not exist + +Edit `defaults/main.yml` or override on cmdline to set `google_auth_nullok: true`. This sets the **nullok** parameter on the `/etc/pamd./sshd` line for **auth required pam_google_authenticator.so nullok** + +With this set users can still login with password only and no TOTP request if their `~/.google_authenticator` file does not exist + To pre-populate the TOTP secret there are two locations to place the information. * Place them into `defaults/main.yml` under the **google_auth_config** variable diff --git a/defaults/main.yml b/defaults/main.yml index cf8b7e9..964d155 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -3,6 +3,11 @@ # User can be overridden by a vault variable or from hosts file entry or ansible cmdline username: "{{ vault_username | default(ansible_user_id) }}" +# Set the nullok parameter for pam_google_authenticator.so in /etc/pam.d/sshd +# When set, this allows password logins if no ~/.google_authenticator exists +# If not set, then can NOT login until ~/.google_authenticator is created +google_auth_nullok: false + # Use google authenticator config from vault if it's there # 1st line secret can be 16 or 26 chars # NOTE: Be sure to use char encoding for spaces diff --git a/tasks/main.yml b/tasks/main.yml index 882f8ad..3d47915 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -163,12 +163,27 @@ block: # Set pam to use google authenticator for ssh # echo "auth required pam_google_authenticator.so" >> /etc/pam.d/sshd + # echo "auth required pam_google_authenticator.so nullok" >> /etc/pam.d/sshd + # The nullok allows regular login if ~/.google_authenticator doesn't exist + # Putting at beginning of file means it will ask for token FIRST, then password + # This prevents someone from being able to attempt passwords until/unless they have token - name: Set pam to use google authenticator for ssh ansible.builtin.lineinfile: path: /etc/pam.d/sshd + insertafter: BOF + line: 'auth required pam_google_authenticator.so{% if google_auth_nullok %} nullok{% endif %}' + state: present + + # Must have at least one SUCCESS answer - nullok makes sshd answer IGNORE + # Adding pam_permit to end ensure that sshd module will answer SUCCESS if nothing else does + # https://github.com/google/google-authenticator-libpam#nullok + - name: Set pam to use pam_permit if nullok is defined + ansible.builtin.lineinfile: + path: /etc/pam.d/sshd insertafter: EOF - line: 'auth required pam_google_authenticator.so' + line: 'auth required pam_permit.so' state: present + when: google_auth_nullok - name: Modify sshd_config to use google authenticator ansible.builtin.copy: |