You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Systems that our content aims to harden are very often large collections of separate components whose life cycle is independent from the life cycle of the product that ships them.
10
-
For example, the Red Hat Enterprise Linux consists of more than six thousand of such distinct components, although only a fraction of them s.a. OpenSSH, Grub2 and so on is supported by the ComplianceAsCode project.
10
+
For example, the Red Hat Enterprise Linux consists of more than six thousand of such distinct components, although only a fraction of them s.a. OpenSSH, Grub2 is supported by the ComplianceAsCode project.
11
11
12
12
Our Red Hat group is contemplating the idea of making the content project better equipped to handle changes in component behavior better.
13
13
As the project is open-source and has a community, we would like to get it involved from the very start.
@@ -53,7 +53,7 @@ Let's take a look how those ideas could align to the subject of component change
53
53
54
54
### Multiple rules to address one requirement
55
55
56
-
In practice, we may not know at build-time what exact version of a component will be scanned, and we may address this uncertainty by having multiple rules prepared to handle this uncertainty.
56
+
In practice, we may not know at build-time what exact version of a component will be scanned, and we may address this uncertainty by having multiple rules prepared to handle it.
57
57
When it comes to the actual scanning, this collection of rules has to make sure that the evaluation will be carried out correctly, regardless of what component version is present on the system.
58
58
59
59
This could be achieved by a set of rules with disjoint applicability, so at the end, at most one rule is active.
@@ -97,7 +97,7 @@ Designing such product properties in a way that is smart, doesn't get in the way
97
97
Can you think of other ways of bringing declarative principles to the project?
98
98
99
99
100
-
### Be able to track component changes and our reactions to them.
100
+
### Ability to track component changes and our reactions to them.
101
101
102
102
Imagine that a component changes behavior, and you dispatch pull requests that react to that change, and they get merged successfully.
103
103
However, later you discover that something is still not right, and you need to check out the reaction to that change.
@@ -113,15 +113,15 @@ This can be very difficult to achieve exhaustively, but a partial and good enoug
113
113
114
114
### Polymorphic rules
115
115
116
-
Rules that try to do two things don't sound like a good idea, but if those two things are almost the same, then perhaps it could make sense.
117
-
Although `CCE` identifiers restrict the scope of rule polymorphism significantly, change of component configuration preference could be handled without splitting a rule into two, polymorphically.
116
+
Rules that try to do two things don't sound like a good idea, but what if those two things would heavily overlap?
117
+
Great candidats for polymorphism are changes when component configuration doesn't change, as it is the way of how to achieve this configuration that does.
118
+
In cases like this, a rule can get a polymorphic remediation and keep the `CCE` identifier if it has one, as `CCE`s don't change if the configuration stays the same.
118
119
119
-
We have some polymorphic rules in our content, but they became polymorphic on their own, the project hasn't helped them with their polymorphism.
120
-
For instance, the rule [no_empty_passwords](https://github.com/ComplianceAsCode/content/tree/master/linux_os/guide/system/accounts/accounts-restrictions/password_storage/no_empty_passwords) mentioned earlier has polymorphic Bash remediation and a rather simple OVAL check, while [enable_fips_mode](https://github.com/ComplianceAsCode/content/tree/master/linux_os/guide/system/software/integrity/fips/enable_fips_mode) has a simple Bash remediation, but a complex OVAL.
120
+
For instance, the rule [no_empty_passwords](https://github.com/ComplianceAsCode/content/tree/master/linux_os/guide/system/accounts/accounts-restrictions/password_storage/no_empty_passwords) also mentioned earlier, has polymorphic Bash remediation and a rather simple OVAL check.
121
+
Another example is different - [enable_fips_mode](https://github.com/ComplianceAsCode/content/tree/master/linux_os/guide/system/software/integrity/fips/enable_fips_mode) has a simple Bash remediation, but complex OVAL and this example nicely illustrates the richness of the rule-level polymorphism in the project.
121
122
122
-
Provided examples nicely illustrate the richness of the rule-level polymorphism in the project.
123
-
Rules don't advertise that they are polymorphic, and the project doesn't provide them with any specific help with their polymorphism.
124
-
Project support for polymorphism of rules could reduce maintenance costs, as polymorphism would become more declarative.
123
+
We have some more polymorphic rules in our content, but they became polymorphic "maually" - they don't declare their polymorphism, and there are no build system features that would guide a rule's transformation to a polymorphic rule.
124
+
Project support for polymorphism of rules could reduce maintenance costs by making changes cheaper, and also by enabling maintainers overview of what rules are polymorphic and what aren't.
0 commit comments