Blame SOURCES/scap-security-guide-0.1.61-chrony_maxpoll-PR_8187.patch

5fd106
From bbafe0a7b4b9eb50bc622d9f9f3c0074fca932f9 Mon Sep 17 00:00:00 2001
5fd106
From: Watson Sato <wsato@redhat.com>
5fd106
Date: Wed, 9 Feb 2022 16:17:52 +0100
5fd106
Subject: [PATCH 1/2] Pass the rule when no time server nor pool is set
ff1465
5fd106
If no time server or pool is configured, there is no entry to add
5fd106
maxpoll option to, so the rule should evaluate to pass.
5fd106
---
5fd106
 .../oval/shared.xml                           | 50 +++++++++++++++----
5fd106
 .../ntp/chronyd_or_ntpd_set_maxpoll/rule.yml  |  2 +
5fd106
 .../tests/chrony_no_pool_nor_servers.pass.sh  | 12 +++++
5fd106
 3 files changed, 54 insertions(+), 10 deletions(-)
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/tests/chrony_no_pool_nor_servers.pass.sh
ff1465
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/oval/shared.xml b/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/oval/shared.xml
5fd106
index 780c2e2d0ba..76f810123f3 100644
ff1465
--- a/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/oval/shared.xml
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/oval/shared.xml
ff1465
@@ -3,17 +3,25 @@
ff1465
     {{{ oval_metadata("Configure the maxpoll setting in /etc/ntp.conf or chrony.conf
ff1465
       to continuously poll the time source servers.") }}}
ff1465
     <criteria operator="OR">
ff1465
-      <criteria operator="AND">
ff1465
-        
ff1465
-        test_ref="test_ntp_set_maxpoll" />
ff1465
-        
ff1465
-        test_ref="test_ntp_all_server_has_maxpoll"/>
ff1465
+      <criteria operator="OR">
ff1465
+        
ff1465
+          test_ref="test_ntp_no_server"/>
ff1465
+        <criteria operator="AND">
ff1465
+          
ff1465
+          test_ref="test_ntp_set_maxpoll" />
ff1465
+          
ff1465
+          test_ref="test_ntp_all_server_has_maxpoll"/>
ff1465
+        </criteria>
ff1465
       </criteria>
ff1465
-      <criteria operator="AND">
ff1465
-        
ff1465
-        test_ref="test_chrony_set_maxpoll" />
ff1465
-        
ff1465
-        test_ref="test_chrony_all_server_has_maxpoll"/>
ff1465
+      <criteria operator="OR">
ff1465
+        
ff1465
+          test_ref="test_chrony_no_server_nor_pool"/>
ff1465
+        <criteria operator="AND">
ff1465
+          
ff1465
+          test_ref="test_chrony_set_maxpoll" />
ff1465
+          
ff1465
+          test_ref="test_chrony_all_server_has_maxpoll"/>
ff1465
+        </criteria>
ff1465
       </criteria>
ff1465
     </criteria>
ff1465
   </definition>
ff1465
@@ -77,4 +85,26 @@
ff1465
     <ind:subexpression operation="pattern match" datatype="string">maxpoll \d+</ind:subexpression>
ff1465
   </ind:textfilecontent54_state>
ff1465
 
ff1465
+  
ff1465
+  comment="check if no server entries have server or pool set in /etc/chrony.conf"
ff1465
+  id="test_chrony_no_server_nor_pool" version="1">
ff1465
+    <ind:object object_ref="obj_chrony_no_server_nor_pool" />
ff1465
+  </ind:textfilecontent54_test>
ff1465
+  <ind:textfilecontent54_object id="obj_chrony_no_server_nor_pool" version="1">
ff1465
+    <ind:filepath operation="pattern match">^/etc/chrony\.(conf|d/.+\.conf)$</ind:filepath>
ff1465
+    <ind:pattern operation="pattern match">^(?:server|pool).*</ind:pattern>
ff1465
+    <ind:instance operation="greater than or equal" datatype="int">1</ind:instance>
ff1465
+  </ind:textfilecontent54_object>
ff1465
+
ff1465
+  
ff1465
+  comment="check if all server entries have maxpoll set in /etc/ntp.conf"
ff1465
+  id="test_ntp_no_server" version="1">
ff1465
+    <ind:object object_ref="obj_ntp_no_server_nor_pool" />
ff1465
+  </ind:textfilecontent54_test>
ff1465
+  <ind:textfilecontent54_object id="obj_ntp_no_server_nor_pool" version="1">
ff1465
+    <ind:filepath>/etc/ntp.conf</ind:filepath>
ff1465
+    <ind:pattern operation="pattern match">^server.*</ind:pattern>
ff1465
+    <ind:instance operation="greater than or equal" datatype="int">1</ind:instance>
ff1465
+  </ind:textfilecontent54_object>
ff1465
+
ff1465
 </def-group>
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/rule.yml b/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/rule.yml
5fd106
index 20e7467a7b5..c115ad3c115 100644
ff1465
--- a/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/rule.yml
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/rule.yml
5fd106
@@ -13,6 +13,8 @@ description: |-
ff1465
     
maxpoll {{{ xccdf_value("var_time_service_set_maxpoll") }}}
5fd106
     to 
server
directives. If using chrony any
pool
directives
5fd106
     should be configured too.
ff1465
+    If no <tt>server</tt> or <tt>pool</tt> directives are configured, the rule evaluates
ff1465
+    to pass.
ff1465
     {{% if product == "rhcos4" %}}
ff1465
     

ff1465
     Note that if the remediation shipping with this content is being used, the
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/tests/chrony_no_pool_nor_servers.pass.sh b/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/tests/chrony_no_pool_nor_servers.pass.sh
ff1465
new file mode 100644
5fd106
index 00000000000..bbae20fc696
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_or_ntpd_set_maxpoll/tests/chrony_no_pool_nor_servers.pass.sh
ff1465
@@ -0,0 +1,12 @@
ff1465
+#!/bin/bash
ff1465
+# packages = chrony
ff1465
+#
ff1465
+# profiles = xccdf_org.ssgproject.content_profile_stig
ff1465
+
ff1465
+yum remove -y ntp
ff1465
+
ff1465
+# Remove all pool and server options
ff1465
+sed -i "/^pool.*/d" /etc/chrony.conf
ff1465
+sed -i "/^server.*/d" /etc/chrony.conf
ff1465
+
ff1465
+systemctl enable chronyd.service
5fd106
5fd106
From 60ef6eb2cce9e53ea256738ff2583b332155a318 Mon Sep 17 00:00:00 2001
5fd106
From: Watson Sato <wsato@redhat.com>
5fd106
Date: Fri, 11 Feb 2022 12:14:30 +0100
5fd106
Subject: [PATCH 2/2] Add rule ensuring Chrony only uses server directive
5fd106
5fd106
This new rule only asserts that Chrony has at least one time source configured,
5fd106
and that it is done with the  'server' directive.
5fd106
No remediation is provided for rule, that is left for other specialized
5fd106
rules.
5fd106
---
5fd106
 .../chronyd_server_directive/oval/shared.xml  | 33 +++++++++++++++++++
5fd106
 .../ntp/chronyd_server_directive/rule.yml     | 32 ++++++++++++++++++
5fd106
 .../tests/file_empty.fail.sh                  |  6 ++++
5fd106
 .../tests/file_missing.fail.sh                |  6 ++++
5fd106
 .../tests/line_missing.fail.sh                |  7 ++++
5fd106
 .../tests/multiple_servers.pass.sh            |  8 +++++
5fd106
 .../tests/only_pool.fail.sh                   |  9 +++++
5fd106
 .../tests/only_server.pass.sh                 |  6 ++++
5fd106
 products/rhel8/profiles/stig.profile          |  1 +
5fd106
 products/rhel9/profiles/stig.profile          |  1 +
5fd106
 shared/references/cce-redhat-avail.txt        |  2 --
5fd106
 .../data/profile_stability/rhel8/stig.profile |  1 +
5fd106
 .../profile_stability/rhel8/stig_gui.profile  |  1 +
5fd106
 13 files changed, 111 insertions(+), 2 deletions(-)
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/oval/shared.xml
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/rule.yml
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/tests/file_empty.fail.sh
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/tests/file_missing.fail.sh
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/tests/line_missing.fail.sh
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/tests/multiple_servers.pass.sh
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/tests/only_pool.fail.sh
5fd106
 create mode 100644 linux_os/guide/services/ntp/chronyd_server_directive/tests/only_server.pass.sh
5fd106
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/oval/shared.xml b/linux_os/guide/services/ntp/chronyd_server_directive/oval/shared.xml
ff1465
new file mode 100644
5fd106
index 00000000000..2244e608047
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/oval/shared.xml
ff1465
@@ -0,0 +1,33 @@
ff1465
+<def-group>
ff1465
+  <definition class="compliance" id="{{{ rule_id }}}" version="1">
ff1465
+    {{{ oval_metadata("Ensure Chrony has time sources configured with server directive") }}}
ff1465
+    <criteria comment="chrony.conf only has server directive">
ff1465
+      <criterion test_ref="test_chronyd_server_directive_with_server" />
ff1465
+      <criterion test_ref="test_chronyd_server_directive_no_pool" />
ff1465
+    </criteria>
ff1465
+  </definition>
ff1465
+
ff1465
+  
ff1465
+  comment="Ensure at least one time source is set with server directive" id="test_chronyd_server_directive_with_server"
ff1465
+  version="1">
ff1465
+    <ind:object object_ref="object_chronyd_server_directive" />
ff1465
+  </ind:textfilecontent54_test>
ff1465
+  
ff1465
+  id="object_chronyd_server_directive" version="1">
ff1465
+    <ind:filepath operation="pattern match">^/etc/chrony\.(conf|d/.+\.conf)$</ind:filepath>
ff1465
+    <ind:pattern operation="pattern match">^[\s]*server.*$</ind:pattern>
ff1465
+    <ind:instance datatype="int">1</ind:instance>
ff1465
+  </ind:textfilecontent54_object>
ff1465
+
ff1465
+  
ff1465
+  comment="Ensure no time source is set with pool directive" id="test_chronyd_server_directive_no_pool"
ff1465
+  version="1">
ff1465
+    <ind:object object_ref="object_chronyd_no_pool_directive" />
ff1465
+  </ind:textfilecontent54_test>
ff1465
+  
ff1465
+  id="object_chronyd_no_pool_directive" version="1">
ff1465
+    <ind:filepath operation="pattern match">^/etc/chrony\.(conf|d/.+\.conf)$</ind:filepath>
ff1465
+    <ind:pattern operation="pattern match">^[\s]+pool.*$</ind:pattern>
ff1465
+    <ind:instance datatype="int">1</ind:instance>
ff1465
+  </ind:textfilecontent54_object>
ff1465
+</def-group>
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/rule.yml b/linux_os/guide/services/ntp/chronyd_server_directive/rule.yml
ff1465
new file mode 100644
5fd106
index 00000000000..6dc24f1be85
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/rule.yml
ff1465
@@ -0,0 +1,32 @@
ff1465
+documentation_complete: true
ff1465
+
ff1465
+title: 'Ensure Chrony is only configured with the server directive'
ff1465
+
ff1465
+description: |-
ff1465
+    Check that Chrony only has time sources configured with the <tt>server</tt> directive.
ff1465
+
ff1465
+rationale: |-
ff1465
+    Depending on the infrastruture being used the <tt>pool</tt> directive may not be supported.
ff1465
+
ff1465
+severity: medium
ff1465
+
ff1465
+platform: chrony
ff1465
+
ff1465
+warnings:
ff1465
+  - general: This rule doesn't come with a remediation, the time source needs to be added by the adminstrator.
ff1465
+
ff1465
+identifiers:
ff1465
+    cce@rhel8: CCE-86077-5
ff1465
+    cce@rhel9: CCE-87077-4
ff1465
+
ff1465
+references:
ff1465
+    disa: CCI-001891
ff1465
+    srg: SRG-OS-000355-GPOS-00143,SRG-OS-000356-GPOS-00144,SRG-OS-000359-GPOS-00146
ff1465
+    stigid@rhel8: RHEL-08-030740
ff1465
+
ff1465
+ocil_clause: 'a remote time server is not configured or configured with pool directive'
ff1465
+
ff1465
+ocil: |-
ff1465
+    Run the following command and verify that time sources are only configure with <tt>server</tt> directive:
ff1465
+    
# grep -E "^(server|pool)" /etc/chrony.conf
ff1465
+    A line with the appropriate server should be returned, any line returned starting with <tt>pool</tt> is a finding.
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/tests/file_empty.fail.sh b/linux_os/guide/services/ntp/chronyd_server_directive/tests/file_empty.fail.sh
ff1465
new file mode 100644
5fd106
index 00000000000..d1ba0755198
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/tests/file_empty.fail.sh
ff1465
@@ -0,0 +1,6 @@
ff1465
+#!/bin/bash
ff1465
+# packages = chrony
ff1465
+# platform = multi_platform_fedora,multi_platform_rhel
ff1465
+# remediation = none
ff1465
+
ff1465
+echo "" > /etc/chrony.conf
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/tests/file_missing.fail.sh b/linux_os/guide/services/ntp/chronyd_server_directive/tests/file_missing.fail.sh
ff1465
new file mode 100644
5fd106
index 00000000000..12a50ebc3d2
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/tests/file_missing.fail.sh
ff1465
@@ -0,0 +1,6 @@
ff1465
+#!/bin/bash
ff1465
+# packages = chrony
ff1465
+# platform = multi_platform_fedora,multi_platform_rhel
ff1465
+# remediation = none
ff1465
+
ff1465
+rm -f /etc/chrony.conf
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/tests/line_missing.fail.sh b/linux_os/guide/services/ntp/chronyd_server_directive/tests/line_missing.fail.sh
ff1465
new file mode 100644
5fd106
index 00000000000..bffa8b62b1b
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/tests/line_missing.fail.sh
ff1465
@@ -0,0 +1,7 @@
ff1465
+#!/bin/bash
ff1465
+# packages = chrony
ff1465
+# platform = multi_platform_fedora,multi_platform_rhel
ff1465
+# remediation = none
ff1465
+
ff1465
+echo "some line" > /etc/chrony.conf
ff1465
+echo "another line" >> /etc/chrony.conf
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/tests/multiple_servers.pass.sh b/linux_os/guide/services/ntp/chronyd_server_directive/tests/multiple_servers.pass.sh
ff1465
new file mode 100644
5fd106
index 00000000000..5527f389316
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/tests/multiple_servers.pass.sh
ff1465
@@ -0,0 +1,8 @@
ff1465
+#!/bin/bash
ff1465
+# packages = chrony
ff1465
+# platform = multi_platform_fedora,multi_platform_rhel
ff1465
+# remediation = none
ff1465
+
ff1465
+sed -i "^pool.*" /etc/chrony.conf
ff1465
+echo "server 0.pool.ntp.org" > /etc/chrony.conf
ff1465
+echo "server 1.pool.ntp.org" >> /etc/chrony.conf
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/tests/only_pool.fail.sh b/linux_os/guide/services/ntp/chronyd_server_directive/tests/only_pool.fail.sh
ff1465
new file mode 100644
5fd106
index 00000000000..616fe8844fc
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/tests/only_pool.fail.sh
ff1465
@@ -0,0 +1,9 @@
ff1465
+#!/bin/bash
ff1465
+# packages = chrony
ff1465
+# platform = multi_platform_fedora,multi_platform_rhel
ff1465
+# remediation = none
ff1465
+
ff1465
+sed -i "^server.*" /etc/chrony.conf
ff1465
+if ! grep "^pool.*" /etc/chrony.conf; then
ff1465
+    echo "pool 0.pool.ntp.org" > /etc/chrony.conf
ff1465
+fi
ff1465
diff --git a/linux_os/guide/services/ntp/chronyd_server_directive/tests/only_server.pass.sh b/linux_os/guide/services/ntp/chronyd_server_directive/tests/only_server.pass.sh
ff1465
new file mode 100644
5fd106
index 00000000000..21a70dc4900
ff1465
--- /dev/null
ff1465
+++ b/linux_os/guide/services/ntp/chronyd_server_directive/tests/only_server.pass.sh
ff1465
@@ -0,0 +1,6 @@
ff1465
+#!/bin/bash
ff1465
+# packages = chrony
ff1465
+# platform = multi_platform_fedora,multi_platform_rhel
ff1465
+
ff1465
+sed -i "^pool.*" /etc/chrony.conf
ff1465
+echo "server 0.pool.ntp.org" > /etc/chrony.conf
ff1465
diff --git a/products/rhel8/profiles/stig.profile b/products/rhel8/profiles/stig.profile
5fd106
index 36f606ee461..2bd1fb54316 100644
ff1465
--- a/products/rhel8/profiles/stig.profile
ff1465
+++ b/products/rhel8/profiles/stig.profile
5fd106
@@ -909,6 +909,7 @@ selections:
5fd106
     # RHEL-08-030740
5fd106
     # remediation fails because default configuration file contains pool instead of server keyword
5fd106
     - chronyd_or_ntpd_set_maxpoll
5fd106
+    - chronyd_server_directive
5fd106
 
5fd106
     # RHEL-08-030741
5fd106
     - chronyd_client_only
5fd106
diff --git a/products/rhel9/profiles/stig.profile b/products/rhel9/profiles/stig.profile
5fd106
index 374932cfd32..0d4d7b0ff97 100644
5fd106
--- a/products/rhel9/profiles/stig.profile
5fd106
+++ b/products/rhel9/profiles/stig.profile
5fd106
@@ -909,6 +909,7 @@ selections:
ff1465
     # RHEL-08-030740
ff1465
     # remediation fails because default configuration file contains pool instead of server keyword
ff1465
     - chronyd_or_ntpd_set_maxpoll
ff1465
+    - chronyd_server_directive
ff1465
 
ff1465
     # RHEL-08-030741
ff1465
     - chronyd_client_only
ff1465
diff --git a/shared/references/cce-redhat-avail.txt b/shared/references/cce-redhat-avail.txt
5fd106
index 8c59c5d3201..0081fe1938f 100644
ff1465
--- a/shared/references/cce-redhat-avail.txt
ff1465
+++ b/shared/references/cce-redhat-avail.txt
5fd106
@@ -152,7 +152,6 @@ CCE-86073-4
ff1465
 CCE-86074-2
ff1465
 CCE-86075-9
ff1465
 CCE-86076-7
ff1465
-CCE-86077-5
ff1465
 CCE-86078-3
ff1465
 CCE-86079-1
ff1465
 CCE-86080-9
5fd106
@@ -1079,7 +1078,6 @@ CCE-87073-3
ff1465
 CCE-87074-1
ff1465
 CCE-87075-8
ff1465
 CCE-87076-6
ff1465
-CCE-87077-4
ff1465
 CCE-87078-2
ff1465
 CCE-87079-0
ff1465
 CCE-87080-8
ff1465
diff --git a/tests/data/profile_stability/rhel8/stig.profile b/tests/data/profile_stability/rhel8/stig.profile
5fd106
index 5b06103d72e..7d44f8910d1 100644
ff1465
--- a/tests/data/profile_stability/rhel8/stig.profile
ff1465
+++ b/tests/data/profile_stability/rhel8/stig.profile
5fd106
@@ -160,6 +160,7 @@ selections:
ff1465
 - chronyd_client_only
ff1465
 - chronyd_no_chronyc_network
ff1465
 - chronyd_or_ntpd_set_maxpoll
ff1465
+- chronyd_server_directive
ff1465
 - clean_components_post_updating
ff1465
 - configure_bashrc_exec_tmux
ff1465
 - configure_bind_crypto_policy
ff1465
diff --git a/tests/data/profile_stability/rhel8/stig_gui.profile b/tests/data/profile_stability/rhel8/stig_gui.profile
5fd106
index 11e0ee9515a..91546d1d418 100644
ff1465
--- a/tests/data/profile_stability/rhel8/stig_gui.profile
ff1465
+++ b/tests/data/profile_stability/rhel8/stig_gui.profile
5fd106
@@ -171,6 +171,7 @@ selections:
ff1465
 - chronyd_client_only
ff1465
 - chronyd_no_chronyc_network
ff1465
 - chronyd_or_ntpd_set_maxpoll
ff1465
+- chronyd_server_directive
ff1465
 - clean_components_post_updating
ff1465
 - configure_bashrc_exec_tmux
ff1465
 - configure_bind_crypto_policy