MOdify PAM to allow SSH Key logins with locked passwords
Signed-off-by: Martin Schurz <[email protected]>
This commit is contained in:
1 parent
a40b1c8d0d
commit
fba07a4d41
4 files changed
+66
-1
No files matched your search
@@ -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"
|
||||||
@@ -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) %}
|
||||||
|
|||||||
Reference in new issue
Block a user