Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add automation to enable faillock rules #11458

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# platform = multi_platform_all
# reboot = false
# strategy = enable
# complexity = low
# disruption = low

{{{ ansible_pam_faillock_enable() }}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# platform = multi_platform_all
# reboot = false
# strategy = enable
# complexity = low
# disruption = low

{{{ bash_pam_faillock_enable() }}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<def-group>
<definition class="compliance" id="{{{ rule_id }}}" version="1">
{{{ oval_metadata(
"Configure the use of the pam_faillock.so module in the /etc/pam.d/password-auth file.")
}}}
<criteria operator="AND">
<!-- pam_unix.so is a control module present in all realistic scenarios and also used
as reference for the correct position of pam_faillock.so in auth section. If the
system is properly configured, it must appear only once in auth section. -->
<criterion test_ref="test_pam_faillock_password_auth_pam_unix_auth"
comment="pam_unix.so appears only once in auth section of password-auth"/>
<criterion
test_ref="test_pam_faillock_password_auth_pam_faillock_auth"
comment="pam_faillock.so is defined in auth section of password-auth"/>
<criterion
test_ref="test_pam_faillock_password_auth_pam_faillock_account"
comment="pam_faillock.so is defined in account section of password-auth"/>
</criteria>
</definition>

<constant_variable id="var_pam_faillock_password_auth_pam_faillock_auth_regex"
datatype="string" version="1"
comment="regex to identify pam_faillock.so entries in auth section of pam files">
<value>^[\s]*auth[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_faillock\.so[\s\w\d=]+preauth[\s\S]*^[\s]*auth[\s]+(sufficient|\[(?=.*\bsuccess=done\b)(?=.*?\bnew_authtok_reqd=done\b)(?=.*?\bdefault=ignore\b).*\])[\s]+pam_unix\.so[\s\S]*^[\s]*auth[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_faillock\.so[\s\w\d=]+authfail</value>
</constant_variable>
<constant_variable id="var_pam_faillock_password_auth_pam_faillock_account_regex"
datatype="string" version="1"
comment="regex to identify pam_faillock.so entry in account section of pam files">
<value>^[\s]*account[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_faillock\.so[\s\S]*^[\s]*account[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_unix\.so</value>
</constant_variable>

<!-- Check occurrences of pam_unix.so in auth section in password-auth -->
<ind:textfilecontent54_test check="all" check_existence="only_one_exists" version="1"
id="test_pam_faillock_password_auth_pam_unix_auth"
comment="No more than one pam_unix.so is expected in auth section of password-auth">
<ind:object object_ref="obj_pam_faillock_password_auth_pam_unix_auth"/>
</ind:textfilecontent54_test>

<ind:textfilecontent54_object version="1"
id="obj_pam_faillock_password_auth_pam_unix_auth"
comment="Get all occurrences of pam_unix.so in auth section of password-auth">
<ind:filepath operation="pattern match">^/etc/pam.d/password-auth$</ind:filepath>
<ind:pattern operation="pattern match">^[\s]*auth\N+pam_unix\.so</ind:pattern>
<ind:instance datatype="int" operation="greater than or equal">1</ind:instance>
</ind:textfilecontent54_object>

<!-- Check common definition of pam_faillock.so in password-auth -->
<ind:textfilecontent54_test check="all" check_existence="only_one_exists" version="1"
id="test_pam_faillock_password_auth_pam_faillock_auth"
comment="One and only one occurrence is expected in auth section of password-auth">
<ind:object
object_ref="obj_pam_faillock_password_auth_pam_faillock_auth"/>
</ind:textfilecontent54_test>

<ind:textfilecontent54_object version="1"
id="obj_pam_faillock_password_auth_pam_faillock_auth"
comment="Check common definition of pam_faillock.so in auth section of password-auth">
<ind:filepath operation="pattern match">^/etc/pam.d/password-auth$</ind:filepath>
<ind:pattern operation="pattern match"
var_ref="var_pam_faillock_password_auth_pam_faillock_auth_regex"/>
<ind:instance datatype="int" operation="equals">1</ind:instance>
</ind:textfilecontent54_object>

<ind:textfilecontent54_test check="all" check_existence="only_one_exists" version="1"
id="test_pam_faillock_password_auth_pam_faillock_account"
comment="One and only one occurrence is expected in auth section of password-auth">
<ind:object
object_ref="obj_pam_faillock_password_auth_pam_faillock_account"/>
</ind:textfilecontent54_test>

<ind:textfilecontent54_object version="1"
id="obj_pam_faillock_password_auth_pam_faillock_account"
comment="Check common definition of pam_faillock.so in account section of password-auth">
<ind:filepath operation="pattern match">^/etc/pam.d/password-auth$</ind:filepath>
<ind:pattern operation="pattern match"
var_ref="var_pam_faillock_password_auth_pam_faillock_account_regex"/>
<ind:instance datatype="int" operation="equals">1</ind:instance>
</ind:textfilecontent54_object>
</def-group>
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ references:
disa: CCI-000044
nist: AC-7 (a)
srg: SRG-OS-000021-GPOS-00005
stigid@ol8: OL08-00-020026
stigid@rhel8: RHEL-08-020026
stigid@rhel9: RHEL-09-611035

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
# packages = authselect,pam
# platform = Oracle Linux 8,Oracle Linux 9,Red Hat Enterprise Linux 8,Red Hat Enterprise Linux 9

authselect create-profile test_profile -b sssd
authselect select "custom/test_profile" --force

authselect enable-feature with-faillock

authselect apply-changes
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
# packages = authselect,pam
# platform = Oracle Linux 8,Oracle Linux 9,Red Hat Enterprise Linux 8,Red Hat Enterprise Linux 9

authselect create-profile test_profile -b sssd
authselect select "custom/test_profile" --force

authselect disable-feature with-faillock

authselect apply-changes
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# platform = multi_platform_all
# reboot = false
# strategy = enable
# complexity = low
# disruption = low

{{{ ansible_pam_faillock_enable() }}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# platform = multi_platform_all
# reboot = false
# strategy = enable
# complexity = low
# disruption = low

{{{ bash_pam_faillock_enable() }}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<def-group>
<definition class="compliance" id="{{{ rule_id }}}" version="1">
{{{ oval_metadata(
"Configure the use of the pam_faillock.so module in the /etc/pam.d/system-auth file.")
}}}
<criteria operator="AND">
<!-- pam_unix.so is a control module present in all realistic scenarios and also used
as reference for the correct position of pam_faillock.so in auth section. If the
system is properly configured, it must appear only once in auth section. -->
<criterion test_ref="test_pam_faillock_system_auth_pam_unix_auth"
comment="pam_unix.so appears only once in auth section of system-auth"/>
<criterion
test_ref="test_pam_faillock_system_auth_pam_faillock_auth"
comment="pam_faillock.so is defined in auth section of system-auth"/>
<criterion
test_ref="test_pam_faillock_system_auth_pam_faillock_account"
comment="pam_faillock.so is defined in account section of system-auth"/>
</criteria>
</definition>

<constant_variable id="var_pam_faillock_system_auth_pam_faillock_auth_regex"
datatype="string" version="1"
comment="regex to identify pam_faillock.so entries in auth section of pam files">
<value>^[\s]*auth[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_faillock\.so[\s\w\d=]+preauth[\s\S]*^[\s]*auth[\s]+(sufficient|\[(?=.*\bsuccess=done\b)(?=.*?\bnew_authtok_reqd=done\b)(?=.*?\bdefault=ignore\b).*\])[\s]+pam_unix\.so[\s\S]*^[\s]*auth[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_faillock\.so[\s\w\d=]+authfail</value>
</constant_variable>
<constant_variable id="var_pam_faillock_system_auth_pam_faillock_account_regex"
datatype="string" version="1"
comment="regex to identify pam_faillock.so entry in account section of pam files">
<value>^[\s]*account[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_faillock\.so[\s\S]*^[\s]*account[\s]+(required|\[(?=.*?\bsuccess=ok\b)(?=.*?\bnew_authtok_reqd=ok\b)(?=.*?\bignore=ignore\b)(?=.*?\bdefault=bad\b).*\])[\s]+pam_unix\.so</value>
</constant_variable>

<!-- Check occurrences of pam_unix.so in auth section in system-auth -->
<ind:textfilecontent54_test check="all" check_existence="only_one_exists" version="1"
id="test_pam_faillock_system_auth_pam_unix_auth"
comment="No more than one pam_unix.so is expected in auth section of system-auth">
<ind:object object_ref="obj_pam_faillock_system_auth_pam_unix_auth"/>
</ind:textfilecontent54_test>

<ind:textfilecontent54_object version="1"
id="obj_pam_faillock_system_auth_pam_unix_auth"
comment="Get all occurrences of pam_unix.so in auth section of system-auth">
<ind:filepath operation="pattern match">^/etc/pam.d/system-auth$</ind:filepath>
<ind:pattern operation="pattern match">^[\s]*auth\N+pam_unix\.so</ind:pattern>
<ind:instance datatype="int" operation="greater than or equal">1</ind:instance>
</ind:textfilecontent54_object>

<!-- Check common definition of pam_faillock.so in system-auth -->
<ind:textfilecontent54_test check="all" check_existence="only_one_exists" version="1"
id="test_pam_faillock_system_auth_pam_faillock_auth"
comment="One and only one occurrence is expected in auth section of system-auth">
<ind:object
object_ref="obj_pam_faillock_system_auth_pam_faillock_auth"/>
</ind:textfilecontent54_test>

marcusburghardt marked this conversation as resolved.
Show resolved Hide resolved
<ind:textfilecontent54_object version="1"
id="obj_pam_faillock_system_auth_pam_faillock_auth"
comment="Check common definition of pam_faillock.so in auth section of system-auth">
<ind:filepath operation="pattern match">^/etc/pam.d/system-auth$</ind:filepath>
<ind:pattern operation="pattern match"
var_ref="var_pam_faillock_system_auth_pam_faillock_auth_regex"/>
<ind:instance datatype="int" operation="equals">1</ind:instance>
</ind:textfilecontent54_object>

<ind:textfilecontent54_test check="all" check_existence="only_one_exists" version="1"
id="test_pam_faillock_system_auth_pam_faillock_account"
comment="One and only one occurrence is expected in auth section of system-auth">
<ind:object
object_ref="obj_pam_faillock_system_auth_pam_faillock_account"/>
</ind:textfilecontent54_test>

<ind:textfilecontent54_object version="1"
id="obj_pam_faillock_system_auth_pam_faillock_account"
comment="Check common definition of pam_faillock.so in account section of system-auth">
<ind:filepath operation="pattern match">^/etc/pam.d/system-auth$</ind:filepath>
<ind:pattern operation="pattern match"
var_ref="var_pam_faillock_system_auth_pam_faillock_account_regex"/>
<ind:instance datatype="int" operation="equals">1</ind:instance>
</ind:textfilecontent54_object>
</def-group>
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ references:
disa: CCI-000044
nist: AC-7 (a)
srg: SRG-OS-000021-GPOS-00005
stigid@ol8: OL08-00-020025
stigid@rhel8: RHEL-08-020025
stigid@rhel9: RHEL-09-611030

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
# packages = authselect,pam
# platform = Oracle Linux 8,Oracle Linux 9,Red Hat Enterprise Linux 8,Red Hat Enterprise Linux 9

authselect create-profile test_profile -b sssd
authselect select "custom/test_profile" --force

authselect enable-feature with-faillock

authselect apply-changes
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
# packages = authselect,pam
# platform = Oracle Linux 8,Oracle Linux 9,Red Hat Enterprise Linux 8,Red Hat Enterprise Linux 9

authselect create-profile test_profile -b sssd
authselect select "custom/test_profile" --force

authselect disable-feature with-faillock

authselect apply-changes
8 changes: 7 additions & 1 deletion products/ol8/profiles/stig.profile
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ selections:
# OL08-00-020000
- account_temp_expire_date

# OL08-00-020010, OL08-00-020011, OL08-00-020025, OL08-00-020026
# OL08-00-020010, OL08-00-020011
- accounts_passwords_pam_faillock_deny

# OL08-00-020012, OL08-00-020013
Expand All @@ -514,6 +514,12 @@ selections:
# OL08-00-020024
- accounts_max_concurrent_login_sessions

# OL08-00-020025
- account_password_pam_faillock_system_auth

# OL08-00-020026
- account_password_pam_faillock_password_auth

# OL08-00-020027, OL08-00-020028
- account_password_selinux_faillock_dir

Expand Down
Loading