The reconstructed evaluation script behind this rule's OVAL check(s) — every module a compound check combines, with this rule's own concrete values and DISA's SCC tool's real per-module mechanism curated from static teardown of SCC releases.
#!/bin/bash
# Reconstructed from oval:mil.disa.stig.ubuntu2004:def:147
# The Ubuntu operating system must generate audit records for any use of the setxattr, fsetxattr, lsetxattr, removexattr, fremovexattr, and lremovexattr system calls.
# Per-module read mechanism curated from static teardown of DISA's SCC tool
# (SCAP Compliance Checker) -- see the SCC Automation Reference above.
# Audit 32-bit invocations of setxattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_1() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of setxattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_2() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of setxattr by root
# textfilecontent54_object (textfilecontent54_test)
test_3() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of setxattr by root
# textfilecontent54_object (textfilecontent54_test)
test_4() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of lsetxattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_5() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\blsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of lsetxattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_6() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\blsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of lsetxattr by root
# textfilecontent54_object (textfilecontent54_test)
test_7() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\blsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of lsetxattr by root
# textfilecontent54_object (textfilecontent54_test)
test_8() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\blsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of fsetxattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_9() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of fsetxattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_10() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of fsetxattr by root
# textfilecontent54_object (textfilecontent54_test)
test_11() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of fsetxattr by root
# textfilecontent54_object (textfilecontent54_test)
test_12() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfsetxattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of removexattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_13() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of removexattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_14() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of removexattr by root
# textfilecontent54_object (textfilecontent54_test)
test_15() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of removexattr by root
# textfilecontent54_object (textfilecontent54_test)
test_16() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of lremovexattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_17() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\blremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of lremovexattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_18() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\blremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of lremovexattr by root
# textfilecontent54_object (textfilecontent54_test)
test_19() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\blremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of lremovexattr by root
# textfilecontent54_object (textfilecontent54_test)
test_20() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\blremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of fremovexattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_21() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of fremovexattr by interactive users
# textfilecontent54_object (textfilecontent54_test)
test_22() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid>=1000\s+-F\s+auid!=(?:4294967295|-1|unset)(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 32-bit invocations of fremovexattr by root
# textfilecontent54_object (textfilecontent54_test)
test_23() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b32\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
# Audit 64-bit invocations of fremovexattr by root
# textfilecontent54_object (textfilecontent54_test)
test_24() {
grep -Pq '^\s*-a\s+(?:always,exit|exit,always)\s+-F\s+arch=b64\s+(?:-S\s+\S+\s+)*-S\s+\S*\bfremovexattr\b\S*\s+(?:-S\s+\S+\s+)*-F\s+auid=0(?:\s+(?:-k\s+|-F\s+key=)[-\w]+)*\s*$' '/etc/audit/audit.rules' &>/dev/null
}
if ( test_1 && test_2 && test_3 && test_4 && test_5 && test_6 && test_7 && test_8 && test_9 && test_10 && test_11 && test_12 && test_13 && test_14 && test_15 && test_16 && test_17 && test_18 && test_19 && test_20 && test_21 && test_22 && test_23 && test_24 ); then
echo "PASS"
else
echo "FAIL"
fi Assessment Script Powered by AISandbox-executed
A standalone Shell script to assess this control automatically. Review before running it in your environment.
Syntax-checked and actually executed in an isolated sandbox (not the real system this checks) — confirmed to run without errors.
#!/bin/sh
# OVAL Definition: oval:mil.disa.stig.ubuntu2004:def:147
if [ ! -f "/etc/audit/rules.d/stig.rules" ]; then echo "PASS"; exit 0; fi
grep -q "^\\s*-a\\s+(?:always,exit|exit,always)\\s+-F\\s+arch=b32\\s+-S\\s+\\S*\\bsetxattr\\b\\S*\\s+-F\\s+auid>=1000\\s+-F\\s+auid != (?:4294967295|-1|unset)(?:\\s+-k\\s+perm_mod)*\\s*$" /etc/audit/rules.d/stig.rules || exit 1
grep -q "^\\s*-a\\s+(?:always,exit|exit,always)\\s+-F\\s+arch=b32\\s+-S\\s+\\S*\\bsetxattr\\b\\S*\\s+-F\\s+auid=0(?:\\s+-k\\s+perm_mod)*\\s*$" /etc/audit/rules.d/stig.rules || exit 1
grep -q "^\\s*-a\\s+(?:always,exit|exit,always)\\s+-F\\s+arch=b64\\s+-S\\s+\\S*\\bsetxattr\\b\\S*\\s+-F\\s+auid>=1000\\s+-F\\s+auid != (?:4294967295|-1|unset)(?:\\s+-k\\s+perm_mod)*\\s*$" /etc/audit/rules.d/stig.rules || exit 1
grep -q "^\\s*-a\\s+(?:always,exit|exit,always)\\s+-F\\s+arch=b64\\s+-S\\s+\\S*\\bsetxattr\\b\\S*\\s+-F\\s+auid=0(?:\\s+-k\\s+perm_mod)*\\s*$" /etc/audit/rules.d/stig.rules || exit 1
echo "PASS"; exit 0