MOdify PAM to allow SSH Key logins with locked passwords

Signed-off-by: Martin Schurz <[email protected]>
This commit is contained in:
Martin Schurz committed 2024-12-22 18:51:18 +01:00
1 parent a40b1c8d0d
commit fba07a4d41
4 files changed
+66 -1

No files matched your search

+1
View File
@@ -20,6 +20,7 @@
- verify_tasks/pw_ageing.yml - verify_tasks/pw_ageing.yml
- verify_tasks/netrc.yml - verify_tasks/netrc.yml
- verify_tasks/ignore_home_folders.yml - verify_tasks/ignore_home_folders.yml
- verify_tasks/ssh_auth_locked.yml
# temp. disabled - https://github.com/dev-sec/ansible-collection-hardening/issues/690 # temp. disabled - https://github.com/dev-sec/ansible-collection-hardening/issues/690
# - name: Include PAM tests # - name: Include PAM tests
@@ -0,0 +1,57 @@
---
- name: Install sshpass
package:
name:
- sshpass
state: present
- name: Set password for test
ansible.builtin.set_fact:
test_pw: myTest!pw
- name: Create locked_user
user:
name: locked_user
password: "{{ test_pw | password_hash('sha512') }}"
- name: Create ssh-client-keypair
community.crypto.openssh_keypair:
path: /root/.ssh/locked_user_id
type: ed25519
state: present
register: generated_key
- name: Add ssh-public-key to locked_user
ansible.posix.authorized_key:
user: locked_user
key: "{{ generated_key.public_key }}"
state: present
- name: Check successful login with password
ansible.builtin.shell:
cmd: sshpass -p {{ test_pw }} ssh locked_user@localhost echo "success"
- name: Check successful login with ssh key
ansible.builtin.shell:
cmd: ssh -i /root/.ssh/locked_user_id locked_user@localhost echo "success"
- name: Set password change date for locked_user
ansible.builtin.shell:
cmd: chage -d 2020-01-01 locked_user
- name: Check unsuccessful login with password
ansible.builtin.shell:
cmd: sshpass -p {{ test_pw }} ssh locked_user@localhost echo "success"
register: output
ignore_errors: true
- name: Assert check unsuccessful login
ansible.builtin.assert:
that:
- output.rc | int == 1
- "'WARNING: Your password has expired.' in output.stderr"
- "'success' not in output.stdout"
- name: Check successful login with ssh key
ansible.builtin.shell:
cmd: ssh -i /root/.ssh/locked_user_id locked_user@localhost echo "success"
+7
View File
@@ -118,3 +118,10 @@
state: absent state: absent
when: when:
- not os_auth_pam_passwdqc_enable - not os_auth_pam_passwdqc_enable
- name: Allow Login with SSH Keys, when user password is expired
lineinfile:
path: /etc/pam.d/common-account
backrefs: yes
regexp: "^(account.*pam_unix.so(?!.*no_pass_expiry).*)$"
line: '\1 no_pass_expiry'
@@ -24,7 +24,7 @@ auth required pam_deny.so
{% if os_auth_retries|int > 0 %} {% if os_auth_retries|int > 0 %}
account required pam_faillock.so account required pam_faillock.so
{% endif %} {% endif %}
account required pam_unix.so account required pam_unix.so no_pass_expiry
account sufficient pam_localuser.so account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet account sufficient pam_succeed_if.so uid < 1000 quiet
{% if (os_auth_pam_sssd_enable | bool) %} {% if (os_auth_pam_sssd_enable | bool) %}