diff --git a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/ansible/shared.yml b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/ansible/shared.yml
new file mode 100644
index 00000000000..45a91091534
--- /dev/null
+++ b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/ansible/shared.yml
@@ -0,0 +1,76 @@
+# platform = multi_platform_rhel
+# reboot = false
+# strategy = configure
+# complexity = low
+# disruption = low
+
+# Copied and modified from `file_permissions/ansible.yml` template
+#
+# Sets mode 0600 and ownership root:root on all audit config files.
+# Installs an auditd.service dropin to restore 0600 on audit.rules after augenrules
+# rewrites it to 0640 when /etc/audit/rules.d/ content changes (RHEL 8/9 only, not containers).
+
+- name: "{{{ rule_title }}} - Set /etc/audit/audit.rules and /etc/audit/auditd.conf to 0600, owned by root"
+ ansible.builtin.file:
+ path: "{{ item }}"
+ mode: '0600'
+ owner: root
+ group: root
+ state: file
+ loop:
+ - /etc/audit/audit.rules
+ - /etc/audit/auditd.conf
+ failed_when: false
+ register: audit_config_perms
+
+- name: "{{{ rule_title }}} - Find /etc/audit/rules.d/*.rules files"
+ ansible.builtin.find:
+ paths: /etc/audit/rules.d/
+ depth: 1
+ file_type: file
+ patterns: '*.rules'
+ register: rules_files
+
+- name: "{{{ rule_title }}} - Set /etc/audit/rules.d/*.rules files to 0600, owned by root"
+ ansible.builtin.file:
+ path: "{{ item.path }}"
+ mode: '0600'
+ owner: root
+ group: root
+ state: file
+ loop: "{{ rules_files.files }}"
+ register: rules_dir_perms
+
+- name: "{{{ rule_title }}} - Install ExecStartPost dropin on auditd.service"
+ block:
+ - name: "{{{ rule_title }}} - Create dropin directory /etc/systemd/system/auditd.service.d"
+ ansible.builtin.file:
+ path: /etc/systemd/system/auditd.service.d
+ state: directory
+ mode: '0755'
+
+ - name: "{{{ rule_title }}} - Install /etc/systemd/system/auditd.service.d/permissions.conf"
+ ansible.builtin.copy:
+ dest: /etc/systemd/system/auditd.service.d/permissions.conf
+ content: |
+ [Service]
+ ExecStartPost=/usr/bin/chmod 0600 /etc/audit/audit.rules
+ mode: '0644'
+
+ - name: "{{{ rule_title }}} - Restore SELinux context on /etc/systemd/system/auditd.service.d/permissions.conf"
+ ansible.builtin.command: restorecon /etc/systemd/system/auditd.service.d/permissions.conf
+ changed_when: false
+
+ - name: "{{{ rule_title }}} - Reload systemd daemon to pick up permissions.conf"
+ ansible.builtin.systemd:
+ daemon_reload: true
+
+ # IMPORTANT: this is necessary to ensure the dropin is loaded and the permissions for /etc/audit/ and /etc/audit/rules.d/ files are set correctly.
+ - name: "{{{ rule_title }}} - Restart auditd.service"
+ ansible.builtin.command: service auditd restart
+ when:
+ - audit_config_perms.changed or rules_dir_perms.changed
+
+ when:
+ - '"audit" in ansible_facts.packages'
+ - '"kernel-core" in ansible_facts.packages'
diff --git a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/bash/shared.sh b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/bash/shared.sh
new file mode 100644
index 00000000000..8029086e532
--- /dev/null
+++ b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/bash/shared.sh
@@ -0,0 +1,40 @@
+# platform = multi_platform_rhel
+# reboot = false
+# strategy = configure
+# complexity = low
+# disruption = low
+
+# Copied and modified from `file_permissions/bash.template` template
+#
+# Sets mode 0600 and ownership root:root on all audit config files.
+# Installs an auditd.service dropin to restore 0600 on audit.rules after augenrules
+# rewrites it to 0640 when /etc/audit/rules.d/ content changes (RHEL 8/9 only, not containers).
+
+find /etc/audit/ -maxdepth 1 -type f \
+ -regextype posix-extended -regex '^.*audit(\.rules|d\.conf)$' \
+ -exec chmod 0600 {} \; \
+ -exec chown root:root {} \;
+
+find /etc/audit/rules.d/ -maxdepth 1 -type f -name '*.rules' \
+ -exec chmod 0600 {} \; \
+ -exec chown root:root {} \;
+
+if rpm --quiet -q audit && rpm --quiet -q kernel-core; then
+
+# Generate the dropin file content to restore 0600 on audit.rules after augenrules rewrites it to 0640 when /etc/audit/rules.d/ content changes (RHEL 8/9 only, not containers).
+
+mkdir -p /etc/systemd/system/auditd.service.d
+chmod 0755 /etc/systemd/system/auditd.service.d
+
+cat > /etc/systemd/system/auditd.service.d/permissions.conf << 'EOF'
+[Service]
+ExecStartPost=/usr/bin/chmod 0600 /etc/audit/audit.rules
+EOF
+chmod 0644 /etc/systemd/system/auditd.service.d/permissions.conf
+restorecon /etc/systemd/system/auditd.service.d/permissions.conf
+
+systemctl daemon-reload
+# IMPORTANT: this is necessary to ensure the dropin is loaded and the permissions for /etc/audit/ and /etc/audit/rules.d/ files are set correctly.
+service auditd restart
+
+fi
diff --git a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/rule.yml b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/rule.yml
index b1999484c00..ee16f671cd8 100644
--- a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/rule.yml
+++ b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/rule.yml
@@ -29,6 +29,10 @@ ocil: |-
{{{ describe_file_permissions(file="/etc/audit/", perms="0600") }}}
{{{ describe_file_permissions(file="/etc/audit/rules.d/", perms="0600") }}}
+warnings:
+ - general: |-
+ augenrules --load resets permissions of /etc/audit/audit.rules to 0640, undoing remediation (0600). Fix: A systemd dropin for audit service is installed at /etc/systemd/system/auditd.service.d/permissions.confwith ExecStartPost=/usr/bin/chmod 0600 /etc/audit/audit.rules. This dropin is necessary to restore 0600 permissions after augenrules runs and rewrites the /etc/audit/audit.rules file. systemd runs both commands in order, restoring 0600. Use service auditd restart to reload and apply the drop-in when remediating manually.
+
template:
name: file_permissions
vars:
diff --git a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/correct_permissions.pass.sh b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/correct_permissions.pass.sh
index b779f3b7833..8f996720ed5 100644
--- a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/correct_permissions.pass.sh
+++ b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/correct_permissions.pass.sh
@@ -3,9 +3,9 @@
rm -rf /etc/audit/*
mkdir -p /etc/audit/rules.d/
-export TESTFILE=/etc/audit/rules.d/test_rule.rules
-export AUDITFILE=/etc/audit/auditd.conf
-touch $TESTFILE
-touch $AUDITFILE
-chmod 0600 $TESTFILE
-chmod 0600 $AUDITFILE
+touch /etc/audit/auditd.conf
+echo '-a always,exit -F arch=b64 -S getuid -k test_execstartpost_2' > /etc/audit/rules.d/test_rule.rules
+augenrules --load
+chmod 0600 /etc/audit/audit.rules
+chmod 0600 /etc/audit/auditd.conf
+chmod 0600 /etc/audit/rules.d/test_rule.rules
diff --git a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/lenient_permissions.fail.sh b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/lenient_permissions.fail.sh
index 8fa81c475e1..fcd252dd524 100644
--- a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/lenient_permissions.fail.sh
+++ b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/lenient_permissions.fail.sh
@@ -3,9 +3,9 @@
rm -rf /etc/audit/*
mkdir -p /etc/audit/rules.d/
-export TESTFILE=/etc/audit/rules.d/test_rule.rules
-export AUDITFILE=/etc/audit/auditd.conf
-touch $TESTFILE
-touch $AUDITFILE
-chmod 0640 $TESTFILE
-chmod 0640 $AUDITFILE
+touch /etc/audit/auditd.conf
+echo '-a always,exit -F arch=b64 -S getuid -k test_execstartpost_2' > /etc/audit/rules.d/test_rule.rules
+augenrules --load
+chmod 0640 /etc/audit/audit.rules
+chmod 0640 /etc/audit/auditd.conf
+chmod 0640 /etc/audit/rules.d/test_rule.rules
diff --git a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/stricter_permisions.pass.sh b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/stricter_permisions.pass.sh
index 7b396e89695..30dbafcbc27 100644
--- a/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/stricter_permisions.pass.sh
+++ b/linux_os/guide/auditing/auditd_configure_rules/file_permissions_audit_configuration_stig/tests/stricter_permisions.pass.sh
@@ -3,9 +3,9 @@
rm -rf /etc/audit/*
mkdir -p /etc/audit/rules.d/
-export TESTFILE=/etc/audit/rules.d/test_rule.rules
-export AUDITFILE=/etc/audit/auditd.conf
-touch $TESTFILE
-touch $AUDITFILE
-chmod 0400 $TESTFILE
-chmod 0400 $AUDITFILE
+touch /etc/audit/auditd.conf
+echo '-a always,exit -F arch=b64 -S getuid -k test_execstartpost_2' > /etc/audit/rules.d/test_rule.rules
+augenrules --load
+chmod 0400 /etc/audit/audit.rules
+chmod 0400 /etc/audit/auditd.conf
+chmod 0400 /etc/audit/rules.d/test_rule.rules