[
  {
    "path": ".github/workflows/issue-pr-contrib-metrics.yaml",
    "content": "name: Monthly contributor report\non:\n  workflow_dispatch:\n    inputs:\n      start_date:\n        type: string\n        description: |\n          Custom start date for metrics generation in YYYY-MM-DD format.\n        required: true\n      end_date:\n        type: string\n        description: |\n          Custom end date for metrics generation in YYYY-MM-DD format.\n        required: true\n  # Run on every 22th of the month. This guarantees that this action runs\n  # before the Dev Sync (every 4th Tuesday of the month in the afternoon).\n  schedule:\n    - cron: '0 0 22 * *'\n\npermissions:\n  issues: write\n\njobs:\n  contributor_report:\n    name: contributor report\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Set the start and end dates\n        shell: bash\n        run: |\n          set -euo pipefail\n          if [[ -n \"${{inputs.start_date}}\" && -n \"${{inputs.end_date}}\" ]] ; then\n            start_date=\"${{inputs.start_date}}\"\n            end_date=${{inputs.end_date}}\n          else\n            start_date=$(date -d \"last month\" +%Y-%m-%d)\n            end_date=$(date -d \"yesterday\" +%Y-%m-%d)\n          fi\n\n          echo \"START_DATE=$start_date\" >> \"$GITHUB_ENV\"\n          echo \"END_DATE=$end_date\" >> \"$GITHUB_ENV\"\n\n      #\n      #   Contributors stats\n      #\n      - name: Collect contributor metrics\n        uses: github-community-projects/contributors@v1\n        env:\n          GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n          START_DATE: ${{ env.START_DATE }}\n          END_DATE: ${{ env.END_DATE }}\n          # We explicitly list repos for our metrics here so temporary forks like\n          #  e.g. systemd, gentoo, or udev don't pollute the stats\n          REPOSITORY: \"flatcar/nebraska,flatcar/flatcar-website,flatcar/flatcar-build-scripts,flatcar/baselayout,flatcar/bootengine,flatcar/coreos-cloudinit,flatcar/flatcar-dev-util,flatcar/init,flatcar/locksmith,flatcar/mantle,flatcar/mayday,flatcar/nss-altfiles,flatcar/scripts,flatcar/seismograph,flatcar/shim,flatcar/sysroot-wrappers,flatcar/toolbox,flatcar/torcx,flatcar/update-ssh-keys,flatcar/update_engine,flatcar/updateservicectl,flatcar/Flatcar,flatcar/flatcar-packer-qemu,flatcar/flatcar-ipxe-scripts,flatcar/flatcar-cloud-image-uploader,flatcar/flatcar-linux-update-operator,flatcar/flatcar-release-mirror,flatcar/flatcar-terraform,flatcar/sdnotify-proxy,flatcar/nebraska-update-agent,flatcar/fleetlock,flatcar/flog,flatcar/ign-converter,flatcar/nomad-on-flatcar,flatcar/sysext-bakery,flatcar/reports,flatcar/flatcar-demos,flatcar/jitsi-server,flatcar/flatcar-mastodon,flatcar/ue-rs,flatcar/azure-marketplace-ingestion-api,flatcar/flatcar-tutorial,flatcar/flatcar-app-minecraft,flatcar/garm-provider-linode,flatcar/socials\"\n          SPONSOR_INFO: \"false\"\n\n      #\n      #   Q&A Discussions stats\n      #\n      - name: All unanswered Q&A summary metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions category:Q&A is:unanswered'\n            # This metric measures items that are still open\n            HIDE_TIME_TO_CLOSE: true\n      - name: rename open discussion metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md discussion_qna_open.md\n\n      - name: All answered Q&A Discussions metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions category:Q&A is:answered'\n      - name: rename open discussion metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md discussion_qna_closed.md\n\n      - name: New Q&A discussions created metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions category:Q&A created:${{ env.START_DATE }}..${{ env.END_DATE }}'\n      - name: rename open discussion metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md discussion_qna_opened.md\n\n      #\n      #   Regular Discussions stats\n      #\n      - name: All open Discussions summary metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions -category:Q&A is:open'\n            # This metric measures items that are still open\n            HIDE_TIME_TO_CLOSE: true\n      - name: rename open discussion metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md discussion_open.md\n\n      - name: New Discussions created metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions -category:Q&A created:${{ env.START_DATE }}..${{ env.END_DATE }}'\n      - name: rename open discussion metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md discussion_opened.md\n\n      - name: Discussions closed metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions -category:Q&A closed:${{ env.START_DATE }}..${{ env.END_DATE }}'\n      - name: rename open discussion metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md discussion_closed.md\n\n      #\n      #   Issues stats\n      #\n      - name: All open Issues summary metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'org:flatcar is:issue is:open'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n            # This metric measures items that are still open\n            HIDE_TIME_TO_CLOSE: true\n            IGNORE_USERS: \"flatcar-infra,github-actions[bot],dependabot[bot]\"\n      - name: rename open issues metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md issues_open.md\n\n      - name: New issues created metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'org:flatcar is:issue created:${{ env.START_DATE }}..${{ env.END_DATE }}'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n            IGNORE_USERS: \"flatcar-infra,github-actions[bot],dependabot[bot]\"\n      - name: rename new issues opened metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md issues_opened.md\n\n      - name: Issues closed metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'org:flatcar is:issue closed:${{ env.START_DATE }}..${{ env.END_DATE }}'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n            IGNORE_USERS: \"flatcar-infra,github-actions[bot],dependabot[bot]\"\n      - name: rename issues closed metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md issues_closed.md\n\n      #\n      #   Advisories stats\n      #\n      - name: All open Advisories summary metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar is:issue is:open label:advisory -status:implemented'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n            # This metric measures items that are still open\n            HIDE_TIME_TO_CLOSE: true\n      - name: rename open advisories metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md advisories_open.md\n\n      - name: New advisories created metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar is:issue label:advisory created:${{ env.START_DATE }}..${{ env.END_DATE }}'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n      - name: rename new advisories opened metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md advisories_opened.md\n\n      - name: Advisories closed metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'repo:flatcar/Flatcar is:issue label:advisory closed:${{ env.START_DATE }}..${{ env.END_DATE }}'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n      - name: rename advisories closed metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md advisories_closed.md\n\n\n      #\n      #   Pull Requests stats\n      #\n      - name: All open PRs summary metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'org:flatcar is:pr is:open -author:flatcar-infra'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n            # This metric measures items that are still open\n            HIDE_TIME_TO_CLOSE: true\n            IGNORE_USERS: \"flatcar-infra,github-actions[bot],dependabot[bot]\"\n      - name: rename open PR metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md prs_open.md\n\n      - name: New PRs created metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'org:flatcar is:pr -author:flatcar-infra created:${{ env.START_DATE }}..${{ env.END_DATE }}'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n            IGNORE_USERS: \"flatcar-infra,github-actions[bot],dependabot[bot]\"\n      - name: rename new PRs metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md prs_opened.md\n\n      - name: PRs closed metrics\n        uses: github-community-projects/issue-metrics@v2\n        env:\n            GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}\n            SEARCH_QUERY: 'org:flatcar is:pr -author:flatcar-infra closed:${{ env.START_DATE }}..${{ env.END_DATE }}'\n            # \"time to answer\" only supported for discussions\n            HIDE_TIME_TO_ANSWER: true\n            IGNORE_USERS: \"flatcar-infra,github-actions[bot],dependabot[bot]\"\n      - name: rename closed PRs metrics file\n        shell: bash\n        run: |\n          set -euo pipefail\n          mv issue_metrics.md prs_closed.md\n\n      #\n      # Upload and post-process, create issue\n      #\n\n      - name: Upload individual reports\n        uses: actions/upload-artifact@v4\n        with:\n          retention-days: 32\n          name: raw-reports\n          path: |\n            ./*.md\n\n      - name: Assemble full report\n        shell: bash\n        run: |\n          set -euo pipefail\n\n          echo -e '# Contributions, Discussions, Advisories, and Issues' >> summary_report.md\n          echo \"(See comment below for Pull Request Metrics)\"  >> summary_report.md\n\n          # Create table of contents.\n          # Anchor targets defined here are created below when the respective section is added.\n          echo \"# Contents\" >> summary_report.md\n          echo \"* [Contributors Metrics](#contributors-metrics)\" >> summary_report.md\n          echo \"* [Github Discussions Metrics](#discussions-metrics)\" >> summary_report.md\n          echo \"  * [Questions and Answers Discussions](#discussions-metrics-qna)\" >> summary_report.md\n          echo \"  * [Other Discussions](#discussions-metrics-other)\" >> summary_report.md\n          echo \"* [Advisory Metrics](#advisory-metrics)\" >> summary_report.md\n          echo \"  * [New Advisories](#advisory-metrics-new)\" >> summary_report.md\n          echo \"  * [Closed Advisories](#advisory-metrics-closed)\" >> summary_report.md\n          echo \"  * [All open Advisories](#advisory-metrics-summary)\" >> summary_report.md\n          echo \"* [Issue Metrics](#issue-metrics)\" >> summary_report.md\n          echo \"  * [Summary of all open Issues](#issue-metrics-summary)\" >> summary_report.md\n          echo \"  * [New Issues](#issue-metrics-new)\" >> summary_report.md\n          echo \"  * [Closed Issues](#issue-metrics-closed)\" >> summary_report.md\n\n          #\n          # Contributors\n          #\n          echo -e '\\n\\n<h1 id=\"contributors-metrics\">Contributors Metrics</h1>' >> summary_report.md\n          tail --lines=+2 contributors.md >> summary_report.md\n\n          #\n          # Discussions\n          #\n          echo -e '\\n\\n<h1 id=\"discussions-metrics\">Discussions Metrics</h1>' >> summary_report.md\n          echo -e '\\n<h2 id=\"discussions-metrics-qna\">Questions & Answers</h2>' >> summary_report.md\n          echo -e \"\\n### Summary of all unanswered Questions\" >> summary_report.md\n          echo \"These summary statistics include all currently unanswered Q&A discussions (openend at any point in the past).\" \\\n              >> summary_report.md\n          # remove full discussions list from stats; we only want the summary\n          tail --lines=+2 discussion_qna_open.md \\\n              | awk '/^\\| Title \\| URL \\| Author \\|/{silent=1} {if (silent==0) print $0}' \\\n              >> summary_report.md\n\n          echo -e \"\\n### Summary of all answered Questions\" >> summary_report.md\n          echo -e \"\\nThese Q&A discussions were openend and also answered between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          echo -e \"(Discussions search is somewhat limited on Github; there's currently no way to search for discussions answered within a given timespan)\" \\\n              >> summary_report.md\n          # remove full discussions list from stats; we only want the summary\n          tail --lines=+2 discussion_qna_closed.md \\\n              | awk '/^\\| Title \\| URL \\| Author \\|/{silent=1} {if (silent==0) print $0}' \\\n              >> summary_report.md\n\n          echo -e \"\\n### New Questions\" >> summary_report.md\n          echo -e \"\\nThese Q&A discussions were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          tail --lines=+2 discussion_qna_opened.md >> summary_report.md\n\n\n          echo -e '\\n<h2 id=\"discussions-metrics-other\">Other Discussions</h2>' >> summary_report.md\n          echo -e \"\\n### Summary of open Discussions\" >> summary_report.md\n          echo \"These summary statistics include all currently open discussions except Q&A (openend at any point in the past).\" \\\n              >> summary_report.md\n          # remove full discussions list from stats; we only want the summary\n          tail --lines=+2 discussion_open.md \\\n              | awk '/^\\| Title \\| URL \\| Author \\|/{silent=1} {if (silent==0) print $0}' \\\n              >> summary_report.md\n\n          echo -e \"\\n## New discussions\" >> summary_report.md\n          echo -e \"\\nThese discussions (except Q&A) were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          tail --lines=+2 discussion_opened.md >> summary_report.md\n\n          echo -e \"\\n## Discussions closed\" >> summary_report.md\n          echo -e \"\\nThese discussions (except Q&A) were opened at any point in the past and closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          tail --lines=+2 discussion_closed.md >> summary_report.md\n\n          #\n          # Advisories\n          #\n          echo -e '\\n\\n<h1 id=\"advisory-metrics\">Advisory Metrics</h1>' >> summary_report.md\n          echo -e \"\\n\\nNote that advisories are tracked in issues, so the advisories discussed in this section also contribute to the overall issue statistics above.\\n\\n\" \\\n              >> summary_report.md\n\n          echo -e '\\n<h2 id=\"advisory-metrics-new\">New Advisories</h2>' >> summary_report.md\n          echo -e \"\\nThese advisories were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          tail --lines=+2 advisories_opened.md >> summary_report.md\n\n          echo -e '\\n<h2 id=\"advisory-metrics-closed\">Advisories closed</h2>' >> summary_report.md\n          echo -e \"\\nThese advisories were openend at any point in the past and were closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          tail --lines=+2 advisories_closed.md >> summary_report.md\n\n          echo -e '\\n<h2 id=\"advisory-metrics-summary\">All open Advisoriess</h2>' >> summary_report.md\n          echo \"These statistics cover all open advisories (openend at any point in the past).\" \\\n              >> summary_report.md\n          tail --lines=+2 advisories_open.md >> summary_report.md\n\n          #\n          # Issues\n          #\n          echo -e '\\n\\n<h1 id=\"issue-metrics\">Issue Metrics</h1>' >> summary_report.md\n\n          echo -e '\\n<h2 id=\"issue-metrics-summary\">Summary of all open Issues</h2>' >> summary_report.md\n          echo \"These summary statistics include all currently open issues (openend at any point in the past).\" \\\n              >> summary_report.md\n          # remove full issues list from stats; we only want the summary\n          tail --lines=+2 issues_open.md \\\n              | awk '/^\\| Title \\| URL \\| Author \\|/{silent=1} {if (silent==0) print $0}' \\\n              >> summary_report.md\n\n          echo -e '\\n<h2 id=\"issue-metrics-new\">New Issues</h2>' >> summary_report.md\n          echo -e \"\\nThese issues were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          tail --lines=+2 issues_opened.md >> summary_report.md\n\n          echo -e '\\n<h2 id=\"issue-metrics-closed\">Issues closed</h2>' >> summary_report.md\n          echo -e \"\\nThese issues were openend at any point in the past and were closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> summary_report.md\n          tail --lines=+2 issues_closed.md >> summary_report.md\n\n          #\n          # Pull Requests\n          #\n\n          echo '# Pull request metrics' >> comment_report.md\n          echo \"(See comment below for Pull Request Metrics)\"  >> comment_report.md\n\n          echo \"* [Pull Requests Metrics](#pr-metrics)\" >> comment_report.md\n          echo \"  * [Summary of all open PRs](#pr-metrics-summary)\" >> comment_report.md\n          echo \"  * [New PRs](#pr-metrics-new)\" >> comment_report.md\n          echo \"  * [Closed PRs](#pr-metrics-closed)\" >> comment_report.md\n          echo -e '\\n\\n<h1 id=\"pr-metrics\">Pull Requests Metrics</h1>' >> comment_report.md\n\n          echo -e '\\n<h2 id=\"pr-metrics-summary\">Summary of all open PRs</h2>' >> comment_report.md\n          echo \"These summary statistics include all currently open PRs (openend at any point in the past).\" \\\n              >> comment_report.md\n          # remove full PRs list from stats; we only want the summary\n          tail --lines=+2 prs_open.md \\\n              | awk '/^\\| Title \\| URL \\| Author \\|/{silent=1} {if (silent==0) print $0}' \\\n              >> comment_report.md\n\n          echo -e '\\n<h2 id=\"pr-metrics-new\">New PRs</h2>' >> comment_report.md\n          echo -e \"\\nThese PRs were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> comment_report.md\n          tail --lines=+2 prs_opened.md >> comment_report.md\n\n          echo -e '\\n<h2 id=\"pr-metrics-closed\">PRs closed</h2>' >> comment_report.md\n          echo -e \"\\nThese PRs were openend at any point in the past and were closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}.\" \\\n              >> comment_report.md\n          tail --lines=+2 prs_closed.md >> comment_report.md\n  \n      - name: Upload merged report\n        uses: actions/upload-artifact@v4\n        with:\n          retention-days: 32\n          name: full-report\n          path: |\n            ./summary_report.md\n            ./comment_report.md\n\n      - name: Create issue (1/2 of report)\n        id: ciss\n        uses: peter-evans/create-issue-from-file@v5\n        with:\n          title: Monthly contributions report ${{ env.START_DATE }} - ${{ env.END_DATE }}\n          token: ${{ secrets.GITHUB_TOKEN }}\n          content-filepath: ./summary_report.md\n          labels: kind/metric\n\n      - name: Create comment (2/2 of report)\n        id: cisc\n        uses: peter-evans/create-or-update-comment@v4\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          issue-number: ${{ steps.ciss.outputs.issue-number }}\n          body-path: ./comment_report.md\n"
  },
  {
    "path": "ADOPTERS.md",
    "content": "Who is using Flatcar?\n====================\n\nThe following is a list of adopters who have publicly spoken about their use of Flatcar, or who have added themselves to this list.\n\n\nAdding yourself as a user\n-------------------------\n\nIf you are using Flatcar, please consider adding yourself as a user with a quick description of your use case by opening a pull request to this file and adding a section describing your usage of Flatcar. If you are open to others contacting you about your use of Flatcar on Slack or Matrix, include your Slack/Matrix nickname or email as well.\n    \n    * N: Name of user (company or individual) \n      D: Description \n      L: Link with further information (optional) \n      C: Contacts available for questions (optional)\n\nExample entry:\n\n    * N: Flatcar Example User Inc.\n      D: Using Flatcar for running Kubernetes in Azure via Cluster API\n      L: https://www.exampleuser.com \n      C: Slack: @slacknick and/or Matrix: @Matrixnick and/or Email: nick [at] exampleuser [dot] com\n    \n\nRequirements to be listed\n-------------------------\n\n* You must represent the user listed. Do not add entries on behalf of\n   other users, unless adding a link to a public announcement / blog post.\n* Commercial or production use is not required. A user can be an end user, cloud service provider or consultant as long as it is a permanent deployment and not a trial deployment. A well-done home lab setup can be equally\n   interesting as a large-scale commercial deployment.\n\n\nUsers \n-----\n \n    * N: 1&1 Mail & Media (GMX, WEB.DE, mail.com)\n      D: 1&1 Mail & Media is happily using FlatCar as the underlying OS in their large on-premise bare-metal Kubernetes installation, hosting the majority of services for their >40M users\n      C: stephan.fudeus [at] 1und1 [dot] de\n\n    * N: Adobe\n      D: Adobe runs Flatcar on over 18,000 nodes in our fleet of Kubernetes clusters across multiple cloud providers and private data centers in 22 different regions worldwide.\n      C: Mike Tougeron (Slack: @Mike Tougeron) and Tony Gosselin (Slack: @Tony Gosselin).\n    \n    * N: AloPeyk\n      D: We are an on-demand delivery business that every day serve millions of requests on a consistent bare metal infrastructure have this concern to choose a reliable and atomic operations system but none of the common OS couldn't satisfy us for such heavy workloads. Since we migrated our production Kubernetes cluster nothing can break this consistent and solid cluster which is powered by amazing Flatcoar OS.\n    \n    * N: AT&T \n      L: https://medium.com/cloud-native-the-gathering/certified-kubernetes-administrator-join-our-team-its-a-good-thing-7e27ab34dc88\n      D: \"We are integrating Flatcar Container Linux, Istio, OPA, Multi-Region, KNative, and so many other technologies and concepts it makes the mind hurt a bit.\"\n\n    * N: Atsign\n      D: Personal Data Services 'atServers' are Dart ahead of time binaries running in containers on Docker Swarm using Flatcar worker nodes.\n      L: https://twitter.com/cpswan/status/1534481517887512577?s=20&t=ODnO_TPa4nhC62KNAB9Stw\n      C: Chris Swan [@cpswan](https://github.com/cpswan)\n      \n    * N: Cloud house\n      D: Flatcar OS has been useful for us for our on-premise solution to our customers \n\n    * N: DeepL\n      D: We use Flatcar for our on-prem K8s clusters to run everything from CI/CD to performance-sensitive GPU workloads.\n      L: https://deepl.com/\n      C: simon.campion [at] deepl [dot] com\n\n    * N: Digital Science \n      L: https://digital-science.com\n      D: We're running Flatcar on all our self-hosted Kubernetes clusters on AWS, used for all data processing behind Dimensions (https://dimensions.ai). We choose Flatcar for security and simplicity.\n      C: soren [at] uberresearch.com\n\n    * N: Equinix Metal\n      L: https://kinvolk.io/blog/2021/02/case-study-equinix-metal-builds-on-flatcar/\n      D: Equinix uses Flatcar as the OS for its bare metal cloud control plane, which runs in Kubernetes\n      \n    * N: Finleap Connect\n      D: Finleap Connect - At finleap connect we serve over a million financial transactions per day. As a regulated company using a pure cloud-native stack based on Kubernetes, using Flatcar as our foundational building block for reliable, secure and immutable nodes across the public clouds and on bare-metal deployments was a day one decision we never regretted. Today Flatcar serves all of our 12 production clusters with over 300 nodes on public clouds in 3 countries and on our bare-metal private-cloud setup.\n    \n    * N: Genesis Cloud\n      D: Genesis Cloud is using Flatcar Linux as the base for its public cloud offering for instances with GPUs and other accelerators\n      L: https://genesiscloud.com/\n      C: Slack: @Philipp Riederer / @Lukas Stockner\n\n    * N: Giant Swarm \n      L: https://www.giantswarm.io/blog/time-to-catch-a-new-train-flatcar-linux\n      D: Giant Swarm uses Flatcar within their Kubernetes Distribution. Flatcar is used on all providers (Azure, AWS, Google, OpenStack and Vmware). Giant Swarm manages 100s of clusters with 1000s of nodes running on Flatcar across the planet.\n\n    * N: Intersys AG \n\n    * N: Memzo \n      D: Kinvolk was a valuable source of knowledge when troubleshooting installation issues with our platform vendor. They were able to join us and the vendor on a call and sort out the issues quickly.The use of the Flatcar Update Server gave us confidence about what software/OS versions were running in each of our environments. This allowed us to better test upgrades before promoting the change to production environments.\n\n    * N: Mettle\n      L https://swade1987.medium.com/upgrading-to-flatcar-linux-746751e89ab4\n\n    * N: Norwegian Labor and Welfare Administration (NAV)\n      D: The largest Norwegian government agency has been using Flatcar since 2021 to run all of their on-prem Kubernetes clusters enabling application teams to become more autonomous and to build better welfare services and deliver them with a higher velocity then before.\n      L: https://nais.io\n      C: hans.kristian.flaatten@nav.no\n\n    * N: Planetary Quantum GmbH\n      L: https://www.planetary-quantum.com/\n      D: Planetary Quantum is a berlin-based provider of Docker-hosting and application hosting. Our sister company Planetary Networks colocates their private cloud in two (fiber-)interconnected datacenters in Berlin and Quantum offers container-based solutions (Docker Swarm and a custom tailored application hosting) on top of Flatcar Linux. Flatcar Linux is a great choice for us because it's a modern Linux, well-suited for Docker and Kubernetes due to recent versions of Kernel, SystemD, immutable root and a well-tested userland. Simple and straight-forward updates of the OS make running Flatcar a no-brainer for us. We currently operate over 50 clusters for our customers in our private cloud — all based on Flatcar Linux.\n\n    * N: plusserver GmbH\n      D: Plus Server is using Flatcar as the basis of its managed Kubernetes offering, plusserver Kubernetes Engine (PSKE). As they state in their blog, \"Flatcar is currently one of the most popular operating systems for Kubernetes clusters. With its container-optimized design, strong security, and support from an active open source community, it provides an excellent foundation for all container workloads.\"\n      L: https://www.plusserver.com/blog/flatcar/\n    \n    * N: Qualys, Inc\n      D: Qualys Gateway Service uses Flatcar Container Linux as a base for its container-based appliance, which is mainly focussed on proxy and caching services, serving other Qualys sensors such as Cloud Agent, Scanner and Passive Sensor. QGS also serves Qualys modules including VMDR, Patch Management, Policy Compliance, EDR, FIM and XDR.\n      L: https://www.qualys.com/documentation/#qualys-gateway-service\n      C: jrose@qualys.com\n\n    * N: Skilld.cloud\n      L: https://www.skilld.cloud\n      D: Flatcar choice was a no-brainer for Skilld: Flatcar is a perfect fit for running Kubernetes workloads. On premise as well as on public clouds. We rely on Flatcar to power up our cutting-edge NRT data-driven ops platforms. A key asset for building distributed & asset management based businesses such as our Community-as-a-service IT platform, or our customers Train fleet's or smart grid's ones.\n\n    * N: Spinoco Czech Republic, a.s.\n      D: Using Flatcar on Bare Metal to run Kubernetes for Spinoco SaaS\n      L: www.spinoco.com\n      C: pavel.chlupacek@spinoco.com \n   \n    * N: Schwarz Digits Cloud GmbH & Co. KG (STACKIT)\n      D: Flatcar Container Linux is the foundation of our managed Kubernetes offering (SKE), powering over 20,000 nodes. It is our customers' most popular OS choice, and we highly value the vibrant and active Open Source community behind Flatcar, which ensures continuous innovation and stability. \n      L: https://stackit.com/en/products/runtime/stackit-kubernetes-engine\n      C: @justrobin:matrix.org / info@stackit.cloud\n\n    * N: Wipro\n      D: Wipro Business Solutions uses Flatcar Linux to power their hybrid/multi-cloud PostgreSQL containerized DBaaS platform. Each provisioned database is running on a dedicated lightweight stack with Flatcar Linux as the foundational OS running on each database VM. In addition the DBaaS API itself and all supporting machines use Flatcar Linux as well. Flatcar Linux has proven to be a well-supported rock solid OS with minimal attack surface, built in update mechanism and integrated docker daemon. Ignition brings in an early boot provisioning utility that perfectly adds to the full automation approach of the PostgreSQL DBaaS platform. We use it at scale on-prem with OpenStack cloud but also with public clouds like Google and Tencent\n"
  },
  {
    "path": "CIS/README.md",
    "content": "# CIS Benchmarking\n\nThese reports are from points in time and have notes with remediation and applicability for Flatcar Container Linux.\nThe CIS benchmarks are usually tailored to specific Linux distributions, as well as generic Linux hosts.\nFlatcar Container Linux being a narrow use-case distribution causes many results to be not applicable.\n\n## Report Generation\n\nAfter some annoyance dealing with [ruby](https://www.ruby-lang.org/) and [inspec](https://www.inspec.io/downloads/), I was able to run the report. Documenting here what I did and what I got.\n\n1. Installed inspec via gem: `gem install inspec-bin --user-install`\n2. Cloned the benchmark repo: `git clone https://github.com/dev-sec/cis-dil-benchmark.git`\n3. Started a [Flatcar QEMU image](https://www.flatcar.org/docs/latest/reference/developer-guides/sdk-modifying-flatcar/), copied the authorized keys to root.\n4. Ran the test suite in the image, for level 1 and 2 (the default):\n\n```shell\n ~/.gem/ruby/2.7.0/bin/inspec exec --no-color ./cis-dil-benchmark/ -t ssh://root@localhost:2222 --input=cis_level=1 > ../debug/inspec-report-level1.txt\n ~/.gem/ruby/2.7.0/bin/inspec exec --no-color ./cis-dil-benchmark/ -t ssh://root@localhost:2222 >  ../debug/inspec-report.txt\n```\n\nResults:\n\nLevel 1:\n\n```text\nProfile Summary: 65 successful controls, 83 control failures, 82 controls skipped\nTest Summary: 593 successful, 258 failures, 88 skipped\n```\n\nLevel: 2\n\n```text\nProfile Summary: 68 successful controls, 118 control failures, 43 controls skipped\nTest Summary: 606 successful, 344 failures, 50 skipped\n```\n\nI'm looking at the failures and many of them are rather arbitrary decisions, and we'll need to evaluate which ones we want to consider to adopt in Flatcar.  There's a bunch of filesystems that are recommended to be disabled, some of them, we might go ahead and disable (like hfs), others we actually need (like vfat).\n\nBut then there are things that should be fixed in the benchmark, because they fail because of our file-system layout. For example:\n\n```text\n     ×  File /etc/pam.d/common-password content is expected to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     expected nil to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n```\n\n## Reports\n\nHere the too reports, and the corresponding notes we have produced:\n\n* [2020-12-08 level1 report](./inspec-report-level1-root-2020-12-08.txt) -- [remediation notes](./level1-remediation_notes-2020-12-08.md)\n* [2020-12-08 level2 report](./inspec-report-level2-root-2020-12-08.txt) -- _(no remediation notes yet)_\n"
  },
  {
    "path": "CIS/inspec-report-level1-root-2020-12-08.txt",
    "content": "\nProfile: CIS Distribution Independent Linux Benchmark Profile (cis-dil-benchmark)\nVersion: 0.4.4\nTarget:  ssh://root@localhost:2222\n\n  ×  cis-dil-benchmark-1.1.1.1: Ensure mounting of cramfs filesystems is disabled (1 failed)\n     ✔  Kernel Module cramfs is expected not to be loaded\n     ×  Kernel Module cramfs is expected to be disabled\n     expected `Kernel Module cramfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.2: Ensure mounting of freevxfs filesystems is disabled (1 failed)\n     ✔  Kernel Module freevxfs is expected not to be loaded\n     ×  Kernel Module freevxfs is expected to be disabled\n     expected `Kernel Module freevxfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.3: Ensure mounting of jffs2 filesystems is disabled (1 failed)\n     ✔  Kernel Module jffs2 is expected not to be loaded\n     ×  Kernel Module jffs2 is expected to be disabled\n     expected `Kernel Module jffs2.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.4: Ensure mounting of hfs filesystems is disabled (1 failed)\n     ✔  Kernel Module hfs is expected not to be loaded\n     ×  Kernel Module hfs is expected to be disabled\n     expected `Kernel Module hfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.5: Ensure mounting of hfsplus filesystems is disabled (1 failed)\n     ✔  Kernel Module hfsplus is expected not to be loaded\n     ×  Kernel Module hfsplus is expected to be disabled\n     expected `Kernel Module hfsplus.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.6: Ensure mounting of squashfs filesystems is disabled (1 failed)\n     ✔  Kernel Module squashfs is expected not to be loaded\n     ×  Kernel Module squashfs is expected to be disabled\n     expected `Kernel Module squashfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.7: Ensure mounting of udf filesystems is disabled (1 failed)\n     ✔  Kernel Module udf is expected not to be loaded\n     ×  Kernel Module udf is expected to be disabled\n     expected `Kernel Module udf.disabled?` to be truthy, got false\n  ↺  cis-dil-benchmark-1.1.1.8: Ensure mounting of FAT filesystems is disabled\n     ↺  Skipped control due to only_if condition.\n  ✔  cis-dil-benchmark-1.1.2: Ensure separate partition exists for /tmp\n     ✔  Mount /tmp is expected to be mounted\n  ✔  cis-dil-benchmark-1.1.3: Ensure nodev option set on /tmp partition\n     ✔  Mount /tmp options is expected to include \"nodev\"\n  ✔  cis-dil-benchmark-1.1.4: Ensure nosuid option set on /tmp partition\n     ✔  Mount /tmp options is expected to include \"nosuid\"\n  ×  cis-dil-benchmark-1.1.5: Ensure noexec option set on /tmp partition\n     ×  Mount /tmp options is expected to include \"noexec\"\n     expected [\"rw\", \"nosuid\", \"nodev\", \"seclabel\", \"nr_inodes=409600\"] to include \"noexec\"\n  ↺  cis-dil-benchmark-1.1.6: Ensure separate partition exists for /var\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.1.7: Ensure separate partition exists for /var/tmp\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.1.8: Ensure nodev option set on /var/tmp partition\n     ↺  Skipped control due to only_if condition: /var/tmp is mounted\n  ↺  cis-dil-benchmark-1.1.9: Ensure nosuid option set on /var/tmp partition\n     ↺  Skipped control due to only_if condition: /var/tmp is mounted\n  ↺  cis-dil-benchmark-1.1.10: Ensure noexec option set on /var/tmp partition\n     ↺  Skipped control due to only_if condition: /var/tmp is mounted\n  ↺  cis-dil-benchmark-1.1.11: Ensure separate partition exists for /var/log\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.1.12: Ensure separate partition exists for /var/log/audit\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.1.13: Ensure separate partition exists for /home\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.1.14: Ensure nodev option set on /home partition\n     ↺  Skipped control due to only_if condition: /home is mounted\n  ✔  cis-dil-benchmark-1.1.15: Ensure nodev option set on /dev/shm partition\n     ✔  Mount /dev/shm options is expected to include \"nodev\"\n  ✔  cis-dil-benchmark-1.1.16: Ensure nosuid option set on /dev/shm partitionrun\n     ✔  Mount /dev/shm options is expected to include \"nosuid\"\n  ×  cis-dil-benchmark-1.1.17: Ensure noexec option set on /dev/shm partition\n     ×  Mount /dev/shm options is expected to include \"noexec\"\n     expected [\"rw\", \"nosuid\", \"nodev\", \"seclabel\"] to include \"noexec\"\n  ↺  cis-dil-benchmark-1.1.18: Ensure nodev option set on removable media partitions\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-1.1.19: Ensure nosuid option set on removable media partitions\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-1.1.20: Ensure noexec option set on removable media partitions\n     ↺  Not implemented\n  ✔  cis-dil-benchmark-1.1.21: Ensure sticky bit is set on all world-writable directories\n     ✔  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -type d ( -perm -0002 -a ! -perm -1000 )` stdout is expected to cmp == \"\"\n  ✔  cis-dil-benchmark-1.1.22: Disable Automounting\n     ✔  Service autofs is expected not to be enabled\n     ✔  Service autofs is expected not to be running\n     ✔  Service autofs is expected not to be enabled\n     ✔  Service autofs is expected not to be running\n  ×  cis-dil-benchmark-1.1.23: Disable USB Storage (1 failed)\n     ✔  Kernel Module usb_storage is expected not to be loaded\n     ×  Kernel Module usb_storage is expected to be disabled\n     expected `Kernel Module usb_storage.disabled?` to be truthy, got false\n  ↺  cis-dil-benchmark-1.2.1: Ensure package manager repositories are configured\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-1.2.2: Ensure GPG keys are configured\n     ↺  Not implemented\n  ×  cis-dil-benchmark-1.3.1: Ensure AIDE is installed (2 failed)\n     ×  System Package aide is expected to be installed\n     expected that `System Package aide` is installed\n     ×  Command: `aide` is expected to exist\n     expected Command: `aide` to exist\n  ×  cis-dil-benchmark-1.3.2: Ensure filesystem integrity is regularly checked (4 failed)\n     ×  File /var/spool/cron/crontabs/root content is expected to match /aide (--check|-C)/\n     expected nil to match /aide (--check|-C)/\n     ×  File /var/spool/cron/root content is expected to match /aide (--check|-C)/\n     expected nil to match /aide (--check|-C)/\n     ×  File /etc/crontab content is expected to match /aide (--check|-C)/\n     expected nil to match /aide (--check|-C)/\n     ×  File /etc/cron.weekly/mdadm content is expected to match /aide (--check|-C)/\n     expected \"#!/bin/sh\\n# This requires that AUTOCHECK is true in /etc/default/mdadm\\nif [ -x /usr/sbin/checkarray ] && [ $(date +\\\\%d) -le 7 ]; then\\n\\t/usr/sbin/checkarray --cron --all --idle --quiet\\nfi\\n\" to match /aide (--check|-C)/\n     Diff:\n     @@ -1,5 +1,9 @@\n     -/aide (--check|-C)/\n     +#!/bin/sh\n     +# This requires that AUTOCHECK is true in /etc/default/mdadm\n     +if [ -x /usr/sbin/checkarray ] && [ $(date +\\%d) -le 7 ]; then\n     +\t/usr/sbin/checkarray --cron --all --idle --quiet\n     +fi\n\n  ×  cis-dil-benchmark-1.4.1: Ensure permissions on bootloader config are configured (22 failed)\n     ×  File /boot/grub/grub.conf is expected to exist\n     expected File /boot/grub/grub.conf to exist\n     ✔  File /boot/grub/grub.conf is expected not to be readable by group\n     ✔  File /boot/grub/grub.conf is expected not to be writable by group\n     ✔  File /boot/grub/grub.conf is expected not to be executable by group\n     ✔  File /boot/grub/grub.conf is expected not to be readable by other\n     ✔  File /boot/grub/grub.conf is expected not to be writable by other\n     ✔  File /boot/grub/grub.conf is expected not to be executable by other\n     ×  File /boot/grub/grub.conf gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/grub.conf uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/grub.cfg is expected to exist\n     expected File /boot/grub/grub.cfg to exist\n     ✔  File /boot/grub/grub.cfg is expected not to be readable by group\n     ✔  File /boot/grub/grub.cfg is expected not to be writable by group\n     ✔  File /boot/grub/grub.cfg is expected not to be executable by group\n     ✔  File /boot/grub/grub.cfg is expected not to be readable by other\n     ✔  File /boot/grub/grub.cfg is expected not to be writable by other\n     ✔  File /boot/grub/grub.cfg is expected not to be executable by other\n     ×  File /boot/grub/grub.cfg gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/grub.cfg uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/menu.lst is expected to exist\n     expected File /boot/grub/menu.lst to exist\n     ✔  File /boot/grub/menu.lst is expected not to be readable by group\n     ✔  File /boot/grub/menu.lst is expected not to be writable by group\n     ✔  File /boot/grub/menu.lst is expected not to be executable by group\n     ✔  File /boot/grub/menu.lst is expected not to be readable by other\n     ✔  File /boot/grub/menu.lst is expected not to be writable by other\n     ✔  File /boot/grub/menu.lst is expected not to be executable by other\n     ×  File /boot/grub/menu.lst gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/menu.lst uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.conf is expected to exist\n     expected File /boot/boot/grub/grub.conf to exist\n     ✔  File /boot/boot/grub/grub.conf is expected not to be readable by group\n     ✔  File /boot/boot/grub/grub.conf is expected not to be writable by group\n     ✔  File /boot/boot/grub/grub.conf is expected not to be executable by group\n     ✔  File /boot/boot/grub/grub.conf is expected not to be readable by other\n     ✔  File /boot/boot/grub/grub.conf is expected not to be writable by other\n     ✔  File /boot/boot/grub/grub.conf is expected not to be executable by other\n     ×  File /boot/boot/grub/grub.conf gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.conf uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.cfg is expected to exist\n     expected File /boot/boot/grub/grub.cfg to exist\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be readable by group\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be writable by group\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be executable by group\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be readable by other\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be writable by other\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be executable by other\n     ×  File /boot/boot/grub/grub.cfg gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.cfg uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ✔  File /boot/boot/grub/menu.lst is expected to exist\n     ×  File /boot/boot/grub/menu.lst is expected not to be readable by group\n     expected File /boot/boot/grub/menu.lst not to be readable by group\n     ✔  File /boot/boot/grub/menu.lst is expected not to be writable by group\n     ×  File /boot/boot/grub/menu.lst is expected not to be executable by group\n     expected File /boot/boot/grub/menu.lst not to be executable by group\n     ×  File /boot/boot/grub/menu.lst is expected not to be readable by other\n     expected File /boot/boot/grub/menu.lst not to be readable by other\n     ✔  File /boot/boot/grub/menu.lst is expected not to be writable by other\n     ×  File /boot/boot/grub/menu.lst is expected not to be executable by other\n     expected File /boot/boot/grub/menu.lst not to be executable by other\n     ✔  File /boot/boot/grub/menu.lst gid is expected to cmp == 0\n     ✔  File /boot/boot/grub/menu.lst uid is expected to cmp == 0\n     ×  File /boot/grub2/grub.cfg is expected to exist\n     expected File /boot/grub2/grub.cfg to exist\n     ✔  File /boot/grub2/grub.cfg is expected not to be readable by group\n     ✔  File /boot/grub2/grub.cfg is expected not to be writable by group\n     ✔  File /boot/grub2/grub.cfg is expected not to be executable by group\n     ✔  File /boot/grub2/grub.cfg is expected not to be readable by other\n     ✔  File /boot/grub2/grub.cfg is expected not to be writable by other\n     ✔  File /boot/grub2/grub.cfg is expected not to be executable by other\n     ×  File /boot/grub2/grub.cfg gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub2/grub.cfg uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-1.4.2: Ensure bootloader password is set (14 failed)\n     ×  File /boot/grub/grub.conf content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub/grub.conf content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/grub/grub.cfg content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub/grub.cfg content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/grub/menu.lst content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub/menu.lst content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/boot/grub/grub.conf content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/boot/grub/grub.conf content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/boot/grub/grub.cfg content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/boot/grub/grub.cfg content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/boot/grub/menu.lst content is expected to match /^set superusers/\n     expected \"timeout 0\\ntitle   CoreOS GRUB2\\nroot    (hd0,0)\\nkernel  /xen/pvboot-x86_64.elf\\n\" to match /^set superusers/\n     Diff:\n     @@ -1,4 +1,7 @@\n     -/^set superusers/\n     +timeout 0\n     +title   CoreOS GRUB2\n     +root    (hd0,0)\n     +kernel  /xen/pvboot-x86_64.elf\n\n     ×  File /boot/boot/grub/menu.lst content is expected to match /^password/\n     expected \"timeout 0\\ntitle   CoreOS GRUB2\\nroot    (hd0,0)\\nkernel  /xen/pvboot-x86_64.elf\\n\" to match /^password/\n     Diff:\n     @@ -1,4 +1,7 @@\n     -/^password/\n     +timeout 0\n     +title   CoreOS GRUB2\n     +root    (hd0,0)\n     +kernel  /xen/pvboot-x86_64.elf\n\n     ×  File /boot/grub2/grub.cfg content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub2/grub.cfg content is expected to match /^password/\n     expected nil to match /^password/\n  ×  cis-dil-benchmark-1.4.3: Ensure authentication required for single user mode (3 failed)\n     ×  /etc/shadow with user == \"root\" passwords is expected not to include \"*\"\n     expected [\"*\"] not to include \"*\"\n     ✔  /etc/shadow with user == \"root\" passwords is expected not to include \"!\"\n     ×  File /etc/inittab content is expected to match /^~~:S:respawn:\\/sbin\\/sulogin/\n     expected nil to match /^~~:S:respawn:\\/sbin\\/sulogin/\n     ×  File /etc/sysconfig/init content is expected to match /^SINGLE=\\/sbin\\/sulogin$/\n     expected nil to match /^SINGLE=\\/sbin\\/sulogin$/\n  ↺  cis-dil-benchmark-1.4.4: Ensure interactive boot is not enabled\n     ↺  Not implemented\n  ×  cis-dil-benchmark-1.5.1: Ensure core dumps are restricted (2 failed)\n     ×  File /etc/security/limits.conf content is expected to match /^\\s*\\*\\s+hard\\s+core\\s+0\\s*(?:#.*)?$/\n     expected \"# /etc/security/limits.conf\\n#\\n#Each line describes a limit for a user in the form:\\n#\\n#<domain>  ...          hard    nproc           0\\n\\#@student        -       maxlogins       4\\n\\n# End of file\\n\" to match /^\\s*\\*\\s+hard\\s+core\\s+0\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,50 +1,99 @@\n     -/^\\s*\\*\\s+hard\\s+core\\s+0\\s*(?:#.*)?$/\n     +# /etc/security/limits.conf\n     +#\n     +#Each line describes a limit for a user in the form:\n     +#\n     +#<domain>        <type>  <item>  <value>\n     +#\n     +#Where:\n     +#<domain> can be:\n     +#        - a user name\n     +#        - a group name, with @group syntax\n     +#        - the wildcard *, for default entry\n     +#        - the wildcard %, can be also used with %group syntax,\n     +#                 for maxlogin limit\n     +#\n     +#<type> can have the two values:\n     +#        - \"soft\" for enforcing the soft limits\n     +#        - \"hard\" for enforcing hard limits\n     +#\n     +#<item> can be one of the following:\n     +#        - core - limits the core file size (KB)\n     +#        - data - max data size (KB)\n     +#        - fsize - maximum filesize (KB)\n     +#        - memlock - max locked-in-memory address space (KB)\n     +#        - nofile - max number of open file descriptors\n     +#        - rss - max resident set size (KB)\n     +#        - stack - max stack size (KB)\n     +#        - cpu - max CPU time (MIN)\n     +#        - nproc - max number of processes\n     +#        - as - address space limit (KB)\n     +#        - maxlogins - max number of logins for this user\n     +#        - maxsyslogins - max number of logins on the system\n     +#        - priority - the priority to run user process with\n     +#        - locks - max number of file locks the user can hold\n     +#        - sigpending - max number of pending signals\n     +#        - msgqueue - max memory used by POSIX message queues (bytes)\n     +#        - nice - max nice priority allowed to raise to values: [-20, 19]\n     +#        - rtprio - max realtime priority\n     +#\n     +#<domain>      <type>  <item>         <value>\n     +#\n     +\n     +#*               soft    core            0\n     +#*               hard    rss             10000\n     +#@student        hard    nproc           20\n     +#@faculty        soft    nproc           20\n     +#@faculty        hard    nproc           50\n     +#ftp             hard    nproc           0\n     +#@student        -       maxlogins       4\n     +\n     +# End of file\n\n     ×  Kernel Parameter fs.suid_dumpable value is expected to eq 0\n     \n     expected: 0\n          got: 2\n     \n     (compared using ==)\n\n  ✔  cis-dil-benchmark-1.5.2: Ensure XD/NX support is enabled\n     ✔  Command: `dmesg | grep NX` stdout is expected to match /NX \\(Execute Disable\\) protection: active/\n  ✔  cis-dil-benchmark-1.5.3: Ensure address space layout randomization (ASLR) is enabled\n     ✔  Kernel Parameter kernel.randomize_va_space value is expected to eq 2\n  ✔  cis-dil-benchmark-1.5.4: Ensure prelink is disabled\n     ✔  System Package prelink is expected not to be installed\n     ✔  Command: `prelink` is expected not to exist\n  ↺  cis-dil-benchmark-1.6.1.1: Ensure SELinux or AppArmor are installed\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.2.1: Ensure SELinux is not disabled in bootloader configuration\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.2.2: Ensure the SELinux state is enforcing\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.2.3: Ensure SELinux policy is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.2.4: Ensure SETroubleshoot is not installed\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.2.5: Ensure the MCS Translation Service (mcstrans) is not installed\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.2.6: Ensure no unconfined daemons exist\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.3.1: Ensure AppArmor is not disabled in bootloader configuration\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.3.2: Ensure all AppArmor Profiles are enforcing\n     ↺  Skipped control due to only_if condition.\n  ✔  cis-dil-benchmark-1.7.1.1: Ensure message of the day is configured properly\n     ✔  Command: `grep -E -i '(\\v|\\r|\\m|\\s|$(grep '^ID=' /etc/os-release | cut -d= -f2 | sed -e 's/\"//g'))' /etc/motd` stdout is expected to eq \"\"\n  ✔  cis-dil-benchmark-1.7.1.2: Ensure local login warning banner is configured properly\n     ✔  Command: `grep -E -i '(\\v|\\r|\\m|\\s|$(grep '^ID=' /etc/os-release | cut -d= -f2 | sed -e 's/\"//g'))' /etc/issue` stdout is expected to eq \"\"\n  ✔  cis-dil-benchmark-1.7.1.3: Ensure remote login warning banner is configured properly\n     ✔  Command: `grep -E -i '(\\v|\\r|\\m|\\s|$(grep '^ID=' /etc/os-release | cut -d= -f2 | sed -e 's/\"//g'))' /etc/issue.net` stdout is expected to eq \"\"\n  ✔  cis-dil-benchmark-1.7.1.4: Ensure permissions on /etc/motd are configured\n     ✔  File /etc/motd group is expected to eq \"root\"\n     ✔  File /etc/motd owner is expected to eq \"root\"\n     ✔  File /etc/motd mode is expected to cmp == \"0644\"\n  ✔  cis-dil-benchmark-1.7.1.5: Ensure permissions on /etc/issue are configured\n     ✔  File /etc/issue group is expected to eq \"root\"\n     ✔  File /etc/issue owner is expected to eq \"root\"\n     ✔  File /etc/issue mode is expected to cmp == \"0644\"\n  ×  cis-dil-benchmark-1.7.1.6: Ensure permissions on /etc/issue.net are configured (3 failed)\n     ×  File /etc/issue.net group is expected to eq \"root\"\n     \n     expected: \"root\"\n          got: nil\n     \n     (compared using ==)\n\n     ×  File /etc/issue.net owner is expected to eq \"root\"\n     \n     expected: \"root\"\n          got: nil\n     \n     (compared using ==)\n\n     ×  File /etc/issue.net mode is expected to cmp == \"0644\"\n     can't convert nil into Integer\n  ↺  cis-dil-benchmark-1.7.2: Ensure GDM login banner is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.8: Ensure updates, patches, and additional security software are installed\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-2.1.1: Ensure chargen services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.2: Ensure daytime services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.3: Ensure discard services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.4: Ensure echo services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.5: Ensure time services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.6: Ensure rsh server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.7: Ensure talk server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.8: Ensure telnet server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.9: Ensure tftp server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ✔  cis-dil-benchmark-2.1.10: Ensure xinetd is not enabled\n     ✔  Service xinetd is expected not to be enabled\n     ✔  Service xinetd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.1.1: Ensure time synchronization is in use\n     ✔  Command: `ntpd` is expected to exist\n  ×  cis-dil-benchmark-2.2.1.2: Ensure ntp is configured (4 failed)\n     ✔  ntp.conf server is expected not to eq nil\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*kod(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*nomodify(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*notrap(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*nopeer(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*noquery(?:\\s+|\\s?\")/\n     ×  File /etc/init.d/ntp content is expected to match /^RUNASUSER=ntp\\s*(?:#.*)?$/\n     expected nil to match /^RUNASUSER=ntp\\s*(?:#.*)?$/\n     ×  File /etc/init.d/ntpd content is expected to match /daemon\\s+(\\S+\\s+)-u ntp:ntp(?:\\s+|\\s?\")/\n     expected nil to match /daemon\\s+(\\S+\\s+)-u ntp:ntp(?:\\s+|\\s?\")/\n     ×  File /etc/sysconfig/ntpd content is expected to match /^OPTIONS=\"(?:.)?-u ntp:ntp\\s*(?:.)?\"\\s*(?:#.*)?$/\n     expected nil to match /^OPTIONS=\"(?:.)?-u ntp:ntp\\s*(?:.)?\"\\s*(?:#.*)?$/\n     ×  File /usr/lib/systemd/system/ntpd.service content is expected to match /^ExecStart=\\/usr\\/s?bin\\/ntpd (?:.)?-u ntp:ntp\\s*(?:.)?$/\n     expected \"[Unit]\\nDescription=Network Time Service\\nAfter=ntpdate.service sntp.service\\nConflicts=systemd-time...tp/ntp.drift -u ntp:ntp\\nPrivateTmp=true\\nRestart=always\\n\\n[Install]\\nWantedBy=multi-user.target\\n\" to match /^ExecStart=\\/usr\\/s?bin\\/ntpd (?:.)?-u ntp:ntp\\s*(?:.)?$/\n     Diff:\n     @@ -1,12 +1,23 @@\n     -/^ExecStart=\\/usr\\/s?bin\\/ntpd (?:.)?-u ntp:ntp\\s*(?:.)?$/\n     +[Unit]\n     +Description=Network Time Service\n     +After=ntpdate.service sntp.service\n     +Conflicts=systemd-timesyncd.service\n     +\n     +[Service]\n     +ExecStart=/usr/sbin/ntpd -g -n -f /var/lib/ntp/ntp.drift -u ntp:ntp\n     +PrivateTmp=true\n     +Restart=always\n     +\n     +[Install]\n     +WantedBy=multi-user.target\n\n  ↺  cis-dil-benchmark-2.2.1.3: Ensure chrony is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-2.2.1.4: Ensure systemd-timesyncd is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-2.2.2: Ensure X Window System is not installed (2 skipped)\n     ↺  The packages resource is not yet supported on OS coreos\n     ↺  The packages resource is not yet supported on OS coreos\n  ✔  cis-dil-benchmark-2.2.3: Ensure Avahi Server is not enabled\n     ✔  Service avahi-daemon is expected not to be enabled\n     ✔  Service avahi-daemon is expected not to be running\n  ✔  cis-dil-benchmark-2.2.4: Ensure CUPS is not enabled\n     ✔  Service cups is expected not to be enabled\n     ✔  Service cups is expected not to be running\n  ✔  cis-dil-benchmark-2.2.5: Ensure DHCP Server is not enabled\n     ✔  Service isc-dhcp-server is expected not to be enabled\n     ✔  Service isc-dhcp-server is expected not to be running\n     ✔  Service isc-dhcp-server6 is expected not to be enabled\n     ✔  Service isc-dhcp-server6 is expected not to be running\n     ✔  Service dhcpd is expected not to be enabled\n     ✔  Service dhcpd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.6: Ensure LDAP server is not enabled\n     ✔  Service slapd is expected not to be enabled\n     ✔  Service slapd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.7: Ensure NFS and RPC are not enabled\n     ✔  Service nfs-kernel-server is expected not to be enabled\n     ✔  Service nfs-kernel-server is expected not to be running\n     ✔  Service nfs is expected not to be enabled\n     ✔  Service nfs is expected not to be running\n     ✔  Service rpcbind is expected not to be enabled\n     ✔  Service rpcbind is expected not to be running\n  ✔  cis-dil-benchmark-2.2.8: Ensure DNS Server is not enabled\n     ✔  Service named is expected not to be enabled\n     ✔  Service named is expected not to be running\n     ✔  Service bind is expected not to be enabled\n     ✔  Service bind is expected not to be running\n     ✔  Service bind9 is expected not to be enabled\n     ✔  Service bind9 is expected not to be running\n  ✔  cis-dil-benchmark-2.2.9: Ensure FTP Server is not enabled\n     ✔  Service vsftpd is expected not to be enabled\n     ✔  Service vsftpd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.10: Ensure HTTP server is not enabled\n     ✔  Service apache is expected not to be enabled\n     ✔  Service apache is expected not to be running\n     ✔  Service apache2 is expected not to be enabled\n     ✔  Service apache2 is expected not to be running\n     ✔  Service httpd is expected not to be enabled\n     ✔  Service httpd is expected not to be running\n     ✔  Service lighttpd is expected not to be enabled\n     ✔  Service lighttpd is expected not to be running\n     ✔  Service nginx is expected not to be enabled\n     ✔  Service nginx is expected not to be running\n  ✔  cis-dil-benchmark-2.2.11: Ensure IMAP and POP3 server is not enabled\n     ✔  Service dovecot is expected not to be enabled\n     ✔  Service dovecot is expected not to be running\n     ✔  Service courier-imap is expected not to be enabled\n     ✔  Service courier-imap is expected not to be running\n     ✔  Service cyrus-imap is expected not to be enabled\n     ✔  Service cyrus-imap is expected not to be running\n  ✔  cis-dil-benchmark-2.2.12: Ensure Samba is not enabled\n     ✔  Service samba is expected not to be enabled\n     ✔  Service samba is expected not to be running\n     ✔  Service smb is expected not to be enabled\n     ✔  Service smb is expected not to be running\n     ✔  Service smbd is expected not to be enabled\n     ✔  Service smbd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.13: Ensure HTTP Proxy Server is not enabled\n     ✔  Service squid is expected not to be enabled\n     ✔  Service squid is expected not to be running\n     ✔  Service squid3 is expected not to be enabled\n     ✔  Service squid3 is expected not to be running\n  ✔  cis-dil-benchmark-2.2.14: Ensure SNMP Server is not enabled\n     ✔  Service snmpd is expected not to be enabled\n     ✔  Service snmpd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.15: Ensure mail transfer agent is configured for local-only mode\n     ✔  Port 25 with address !~ /^(127\\.0\\.0\\.1|::1)$/ entries is expected to be empty\n  ✔  cis-dil-benchmark-2.2.16: Ensure rsync service is not enabled\n     ✔  Service rsync is expected not to be enabled\n     ✔  Service rsync is expected not to be running\n     ✔  Service rsyncd is expected not to be enabled\n     ✔  Service rsyncd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.17: Ensure NIS Server is not enabled\n     ✔  Service nis is expected not to be enabled\n     ✔  Service nis is expected not to be running\n     ✔  Service ypserv is expected not to be enabled\n     ✔  Service ypserv is expected not to be running\n  ↺  cis-dil-benchmark-2.3.1: Ensure NIS Client is not installed (2 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.2: Ensure rsh client is not installed (3 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.3: Ensure talk client is not installed\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.4: Ensure telnet client is not installed\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.5: Ensure LDAP client is not installed (3 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n  ×  cis-dil-benchmark-3.1.1: Ensure IP forwarding is disabled (1 failed)\n     ✔  Kernel Parameter net.ipv4.ip_forward value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.ip_forward value is expected to cmp == 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using `cmp` matcher)\n\n     ✔  Kernel Parameter net.ipv6.conf.all.forwarding value is expected not to be nil\n     ✔  Kernel Parameter net.ipv6.conf.all.forwarding value is expected to cmp == 0\n  ×  cis-dil-benchmark-3.1.2: Ensure packet redirect sending is disabled (2 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.send_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.all.send_redirects value is expected to cmp == 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using `cmp` matcher)\n\n     ✔  Kernel Parameter net.ipv4.conf.default.send_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.send_redirects value is expected to cmp == 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using `cmp` matcher)\n\n  ✔  cis-dil-benchmark-3.2.1: Ensure source routed packets are not accepted\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_source_route value is expected to eq 0\n     ✔  Kernel Parameter net.ipv4.conf.default.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.default.accept_source_route value is expected to eq 0\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_source_route value is expected to eq 0\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_source_route value is expected to eq 0\n  ×  cis-dil-benchmark-3.2.2: Ensure ICMP redirects are not accepted (3 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_redirects value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_redirects value is expected to eq 0\n     ✔  Kernel Parameter net.ipv4.conf.default.accept_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.accept_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.all.accept_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.default.accept_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-3.2.3: Ensure secure ICMP redirects are not accepted (2 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.secure_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.all.secure_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv4.conf.default.secure_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.secure_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-3.2.4: Ensure suspicious packets are logged (2 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.log_martians value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.all.log_martians value is expected to eq 1\n     \n     expected: 1\n          got: 0\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv4.conf.default.log_martians value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.log_martians value is expected to eq 1\n     \n     expected: 1\n          got: 0\n     \n     (compared using ==)\n\n  ✔  cis-dil-benchmark-3.2.5: Ensure broadcast ICMP requests are ignored\n     ✔  Kernel Parameter net.ipv4.icmp_echo_ignore_broadcasts value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.icmp_echo_ignore_broadcasts value is expected to eq 1\n  ✔  cis-dil-benchmark-3.2.6: Ensure bogus ICMP responses are ignored\n     ✔  Kernel Parameter net.ipv4.icmp_ignore_bogus_error_responses value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.icmp_ignore_bogus_error_responses value is expected to eq 1\n  ✔  cis-dil-benchmark-3.2.7: Ensure Reverse Path Filtering is enabled\n     ✔  Kernel Parameter net.ipv4.conf.all.rp_filter value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.all.rp_filter value is expected to eq 1\n     ✔  Kernel Parameter net.ipv4.conf.default.rp_filter value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.default.rp_filter value is expected to eq 1\n  ✔  cis-dil-benchmark-3.2.8: Ensure TCP SYN Cookies is enabled\n     ✔  Kernel Parameter net.ipv4.tcp_syncookies value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.tcp_syncookies value is expected to eq 1\n  ×  cis-dil-benchmark-3.2.9: Ensure IPv6 router advertisements are not accepted (2 failed)\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_ra value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.all.accept_ra value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_ra value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.default.accept_ra value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-3.3.1: Ensure TCP Wrappers is installed (2 failed)\n     ×  System Package tcpd is expected to be installed\n     expected that `System Package tcpd` is installed\n     ×  System Package tcp_wrappers is expected to be installed\n     expected that `System Package tcp_wrappers` is installed\n  ×  cis-dil-benchmark-3.3.2: Ensure /etc/hosts.allow is configured\n     ×  File /etc/hosts.allow is expected to exist\n     expected File /etc/hosts.allow to exist\n  ×  cis-dil-benchmark-3.3.3: Ensure /etc/hosts.deny is configured\n     ×  File /etc/hosts.deny content is expected to match /^ALL: ALL/\n     expected nil to match /^ALL: ALL/\n  ×  cis-dil-benchmark-3.3.4: Ensure permissions on /etc/hosts.allow are configured (5 failed)\n     ×  File /etc/hosts.allow is expected to exist\n     expected File /etc/hosts.allow to exist\n     ×  File /etc/hosts.allow is expected to be file\n     expected `File /etc/hosts.allow.file?` to be truthy, got false\n     ×  File /etc/hosts.allow owner is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.allow group is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.allow mode is expected to cmp == \"0644\"\n     can't convert nil into Integer\n  ×  cis-dil-benchmark-3.3.5: Ensure permissions on /etc/hosts.deny are configured (5 failed)\n     ×  File /etc/hosts.deny is expected to exist\n     expected File /etc/hosts.deny to exist\n     ×  File /etc/hosts.deny is expected to be file\n     expected `File /etc/hosts.deny.file?` to be truthy, got false\n     ×  File /etc/hosts.deny owner is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.deny group is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.deny mode is expected to cmp == \"0644\"\n     can't convert nil into Integer\n  ↺  cis-dil-benchmark-3.4.1: Ensure DCCP is disabled\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-3.4.2: Ensure SCTP is disabled\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-3.4.3: Ensure RDS is disabled\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-3.4.4: Ensure TIPC is disabled\n     ↺  Skipped control due to only_if condition.\n  ×  cis-dil-benchmark-3.5.1.1: Ensure IPv6 default deny firewall policy (3 failed)\n     ×  Ip6tables is expected to have rule \"-P INPUT DROP\"\n     expected Ip6tables to have rule \"-P INPUT DROP\"\n     ×  Ip6tables is expected to have rule \"-P OUTPUT DROP\"\n     expected Ip6tables to have rule \"-P OUTPUT DROP\"\n     ×  Ip6tables is expected to have rule \"-P FORWARD DROP\"\n     expected Ip6tables to have rule \"-P FORWARD DROP\"\n  ×  cis-dil-benchmark-3.5.1.2: Ensure IPv6 loopback traffic is configured (9 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.1.3: Ensure IPv6 outbound and established connections are configured (18 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.1.4: Ensure IPv6 firewall rules exist for all open ports (2 failed)\n     ×  Firewall rule should exist for port 68 is expected to equal true\n     \n     expected true\n          got false\n\n     ×  Firewall rule should exist for port 22 is expected to equal true\n     \n     expected true\n          got false\n\n  ×  cis-dil-benchmark-3.5.2.1: Ensure default deny firewall policy (3 failed)\n     ×  Iptables is expected to have rule \"-P INPUT DROP\"\n     expected Iptables to have rule \"-P INPUT DROP\"\n     ×  Iptables is expected to have rule \"-P OUTPUT DROP\"\n     expected Iptables to have rule \"-P OUTPUT DROP\"\n     ×  Iptables is expected to have rule \"-P FORWARD DROP\"\n     expected Iptables to have rule \"-P FORWARD DROP\"\n  ×  cis-dil-benchmark-3.5.2.2: Ensure loopback traffic is configured (9 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.2.3: Ensure outbound and established connections are configured (18 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.2.4: Ensure firewall rules exist for all open ports (2 failed)\n     ×  Firewall rule should exist for port 68 is expected to equal true\n     \n     expected true\n          got false\n\n     ×  Firewall rule should exist for port 22 is expected to equal true\n     \n     expected true\n          got false\n\n  ↺  cis-dil-benchmark-3.5.3: Ensure iptables is installed\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-3.6: Ensure wireless interfaces are disabled\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-3.7: Disable IPv6\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.1.1: Ensure audit log storage size is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.1.2: Ensure system is disabled when audit logs are full\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.1.3: Ensure audit logs are not automatically deleted\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.2: Ensure auditd is installed\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.3: Ensure auditd service is enabled\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.4: Ensure auditing for processes that start prior to auditd is enabled\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.5: Ensure events that modify date and time information are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.6: Ensure events that modify user/group information are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.7: Ensure events that modify the system's network environment are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.8: Ensure events that modify the system's Mandatory Access Controls are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.9: Ensure login and logout events are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.10: Ensure session initiation information is collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.11: Ensure discretionary access control permission modification events are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.12: Ensure unsuccessful unauthorized file access attempts are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.13: Ensure use of privileged commands is collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.14: Ensure successful file system mounts are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.15: Ensure file deletion events by users are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.16: Ensure changes to system administration scope (sudoers) is collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.17: Ensure system administrator actions (sudolog) are collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.18: Ensure kernel module loading and unloading is collected\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.1.19: Ensure the audit configuration is immutable\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-4.2.1.1: Ensure rsyslog Service is insalled\n     ↺  The `package` resource is not supported on your OS yet.\n  ×  cis-dil-benchmark-4.2.1.2: Ensure rsyslog Service is enabled (2 failed)\n     ×  Service rsyslog is expected to be enabled\n     expected that `Service rsyslog` is enabled\n     ×  Service rsyslog is expected to be running\n     expected that `Service rsyslog` is running\n  ×  cis-dil-benchmark-4.2.1.3: Ensure logging is configured\n     ×  File /etc/rsyslog.conf is expected to exist\n     expected File /etc/rsyslog.conf to exist\n  ×  cis-dil-benchmark-4.2.1.4: Ensure rsyslog default file permissions configured\n     ×  File /etc/rsyslog.conf content is expected to match /^\\$FileCreateMode\\s+0[0-6][0-4]0/\n     expected nil to match /^\\$FileCreateMode\\s+0[0-6][0-4]0/\n  ×  cis-dil-benchmark-4.2.1.5: Ensure rsyslog is configured to send logs to a remote log host\n     ×  File /etc/rsyslog.conf content is expected to match /^\\s*\\*\\.\\*\\s+@/\n     expected nil to match /^\\s*\\*\\.\\*\\s+@/\n  ↺  cis-dil-benchmark-4.2.1.6: Ensure remote rsyslog messages are only accepted on designated log hosts.\n     ↺  Not implemented\n  ×  cis-dil-benchmark-4.2.2.1: Ensure journald is configured to send logs to rsyslog\n     ×  Parse Config File /etc/systemd/journald.conf Journal is expected to include {\"ForwardToSyslog\" => \"yes\"}\n     expected {} to include {\"ForwardToSyslog\" => \"yes\"}\n     Diff:\n     @@ -1,2 +1 @@\n     -\"ForwardToSyslog\" => \"yes\",\n\n  ×  cis-dil-benchmark-4.2.2.2: Ensure journald is configured to compress large log files\n     ×  Parse Config File /etc/systemd/journald.conf Journal is expected to include {\"Compress\" => \"yes\"}\n     expected {} to include {\"Compress\" => \"yes\"}\n     Diff:\n     @@ -1,2 +1 @@\n     -\"Compress\" => \"yes\",\n\n  ×  cis-dil-benchmark-4.2.2.3: Ensure journald is configured to write logfiles to persistent disk\n     ×  Parse Config File /etc/systemd/journald.conf Journal is expected to include {\"Storage\" => \"persistent\"}\n     expected {} to include {\"Storage\" => \"persistent\"}\n     Diff:\n     @@ -1,2 +1 @@\n     -\"Storage\" => \"persistent\",\n\n  ×  cis-dil-benchmark-4.2.3: Ensure permissions on all logfiles are configured (2 failed)\n     ✔  File /var/log/tallylog is expected not to be writable by group\n     ✔  File /var/log/tallylog is expected not to be executable by group\n     ✔  File /var/log/tallylog is expected not to be readable by other\n     ✔  File /var/log/tallylog is expected not to be writable by other\n     ✔  File /var/log/tallylog is expected not to be executable by other\n     ✔  File /var/log/faillog is expected not to be writable by group\n     ✔  File /var/log/faillog is expected not to be executable by group\n     ×  File /var/log/faillog is expected not to be readable by other\n     expected File /var/log/faillog not to be readable by other\n     ✔  File /var/log/faillog is expected not to be writable by other\n     ✔  File /var/log/faillog is expected not to be executable by other\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be writable by group\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be executable by group\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be readable by other\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be writable by other\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be executable by other\n     ×  File /var/log/btmp is expected not to be writable by group\n     expected File /var/log/btmp not to be writable by group\n     ✔  File /var/log/btmp is expected not to be executable by group\n     ✔  File /var/log/btmp is expected not to be readable by other\n     ✔  File /var/log/btmp is expected not to be writable by other\n     ✔  File /var/log/btmp is expected not to be executable by other\n     ✔  File /var/log/lastlog is expected not to be executable by group\n     ✔  File /var/log/lastlog is expected not to be writable by other\n     ✔  File /var/log/lastlog is expected not to be executable by other\n     ✔  File /var/log/wtmp is expected not to be executable by group\n     ✔  File /var/log/wtmp is expected not to be writable by other\n     ✔  File /var/log/wtmp is expected not to be executable by other\n  ↺  cis-dil-benchmark-4.3: Ensure logrotate is configured\n     ↺  Not implemented\n  ×  cis-dil-benchmark-5.1.1: Ensure cron daemon is enabled (4 failed)\n     ×  Service cron is expected to be enabled\n     expected that `Service cron` is enabled\n     ×  Service cron is expected to be running\n     expected that `Service cron` is running\n     ×  Service crond is expected to be enabled\n     expected that `Service crond` is enabled\n     ×  Service crond is expected to be running\n     expected that `Service crond` is running\n  ×  cis-dil-benchmark-5.1.2: Ensure permissions on /etc/crontab are configured (3 failed)\n     ×  File /etc/crontab is expected to exist\n     expected File /etc/crontab to exist\n     ✔  File /etc/crontab is expected not to be readable by group\n     ✔  File /etc/crontab is expected not to be writable by group\n     ✔  File /etc/crontab is expected not to be executable by group\n     ✔  File /etc/crontab is expected not to be readable by other\n     ✔  File /etc/crontab is expected not to be writable by other\n     ✔  File /etc/crontab is expected not to be executable by other\n     ×  File /etc/crontab uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/crontab gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.3: Ensure permissions on /etc/cron.hourly are configured (3 failed)\n     ×  File /etc/cron.hourly is expected to exist\n     expected File /etc/cron.hourly to exist\n     ✔  File /etc/cron.hourly is expected not to be readable by group\n     ✔  File /etc/cron.hourly is expected not to be writable by group\n     ✔  File /etc/cron.hourly is expected not to be executable by group\n     ✔  File /etc/cron.hourly is expected not to be readable by other\n     ✔  File /etc/cron.hourly is expected not to be writable by other\n     ✔  File /etc/cron.hourly is expected not to be executable by other\n     ×  File /etc/cron.hourly uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.hourly gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.4: Ensure permissions on /etc/cron.daily are configured (3 failed)\n     ×  File /etc/cron.daily is expected to exist\n     expected File /etc/cron.daily to exist\n     ✔  File /etc/cron.daily is expected not to be readable by group\n     ✔  File /etc/cron.daily is expected not to be writable by group\n     ✔  File /etc/cron.daily is expected not to be executable by group\n     ✔  File /etc/cron.daily is expected not to be readable by other\n     ✔  File /etc/cron.daily is expected not to be writable by other\n     ✔  File /etc/cron.daily is expected not to be executable by other\n     ×  File /etc/cron.daily uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.daily gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.5: Ensure permissions on /etc/cron.weekly are configured (4 failed)\n     ✔  File /etc/cron.weekly is expected to exist\n     ×  File /etc/cron.weekly is expected not to be readable by group\n     expected File /etc/cron.weekly not to be readable by group\n     ✔  File /etc/cron.weekly is expected not to be writable by group\n     ×  File /etc/cron.weekly is expected not to be executable by group\n     expected File /etc/cron.weekly not to be executable by group\n     ×  File /etc/cron.weekly is expected not to be readable by other\n     expected File /etc/cron.weekly not to be readable by other\n     ✔  File /etc/cron.weekly is expected not to be writable by other\n     ×  File /etc/cron.weekly is expected not to be executable by other\n     expected File /etc/cron.weekly not to be executable by other\n     ✔  File /etc/cron.weekly uid is expected to cmp == 0\n     ✔  File /etc/cron.weekly gid is expected to cmp == 0\n  ×  cis-dil-benchmark-5.1.6: Ensure permissions on /etc/cron.monthly are configured (3 failed)\n     ×  File /etc/cron.monthly is expected to exist\n     expected File /etc/cron.monthly to exist\n     ✔  File /etc/cron.monthly is expected not to be readable by group\n     ✔  File /etc/cron.monthly is expected not to be writable by group\n     ✔  File /etc/cron.monthly is expected not to be executable by group\n     ✔  File /etc/cron.monthly is expected not to be readable by other\n     ✔  File /etc/cron.monthly is expected not to be writable by other\n     ✔  File /etc/cron.monthly is expected not to be executable by other\n     ×  File /etc/cron.monthly uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.monthly gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.7: Ensure permissions on /etc/cron.d are configured (3 failed)\n     ×  File /etc/cron.d is expected to exist\n     expected File /etc/cron.d to exist\n     ✔  File /etc/cron.d is expected not to be readable by group\n     ✔  File /etc/cron.d is expected not to be writable by group\n     ✔  File /etc/cron.d is expected not to be executable by group\n     ✔  File /etc/cron.d is expected not to be readable by other\n     ✔  File /etc/cron.d is expected not to be writable by other\n     ✔  File /etc/cron.d is expected not to be executable by other\n     ×  File /etc/cron.d uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.d gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.8: Ensure at/cron is restricted to authorized users (6 failed)\n     ✔  File /etc/cron.deny is expected not to exist\n     ×  File /etc/cron.allow is expected to exist\n     expected File /etc/cron.allow to exist\n     ✔  File /etc/cron.allow is expected not to be readable by group\n     ✔  File /etc/cron.allow is expected not to be writable by group\n     ✔  File /etc/cron.allow is expected not to be executable by group\n     ✔  File /etc/cron.allow is expected not to be readable by other\n     ✔  File /etc/cron.allow is expected not to be writable by other\n     ✔  File /etc/cron.allow is expected not to be executable by other\n     ×  File /etc/cron.allow uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.allow gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ✔  File /etc/at.deny is expected not to exist\n     ×  File /etc/at.allow is expected to exist\n     expected File /etc/at.allow to exist\n     ✔  File /etc/at.allow is expected not to be readable by group\n     ✔  File /etc/at.allow is expected not to be writable by group\n     ✔  File /etc/at.allow is expected not to be executable by group\n     ✔  File /etc/at.allow is expected not to be readable by other\n     ✔  File /etc/at.allow is expected not to be writable by other\n     ✔  File /etc/at.allow is expected not to be executable by other\n     ×  File /etc/at.allow uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/at.allow gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ✔  cis-dil-benchmark-5.2.1: Ensure permissions on /etc/ssh/sshd_config are configured (Scored)\n     ✔  File /etc/ssh/sshd_config is expected to exist\n     ✔  File /etc/ssh/sshd_config is expected not to be readable by group\n     ✔  File /etc/ssh/sshd_config is expected not to be writable by group\n     ✔  File /etc/ssh/sshd_config is expected not to be executable by group\n     ✔  File /etc/ssh/sshd_config is expected not to be readable by other\n     ✔  File /etc/ssh/sshd_config is expected not to be writable by other\n     ✔  File /etc/ssh/sshd_config is expected not to be executable by other\n     ✔  File /etc/ssh/sshd_config uid is expected to cmp == 0\n     ✔  File /etc/ssh/sshd_config gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-5.2.2: Ensure permissions on SSH private host key files are configured (Scored)\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ed25519_key uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_dsa_key uid is expected to cmp == 0\n  ✔  cis-dil-benchmark-5.2.3: Ensure permissions on SSH public host key files are configured (Scored)\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub uid is expected to cmp == 0\n  ×  cis-dil-benchmark-5.2.4: Ensure SSH Protocol is set to 2 (Scored)\n     ×  SSHD Configuration Protocol is expected to cmp == 2\n     \n     expected: 2\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.2.5: Ensure SSH LogLevel is appropriate (Scored)\n     ×  SSHD Configuration LogLevel is expected to eq \"VERBOSE\"\n     \n     expected: \"VERBOSE\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.6: Ensure SSH X11 forwarding is disabled (Scored)\n     ×  SSHD Configuration X11Forwarding is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.7: Ensure SSH MaxAuthTries is set to 4 or less (Scored)\n     ×  SSHD Configuration MaxAuthTries is expected to cmp <= 4\n     \n     expected it to be <= 4\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.2.8: Ensure SSH IgnoreRhosts is enabled (Scored)\n     ×  SSHD Configuration IgnoreRhosts is expected to eq \"yes\"\n     \n     expected: \"yes\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.9: Ensure SSH HostbasedAuthentication is disabled (Scored)\n     ×  SSHD Configuration HostbasedAuthentication is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.10: Ensure SSH root login is disabled (Scored)\n     ×  SSHD Configuration PermitRootLogin is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.11: Ensure SSH PermitEmptyPasswords is disabled (Scored)\n     ×  SSHD Configuration PermitEmptyPasswords is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.12: Ensure SSH PermitUserEnvironment is disabled (Scored)\n     ×  SSHD Configuration PermitUserEnvironment is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.13: Ensure only strong Ciphers are used (Scored)\n     ×  SSHD Configuration Ciphers is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.14: Ensure only strong MAC algorithms are used (Scored)\n     ×  SSHD Configuration MACs is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.15: Ensure only strong Key Exchange algorithms are used (Scored)\n     ×  SSHD Configuration KexAlgorithms is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.16: Ensure SSH Idle Timeout Interval is configured (Scored) (1 failed)\n     ✔  SSHD Configuration ClientAliveInterval is expected to cmp <= 300\n     ×  SSHD Configuration ClientAliveCountMax is expected to cmp <= 0\n     \n     expected it to be <= 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.2.17: Ensure SSH LoginGraceTime is set to one minute or less (Scored)\n     ×  SSHD Configuration LoginGraceTime is expected to satisfy expression `x == '1m' || ((matches = x.match(/(?<secs>[0-9]+)s?/)) && Integer(matches[:secs]) <= 60)`\n     undefined method `match' for nil:NilClass\n  ×  cis-dil-benchmark-5.2.18: Ensure SSH access is limited (Scored) (4 failed)\n     ×  SSHD Configuration AllowUsers is expected not to be nil\n     expected: not nil\n          got: nil\n     ×  SSHD Configuration AllowGroups is expected not to be nil\n     expected: not nil\n          got: nil\n     ×  SSHD Configuration DenyUsers is expected not to be nil\n     expected: not nil\n          got: nil\n     ×  SSHD Configuration DenyGroups is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.19: Ensure SSH warning banner is configured (Scored)\n     ×  SSHD Configuration Banner is expected not to be nil\n     expected: not nil\n          got: nil\n  ✔  cis-dil-benchmark-5.2.20: Ensure SSH PAM is enabled (Scored)\n     ✔  SSHD Configuration UsePAM is expected to eq \"yes\"\n  ↺  cis-dil-benchmark-5.2.21: Ensure SSH AllowTcpForwarding is disabled (Scored)\n     ↺  Skipped control due to only_if condition.\n  ×  cis-dil-benchmark-5.2.22: Ensure SSH MaxStartups is configured (Scored)\n     ×  SSHD Configuration MaxStartups is expected to eq \"10:30:60\"\n     \n     expected: \"10:30:60\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.23: Ensure SSH MaxSessions is set to 4 or less (Scored)\n     ×  SSHD Configuration MaxSessions is expected to cmp <= 4\n     \n     expected it to be <= 4\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ↺  cis-dil-benchmark-5.3.2: Ensure lockout for failed password attempts is configured\n     ↺  Not implemented\n  ×  cis-dil-benchmark-5.3.3: Ensure password reuse is limited (4 failed)\n     ×  File /etc/pam.d/common-password content is expected to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     ×  File /etc/pam.d/common-password content is expected to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     ×  File /etc/pam.d/system-auth content is expected to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     ×  File /etc/pam.d/system-auth content is expected to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n  ×  cis-dil-benchmark-5.3.4: Ensure password hashing algorithm is SHA-512 (3 failed)\n     ×  File /etc/pam.d/common-password content is expected to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     expected nil to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     ×  File /etc/pam.d/system-auth content is expected to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     expected nil to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     ×  File /etc/pam.d/password-auth content is expected to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     expected nil to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n  ×  cis-dil-benchmark-5.4.1.1: Ensure password expiration is 365 days or less\n     ×  login.defs PASS_MAX_DAYS is expected to cmp <= 365\n     \n     expected it to be <= 365\n          got: 99999\n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.4.1.2: Ensure minimum days between password changes is 7 or more\n     ×  login.defs PASS_MIN_DAYS is expected to cmp >= 7\n     \n     expected it to be >= 7\n          got: 0\n     \n     (compared using `cmp` matcher)\n\n  ✔  cis-dil-benchmark-5.4.1.3: Ensure password expiration warning days is 7 or more\n     ✔  login.defs PASS_WARN_AGE is expected to cmp >= 7\n  ×  cis-dil-benchmark-5.4.1.4: Ensure inactive password lock is 30 days or less\n     ×  Command: `useradd -D` stdout is expected to match /^INACTIVE=(30|[1-2][0-9]|[1-9])$/\n     expected \"GROUP=100\\nHOME=/home\\nINACTIVE=-1\\nEXPIRE=\\nSHELL=/bin/bash\\nSKEL=/etc/skel\\nCREATE_MAIL_SPOOL=no\\n\" to match /^INACTIVE=(30|[1-2][0-9]|[1-9])$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^INACTIVE=(30|[1-2][0-9]|[1-9])$/\n     +GROUP=100\n     +HOME=/home\n     +INACTIVE=-1\n     +EXPIRE=\n     +SHELL=/bin/bash\n     +SKEL=/etc/skel\n     +CREATE_MAIL_SPOOL=no\n\n  ×  cis-dil-benchmark-5.4.2: Ensure system accounts are secured (26 failed)\n     ×  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     expected \"/bin/bash\" to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     Diff:\n     @@ -1 +1 @@\n     -/(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     +\"/bin/bash\"\n\n     ✔  /etc/shadow with user == \"core\" passwords is expected to cmp == /^[*!]/\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ✔  /etc/shadow with user == \"systemd-timesync\" passwords is expected to cmp == /^[*!]/\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ✔  /etc/shadow with user == \"systemd-coredump\" passwords is expected to cmp == /^[*!]/\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"bin\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"daemon\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"adm\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"lp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"news\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"uucp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"operator\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"man\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"messagebus\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"syslog\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"ntp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"sshd\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"tcpdump\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"dhcp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"etcd\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"docker\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"tlsdate\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"polkitd\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"tss\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-journal-remote\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-network\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-resolve\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-bus-proxy\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"portage\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ×  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     expected \"/bin/bash\" to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     Diff:\n     @@ -1 +1 @@\n     -/(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     +\"/bin/bash\"\n\n     ✔  /etc/shadow with user == \"core\" passwords is expected to cmp == /^[*!]/\n  ✔  cis-dil-benchmark-5.4.3: Ensure default group for the root account is GID 0\n     ✔  /etc/passwd with user == \"root\" gids is expected to cmp == 0\n  ×  cis-dil-benchmark-5.4.4: Ensure default user umask is 027 or more restrictive (2 failed)\n     ×  File /etc/profile content is expected not to match /^\\s*umask [0-7](0[1-7]|[1-7][1-6])\\s*(?:#.*)?$/\n     expected \"# /etc/profile: login shell setup\\n#\\n# That this file is used by any Bourne-shell derivative to set... \\\"$sh\\\"\\ndone\\nfor sh in /etc/profile.d/*.sh ; do\\n\\t[ -r \\\"$sh\\\" ] && . \\\"$sh\\\"\\ndone\\nunset sh\\n\" not to match /^\\s*umask [0-7](0[1-7]|[1-7][1-6])\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,59 +1,117 @@\n     -/^\\s*umask [0-7](0[1-7]|[1-7][1-6])\\s*(?:#.*)?$/\n     +# /etc/profile: login shell setup\n     +#\n     +# That this file is used by any Bourne-shell derivative to setup the\n     +# environment for login shells.\n     +#\n     +\n     +# Load environment settings from profile.env, which is created by\n     +# env-update from the files in /etc/env.d\n     +if [ -e /etc/profile.env ] ; then\n     +\t. /etc/profile.env\n     +elif [ -e /usr/share/baselayout/profile.env ] ; then\n     +\t. /usr/share/baselayout/profile.env\n     +fi\n     +\n     +# You should override these in your ~/.bashrc (or equivalent) for per-user\n     +# settings.  For system defaults, you can add a new file in /etc/profile.d/.\n     +export EDITOR=${EDITOR:-/usr/bin/vim}\n     +export PAGER=${PAGER:-/usr/bin/less}\n     +\n     +# 077 would be more secure, but 022 is generally quite realistic\n     +umask 022\n     +\n     +# Set up PATH, all users get both bin and sbin to keep things simple.\n     +# Gentoo normally splits this up which is why the variable is called ROOTPATH\n     +export PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin${ROOTPATH:+:}${ROOTPATH-}\"\n     +unset ROOTPATH\n     +\n     +if [ -n \"${BASH_VERSION-}\" ] ; then\n     +\t# Newer bash ebuilds include /etc/bash/bashrc which will setup PS1\n     +\t# including color.  We leave out color here because not all\n     +\t# terminals support it.\n     +\tif [ -f /etc/bash/bashrc ] ; then\n     +\t\t# Bash login shells run only /etc/profile\n     +\t\t# Bash non-login shells run only /etc/bash/bashrc\n     +\t\t# Since we want to run /etc/bash/bashrc regardless, we source it \n     +\t\t# from here.  It is unfortunate that there is no way to do \n     +\t\t# this *after* the user's .bash_profile runs (without putting \n     +\t\t# it in the user's dot-files), but it shouldn't make any \n     +\t\t# difference.\n     +\t\t. /etc/bash/bashrc\n     +\telif [ -f /usr/share/bash/bashrc ] ; then\n     +\t\t. /usr/share/bash/bashrc\n     +\telse\n     +\t\tPS1='\\u@\\h \\w \\$ '\n     +\tfi\n     +else\n     +\t# Setup a bland default prompt.  Since this prompt should be useable\n     +\t# on color and non-color terminals, as well as shells that don't\n     +\t# understand sequences such as \\h, don't put anything special in it.\n     +\tPS1=\"${USER:-$(whoami 2>/dev/null)}@$(uname -n 2>/dev/null) \\$ \"\n     +fi\n     +\n     +for sh in /usr/share/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +for sh in /etc/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +unset sh\n\n     ×  File /etc/profile content is expected to match /^\\s*umask [0-7][2367]7\\s*(?:#.*)?$/\n     expected \"# /etc/profile: login shell setup\\n#\\n# That this file is used by any Bourne-shell derivative to set... \\\"$sh\\\"\\ndone\\nfor sh in /etc/profile.d/*.sh ; do\\n\\t[ -r \\\"$sh\\\" ] && . \\\"$sh\\\"\\ndone\\nunset sh\\n\" to match /^\\s*umask [0-7][2367]7\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,59 +1,117 @@\n     -/^\\s*umask [0-7][2367]7\\s*(?:#.*)?$/\n     +# /etc/profile: login shell setup\n     +#\n     +# That this file is used by any Bourne-shell derivative to setup the\n     +# environment for login shells.\n     +#\n     +\n     +# Load environment settings from profile.env, which is created by\n     +# env-update from the files in /etc/env.d\n     +if [ -e /etc/profile.env ] ; then\n     +\t. /etc/profile.env\n     +elif [ -e /usr/share/baselayout/profile.env ] ; then\n     +\t. /usr/share/baselayout/profile.env\n     +fi\n     +\n     +# You should override these in your ~/.bashrc (or equivalent) for per-user\n     +# settings.  For system defaults, you can add a new file in /etc/profile.d/.\n     +export EDITOR=${EDITOR:-/usr/bin/vim}\n     +export PAGER=${PAGER:-/usr/bin/less}\n     +\n     +# 077 would be more secure, but 022 is generally quite realistic\n     +umask 022\n     +\n     +# Set up PATH, all users get both bin and sbin to keep things simple.\n     +# Gentoo normally splits this up which is why the variable is called ROOTPATH\n     +export PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin${ROOTPATH:+:}${ROOTPATH-}\"\n     +unset ROOTPATH\n     +\n     +if [ -n \"${BASH_VERSION-}\" ] ; then\n     +\t# Newer bash ebuilds include /etc/bash/bashrc which will setup PS1\n     +\t# including color.  We leave out color here because not all\n     +\t# terminals support it.\n     +\tif [ -f /etc/bash/bashrc ] ; then\n     +\t\t# Bash login shells run only /etc/profile\n     +\t\t# Bash non-login shells run only /etc/bash/bashrc\n     +\t\t# Since we want to run /etc/bash/bashrc regardless, we source it \n     +\t\t# from here.  It is unfortunate that there is no way to do \n     +\t\t# this *after* the user's .bash_profile runs (without putting \n     +\t\t# it in the user's dot-files), but it shouldn't make any \n     +\t\t# difference.\n     +\t\t. /etc/bash/bashrc\n     +\telif [ -f /usr/share/bash/bashrc ] ; then\n     +\t\t. /usr/share/bash/bashrc\n     +\telse\n     +\t\tPS1='\\u@\\h \\w \\$ '\n     +\tfi\n     +else\n     +\t# Setup a bland default prompt.  Since this prompt should be useable\n     +\t# on color and non-color terminals, as well as shells that don't\n     +\t# understand sequences such as \\h, don't put anything special in it.\n     +\tPS1=\"${USER:-$(whoami 2>/dev/null)}@$(uname -n 2>/dev/null) \\$ \"\n     +fi\n     +\n     +for sh in /usr/share/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +for sh in /etc/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +unset sh\n\n  ↺  cis-dil-benchmark-5.4.5: Ensure default user shell timeout is 900 seconds or less\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-5.5: Ensure root login is restricted to system console\n     ↺  Not implemented\n  ×  cis-dil-benchmark-5.6: Ensure access to the su command is restricted (1 failed)\n     ×  File /etc/pam.d/su content is expected to match /^auth\\s+required\\s+pam_wheel.so use_uid$/\n     expected nil to match /^auth\\s+required\\s+pam_wheel.so use_uid$/\n     ✔  Groups with name == \"wheel\" is expected to exist\n  ↺  cis-dil-benchmark-6.1.1: Audit system file permissions\n     ↺  Skipped control due to only_if condition.\n  ✔  cis-dil-benchmark-6.1.2: Ensure permissions on /etc/passwd are configured\n     ✔  File /etc/passwd is expected to exist\n     ✔  File /etc/passwd mode is expected to cmp == \"0644\"\n     ✔  File /etc/passwd uid is expected to cmp == 0\n     ✔  File /etc/passwd gid is expected to cmp == 0\n     ✔  File /etc/passwd sticky is expected to equal false\n     ✔  File /etc/passwd suid is expected to equal false\n     ✔  File /etc/passwd sgid is expected to equal false\n     ✔  File /usr/share/baselayout/passwd is expected to exist\n     ✔  File /usr/share/baselayout/passwd mode is expected to cmp == \"0644\"\n     ✔  File /usr/share/baselayout/passwd uid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/passwd gid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/passwd sticky is expected to equal false\n     ✔  File /usr/share/baselayout/passwd suid is expected to equal false\n     ✔  File /usr/share/baselayout/passwd sgid is expected to equal false\n  ✔  cis-dil-benchmark-6.1.3: Ensure permissions on /etc/shadow are configured\n     ✔  File /etc/shadow is expected to exist\n     ✔  File /etc/shadow is expected not to be more permissive than \"0644\"\n     ✔  File /etc/shadow uid is expected to cmp == 0\n     ✔  File /etc/shadow gid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/shadow is expected to exist\n     ✔  File /usr/share/baselayout/shadow is expected not to be more permissive than \"0644\"\n     ✔  File /usr/share/baselayout/shadow uid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/shadow gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.4: Ensure permissions on /etc/group are configured\n     ✔  File /etc/group is expected to exist\n     ✔  File /etc/group mode is expected to cmp == \"0644\"\n     ✔  File /etc/group uid is expected to cmp == 0\n     ✔  File /etc/group gid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/group is expected to exist\n     ✔  File /usr/share/baselayout/group mode is expected to cmp == \"0644\"\n     ✔  File /usr/share/baselayout/group uid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/group gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.5: Ensure permissions on /etc/gshadow are configured\n     ✔  File /etc/gshadow is expected to exist\n     ✔  File /etc/gshadow is expected not to be more permissive than \"0640\"\n     ✔  File /etc/gshadow uid is expected to cmp == 0\n     ✔  File /etc/gshadow gid is expected to cmp == 0\n  ×  cis-dil-benchmark-6.1.6: Ensure permissions on /etc/passwd- are configured (1 failed)\n     ✔  File /etc/passwd- is expected to exist\n     ×  File /etc/passwd- is expected not to be more permissive than \"0600\"\n     expected `File /etc/passwd-.more_permissive_than?(\"0600\")` to be falsey, got true\n     ✔  File /etc/passwd- uid is expected to cmp == 0\n     ✔  File /etc/passwd- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.7: Ensure permissions on /etc/shadow- are configured\n     ✔  File /etc/shadow- is expected to exist\n     ✔  File /etc/shadow- is expected not to be more permissive than \"0640\"\n     ✔  File /etc/shadow- uid is expected to cmp == 0\n     ✔  File /etc/shadow- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.8: Ensure permissions on /etc/group- are configured\n     ✔  File /etc/group- is expected to exist\n     ✔  File /etc/group- is expected not to be more permissive than \"0644\"\n     ✔  File /etc/group- uid is expected to cmp == 0\n     ✔  File /etc/group- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.9: Ensure permissions on /etc/gshadow- are configured\n     ✔  File /etc/gshadow- is expected to exist\n     ✔  File /etc/gshadow- is expected not to be more permissive than \"0640\"\n     ✔  File /etc/gshadow- uid is expected to cmp == 0\n     ✔  File /etc/gshadow- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.10: Ensure no world writable files exist\n     ✔  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -type f -perm -0002` stdout is expected to cmp == \"\"\n  ×  cis-dil-benchmark-6.1.11: Ensure no unowned files or directories exist\n     ×  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -nouser` stdout is expected to cmp == \"\"\n     \n     expected: \n          got: /media/configvirtfs\n     /media/configvirtfs\n     /media/configvirtfs/openstack\n     /media/configvirtfs/openstack/latest\n     /media/configvirtfs/openstack/latest/user_data\n     \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-6.1.12: Ensure no ungrouped files or directories exist\n     ×  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -nogroup` stdout is expected to cmp == \"\"\n     \n     expected: \n          got: /media/configvirtfs\n     /media/configvirtfs\n     /media/configvirtfs/openstack\n     /media/configvirtfs/openstack/latest\n     /media/configvirtfs/openstack/latest/user_data\n     \n     \n     (compared using `cmp` matcher)\n\n  ↺  cis-dil-benchmark-6.1.13: Audit SUID executables\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-6.1.14: Audit SGID executables\n     ↺  Not implemented\n  ✔  cis-dil-benchmark-6.2.1: Ensure password fields are not empty\n     ✔  /etc/shadow passwords is expected not to include \"\"\n     ✔  /usr/share/baselayout/shadow passwords is expected not to include \"\"\n  ✔  cis-dil-benchmark-6.2.2: Ensure no legacy \"+\" entries exist in /etc/passwd\n     ✔  /etc/passwd users is expected not to include \"+\"\n     ✔  /etc/passwd users is expected not to include \"+\"\n  ✔  cis-dil-benchmark-6.2.3: Ensure no legacy \"+\" entries exist in /etc/shadow\n     ✔  /etc/shadow users is expected not to include \"+\"\n     ✔  /usr/share/baselayout/shadow users is expected not to include \"+\"\n  ✔  cis-dil-benchmark-6.2.4: Ensure no legacy \"+\" entries exist in /etc/group\n     ✔  /etc/group groups is expected not to include \"+\"\n     ✔  /etc/group groups is expected not to include \"+\"\n  ✔  cis-dil-benchmark-6.2.5: Ensure root is the only UID 0 account\n     ✔  /etc/passwd with uid == 0 users is expected to cmp == [\"root\"]\n     ✔  /etc/passwd with uid == 0 users is expected to cmp == [\"root\"]\n  ✔  cis-dil-benchmark-6.2.6: Ensure root PATH Integrity\n     ✔  [\"/usr/bin\", \"/bin\", \"/usr/sbin\", \"/sbin\"] is expected not to be empty\n     ✔  [\"/usr/bin\", \"/bin\", \"/usr/sbin\", \"/sbin\"] is expected not to include \"\"\n     ✔  [\"/usr/bin\", \"/bin\", \"/usr/sbin\", \"/sbin\"] is expected not to include \".\"\n     ✔  File /usr/bin is expected to be directory\n     ✔  File /usr/bin is expected not to be writable by group\n     ✔  File /usr/bin is expected not to be writable by other\n     ✔  File /usr/bin uid is expected to cmp == 0\n     ✔  File /bin is expected to be directory\n     ✔  File /bin is expected not to be writable by group\n     ✔  File /bin is expected not to be writable by other\n     ✔  File /bin uid is expected to cmp == 0\n     ✔  File /usr/sbin is expected to be directory\n     ✔  File /usr/sbin is expected not to be writable by group\n     ✔  File /usr/sbin is expected not to be writable by other\n     ✔  File /usr/sbin uid is expected to cmp == 0\n     ✔  File /sbin is expected to be directory\n     ✔  File /sbin is expected not to be writable by group\n     ✔  File /sbin is expected not to be writable by other\n     ✔  File /sbin uid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.2.11: Ensure no users have .forward files\n     ✔  File /root/.forward is expected not to exist\n     ✔  File /home/core/.forward is expected not to exist\n     ✔  File //.forward is expected not to exist\n     ✔  File //.forward is expected not to exist\n     ✔  File /root/.forward is expected not to exist\n     ✔  File /bin/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /var/adm/.forward is expected not to exist\n     ✔  File /var/spool/lpd/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /var/spool/news/.forward is expected not to exist\n     ✔  File /var/spool/uucp/.forward is expected not to exist\n     ✔  File /root/.forward is expected not to exist\n     ✔  File /usr/share/man/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/empty/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/lib/dhcpcd/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/lib/polkit-1/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/tmp/portage/.forward is expected not to exist\n     ✔  File /home/core/.forward is expected not to exist\n     ✔  File /var/empty/.forward is expected not to exist\n  ✔  cis-dil-benchmark-6.2.12: Ensure no users have .netrc files\n     ✔  File /root/.netrc is expected not to exist\n     ✔  File /home/core/.netrc is expected not to exist\n     ✔  File //.netrc is expected not to exist\n     ✔  File //.netrc is expected not to exist\n     ✔  File /root/.netrc is expected not to exist\n     ✔  File /bin/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /var/adm/.netrc is expected not to exist\n     ✔  File /var/spool/lpd/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /var/spool/news/.netrc is expected not to exist\n     ✔  File /var/spool/uucp/.netrc is expected not to exist\n     ✔  File /root/.netrc is expected not to exist\n     ✔  File /usr/share/man/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/empty/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/lib/dhcpcd/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/lib/polkit-1/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/tmp/portage/.netrc is expected not to exist\n     ✔  File /home/core/.netrc is expected not to exist\n     ✔  File /var/empty/.netrc is expected not to exist\n  ✔  cis-dil-benchmark-6.2.14: Ensure no users have .rhosts files\n     ✔  File /root/.rhosts is expected not to exist\n     ✔  File /home/core/.rhosts is expected not to exist\n     ✔  File //.rhosts is expected not to exist\n     ✔  File //.rhosts is expected not to exist\n     ✔  File /root/.rhosts is expected not to exist\n     ✔  File /bin/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /var/adm/.rhosts is expected not to exist\n     ✔  File /var/spool/lpd/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /var/spool/news/.rhosts is expected not to exist\n     ✔  File /var/spool/uucp/.rhosts is expected not to exist\n     ✔  File /root/.rhosts is expected not to exist\n     ✔  File /usr/share/man/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/empty/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/lib/dhcpcd/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/lib/polkit-1/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/tmp/portage/.rhosts is expected not to exist\n     ✔  File /home/core/.rhosts is expected not to exist\n     ✔  File /var/empty/.rhosts is expected not to exist\n  ×  cis-dil-benchmark-6.2.15: Ensure all groups in /etc/passwd exist in /etc/group (2 failed)\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 998\n     ✔  /etc/group gids is expected to include 997\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 1\n     ✔  /etc/group gids is expected to include 2\n     ✔  /etc/group gids is expected to include 4\n     ✔  /etc/group gids is expected to include 7\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 13\n     ✔  /etc/group gids is expected to include 14\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 15\n     ✔  /etc/group gids is expected to include 201\n     ✔  /etc/group gids is expected to include 202\n     ✔  /etc/group gids is expected to include 203\n     ✔  /etc/group gids is expected to include 204\n     ✔  /etc/group gids is expected to include 215\n     ✔  /etc/group gids is expected to include 224\n     ✔  /etc/group gids is expected to include 232\n     ✔  /etc/group gids is expected to include 233\n     ✔  /etc/group gids is expected to include 233\n     ✔  /etc/group gids is expected to include 234\n     ✔  /etc/group gids is expected to include 235\n     ×  /etc/group gids is expected to include 236\n     expected [0, 10, 150, 233, 500, 999, 251, 998, 997] to include 236\n     ×  /etc/group gids is expected to include 236\n     expected [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 26, 27, 28, 29, 30, 78, 80, 85, 100, 1..., 204, 215, 224, 232, 233, 234, 235, 242, 244, 245, 246, 248, 249, 250, 252, 406, 500, 65533, 65534] to include 236\n     ✔  /etc/group gids is expected to include 242\n     ✔  /etc/group gids is expected to include 244\n     ✔  /etc/group gids is expected to include 245\n     ✔  /etc/group gids is expected to include 246\n     ✔  /etc/group gids is expected to include 250\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 65534\n  ✔  cis-dil-benchmark-6.2.16: Ensure no duplicate UIDs exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.17: Ensure no duplicate GIDs exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.18: Ensure no duplicate user names exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.19: Ensure no duplicate group names exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.20: Ensure shadow group is empty\n     ✔  #<Inspec::Resources::EtcGroupView:0x00005653ef65b8e8> users is expected to be empty\n     ✔  #<Inspec::Resources::EtcGroupView:0x00005653ef8865f0> users is expected to be empty\n\n\nProfile Summary: 65 successful controls, 83 control failures, 82 controls skipped\nTest Summary: 593 successful, 258 failures, 88 skipped\n"
  },
  {
    "path": "CIS/inspec-report-level2-root-2020-12-08.txt",
    "content": "\nProfile: CIS Distribution Independent Linux Benchmark Profile (cis-dil-benchmark)\nVersion: 0.4.4\nTarget:  ssh://root@localhost:2222\n\n  ×  cis-dil-benchmark-1.1.1.1: Ensure mounting of cramfs filesystems is disabled (1 failed)\n     ✔  Kernel Module cramfs is expected not to be loaded\n     ×  Kernel Module cramfs is expected to be disabled\n     expected `Kernel Module cramfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.2: Ensure mounting of freevxfs filesystems is disabled (1 failed)\n     ✔  Kernel Module freevxfs is expected not to be loaded\n     ×  Kernel Module freevxfs is expected to be disabled\n     expected `Kernel Module freevxfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.3: Ensure mounting of jffs2 filesystems is disabled (1 failed)\n     ✔  Kernel Module jffs2 is expected not to be loaded\n     ×  Kernel Module jffs2 is expected to be disabled\n     expected `Kernel Module jffs2.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.4: Ensure mounting of hfs filesystems is disabled (1 failed)\n     ✔  Kernel Module hfs is expected not to be loaded\n     ×  Kernel Module hfs is expected to be disabled\n     expected `Kernel Module hfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.5: Ensure mounting of hfsplus filesystems is disabled (1 failed)\n     ✔  Kernel Module hfsplus is expected not to be loaded\n     ×  Kernel Module hfsplus is expected to be disabled\n     expected `Kernel Module hfsplus.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.6: Ensure mounting of squashfs filesystems is disabled (1 failed)\n     ✔  Kernel Module squashfs is expected not to be loaded\n     ×  Kernel Module squashfs is expected to be disabled\n     expected `Kernel Module squashfs.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.7: Ensure mounting of udf filesystems is disabled (1 failed)\n     ✔  Kernel Module udf is expected not to be loaded\n     ×  Kernel Module udf is expected to be disabled\n     expected `Kernel Module udf.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-1.1.1.8: Ensure mounting of FAT filesystems is disabled (2 failed)\n     ×  Kernel Module vfat is expected not to be loaded\n     expected `Kernel Module vfat.loaded?` to be falsey, got true\n     ×  Kernel Module vfat is expected to be disabled\n     expected `Kernel Module vfat.disabled?` to be truthy, got false\n  ✔  cis-dil-benchmark-1.1.2: Ensure separate partition exists for /tmp\n     ✔  Mount /tmp is expected to be mounted\n  ✔  cis-dil-benchmark-1.1.3: Ensure nodev option set on /tmp partition\n     ✔  Mount /tmp options is expected to include \"nodev\"\n  ✔  cis-dil-benchmark-1.1.4: Ensure nosuid option set on /tmp partition\n     ✔  Mount /tmp options is expected to include \"nosuid\"\n  ×  cis-dil-benchmark-1.1.5: Ensure noexec option set on /tmp partition\n     ×  Mount /tmp options is expected to include \"noexec\"\n     expected [\"rw\", \"nosuid\", \"nodev\", \"seclabel\", \"nr_inodes=409600\"] to include \"noexec\"\n  ×  cis-dil-benchmark-1.1.6: Ensure separate partition exists for /var\n     ×  Mount /var is expected to be mounted\n     \n     Mount /var is not mounted\n\n  ×  cis-dil-benchmark-1.1.7: Ensure separate partition exists for /var/tmp\n     ×  Mount /var/tmp is expected to be mounted\n     \n     Mount /var/tmp is not mounted\n\n  ↺  cis-dil-benchmark-1.1.8: Ensure nodev option set on /var/tmp partition\n     ↺  Skipped control due to only_if condition: /var/tmp is mounted\n  ↺  cis-dil-benchmark-1.1.9: Ensure nosuid option set on /var/tmp partition\n     ↺  Skipped control due to only_if condition: /var/tmp is mounted\n  ↺  cis-dil-benchmark-1.1.10: Ensure noexec option set on /var/tmp partition\n     ↺  Skipped control due to only_if condition: /var/tmp is mounted\n  ×  cis-dil-benchmark-1.1.11: Ensure separate partition exists for /var/log\n     ×  Mount /var/log is expected to be mounted\n     \n     Mount /var/log is not mounted\n\n  ×  cis-dil-benchmark-1.1.12: Ensure separate partition exists for /var/log/audit\n     ×  Mount /var/log/audit is expected to be mounted\n     \n     Mount /var/log/audit is not mounted\n\n  ×  cis-dil-benchmark-1.1.13: Ensure separate partition exists for /home\n     ×  Mount /home is expected to be mounted\n     \n     Mount /home is not mounted\n\n  ↺  cis-dil-benchmark-1.1.14: Ensure nodev option set on /home partition\n     ↺  Skipped control due to only_if condition: /home is mounted\n  ✔  cis-dil-benchmark-1.1.15: Ensure nodev option set on /dev/shm partition\n     ✔  Mount /dev/shm options is expected to include \"nodev\"\n  ✔  cis-dil-benchmark-1.1.16: Ensure nosuid option set on /dev/shm partitionrun\n     ✔  Mount /dev/shm options is expected to include \"nosuid\"\n  ×  cis-dil-benchmark-1.1.17: Ensure noexec option set on /dev/shm partition\n     ×  Mount /dev/shm options is expected to include \"noexec\"\n     expected [\"rw\", \"nosuid\", \"nodev\", \"seclabel\"] to include \"noexec\"\n  ↺  cis-dil-benchmark-1.1.18: Ensure nodev option set on removable media partitions\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-1.1.19: Ensure nosuid option set on removable media partitions\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-1.1.20: Ensure noexec option set on removable media partitions\n     ↺  Not implemented\n  ✔  cis-dil-benchmark-1.1.21: Ensure sticky bit is set on all world-writable directories\n     ✔  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -type d ( -perm -0002 -a ! -perm -1000 )` stdout is expected to cmp == \"\"\n  ✔  cis-dil-benchmark-1.1.22: Disable Automounting\n     ✔  Service autofs is expected not to be enabled\n     ✔  Service autofs is expected not to be running\n     ✔  Service autofs is expected not to be enabled\n     ✔  Service autofs is expected not to be running\n  ×  cis-dil-benchmark-1.1.23: Disable USB Storage (1 failed)\n     ✔  Kernel Module usb_storage is expected not to be loaded\n     ×  Kernel Module usb_storage is expected to be disabled\n     expected `Kernel Module usb_storage.disabled?` to be truthy, got false\n  ↺  cis-dil-benchmark-1.2.1: Ensure package manager repositories are configured\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-1.2.2: Ensure GPG keys are configured\n     ↺  Not implemented\n  ×  cis-dil-benchmark-1.3.1: Ensure AIDE is installed (2 failed)\n     ×  System Package aide is expected to be installed\n     expected that `System Package aide` is installed\n     ×  Command: `aide` is expected to exist\n     expected Command: `aide` to exist\n  ×  cis-dil-benchmark-1.3.2: Ensure filesystem integrity is regularly checked (4 failed)\n     ×  File /var/spool/cron/crontabs/root content is expected to match /aide (--check|-C)/\n     expected nil to match /aide (--check|-C)/\n     ×  File /var/spool/cron/root content is expected to match /aide (--check|-C)/\n     expected nil to match /aide (--check|-C)/\n     ×  File /etc/crontab content is expected to match /aide (--check|-C)/\n     expected nil to match /aide (--check|-C)/\n     ×  File /etc/cron.weekly/mdadm content is expected to match /aide (--check|-C)/\n     expected \"#!/bin/sh\\n# This requires that AUTOCHECK is true in /etc/default/mdadm\\nif [ -x /usr/sbin/checkarray ] && [ $(date +\\\\%d) -le 7 ]; then\\n\\t/usr/sbin/checkarray --cron --all --idle --quiet\\nfi\\n\" to match /aide (--check|-C)/\n     Diff:\n     @@ -1,5 +1,9 @@\n     -/aide (--check|-C)/\n     +#!/bin/sh\n     +# This requires that AUTOCHECK is true in /etc/default/mdadm\n     +if [ -x /usr/sbin/checkarray ] && [ $(date +\\%d) -le 7 ]; then\n     +\t/usr/sbin/checkarray --cron --all --idle --quiet\n     +fi\n\n  ×  cis-dil-benchmark-1.4.1: Ensure permissions on bootloader config are configured (22 failed)\n     ×  File /boot/grub/grub.conf is expected to exist\n     expected File /boot/grub/grub.conf to exist\n     ✔  File /boot/grub/grub.conf is expected not to be readable by group\n     ✔  File /boot/grub/grub.conf is expected not to be writable by group\n     ✔  File /boot/grub/grub.conf is expected not to be executable by group\n     ✔  File /boot/grub/grub.conf is expected not to be readable by other\n     ✔  File /boot/grub/grub.conf is expected not to be writable by other\n     ✔  File /boot/grub/grub.conf is expected not to be executable by other\n     ×  File /boot/grub/grub.conf gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/grub.conf uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/grub.cfg is expected to exist\n     expected File /boot/grub/grub.cfg to exist\n     ✔  File /boot/grub/grub.cfg is expected not to be readable by group\n     ✔  File /boot/grub/grub.cfg is expected not to be writable by group\n     ✔  File /boot/grub/grub.cfg is expected not to be executable by group\n     ✔  File /boot/grub/grub.cfg is expected not to be readable by other\n     ✔  File /boot/grub/grub.cfg is expected not to be writable by other\n     ✔  File /boot/grub/grub.cfg is expected not to be executable by other\n     ×  File /boot/grub/grub.cfg gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/grub.cfg uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/menu.lst is expected to exist\n     expected File /boot/grub/menu.lst to exist\n     ✔  File /boot/grub/menu.lst is expected not to be readable by group\n     ✔  File /boot/grub/menu.lst is expected not to be writable by group\n     ✔  File /boot/grub/menu.lst is expected not to be executable by group\n     ✔  File /boot/grub/menu.lst is expected not to be readable by other\n     ✔  File /boot/grub/menu.lst is expected not to be writable by other\n     ✔  File /boot/grub/menu.lst is expected not to be executable by other\n     ×  File /boot/grub/menu.lst gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub/menu.lst uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.conf is expected to exist\n     expected File /boot/boot/grub/grub.conf to exist\n     ✔  File /boot/boot/grub/grub.conf is expected not to be readable by group\n     ✔  File /boot/boot/grub/grub.conf is expected not to be writable by group\n     ✔  File /boot/boot/grub/grub.conf is expected not to be executable by group\n     ✔  File /boot/boot/grub/grub.conf is expected not to be readable by other\n     ✔  File /boot/boot/grub/grub.conf is expected not to be writable by other\n     ✔  File /boot/boot/grub/grub.conf is expected not to be executable by other\n     ×  File /boot/boot/grub/grub.conf gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.conf uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.cfg is expected to exist\n     expected File /boot/boot/grub/grub.cfg to exist\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be readable by group\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be writable by group\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be executable by group\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be readable by other\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be writable by other\n     ✔  File /boot/boot/grub/grub.cfg is expected not to be executable by other\n     ×  File /boot/boot/grub/grub.cfg gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/boot/grub/grub.cfg uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ✔  File /boot/boot/grub/menu.lst is expected to exist\n     ×  File /boot/boot/grub/menu.lst is expected not to be readable by group\n     expected File /boot/boot/grub/menu.lst not to be readable by group\n     ✔  File /boot/boot/grub/menu.lst is expected not to be writable by group\n     ×  File /boot/boot/grub/menu.lst is expected not to be executable by group\n     expected File /boot/boot/grub/menu.lst not to be executable by group\n     ×  File /boot/boot/grub/menu.lst is expected not to be readable by other\n     expected File /boot/boot/grub/menu.lst not to be readable by other\n     ✔  File /boot/boot/grub/menu.lst is expected not to be writable by other\n     ×  File /boot/boot/grub/menu.lst is expected not to be executable by other\n     expected File /boot/boot/grub/menu.lst not to be executable by other\n     ✔  File /boot/boot/grub/menu.lst gid is expected to cmp == 0\n     ✔  File /boot/boot/grub/menu.lst uid is expected to cmp == 0\n     ×  File /boot/grub2/grub.cfg is expected to exist\n     expected File /boot/grub2/grub.cfg to exist\n     ✔  File /boot/grub2/grub.cfg is expected not to be readable by group\n     ✔  File /boot/grub2/grub.cfg is expected not to be writable by group\n     ✔  File /boot/grub2/grub.cfg is expected not to be executable by group\n     ✔  File /boot/grub2/grub.cfg is expected not to be readable by other\n     ✔  File /boot/grub2/grub.cfg is expected not to be writable by other\n     ✔  File /boot/grub2/grub.cfg is expected not to be executable by other\n     ×  File /boot/grub2/grub.cfg gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /boot/grub2/grub.cfg uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-1.4.2: Ensure bootloader password is set (14 failed)\n     ×  File /boot/grub/grub.conf content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub/grub.conf content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/grub/grub.cfg content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub/grub.cfg content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/grub/menu.lst content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub/menu.lst content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/boot/grub/grub.conf content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/boot/grub/grub.conf content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/boot/grub/grub.cfg content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/boot/grub/grub.cfg content is expected to match /^password/\n     expected nil to match /^password/\n     ×  File /boot/boot/grub/menu.lst content is expected to match /^set superusers/\n     expected \"timeout 0\\ntitle   CoreOS GRUB2\\nroot    (hd0,0)\\nkernel  /xen/pvboot-x86_64.elf\\n\" to match /^set superusers/\n     Diff:\n     @@ -1,4 +1,7 @@\n     -/^set superusers/\n     +timeout 0\n     +title   CoreOS GRUB2\n     +root    (hd0,0)\n     +kernel  /xen/pvboot-x86_64.elf\n\n     ×  File /boot/boot/grub/menu.lst content is expected to match /^password/\n     expected \"timeout 0\\ntitle   CoreOS GRUB2\\nroot    (hd0,0)\\nkernel  /xen/pvboot-x86_64.elf\\n\" to match /^password/\n     Diff:\n     @@ -1,4 +1,7 @@\n     -/^password/\n     +timeout 0\n     +title   CoreOS GRUB2\n     +root    (hd0,0)\n     +kernel  /xen/pvboot-x86_64.elf\n\n     ×  File /boot/grub2/grub.cfg content is expected to match /^set superusers/\n     expected nil to match /^set superusers/\n     ×  File /boot/grub2/grub.cfg content is expected to match /^password/\n     expected nil to match /^password/\n  ×  cis-dil-benchmark-1.4.3: Ensure authentication required for single user mode (3 failed)\n     ×  /etc/shadow with user == \"root\" passwords is expected not to include \"*\"\n     expected [\"*\"] not to include \"*\"\n     ✔  /etc/shadow with user == \"root\" passwords is expected not to include \"!\"\n     ×  File /etc/inittab content is expected to match /^~~:S:respawn:\\/sbin\\/sulogin/\n     expected nil to match /^~~:S:respawn:\\/sbin\\/sulogin/\n     ×  File /etc/sysconfig/init content is expected to match /^SINGLE=\\/sbin\\/sulogin$/\n     expected nil to match /^SINGLE=\\/sbin\\/sulogin$/\n  ↺  cis-dil-benchmark-1.4.4: Ensure interactive boot is not enabled\n     ↺  Not implemented\n  ×  cis-dil-benchmark-1.5.1: Ensure core dumps are restricted (2 failed)\n     ×  File /etc/security/limits.conf content is expected to match /^\\s*\\*\\s+hard\\s+core\\s+0\\s*(?:#.*)?$/\n     expected \"# /etc/security/limits.conf\\n#\\n#Each line describes a limit for a user in the form:\\n#\\n#<domain>  ...          hard    nproc           0\\n\\#@student        -       maxlogins       4\\n\\n# End of file\\n\" to match /^\\s*\\*\\s+hard\\s+core\\s+0\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,50 +1,99 @@\n     -/^\\s*\\*\\s+hard\\s+core\\s+0\\s*(?:#.*)?$/\n     +# /etc/security/limits.conf\n     +#\n     +#Each line describes a limit for a user in the form:\n     +#\n     +#<domain>        <type>  <item>  <value>\n     +#\n     +#Where:\n     +#<domain> can be:\n     +#        - a user name\n     +#        - a group name, with @group syntax\n     +#        - the wildcard *, for default entry\n     +#        - the wildcard %, can be also used with %group syntax,\n     +#                 for maxlogin limit\n     +#\n     +#<type> can have the two values:\n     +#        - \"soft\" for enforcing the soft limits\n     +#        - \"hard\" for enforcing hard limits\n     +#\n     +#<item> can be one of the following:\n     +#        - core - limits the core file size (KB)\n     +#        - data - max data size (KB)\n     +#        - fsize - maximum filesize (KB)\n     +#        - memlock - max locked-in-memory address space (KB)\n     +#        - nofile - max number of open file descriptors\n     +#        - rss - max resident set size (KB)\n     +#        - stack - max stack size (KB)\n     +#        - cpu - max CPU time (MIN)\n     +#        - nproc - max number of processes\n     +#        - as - address space limit (KB)\n     +#        - maxlogins - max number of logins for this user\n     +#        - maxsyslogins - max number of logins on the system\n     +#        - priority - the priority to run user process with\n     +#        - locks - max number of file locks the user can hold\n     +#        - sigpending - max number of pending signals\n     +#        - msgqueue - max memory used by POSIX message queues (bytes)\n     +#        - nice - max nice priority allowed to raise to values: [-20, 19]\n     +#        - rtprio - max realtime priority\n     +#\n     +#<domain>      <type>  <item>         <value>\n     +#\n     +\n     +#*               soft    core            0\n     +#*               hard    rss             10000\n     +#@student        hard    nproc           20\n     +#@faculty        soft    nproc           20\n     +#@faculty        hard    nproc           50\n     +#ftp             hard    nproc           0\n     +#@student        -       maxlogins       4\n     +\n     +# End of file\n\n     ×  Kernel Parameter fs.suid_dumpable value is expected to eq 0\n     \n     expected: 0\n          got: 2\n     \n     (compared using ==)\n\n  ✔  cis-dil-benchmark-1.5.2: Ensure XD/NX support is enabled\n     ✔  Command: `dmesg | grep NX` stdout is expected to match /NX \\(Execute Disable\\) protection: active/\n  ✔  cis-dil-benchmark-1.5.3: Ensure address space layout randomization (ASLR) is enabled\n     ✔  Kernel Parameter kernel.randomize_va_space value is expected to eq 2\n  ✔  cis-dil-benchmark-1.5.4: Ensure prelink is disabled\n     ✔  System Package prelink is expected not to be installed\n     ✔  Command: `prelink` is expected not to exist\n  ×  cis-dil-benchmark-1.6.1.1: Ensure SELinux or AppArmor are installed (3 failed)\n     ×  System Package libselinux is expected to be installed\n     expected that `System Package libselinux` is installed\n     ×  System Package libselinux1 is expected to be installed\n     expected that `System Package libselinux1` is installed\n     ×  System Package apparmor is expected to be installed\n     expected that `System Package apparmor` is installed\n  ✔  cis-dil-benchmark-1.6.2.1: Ensure SELinux is not disabled in bootloader configuration\n     ✔  File /boot/grub2/grub.cfg content is expected not to match /selinux=0/\n     ✔  File /boot/grub2/grub.cfg content is expected not to match /enforcing=0/\n     ✔  File /boot/grub/menu.lst content is expected not to match /selinux=0/\n     ✔  File /boot/grub/menu.lst content is expected not to match /enforcing=0/\n  ×  cis-dil-benchmark-1.6.2.2: Ensure the SELinux state is enforcing (3 failed)\n     ×  File /etc/selinux/config content is expected to match /^SELINUX=enforcing\\s*(?:#.*)?$/\n     expected \"# This file controls the state of SELinux on the system on boot.\\n\\n# SELINUX can take one of these ...th Multi-Category Security \\n#\\t           (mls, but only one sensitivity level)\\nSELINUXTYPE=mcs\\n\" to match /^SELINUX=enforcing\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,15 +1,29 @@\n     -/^SELINUX=enforcing\\s*(?:#.*)?$/\n     +# This file controls the state of SELinux on the system on boot.\n     +\n     +# SELINUX can take one of these three values:\n     +#\tenforcing - SELinux security policy is enforced.\n     +#\tpermissive - SELinux prints warnings instead of enforcing.\n     +#\tdisabled - No SELinux policy is loaded.\n     +SELINUX=permissive\n     +\n     +# SELINUXTYPE can take one of these four values:\n     +#\ttargeted - Only targeted network daemons are protected.\n     +#\tstrict   - Full SELinux protection.\n     +#\tmls      - Full SELinux protection with Multi-Level Security\n     +#\tmcs      - Full SELinux protection with Multi-Category Security \n     +#\t           (mls, but only one sensitivity level)\n     +SELINUXTYPE=mcs\n\n     ✔  Command: `sestatus` stdout is expected to match /SELinux status:\\s+enabled/\n     ×  Command: `sestatus` stdout is expected to match /Current mode:\\s+enforcing/\n     expected \"SELinux status:                 enabled\\nSELinuxfs mount:                /sys/fs/selinux\\nSELinux ro...             enabled\\nPolicy deny_unknown status:     allowed\\nMax kernel policy version:      31\\n\" to match /Current mode:\\s+enforcing/\n     Diff:\n     @@ -1,9 +1,17 @@\n     -/Current mode:\\s+enforcing/\n     +SELinux status:                 enabled\n     +SELinuxfs mount:                /sys/fs/selinux\n     +SELinux root directory:         /etc/selinux\n     +Loaded policy name:             mcs\n     +Current mode:                   permissive\n     +Mode from config file:          permissive\n     +Policy MLS status:              enabled\n     +Policy deny_unknown status:     allowed\n     +Max kernel policy version:      31\n\n     ×  Command: `sestatus` stdout is expected to match /Mode from config file:\\s+enforcing/\n     expected \"SELinux status:                 enabled\\nSELinuxfs mount:                /sys/fs/selinux\\nSELinux ro...             enabled\\nPolicy deny_unknown status:     allowed\\nMax kernel policy version:      31\\n\" to match /Mode from config file:\\s+enforcing/\n     Diff:\n     @@ -1,9 +1,17 @@\n     -/Mode from config file:\\s+enforcing/\n     +SELinux status:                 enabled\n     +SELinuxfs mount:                /sys/fs/selinux\n     +SELinux root directory:         /etc/selinux\n     +Loaded policy name:             mcs\n     +Current mode:                   permissive\n     +Mode from config file:          permissive\n     +Policy MLS status:              enabled\n     +Policy deny_unknown status:     allowed\n     +Max kernel policy version:      31\n\n  ×  cis-dil-benchmark-1.6.2.3: Ensure SELinux policy is configured (2 failed)\n     ×  File /etc/selinux/config content is expected to match /^SELINUXTYPE=(targeted|mls)\\s*(?:#.*)?$/\n     expected \"# This file controls the state of SELinux on the system on boot.\\n\\n# SELINUX can take one of these ...th Multi-Category Security \\n#\\t           (mls, but only one sensitivity level)\\nSELINUXTYPE=mcs\\n\" to match /^SELINUXTYPE=(targeted|mls)\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,15 +1,29 @@\n     -/^SELINUXTYPE=(targeted|mls)\\s*(?:#.*)?$/\n     +# This file controls the state of SELinux on the system on boot.\n     +\n     +# SELINUX can take one of these three values:\n     +#\tenforcing - SELinux security policy is enforced.\n     +#\tpermissive - SELinux prints warnings instead of enforcing.\n     +#\tdisabled - No SELinux policy is loaded.\n     +SELINUX=permissive\n     +\n     +# SELINUXTYPE can take one of these four values:\n     +#\ttargeted - Only targeted network daemons are protected.\n     +#\tstrict   - Full SELinux protection.\n     +#\tmls      - Full SELinux protection with Multi-Level Security\n     +#\tmcs      - Full SELinux protection with Multi-Category Security \n     +#\t           (mls, but only one sensitivity level)\n     +SELINUXTYPE=mcs\n\n     ×  Command: `sestatus` stdout is expected to match /Policy from config file:\\s+(targeted|mls)/\n     expected \"SELinux status:                 enabled\\nSELinuxfs mount:                /sys/fs/selinux\\nSELinux ro...             enabled\\nPolicy deny_unknown status:     allowed\\nMax kernel policy version:      31\\n\" to match /Policy from config file:\\s+(targeted|mls)/\n     Diff:\n     @@ -1,9 +1,17 @@\n     -/Policy from config file:\\s+(targeted|mls)/\n     +SELinux status:                 enabled\n     +SELinuxfs mount:                /sys/fs/selinux\n     +SELinux root directory:         /etc/selinux\n     +Loaded policy name:             mcs\n     +Current mode:                   permissive\n     +Mode from config file:          permissive\n     +Policy MLS status:              enabled\n     +Policy deny_unknown status:     allowed\n     +Max kernel policy version:      31\n\n  ↺  cis-dil-benchmark-1.6.2.4: Ensure SETroubleshoot is not installed (1 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ✔  Command: `setroubleshoot` is expected not to exist\n  ↺  cis-dil-benchmark-1.6.2.5: Ensure the MCS Translation Service (mcstrans) is not installed (1 failed) (1 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ×  Command: `mcstransd` is expected not to exist\n     expected Command: `mcstransd` not to exist\n  ✔  cis-dil-benchmark-1.6.2.6: Ensure no unconfined daemons exist\n     ✔  Command: `ps -eZ | grep -E \"initrc\" | grep -E -v -w \"tr|ps|grep|bash|awk\" | tr ':' ' ' | awk '{ print $NF }'` stdout is expected to eq \"\"\n  ↺  cis-dil-benchmark-1.6.3.1: Ensure AppArmor is not disabled in bootloader configuration\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.6.3.2: Ensure all AppArmor Profiles are enforcing\n     ↺  Skipped control due to only_if condition.\n  ✔  cis-dil-benchmark-1.7.1.1: Ensure message of the day is configured properly\n     ✔  Command: `grep -E -i '(\\v|\\r|\\m|\\s|$(grep '^ID=' /etc/os-release | cut -d= -f2 | sed -e 's/\"//g'))' /etc/motd` stdout is expected to eq \"\"\n  ✔  cis-dil-benchmark-1.7.1.2: Ensure local login warning banner is configured properly\n     ✔  Command: `grep -E -i '(\\v|\\r|\\m|\\s|$(grep '^ID=' /etc/os-release | cut -d= -f2 | sed -e 's/\"//g'))' /etc/issue` stdout is expected to eq \"\"\n  ✔  cis-dil-benchmark-1.7.1.3: Ensure remote login warning banner is configured properly\n     ✔  Command: `grep -E -i '(\\v|\\r|\\m|\\s|$(grep '^ID=' /etc/os-release | cut -d= -f2 | sed -e 's/\"//g'))' /etc/issue.net` stdout is expected to eq \"\"\n  ✔  cis-dil-benchmark-1.7.1.4: Ensure permissions on /etc/motd are configured\n     ✔  File /etc/motd group is expected to eq \"root\"\n     ✔  File /etc/motd owner is expected to eq \"root\"\n     ✔  File /etc/motd mode is expected to cmp == \"0644\"\n  ✔  cis-dil-benchmark-1.7.1.5: Ensure permissions on /etc/issue are configured\n     ✔  File /etc/issue group is expected to eq \"root\"\n     ✔  File /etc/issue owner is expected to eq \"root\"\n     ✔  File /etc/issue mode is expected to cmp == \"0644\"\n  ×  cis-dil-benchmark-1.7.1.6: Ensure permissions on /etc/issue.net are configured (3 failed)\n     ×  File /etc/issue.net group is expected to eq \"root\"\n     \n     expected: \"root\"\n          got: nil\n     \n     (compared using ==)\n\n     ×  File /etc/issue.net owner is expected to eq \"root\"\n     \n     expected: \"root\"\n          got: nil\n     \n     (compared using ==)\n\n     ×  File /etc/issue.net mode is expected to cmp == \"0644\"\n     can't convert nil into Integer\n  ↺  cis-dil-benchmark-1.7.2: Ensure GDM login banner is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-1.8: Ensure updates, patches, and additional security software are installed\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-2.1.1: Ensure chargen services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.2: Ensure daytime services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.3: Ensure discard services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.4: Ensure echo services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.5: Ensure time services are not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.6: Ensure rsh server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.7: Ensure talk server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.8: Ensure telnet server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ↺  cis-dil-benchmark-2.1.9: Ensure tftp server is not enabled\n     ↺  Skipped control due to only_if condition: inetd/xinetd config exists\n  ✔  cis-dil-benchmark-2.1.10: Ensure xinetd is not enabled\n     ✔  Service xinetd is expected not to be enabled\n     ✔  Service xinetd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.1.1: Ensure time synchronization is in use\n     ✔  Command: `ntpd` is expected to exist\n  ×  cis-dil-benchmark-2.2.1.2: Ensure ntp is configured (4 failed)\n     ✔  ntp.conf server is expected not to eq nil\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*kod(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*nomodify(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*notrap(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*nopeer(?:\\s+|\\s?\")/\n     ✔  [\"default nomodify nopeer noquery notrap limited kod\", \"127.0.0.1\", \"[::1]\"] is expected to match /default\\s+(\\S+\\s+)*noquery(?:\\s+|\\s?\")/\n     ×  File /etc/init.d/ntp content is expected to match /^RUNASUSER=ntp\\s*(?:#.*)?$/\n     expected nil to match /^RUNASUSER=ntp\\s*(?:#.*)?$/\n     ×  File /etc/init.d/ntpd content is expected to match /daemon\\s+(\\S+\\s+)-u ntp:ntp(?:\\s+|\\s?\")/\n     expected nil to match /daemon\\s+(\\S+\\s+)-u ntp:ntp(?:\\s+|\\s?\")/\n     ×  File /etc/sysconfig/ntpd content is expected to match /^OPTIONS=\"(?:.)?-u ntp:ntp\\s*(?:.)?\"\\s*(?:#.*)?$/\n     expected nil to match /^OPTIONS=\"(?:.)?-u ntp:ntp\\s*(?:.)?\"\\s*(?:#.*)?$/\n     ×  File /usr/lib/systemd/system/ntpd.service content is expected to match /^ExecStart=\\/usr\\/s?bin\\/ntpd (?:.)?-u ntp:ntp\\s*(?:.)?$/\n     expected \"[Unit]\\nDescription=Network Time Service\\nAfter=ntpdate.service sntp.service\\nConflicts=systemd-time...tp/ntp.drift -u ntp:ntp\\nPrivateTmp=true\\nRestart=always\\n\\n[Install]\\nWantedBy=multi-user.target\\n\" to match /^ExecStart=\\/usr\\/s?bin\\/ntpd (?:.)?-u ntp:ntp\\s*(?:.)?$/\n     Diff:\n     @@ -1,12 +1,23 @@\n     -/^ExecStart=\\/usr\\/s?bin\\/ntpd (?:.)?-u ntp:ntp\\s*(?:.)?$/\n     +[Unit]\n     +Description=Network Time Service\n     +After=ntpdate.service sntp.service\n     +Conflicts=systemd-timesyncd.service\n     +\n     +[Service]\n     +ExecStart=/usr/sbin/ntpd -g -n -f /var/lib/ntp/ntp.drift -u ntp:ntp\n     +PrivateTmp=true\n     +Restart=always\n     +\n     +[Install]\n     +WantedBy=multi-user.target\n\n  ↺  cis-dil-benchmark-2.2.1.3: Ensure chrony is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-2.2.1.4: Ensure systemd-timesyncd is configured\n     ↺  Skipped control due to only_if condition.\n  ↺  cis-dil-benchmark-2.2.2: Ensure X Window System is not installed (2 skipped)\n     ↺  The packages resource is not yet supported on OS coreos\n     ↺  The packages resource is not yet supported on OS coreos\n  ✔  cis-dil-benchmark-2.2.3: Ensure Avahi Server is not enabled\n     ✔  Service avahi-daemon is expected not to be enabled\n     ✔  Service avahi-daemon is expected not to be running\n  ✔  cis-dil-benchmark-2.2.4: Ensure CUPS is not enabled\n     ✔  Service cups is expected not to be enabled\n     ✔  Service cups is expected not to be running\n  ✔  cis-dil-benchmark-2.2.5: Ensure DHCP Server is not enabled\n     ✔  Service isc-dhcp-server is expected not to be enabled\n     ✔  Service isc-dhcp-server is expected not to be running\n     ✔  Service isc-dhcp-server6 is expected not to be enabled\n     ✔  Service isc-dhcp-server6 is expected not to be running\n     ✔  Service dhcpd is expected not to be enabled\n     ✔  Service dhcpd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.6: Ensure LDAP server is not enabled\n     ✔  Service slapd is expected not to be enabled\n     ✔  Service slapd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.7: Ensure NFS and RPC are not enabled\n     ✔  Service nfs-kernel-server is expected not to be enabled\n     ✔  Service nfs-kernel-server is expected not to be running\n     ✔  Service nfs is expected not to be enabled\n     ✔  Service nfs is expected not to be running\n     ✔  Service rpcbind is expected not to be enabled\n     ✔  Service rpcbind is expected not to be running\n  ✔  cis-dil-benchmark-2.2.8: Ensure DNS Server is not enabled\n     ✔  Service named is expected not to be enabled\n     ✔  Service named is expected not to be running\n     ✔  Service bind is expected not to be enabled\n     ✔  Service bind is expected not to be running\n     ✔  Service bind9 is expected not to be enabled\n     ✔  Service bind9 is expected not to be running\n  ✔  cis-dil-benchmark-2.2.9: Ensure FTP Server is not enabled\n     ✔  Service vsftpd is expected not to be enabled\n     ✔  Service vsftpd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.10: Ensure HTTP server is not enabled\n     ✔  Service apache is expected not to be enabled\n     ✔  Service apache is expected not to be running\n     ✔  Service apache2 is expected not to be enabled\n     ✔  Service apache2 is expected not to be running\n     ✔  Service httpd is expected not to be enabled\n     ✔  Service httpd is expected not to be running\n     ✔  Service lighttpd is expected not to be enabled\n     ✔  Service lighttpd is expected not to be running\n     ✔  Service nginx is expected not to be enabled\n     ✔  Service nginx is expected not to be running\n  ✔  cis-dil-benchmark-2.2.11: Ensure IMAP and POP3 server is not enabled\n     ✔  Service dovecot is expected not to be enabled\n     ✔  Service dovecot is expected not to be running\n     ✔  Service courier-imap is expected not to be enabled\n     ✔  Service courier-imap is expected not to be running\n     ✔  Service cyrus-imap is expected not to be enabled\n     ✔  Service cyrus-imap is expected not to be running\n  ✔  cis-dil-benchmark-2.2.12: Ensure Samba is not enabled\n     ✔  Service samba is expected not to be enabled\n     ✔  Service samba is expected not to be running\n     ✔  Service smb is expected not to be enabled\n     ✔  Service smb is expected not to be running\n     ✔  Service smbd is expected not to be enabled\n     ✔  Service smbd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.13: Ensure HTTP Proxy Server is not enabled\n     ✔  Service squid is expected not to be enabled\n     ✔  Service squid is expected not to be running\n     ✔  Service squid3 is expected not to be enabled\n     ✔  Service squid3 is expected not to be running\n  ✔  cis-dil-benchmark-2.2.14: Ensure SNMP Server is not enabled\n     ✔  Service snmpd is expected not to be enabled\n     ✔  Service snmpd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.15: Ensure mail transfer agent is configured for local-only mode\n     ✔  Port 25 with address !~ /^(127\\.0\\.0\\.1|::1)$/ entries is expected to be empty\n  ✔  cis-dil-benchmark-2.2.16: Ensure rsync service is not enabled\n     ✔  Service rsync is expected not to be enabled\n     ✔  Service rsync is expected not to be running\n     ✔  Service rsyncd is expected not to be enabled\n     ✔  Service rsyncd is expected not to be running\n  ✔  cis-dil-benchmark-2.2.17: Ensure NIS Server is not enabled\n     ✔  Service nis is expected not to be enabled\n     ✔  Service nis is expected not to be running\n     ✔  Service ypserv is expected not to be enabled\n     ✔  Service ypserv is expected not to be running\n  ↺  cis-dil-benchmark-2.3.1: Ensure NIS Client is not installed (2 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.2: Ensure rsh client is not installed (3 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.3: Ensure talk client is not installed\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.4: Ensure telnet client is not installed\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-2.3.5: Ensure LDAP client is not installed (3 skipped)\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n     ↺  The `package` resource is not supported on your OS yet.\n  ×  cis-dil-benchmark-3.1.1: Ensure IP forwarding is disabled (1 failed)\n     ✔  Kernel Parameter net.ipv4.ip_forward value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.ip_forward value is expected to cmp == 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using `cmp` matcher)\n\n     ✔  Kernel Parameter net.ipv6.conf.all.forwarding value is expected not to be nil\n     ✔  Kernel Parameter net.ipv6.conf.all.forwarding value is expected to cmp == 0\n  ×  cis-dil-benchmark-3.1.2: Ensure packet redirect sending is disabled (2 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.send_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.all.send_redirects value is expected to cmp == 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using `cmp` matcher)\n\n     ✔  Kernel Parameter net.ipv4.conf.default.send_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.send_redirects value is expected to cmp == 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using `cmp` matcher)\n\n  ✔  cis-dil-benchmark-3.2.1: Ensure source routed packets are not accepted\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_source_route value is expected to eq 0\n     ✔  Kernel Parameter net.ipv4.conf.default.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.default.accept_source_route value is expected to eq 0\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_source_route value is expected to eq 0\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_source_route value is expected not to be nil\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_source_route value is expected to eq 0\n  ×  cis-dil-benchmark-3.2.2: Ensure ICMP redirects are not accepted (3 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_redirects value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.all.accept_redirects value is expected to eq 0\n     ✔  Kernel Parameter net.ipv4.conf.default.accept_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.accept_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.all.accept_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.default.accept_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-3.2.3: Ensure secure ICMP redirects are not accepted (2 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.secure_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.all.secure_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv4.conf.default.secure_redirects value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.secure_redirects value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-3.2.4: Ensure suspicious packets are logged (2 failed)\n     ✔  Kernel Parameter net.ipv4.conf.all.log_martians value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.all.log_martians value is expected to eq 1\n     \n     expected: 1\n          got: 0\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv4.conf.default.log_martians value is expected not to be nil\n     ×  Kernel Parameter net.ipv4.conf.default.log_martians value is expected to eq 1\n     \n     expected: 1\n          got: 0\n     \n     (compared using ==)\n\n  ✔  cis-dil-benchmark-3.2.5: Ensure broadcast ICMP requests are ignored\n     ✔  Kernel Parameter net.ipv4.icmp_echo_ignore_broadcasts value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.icmp_echo_ignore_broadcasts value is expected to eq 1\n  ✔  cis-dil-benchmark-3.2.6: Ensure bogus ICMP responses are ignored\n     ✔  Kernel Parameter net.ipv4.icmp_ignore_bogus_error_responses value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.icmp_ignore_bogus_error_responses value is expected to eq 1\n  ✔  cis-dil-benchmark-3.2.7: Ensure Reverse Path Filtering is enabled\n     ✔  Kernel Parameter net.ipv4.conf.all.rp_filter value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.all.rp_filter value is expected to eq 1\n     ✔  Kernel Parameter net.ipv4.conf.default.rp_filter value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.conf.default.rp_filter value is expected to eq 1\n  ✔  cis-dil-benchmark-3.2.8: Ensure TCP SYN Cookies is enabled\n     ✔  Kernel Parameter net.ipv4.tcp_syncookies value is expected not to be nil\n     ✔  Kernel Parameter net.ipv4.tcp_syncookies value is expected to eq 1\n  ×  cis-dil-benchmark-3.2.9: Ensure IPv6 router advertisements are not accepted (2 failed)\n     ✔  Kernel Parameter net.ipv6.conf.all.accept_ra value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.all.accept_ra value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n     ✔  Kernel Parameter net.ipv6.conf.default.accept_ra value is expected not to be nil\n     ×  Kernel Parameter net.ipv6.conf.default.accept_ra value is expected to eq 0\n     \n     expected: 0\n          got: 1\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-3.3.1: Ensure TCP Wrappers is installed (2 failed)\n     ×  System Package tcpd is expected to be installed\n     expected that `System Package tcpd` is installed\n     ×  System Package tcp_wrappers is expected to be installed\n     expected that `System Package tcp_wrappers` is installed\n  ×  cis-dil-benchmark-3.3.2: Ensure /etc/hosts.allow is configured\n     ×  File /etc/hosts.allow is expected to exist\n     expected File /etc/hosts.allow to exist\n  ×  cis-dil-benchmark-3.3.3: Ensure /etc/hosts.deny is configured\n     ×  File /etc/hosts.deny content is expected to match /^ALL: ALL/\n     expected nil to match /^ALL: ALL/\n  ×  cis-dil-benchmark-3.3.4: Ensure permissions on /etc/hosts.allow are configured (5 failed)\n     ×  File /etc/hosts.allow is expected to exist\n     expected File /etc/hosts.allow to exist\n     ×  File /etc/hosts.allow is expected to be file\n     expected `File /etc/hosts.allow.file?` to be truthy, got false\n     ×  File /etc/hosts.allow owner is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.allow group is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.allow mode is expected to cmp == \"0644\"\n     can't convert nil into Integer\n  ×  cis-dil-benchmark-3.3.5: Ensure permissions on /etc/hosts.deny are configured (5 failed)\n     ×  File /etc/hosts.deny is expected to exist\n     expected File /etc/hosts.deny to exist\n     ×  File /etc/hosts.deny is expected to be file\n     expected `File /etc/hosts.deny.file?` to be truthy, got false\n     ×  File /etc/hosts.deny owner is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.deny group is expected to cmp == \"root\"\n     \n     expected: root\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/hosts.deny mode is expected to cmp == \"0644\"\n     can't convert nil into Integer\n  ×  cis-dil-benchmark-3.4.1: Ensure DCCP is disabled (1 failed)\n     ✔  Kernel Module dccp is expected not to be loaded\n     ×  Kernel Module dccp is expected to be disabled\n     expected `Kernel Module dccp.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-3.4.2: Ensure SCTP is disabled (1 failed)\n     ✔  Kernel Module sctp is expected not to be loaded\n     ×  Kernel Module sctp is expected to be disabled\n     expected `Kernel Module sctp.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-3.4.3: Ensure RDS is disabled (1 failed)\n     ✔  Kernel Module rds is expected not to be loaded\n     ×  Kernel Module rds is expected to be disabled\n     expected `Kernel Module rds.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-3.4.4: Ensure TIPC is disabled (1 failed)\n     ✔  Kernel Module tipc is expected not to be loaded\n     ×  Kernel Module tipc is expected to be disabled\n     expected `Kernel Module tipc.disabled?` to be truthy, got false\n  ×  cis-dil-benchmark-3.5.1.1: Ensure IPv6 default deny firewall policy (3 failed)\n     ×  Ip6tables is expected to have rule \"-P INPUT DROP\"\n     expected Ip6tables to have rule \"-P INPUT DROP\"\n     ×  Ip6tables is expected to have rule \"-P OUTPUT DROP\"\n     expected Ip6tables to have rule \"-P OUTPUT DROP\"\n     ×  Ip6tables is expected to have rule \"-P FORWARD DROP\"\n     expected Ip6tables to have rule \"-P FORWARD DROP\"\n  ×  cis-dil-benchmark-3.5.1.2: Ensure IPv6 loopback traffic is configured (9 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s ::1)(?=.*-j DROP)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.1.3: Ensure IPv6 outbound and established connections are configured (18 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.1.4: Ensure IPv6 firewall rules exist for all open ports (2 failed)\n     ×  Firewall rule should exist for port 68 is expected to equal true\n     \n     expected true\n          got false\n\n     ×  Firewall rule should exist for port 22 is expected to equal true\n     \n     expected true\n          got false\n\n  ×  cis-dil-benchmark-3.5.2.1: Ensure default deny firewall policy (3 failed)\n     ×  Iptables is expected to have rule \"-P INPUT DROP\"\n     expected Iptables to have rule \"-P INPUT DROP\"\n     ×  Iptables is expected to have rule \"-P OUTPUT DROP\"\n     expected Iptables to have rule \"-P OUTPUT DROP\"\n     ×  Iptables is expected to have rule \"-P FORWARD DROP\"\n     expected Iptables to have rule \"-P FORWARD DROP\"\n  ×  cis-dil-benchmark-3.5.2.2: Ensure loopback traffic is configured (9 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-i lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-o lo)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-s 127\\.0\\.0\\.0\\/8)(?=.*-j DROP)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.2.3: Ensure outbound and established connections are configured (18 failed)\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p tcp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p tcp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p udp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p udp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A OUTPUT)(?=.*-p icmp)(?=.*-m state --state NEW,ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n     ×  -P INPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P INPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P INPUT ACCEPT\"\n\n     ×  -P FORWARD ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P FORWARD ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P FORWARD ACCEPT\"\n\n     ×  -P OUTPUT ACCEPT is expected to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     expected \"-P OUTPUT ACCEPT\" to match /(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     Diff:\n     @@ -1 +1 @@\n     -/(?=.*-A INPUT)(?=.*-p icmp)(?=.*-m state --state ESTABLISHED)(?=.*-j ACCEPT)/\n     +\"-P OUTPUT ACCEPT\"\n\n  ×  cis-dil-benchmark-3.5.2.4: Ensure firewall rules exist for all open ports (2 failed)\n     ×  Firewall rule should exist for port 68 is expected to equal true\n     \n     expected true\n          got false\n\n     ×  Firewall rule should exist for port 22 is expected to equal true\n     \n     expected true\n          got false\n\n  ↺  cis-dil-benchmark-3.5.3: Ensure iptables is installed\n     ↺  The `package` resource is not supported on your OS yet.\n  ↺  cis-dil-benchmark-3.6: Ensure wireless interfaces are disabled\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-3.7: Disable IPv6\n     ↺  Not implemented\n  ✔  cis-dil-benchmark-4.1.1.1: Ensure audit log storage size is configured\n     ✔  File /etc/audit/auditd.conf content is expected to match /^max_log_file = \\d+\\s*(?:#.*)?$/\n  ×  cis-dil-benchmark-4.1.1.2: Ensure system is disabled when audit logs are full (2 failed)\n     ×  File /etc/audit/auditd.conf content is expected to match /^space_left_action = email\\s*(?:#.*)?$/\n     expected \"#\\n# This file controls the configuration of the audit daemon\\n#\\n\\nlocal_events = yes\\nwrite_logs =...b5 = no\\nkrb5_principal = auditd\\n##krb5_key_file = /etc/audit/audit.key\\ndistribute_network = no\\n\" to match /^space_left_action = email\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,37 +1,73 @@\n     -/^space_left_action = email\\s*(?:#.*)?$/\n     +#\n     +# This file controls the configuration of the audit daemon\n     +#\n     +\n     +local_events = yes\n     +write_logs = yes\n     +log_file = /var/log/audit/audit.log\n     +log_group = root\n     +log_format = RAW\n     +flush = INCREMENTAL_ASYNC\n     +freq = 50\n     +max_log_file = 8\n     +num_logs = 5\n     +priority_boost = 4\n     +disp_qos = lossy\n     +dispatcher = /sbin/audispd\n     +name_format = NONE\n     +##name = mydomain\n     +max_log_file_action = ROTATE\n     +space_left = 75\n     +space_left_action = SYSLOG\n     +verify_email = yes\n     +action_mail_acct = root\n     +admin_space_left = 50\n     +admin_space_left_action = SUSPEND\n     +disk_full_action = SUSPEND\n     +disk_error_action = SUSPEND\n     +use_libwrap = yes\n     +##tcp_listen_port = 60\n     +tcp_listen_queue = 5\n     +tcp_max_per_addr = 1\n     +##tcp_client_ports = 1024-65535\n     +tcp_client_max_idle = 0\n     +enable_krb5 = no\n     +krb5_principal = auditd\n     +##krb5_key_file = /etc/audit/audit.key\n     +distribute_network = no\n\n     ✔  File /etc/audit/auditd.conf content is expected to match /^action_mail_acct = root\\s*(?:#.*)?$/\n     ×  File /etc/audit/auditd.conf content is expected to match /^admin_space_left_action = halt\\s*(?:#.*)?$/\n     expected \"#\\n# This file controls the configuration of the audit daemon\\n#\\n\\nlocal_events = yes\\nwrite_logs =...b5 = no\\nkrb5_principal = auditd\\n##krb5_key_file = /etc/audit/audit.key\\ndistribute_network = no\\n\" to match /^admin_space_left_action = halt\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,37 +1,73 @@\n     -/^admin_space_left_action = halt\\s*(?:#.*)?$/\n     +#\n     +# This file controls the configuration of the audit daemon\n     +#\n     +\n     +local_events = yes\n     +write_logs = yes\n     +log_file = /var/log/audit/audit.log\n     +log_group = root\n     +log_format = RAW\n     +flush = INCREMENTAL_ASYNC\n     +freq = 50\n     +max_log_file = 8\n     +num_logs = 5\n     +priority_boost = 4\n     +disp_qos = lossy\n     +dispatcher = /sbin/audispd\n     +name_format = NONE\n     +##name = mydomain\n     +max_log_file_action = ROTATE\n     +space_left = 75\n     +space_left_action = SYSLOG\n     +verify_email = yes\n     +action_mail_acct = root\n     +admin_space_left = 50\n     +admin_space_left_action = SUSPEND\n     +disk_full_action = SUSPEND\n     +disk_error_action = SUSPEND\n     +use_libwrap = yes\n     +##tcp_listen_port = 60\n     +tcp_listen_queue = 5\n     +tcp_max_per_addr = 1\n     +##tcp_client_ports = 1024-65535\n     +tcp_client_max_idle = 0\n     +enable_krb5 = no\n     +krb5_principal = auditd\n     +##krb5_key_file = /etc/audit/audit.key\n     +distribute_network = no\n\n  ×  cis-dil-benchmark-4.1.1.3: Ensure audit logs are not automatically deleted\n     ×  File /etc/audit/auditd.conf content is expected to match /^max_log_file_action = keep_logs\\s*(?:#.*)?$/\n     expected \"#\\n# This file controls the configuration of the audit daemon\\n#\\n\\nlocal_events = yes\\nwrite_logs =...b5 = no\\nkrb5_principal = auditd\\n##krb5_key_file = /etc/audit/audit.key\\ndistribute_network = no\\n\" to match /^max_log_file_action = keep_logs\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,37 +1,73 @@\n     -/^max_log_file_action = keep_logs\\s*(?:#.*)?$/\n     +#\n     +# This file controls the configuration of the audit daemon\n     +#\n     +\n     +local_events = yes\n     +write_logs = yes\n     +log_file = /var/log/audit/audit.log\n     +log_group = root\n     +log_format = RAW\n     +flush = INCREMENTAL_ASYNC\n     +freq = 50\n     +max_log_file = 8\n     +num_logs = 5\n     +priority_boost = 4\n     +disp_qos = lossy\n     +dispatcher = /sbin/audispd\n     +name_format = NONE\n     +##name = mydomain\n     +max_log_file_action = ROTATE\n     +space_left = 75\n     +space_left_action = SYSLOG\n     +verify_email = yes\n     +action_mail_acct = root\n     +admin_space_left = 50\n     +admin_space_left_action = SUSPEND\n     +disk_full_action = SUSPEND\n     +disk_error_action = SUSPEND\n     +use_libwrap = yes\n     +##tcp_listen_port = 60\n     +tcp_listen_queue = 5\n     +tcp_max_per_addr = 1\n     +##tcp_client_ports = 1024-65535\n     +tcp_client_max_idle = 0\n     +enable_krb5 = no\n     +krb5_principal = auditd\n     +##krb5_key_file = /etc/audit/audit.key\n     +distribute_network = no\n\n  ×  cis-dil-benchmark-4.1.2: Ensure auditd is installed (4 failed)\n     ×  System Package audit is expected to be installed\n     expected that `System Package audit` is installed\n     ×  System Package auditd is expected to be installed\n     expected that `System Package auditd` is installed\n     ×  System Package audit-libs is expected to be installed\n     expected that `System Package audit-libs` is installed\n     ×  System Package audispd-plugins is expected to be installed\n     expected that `System Package audispd-plugins` is installed\n  ×  cis-dil-benchmark-4.1.3: Ensure auditd service is enabled (2 failed)\n     ×  Service auditd is expected to be enabled\n     expected that `Service auditd` is enabled\n     ×  Service auditd is expected to be running\n     expected that `Service auditd` is running\n  ×  cis-dil-benchmark-4.1.4: Ensure auditing for processes that start prior to auditd is enabled (7 failed)\n     ×  File /boot/grub/grub.conf content is expected to match /audit=1/\n     expected nil to match /audit=1/\n     ×  File /boot/grub/grub.cfg content is expected to match /audit=1/\n     expected nil to match /audit=1/\n     ×  File /boot/grub/menu.lst content is expected to match /audit=1/\n     expected nil to match /audit=1/\n     ×  File /boot/boot/grub/grub.conf content is expected to match /audit=1/\n     expected nil to match /audit=1/\n     ×  File /boot/boot/grub/grub.cfg content is expected to match /audit=1/\n     expected nil to match /audit=1/\n     ×  File /boot/boot/grub/menu.lst content is expected to match /audit=1/\n     expected \"timeout 0\\ntitle   CoreOS GRUB2\\nroot    (hd0,0)\\nkernel  /xen/pvboot-x86_64.elf\\n\" to match /audit=1/\n     Diff:\n     @@ -1,4 +1,7 @@\n     -/audit=1/\n     +timeout 0\n     +title   CoreOS GRUB2\n     +root    (hd0,0)\n     +kernel  /xen/pvboot-x86_64.elf\n\n     ×  File /boot/grub2/grub.cfg content is expected to match /audit=1/\n     expected nil to match /audit=1/\n  ×  cis-dil-benchmark-4.1.5: Ensure events that modify date and time information are collected (5 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S clock_settime -k time-change$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S clock_settime -k time-change$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S clock_settime -k time-change$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/localtime -p wa -k time-change$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/localtime -p wa -k time-change$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/localtime -p wa -k time-change$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S adjtimex -S settimeofday -k time-change$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S adjtimex -S settimeofday -k time-change$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S adjtimex -S settimeofday -k time-change$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S clock_settime -k time-change$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S clock_settime -k time-change$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S clock_settime -k time-change$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.6: Ensure events that modify user/group information are collected (5 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/group -p wa -k identity$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/group -p wa -k identity$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/group -p wa -k identity$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/passwd -p wa -k identity$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/passwd -p wa -k identity$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/passwd -p wa -k identity$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/gshadow -p wa -k identity$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/gshadow -p wa -k identity$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/gshadow -p wa -k identity$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/shadow -p wa -k identity$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/shadow -p wa -k identity$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/shadow -p wa -k identity$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/security\\/opasswd -p wa -k identity$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/security\\/opasswd -p wa -k identity$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/security\\/opasswd -p wa -k identity$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.7: Ensure events that modify the system's network environment are collected (6 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S sethostname -S setdomainname -k system-locale$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S sethostname -S setdomainname -k system-locale$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S sethostname -S setdomainname -k system-locale$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/issue -p wa -k system-locale$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/issue -p wa -k system-locale$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/issue -p wa -k system-locale$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/issue\\.net -p wa -k system-locale$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/issue\\.net -p wa -k system-locale$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/issue\\.net -p wa -k system-locale$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/hosts -p wa -k system-locale$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/hosts -p wa -k system-locale$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/hosts -p wa -k system-locale$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/sysconfig\\/network -p wa -k system-locale$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/sysconfig\\/network -p wa -k system-locale$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/sysconfig\\/network -p wa -k system-locale$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S sethostname -S setdomainname -k system-locale$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S sethostname -S setdomainname -k system-locale$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S sethostname -S setdomainname -k system-locale$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.8: Ensure events that modify the system's Mandatory Access Controls are collected (4 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/selinux\\/ -p wa -k MAC-policy$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/selinux\\/ -p wa -k MAC-policy$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/selinux\\/ -p wa -k MAC-policy$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/usr\\/share\\/selinux\\/ -p wa -k MAC-policy$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/usr\\/share\\/selinux\\/ -p wa -k MAC-policy$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/usr\\/share\\/selinux\\/ -p wa -k MAC-policy$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/apparmor\\/ -p wa -k MAC-policy$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/apparmor\\/ -p wa -k MAC-policy$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/apparmor\\/ -p wa -k MAC-policy$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/apparmor.d\\/ -p wa -k MAC-policy$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/apparmor.d\\/ -p wa -k MAC-policy$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/apparmor.d\\/ -p wa -k MAC-policy$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.9: Ensure login and logout events are collected (3 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/var\\/log\\/faillog -p wa -k logins$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/var\\/log\\/faillog -p wa -k logins$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/var\\/log\\/faillog -p wa -k logins$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/var\\/log\\/lastlog -p wa -k logins$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/var\\/log\\/lastlog -p wa -k logins$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/var\\/log\\/lastlog -p wa -k logins$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/var\\/log\\/tallylog -p wa -k logins$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/var\\/log\\/tallylog -p wa -k logins$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/var\\/log\\/tallylog -p wa -k logins$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.10: Ensure session initiation information is collected (3 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/var\\/run\\/utmp -p wa -k session$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/var\\/run\\/utmp -p wa -k session$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/var\\/run\\/utmp -p wa -k session$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/var\\/log\\/wtmp -p wa -k logins$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/var\\/log\\/wtmp -p wa -k logins$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/var\\/log\\/wtmp -p wa -k logins$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/var\\/log\\/btmp -p wa -k logins$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/var\\/log\\/btmp -p wa -k logins$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/var\\/log\\/btmp -p wa -k logins$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.11: Ensure discretionary access control permission modification events are collected (6 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.12: Ensure unsuccessful unauthorized file access attempts are collected (4 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.14: Ensure successful file system mounts are collected (2 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.15: Ensure file deletion events by users are collected (2 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.16: Ensure changes to system administration scope (sudoers) is collected (2 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/sudoers -p wa -k scope$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/sudoers -p wa -k scope$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/sudoers -p wa -k scope$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/etc\\/sudoers\\.d\\/? -p wa -k scope$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/etc\\/sudoers\\.d\\/? -p wa -k scope$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/etc\\/sudoers\\.d\\/? -p wa -k scope$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.17: Ensure system administrator actions (sudolog) are collected\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/var\\/log\\/sudo\\.log -p wa -k actions$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/var\\/log\\/sudo\\.log -p wa -k actions$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/var\\/log\\/sudo\\.log -p wa -k actions$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.18: Ensure kernel module loading and unloading is collected (4 failed)\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/sbin\\/insmod -p x -k modules$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/sbin\\/insmod -p x -k modules$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/sbin\\/insmod -p x -k modules$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/sbin\\/rmmod -p x -k modules$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/sbin\\/rmmod -p x -k modules$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/sbin\\/rmmod -p x -k modules$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-w \\/sbin\\/modprobe -p x -k modules$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-w \\/sbin\\/modprobe -p x -k modules$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-w \\/sbin\\/modprobe -p x -k modules$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n     ×  File /etc/audit/audit.rules content is expected to match /^-a (always,exit|exit,always) -F arch=b64 -S init_module -S delete_module -k modules$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-a (always,exit|exit,always) -F arch=b64 -S init_module -S delete_module -k modules$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-a (always,exit|exit,always) -F arch=b64 -S init_module -S delete_module -k modules$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ×  cis-dil-benchmark-4.1.19: Ensure the audit configuration is immutable\n     ×  File /etc/audit/audit.rules content is expected to match /^-e 2$/\n     expected \"## This file is automatically generated from /etc/audit/rules.d\\n-D\\n\\n\\n-a exclude,never -F msgtype...400 -F msgtype<=1499\\n-a exclude,never -F msgtype=CONFIG_CHANGE\\n-a exclude,always -F msgtype>0\\n\\n\" to match /^-e 2$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^-e 2$/\n     +## This file is automatically generated from /etc/audit/rules.d\n     +-D\n     +\n     +\n     +-a exclude,never -F msgtype>=1400 -F msgtype<=1499\n     +-a exclude,never -F msgtype=CONFIG_CHANGE\n     +-a exclude,always -F msgtype>0\n\n  ↺  cis-dil-benchmark-4.2.1.1: Ensure rsyslog Service is insalled\n     ↺  The `package` resource is not supported on your OS yet.\n  ×  cis-dil-benchmark-4.2.1.2: Ensure rsyslog Service is enabled (2 failed)\n     ×  Service rsyslog is expected to be enabled\n     expected that `Service rsyslog` is enabled\n     ×  Service rsyslog is expected to be running\n     expected that `Service rsyslog` is running\n  ×  cis-dil-benchmark-4.2.1.3: Ensure logging is configured\n     ×  File /etc/rsyslog.conf is expected to exist\n     expected File /etc/rsyslog.conf to exist\n  ×  cis-dil-benchmark-4.2.1.4: Ensure rsyslog default file permissions configured\n     ×  File /etc/rsyslog.conf content is expected to match /^\\$FileCreateMode\\s+0[0-6][0-4]0/\n     expected nil to match /^\\$FileCreateMode\\s+0[0-6][0-4]0/\n  ×  cis-dil-benchmark-4.2.1.5: Ensure rsyslog is configured to send logs to a remote log host\n     ×  File /etc/rsyslog.conf content is expected to match /^\\s*\\*\\.\\*\\s+@/\n     expected nil to match /^\\s*\\*\\.\\*\\s+@/\n  ↺  cis-dil-benchmark-4.2.1.6: Ensure remote rsyslog messages are only accepted on designated log hosts.\n     ↺  Not implemented\n  ×  cis-dil-benchmark-4.2.2.1: Ensure journald is configured to send logs to rsyslog\n     ×  Parse Config File /etc/systemd/journald.conf Journal is expected to include {\"ForwardToSyslog\" => \"yes\"}\n     expected {} to include {\"ForwardToSyslog\" => \"yes\"}\n     Diff:\n     @@ -1,2 +1 @@\n     -\"ForwardToSyslog\" => \"yes\",\n\n  ×  cis-dil-benchmark-4.2.2.2: Ensure journald is configured to compress large log files\n     ×  Parse Config File /etc/systemd/journald.conf Journal is expected to include {\"Compress\" => \"yes\"}\n     expected {} to include {\"Compress\" => \"yes\"}\n     Diff:\n     @@ -1,2 +1 @@\n     -\"Compress\" => \"yes\",\n\n  ×  cis-dil-benchmark-4.2.2.3: Ensure journald is configured to write logfiles to persistent disk\n     ×  Parse Config File /etc/systemd/journald.conf Journal is expected to include {\"Storage\" => \"persistent\"}\n     expected {} to include {\"Storage\" => \"persistent\"}\n     Diff:\n     @@ -1,2 +1 @@\n     -\"Storage\" => \"persistent\",\n\n  ×  cis-dil-benchmark-4.2.3: Ensure permissions on all logfiles are configured (2 failed)\n     ✔  File /var/log/tallylog is expected not to be writable by group\n     ✔  File /var/log/tallylog is expected not to be executable by group\n     ✔  File /var/log/tallylog is expected not to be readable by other\n     ✔  File /var/log/tallylog is expected not to be writable by other\n     ✔  File /var/log/tallylog is expected not to be executable by other\n     ✔  File /var/log/faillog is expected not to be writable by group\n     ✔  File /var/log/faillog is expected not to be executable by group\n     ×  File /var/log/faillog is expected not to be readable by other\n     expected File /var/log/faillog not to be readable by other\n     ✔  File /var/log/faillog is expected not to be writable by other\n     ✔  File /var/log/faillog is expected not to be executable by other\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be writable by group\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be executable by group\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be readable by other\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be writable by other\n     ✔  File /var/log/journal/e6d76ebe5f4d487aa425a47165856433/system.journal is expected not to be executable by other\n     ×  File /var/log/btmp is expected not to be writable by group\n     expected File /var/log/btmp not to be writable by group\n     ✔  File /var/log/btmp is expected not to be executable by group\n     ✔  File /var/log/btmp is expected not to be readable by other\n     ✔  File /var/log/btmp is expected not to be writable by other\n     ✔  File /var/log/btmp is expected not to be executable by other\n     ✔  File /var/log/lastlog is expected not to be executable by group\n     ✔  File /var/log/lastlog is expected not to be writable by other\n     ✔  File /var/log/lastlog is expected not to be executable by other\n     ✔  File /var/log/wtmp is expected not to be executable by group\n     ✔  File /var/log/wtmp is expected not to be writable by other\n     ✔  File /var/log/wtmp is expected not to be executable by other\n  ↺  cis-dil-benchmark-4.3: Ensure logrotate is configured\n     ↺  Not implemented\n  ×  cis-dil-benchmark-5.1.1: Ensure cron daemon is enabled (4 failed)\n     ×  Service cron is expected to be enabled\n     expected that `Service cron` is enabled\n     ×  Service cron is expected to be running\n     expected that `Service cron` is running\n     ×  Service crond is expected to be enabled\n     expected that `Service crond` is enabled\n     ×  Service crond is expected to be running\n     expected that `Service crond` is running\n  ×  cis-dil-benchmark-5.1.2: Ensure permissions on /etc/crontab are configured (3 failed)\n     ×  File /etc/crontab is expected to exist\n     expected File /etc/crontab to exist\n     ✔  File /etc/crontab is expected not to be readable by group\n     ✔  File /etc/crontab is expected not to be writable by group\n     ✔  File /etc/crontab is expected not to be executable by group\n     ✔  File /etc/crontab is expected not to be readable by other\n     ✔  File /etc/crontab is expected not to be writable by other\n     ✔  File /etc/crontab is expected not to be executable by other\n     ×  File /etc/crontab uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/crontab gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.3: Ensure permissions on /etc/cron.hourly are configured (3 failed)\n     ×  File /etc/cron.hourly is expected to exist\n     expected File /etc/cron.hourly to exist\n     ✔  File /etc/cron.hourly is expected not to be readable by group\n     ✔  File /etc/cron.hourly is expected not to be writable by group\n     ✔  File /etc/cron.hourly is expected not to be executable by group\n     ✔  File /etc/cron.hourly is expected not to be readable by other\n     ✔  File /etc/cron.hourly is expected not to be writable by other\n     ✔  File /etc/cron.hourly is expected not to be executable by other\n     ×  File /etc/cron.hourly uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.hourly gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.4: Ensure permissions on /etc/cron.daily are configured (3 failed)\n     ×  File /etc/cron.daily is expected to exist\n     expected File /etc/cron.daily to exist\n     ✔  File /etc/cron.daily is expected not to be readable by group\n     ✔  File /etc/cron.daily is expected not to be writable by group\n     ✔  File /etc/cron.daily is expected not to be executable by group\n     ✔  File /etc/cron.daily is expected not to be readable by other\n     ✔  File /etc/cron.daily is expected not to be writable by other\n     ✔  File /etc/cron.daily is expected not to be executable by other\n     ×  File /etc/cron.daily uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.daily gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.5: Ensure permissions on /etc/cron.weekly are configured (4 failed)\n     ✔  File /etc/cron.weekly is expected to exist\n     ×  File /etc/cron.weekly is expected not to be readable by group\n     expected File /etc/cron.weekly not to be readable by group\n     ✔  File /etc/cron.weekly is expected not to be writable by group\n     ×  File /etc/cron.weekly is expected not to be executable by group\n     expected File /etc/cron.weekly not to be executable by group\n     ×  File /etc/cron.weekly is expected not to be readable by other\n     expected File /etc/cron.weekly not to be readable by other\n     ✔  File /etc/cron.weekly is expected not to be writable by other\n     ×  File /etc/cron.weekly is expected not to be executable by other\n     expected File /etc/cron.weekly not to be executable by other\n     ✔  File /etc/cron.weekly uid is expected to cmp == 0\n     ✔  File /etc/cron.weekly gid is expected to cmp == 0\n  ×  cis-dil-benchmark-5.1.6: Ensure permissions on /etc/cron.monthly are configured (3 failed)\n     ×  File /etc/cron.monthly is expected to exist\n     expected File /etc/cron.monthly to exist\n     ✔  File /etc/cron.monthly is expected not to be readable by group\n     ✔  File /etc/cron.monthly is expected not to be writable by group\n     ✔  File /etc/cron.monthly is expected not to be executable by group\n     ✔  File /etc/cron.monthly is expected not to be readable by other\n     ✔  File /etc/cron.monthly is expected not to be writable by other\n     ✔  File /etc/cron.monthly is expected not to be executable by other\n     ×  File /etc/cron.monthly uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.monthly gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.7: Ensure permissions on /etc/cron.d are configured (3 failed)\n     ×  File /etc/cron.d is expected to exist\n     expected File /etc/cron.d to exist\n     ✔  File /etc/cron.d is expected not to be readable by group\n     ✔  File /etc/cron.d is expected not to be writable by group\n     ✔  File /etc/cron.d is expected not to be executable by group\n     ✔  File /etc/cron.d is expected not to be readable by other\n     ✔  File /etc/cron.d is expected not to be writable by other\n     ✔  File /etc/cron.d is expected not to be executable by other\n     ×  File /etc/cron.d uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.d gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.1.8: Ensure at/cron is restricted to authorized users (6 failed)\n     ✔  File /etc/cron.deny is expected not to exist\n     ×  File /etc/cron.allow is expected to exist\n     expected File /etc/cron.allow to exist\n     ✔  File /etc/cron.allow is expected not to be readable by group\n     ✔  File /etc/cron.allow is expected not to be writable by group\n     ✔  File /etc/cron.allow is expected not to be executable by group\n     ✔  File /etc/cron.allow is expected not to be readable by other\n     ✔  File /etc/cron.allow is expected not to be writable by other\n     ✔  File /etc/cron.allow is expected not to be executable by other\n     ×  File /etc/cron.allow uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/cron.allow gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ✔  File /etc/at.deny is expected not to exist\n     ×  File /etc/at.allow is expected to exist\n     expected File /etc/at.allow to exist\n     ✔  File /etc/at.allow is expected not to be readable by group\n     ✔  File /etc/at.allow is expected not to be writable by group\n     ✔  File /etc/at.allow is expected not to be executable by group\n     ✔  File /etc/at.allow is expected not to be readable by other\n     ✔  File /etc/at.allow is expected not to be writable by other\n     ✔  File /etc/at.allow is expected not to be executable by other\n     ×  File /etc/at.allow uid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n     ×  File /etc/at.allow gid is expected to cmp == 0\n     \n     expected: 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ✔  cis-dil-benchmark-5.2.1: Ensure permissions on /etc/ssh/sshd_config are configured (Scored)\n     ✔  File /etc/ssh/sshd_config is expected to exist\n     ✔  File /etc/ssh/sshd_config is expected not to be readable by group\n     ✔  File /etc/ssh/sshd_config is expected not to be writable by group\n     ✔  File /etc/ssh/sshd_config is expected not to be executable by group\n     ✔  File /etc/ssh/sshd_config is expected not to be readable by other\n     ✔  File /etc/ssh/sshd_config is expected not to be writable by other\n     ✔  File /etc/ssh/sshd_config is expected not to be executable by other\n     ✔  File /etc/ssh/sshd_config uid is expected to cmp == 0\n     ✔  File /etc/ssh/sshd_config gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-5.2.2: Ensure permissions on SSH private host key files are configured (Scored)\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ed25519_key uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be readable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be readable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_dsa_key uid is expected to cmp == 0\n  ✔  cis-dil-benchmark-5.2.3: Ensure permissions on SSH public host key files are configured (Scored)\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_dsa_key.pub uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_rsa_key.pub uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ed25519_key.pub uid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected to be readable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be writable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be executable by group\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected to be readable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be writable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub is expected not to be executable by other\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub gid is expected to cmp == 0\n     ✔  File /etc/ssh/ssh_host_ecdsa_key.pub uid is expected to cmp == 0\n  ×  cis-dil-benchmark-5.2.4: Ensure SSH Protocol is set to 2 (Scored)\n     ×  SSHD Configuration Protocol is expected to cmp == 2\n     \n     expected: 2\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.2.5: Ensure SSH LogLevel is appropriate (Scored)\n     ×  SSHD Configuration LogLevel is expected to eq \"VERBOSE\"\n     \n     expected: \"VERBOSE\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.6: Ensure SSH X11 forwarding is disabled (Scored)\n     ×  SSHD Configuration X11Forwarding is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.7: Ensure SSH MaxAuthTries is set to 4 or less (Scored)\n     ×  SSHD Configuration MaxAuthTries is expected to cmp <= 4\n     \n     expected it to be <= 4\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.2.8: Ensure SSH IgnoreRhosts is enabled (Scored)\n     ×  SSHD Configuration IgnoreRhosts is expected to eq \"yes\"\n     \n     expected: \"yes\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.9: Ensure SSH HostbasedAuthentication is disabled (Scored)\n     ×  SSHD Configuration HostbasedAuthentication is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.10: Ensure SSH root login is disabled (Scored)\n     ×  SSHD Configuration PermitRootLogin is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.11: Ensure SSH PermitEmptyPasswords is disabled (Scored)\n     ×  SSHD Configuration PermitEmptyPasswords is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.12: Ensure SSH PermitUserEnvironment is disabled (Scored)\n     ×  SSHD Configuration PermitUserEnvironment is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.13: Ensure only strong Ciphers are used (Scored)\n     ×  SSHD Configuration Ciphers is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.14: Ensure only strong MAC algorithms are used (Scored)\n     ×  SSHD Configuration MACs is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.15: Ensure only strong Key Exchange algorithms are used (Scored)\n     ×  SSHD Configuration KexAlgorithms is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.16: Ensure SSH Idle Timeout Interval is configured (Scored) (1 failed)\n     ✔  SSHD Configuration ClientAliveInterval is expected to cmp <= 300\n     ×  SSHD Configuration ClientAliveCountMax is expected to cmp <= 0\n     \n     expected it to be <= 0\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.2.17: Ensure SSH LoginGraceTime is set to one minute or less (Scored)\n     ×  SSHD Configuration LoginGraceTime is expected to satisfy expression `x == '1m' || ((matches = x.match(/(?<secs>[0-9]+)s?/)) && Integer(matches[:secs]) <= 60)`\n     undefined method `match' for nil:NilClass\n  ×  cis-dil-benchmark-5.2.18: Ensure SSH access is limited (Scored) (4 failed)\n     ×  SSHD Configuration AllowUsers is expected not to be nil\n     expected: not nil\n          got: nil\n     ×  SSHD Configuration AllowGroups is expected not to be nil\n     expected: not nil\n          got: nil\n     ×  SSHD Configuration DenyUsers is expected not to be nil\n     expected: not nil\n          got: nil\n     ×  SSHD Configuration DenyGroups is expected not to be nil\n     expected: not nil\n          got: nil\n  ×  cis-dil-benchmark-5.2.19: Ensure SSH warning banner is configured (Scored)\n     ×  SSHD Configuration Banner is expected not to be nil\n     expected: not nil\n          got: nil\n  ✔  cis-dil-benchmark-5.2.20: Ensure SSH PAM is enabled (Scored)\n     ✔  SSHD Configuration UsePAM is expected to eq \"yes\"\n  ×  cis-dil-benchmark-5.2.21: Ensure SSH AllowTcpForwarding is disabled (Scored)\n     ×  SSHD Configuration AllowTcpForwarding is expected to eq \"no\"\n     \n     expected: \"no\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.22: Ensure SSH MaxStartups is configured (Scored)\n     ×  SSHD Configuration MaxStartups is expected to eq \"10:30:60\"\n     \n     expected: \"10:30:60\"\n          got: nil\n     \n     (compared using ==)\n\n  ×  cis-dil-benchmark-5.2.23: Ensure SSH MaxSessions is set to 4 or less (Scored)\n     ×  SSHD Configuration MaxSessions is expected to cmp <= 4\n     \n     expected it to be <= 4\n          got: \n     \n     (compared using `cmp` matcher)\n\n  ↺  cis-dil-benchmark-5.3.2: Ensure lockout for failed password attempts is configured\n     ↺  Not implemented\n  ×  cis-dil-benchmark-5.3.3: Ensure password reuse is limited (4 failed)\n     ×  File /etc/pam.d/common-password content is expected to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     ×  File /etc/pam.d/common-password content is expected to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     ×  File /etc/pam.d/system-auth content is expected to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_unix\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     ×  File /etc/pam.d/system-auth content is expected to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n     expected nil to match /^password\\s+(\\S+\\s+)+pam_pwhistory\\.so (\\S+\\s+)*remember=([56789]|[1-9][0-9]+)/\n  ×  cis-dil-benchmark-5.3.4: Ensure password hashing algorithm is SHA-512 (3 failed)\n     ×  File /etc/pam.d/common-password content is expected to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     expected nil to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     ×  File /etc/pam.d/system-auth content is expected to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     expected nil to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     ×  File /etc/pam.d/password-auth content is expected to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n     expected nil to match /^password(\\s+\\S+\\s+)+pam_unix\\.so\\s+(\\S+\\s+)*sha512/\n  ×  cis-dil-benchmark-5.4.1.1: Ensure password expiration is 365 days or less\n     ×  login.defs PASS_MAX_DAYS is expected to cmp <= 365\n     \n     expected it to be <= 365\n          got: 99999\n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-5.4.1.2: Ensure minimum days between password changes is 7 or more\n     ×  login.defs PASS_MIN_DAYS is expected to cmp >= 7\n     \n     expected it to be >= 7\n          got: 0\n     \n     (compared using `cmp` matcher)\n\n  ✔  cis-dil-benchmark-5.4.1.3: Ensure password expiration warning days is 7 or more\n     ✔  login.defs PASS_WARN_AGE is expected to cmp >= 7\n  ×  cis-dil-benchmark-5.4.1.4: Ensure inactive password lock is 30 days or less\n     ×  Command: `useradd -D` stdout is expected to match /^INACTIVE=(30|[1-2][0-9]|[1-9])$/\n     expected \"GROUP=100\\nHOME=/home\\nINACTIVE=-1\\nEXPIRE=\\nSHELL=/bin/bash\\nSKEL=/etc/skel\\nCREATE_MAIL_SPOOL=no\\n\" to match /^INACTIVE=(30|[1-2][0-9]|[1-9])$/\n     Diff:\n     @@ -1,7 +1,13 @@\n     -/^INACTIVE=(30|[1-2][0-9]|[1-9])$/\n     +GROUP=100\n     +HOME=/home\n     +INACTIVE=-1\n     +EXPIRE=\n     +SHELL=/bin/bash\n     +SKEL=/etc/skel\n     +CREATE_MAIL_SPOOL=no\n\n  ×  cis-dil-benchmark-5.4.2: Ensure system accounts are secured (26 failed)\n     ×  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     expected \"/bin/bash\" to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     Diff:\n     @@ -1 +1 @@\n     -/(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     +\"/bin/bash\"\n\n     ✔  /etc/shadow with user == \"core\" passwords is expected to cmp == /^[*!]/\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ✔  /etc/shadow with user == \"systemd-timesync\" passwords is expected to cmp == /^[*!]/\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ✔  /etc/shadow with user == \"systemd-coredump\" passwords is expected to cmp == /^[*!]/\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"bin\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"daemon\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"adm\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"lp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"news\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"uucp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"operator\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"man\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"messagebus\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"syslog\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"ntp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"sshd\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"tcpdump\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"dhcp\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"etcd\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"docker\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"tlsdate\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"polkitd\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"tss\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-journal-remote\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-network\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-resolve\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"systemd-bus-proxy\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ✔  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     ×  /etc/shadow with user == \"portage\" passwords is expected to cmp == /^[*!]/\n     \n     expected: (?-mix:^[*!])\n          got: []\n     \n     (compared using `cmp` matcher)\n\n     ×  /etc/passwd with uid to_i < 1000 one entry shell is expected to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     expected \"/bin/bash\" to match /(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     Diff:\n     @@ -1 +1 @@\n     -/(\\/usr\\/sbin\\/nologin|\\/sbin\\/nologin|\\/bin\\/false)/\n     +\"/bin/bash\"\n\n     ✔  /etc/shadow with user == \"core\" passwords is expected to cmp == /^[*!]/\n  ✔  cis-dil-benchmark-5.4.3: Ensure default group for the root account is GID 0\n     ✔  /etc/passwd with user == \"root\" gids is expected to cmp == 0\n  ×  cis-dil-benchmark-5.4.4: Ensure default user umask is 027 or more restrictive (2 failed)\n     ×  File /etc/profile content is expected not to match /^\\s*umask [0-7](0[1-7]|[1-7][1-6])\\s*(?:#.*)?$/\n     expected \"# /etc/profile: login shell setup\\n#\\n# That this file is used by any Bourne-shell derivative to set... \\\"$sh\\\"\\ndone\\nfor sh in /etc/profile.d/*.sh ; do\\n\\t[ -r \\\"$sh\\\" ] && . \\\"$sh\\\"\\ndone\\nunset sh\\n\" not to match /^\\s*umask [0-7](0[1-7]|[1-7][1-6])\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,59 +1,117 @@\n     -/^\\s*umask [0-7](0[1-7]|[1-7][1-6])\\s*(?:#.*)?$/\n     +# /etc/profile: login shell setup\n     +#\n     +# That this file is used by any Bourne-shell derivative to setup the\n     +# environment for login shells.\n     +#\n     +\n     +# Load environment settings from profile.env, which is created by\n     +# env-update from the files in /etc/env.d\n     +if [ -e /etc/profile.env ] ; then\n     +\t. /etc/profile.env\n     +elif [ -e /usr/share/baselayout/profile.env ] ; then\n     +\t. /usr/share/baselayout/profile.env\n     +fi\n     +\n     +# You should override these in your ~/.bashrc (or equivalent) for per-user\n     +# settings.  For system defaults, you can add a new file in /etc/profile.d/.\n     +export EDITOR=${EDITOR:-/usr/bin/vim}\n     +export PAGER=${PAGER:-/usr/bin/less}\n     +\n     +# 077 would be more secure, but 022 is generally quite realistic\n     +umask 022\n     +\n     +# Set up PATH, all users get both bin and sbin to keep things simple.\n     +# Gentoo normally splits this up which is why the variable is called ROOTPATH\n     +export PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin${ROOTPATH:+:}${ROOTPATH-}\"\n     +unset ROOTPATH\n     +\n     +if [ -n \"${BASH_VERSION-}\" ] ; then\n     +\t# Newer bash ebuilds include /etc/bash/bashrc which will setup PS1\n     +\t# including color.  We leave out color here because not all\n     +\t# terminals support it.\n     +\tif [ -f /etc/bash/bashrc ] ; then\n     +\t\t# Bash login shells run only /etc/profile\n     +\t\t# Bash non-login shells run only /etc/bash/bashrc\n     +\t\t# Since we want to run /etc/bash/bashrc regardless, we source it \n     +\t\t# from here.  It is unfortunate that there is no way to do \n     +\t\t# this *after* the user's .bash_profile runs (without putting \n     +\t\t# it in the user's dot-files), but it shouldn't make any \n     +\t\t# difference.\n     +\t\t. /etc/bash/bashrc\n     +\telif [ -f /usr/share/bash/bashrc ] ; then\n     +\t\t. /usr/share/bash/bashrc\n     +\telse\n     +\t\tPS1='\\u@\\h \\w \\$ '\n     +\tfi\n     +else\n     +\t# Setup a bland default prompt.  Since this prompt should be useable\n     +\t# on color and non-color terminals, as well as shells that don't\n     +\t# understand sequences such as \\h, don't put anything special in it.\n     +\tPS1=\"${USER:-$(whoami 2>/dev/null)}@$(uname -n 2>/dev/null) \\$ \"\n     +fi\n     +\n     +for sh in /usr/share/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +for sh in /etc/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +unset sh\n\n     ×  File /etc/profile content is expected to match /^\\s*umask [0-7][2367]7\\s*(?:#.*)?$/\n     expected \"# /etc/profile: login shell setup\\n#\\n# That this file is used by any Bourne-shell derivative to set... \\\"$sh\\\"\\ndone\\nfor sh in /etc/profile.d/*.sh ; do\\n\\t[ -r \\\"$sh\\\" ] && . \\\"$sh\\\"\\ndone\\nunset sh\\n\" to match /^\\s*umask [0-7][2367]7\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,59 +1,117 @@\n     -/^\\s*umask [0-7][2367]7\\s*(?:#.*)?$/\n     +# /etc/profile: login shell setup\n     +#\n     +# That this file is used by any Bourne-shell derivative to setup the\n     +# environment for login shells.\n     +#\n     +\n     +# Load environment settings from profile.env, which is created by\n     +# env-update from the files in /etc/env.d\n     +if [ -e /etc/profile.env ] ; then\n     +\t. /etc/profile.env\n     +elif [ -e /usr/share/baselayout/profile.env ] ; then\n     +\t. /usr/share/baselayout/profile.env\n     +fi\n     +\n     +# You should override these in your ~/.bashrc (or equivalent) for per-user\n     +# settings.  For system defaults, you can add a new file in /etc/profile.d/.\n     +export EDITOR=${EDITOR:-/usr/bin/vim}\n     +export PAGER=${PAGER:-/usr/bin/less}\n     +\n     +# 077 would be more secure, but 022 is generally quite realistic\n     +umask 022\n     +\n     +# Set up PATH, all users get both bin and sbin to keep things simple.\n     +# Gentoo normally splits this up which is why the variable is called ROOTPATH\n     +export PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin${ROOTPATH:+:}${ROOTPATH-}\"\n     +unset ROOTPATH\n     +\n     +if [ -n \"${BASH_VERSION-}\" ] ; then\n     +\t# Newer bash ebuilds include /etc/bash/bashrc which will setup PS1\n     +\t# including color.  We leave out color here because not all\n     +\t# terminals support it.\n     +\tif [ -f /etc/bash/bashrc ] ; then\n     +\t\t# Bash login shells run only /etc/profile\n     +\t\t# Bash non-login shells run only /etc/bash/bashrc\n     +\t\t# Since we want to run /etc/bash/bashrc regardless, we source it \n     +\t\t# from here.  It is unfortunate that there is no way to do \n     +\t\t# this *after* the user's .bash_profile runs (without putting \n     +\t\t# it in the user's dot-files), but it shouldn't make any \n     +\t\t# difference.\n     +\t\t. /etc/bash/bashrc\n     +\telif [ -f /usr/share/bash/bashrc ] ; then\n     +\t\t. /usr/share/bash/bashrc\n     +\telse\n     +\t\tPS1='\\u@\\h \\w \\$ '\n     +\tfi\n     +else\n     +\t# Setup a bland default prompt.  Since this prompt should be useable\n     +\t# on color and non-color terminals, as well as shells that don't\n     +\t# understand sequences such as \\h, don't put anything special in it.\n     +\tPS1=\"${USER:-$(whoami 2>/dev/null)}@$(uname -n 2>/dev/null) \\$ \"\n     +fi\n     +\n     +for sh in /usr/share/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +for sh in /etc/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +unset sh\n\n  ×  cis-dil-benchmark-5.4.5: Ensure default user shell timeout is 900 seconds or less\n     ×  File /etc/profile content is expected to match /^\\s*TMOUT=([0-8][0-9]{0,2}|900)\\s*(?:#.*)?$/\n     expected \"# /etc/profile: login shell setup\\n#\\n# That this file is used by any Bourne-shell derivative to set... \\\"$sh\\\"\\ndone\\nfor sh in /etc/profile.d/*.sh ; do\\n\\t[ -r \\\"$sh\\\" ] && . \\\"$sh\\\"\\ndone\\nunset sh\\n\" to match /^\\s*TMOUT=([0-8][0-9]{0,2}|900)\\s*(?:#.*)?$/\n     Diff:\n     @@ -1,59 +1,117 @@\n     -/^\\s*TMOUT=([0-8][0-9]{0,2}|900)\\s*(?:#.*)?$/\n     +# /etc/profile: login shell setup\n     +#\n     +# That this file is used by any Bourne-shell derivative to setup the\n     +# environment for login shells.\n     +#\n     +\n     +# Load environment settings from profile.env, which is created by\n     +# env-update from the files in /etc/env.d\n     +if [ -e /etc/profile.env ] ; then\n     +\t. /etc/profile.env\n     +elif [ -e /usr/share/baselayout/profile.env ] ; then\n     +\t. /usr/share/baselayout/profile.env\n     +fi\n     +\n     +# You should override these in your ~/.bashrc (or equivalent) for per-user\n     +# settings.  For system defaults, you can add a new file in /etc/profile.d/.\n     +export EDITOR=${EDITOR:-/usr/bin/vim}\n     +export PAGER=${PAGER:-/usr/bin/less}\n     +\n     +# 077 would be more secure, but 022 is generally quite realistic\n     +umask 022\n     +\n     +# Set up PATH, all users get both bin and sbin to keep things simple.\n     +# Gentoo normally splits this up which is why the variable is called ROOTPATH\n     +export PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin${ROOTPATH:+:}${ROOTPATH-}\"\n     +unset ROOTPATH\n     +\n     +if [ -n \"${BASH_VERSION-}\" ] ; then\n     +\t# Newer bash ebuilds include /etc/bash/bashrc which will setup PS1\n     +\t# including color.  We leave out color here because not all\n     +\t# terminals support it.\n     +\tif [ -f /etc/bash/bashrc ] ; then\n     +\t\t# Bash login shells run only /etc/profile\n     +\t\t# Bash non-login shells run only /etc/bash/bashrc\n     +\t\t# Since we want to run /etc/bash/bashrc regardless, we source it \n     +\t\t# from here.  It is unfortunate that there is no way to do \n     +\t\t# this *after* the user's .bash_profile runs (without putting \n     +\t\t# it in the user's dot-files), but it shouldn't make any \n     +\t\t# difference.\n     +\t\t. /etc/bash/bashrc\n     +\telif [ -f /usr/share/bash/bashrc ] ; then\n     +\t\t. /usr/share/bash/bashrc\n     +\telse\n     +\t\tPS1='\\u@\\h \\w \\$ '\n     +\tfi\n     +else\n     +\t# Setup a bland default prompt.  Since this prompt should be useable\n     +\t# on color and non-color terminals, as well as shells that don't\n     +\t# understand sequences such as \\h, don't put anything special in it.\n     +\tPS1=\"${USER:-$(whoami 2>/dev/null)}@$(uname -n 2>/dev/null) \\$ \"\n     +fi\n     +\n     +for sh in /usr/share/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +for sh in /etc/profile.d/*.sh ; do\n     +\t[ -r \"$sh\" ] && . \"$sh\"\n     +done\n     +unset sh\n\n  ↺  cis-dil-benchmark-5.5: Ensure root login is restricted to system console\n     ↺  Not implemented\n  ×  cis-dil-benchmark-5.6: Ensure access to the su command is restricted (1 failed)\n     ×  File /etc/pam.d/su content is expected to match /^auth\\s+required\\s+pam_wheel.so use_uid$/\n     expected nil to match /^auth\\s+required\\s+pam_wheel.so use_uid$/\n     ✔  Groups with name == \"wheel\" is expected to exist\n  ↺  cis-dil-benchmark-6.1.1: Audit system file permissions\n     ↺  Not implemented\n  ✔  cis-dil-benchmark-6.1.2: Ensure permissions on /etc/passwd are configured\n     ✔  File /etc/passwd is expected to exist\n     ✔  File /etc/passwd mode is expected to cmp == \"0644\"\n     ✔  File /etc/passwd uid is expected to cmp == 0\n     ✔  File /etc/passwd gid is expected to cmp == 0\n     ✔  File /etc/passwd sticky is expected to equal false\n     ✔  File /etc/passwd suid is expected to equal false\n     ✔  File /etc/passwd sgid is expected to equal false\n     ✔  File /usr/share/baselayout/passwd is expected to exist\n     ✔  File /usr/share/baselayout/passwd mode is expected to cmp == \"0644\"\n     ✔  File /usr/share/baselayout/passwd uid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/passwd gid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/passwd sticky is expected to equal false\n     ✔  File /usr/share/baselayout/passwd suid is expected to equal false\n     ✔  File /usr/share/baselayout/passwd sgid is expected to equal false\n  ✔  cis-dil-benchmark-6.1.3: Ensure permissions on /etc/shadow are configured\n     ✔  File /etc/shadow is expected to exist\n     ✔  File /etc/shadow is expected not to be more permissive than \"0644\"\n     ✔  File /etc/shadow uid is expected to cmp == 0\n     ✔  File /etc/shadow gid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/shadow is expected to exist\n     ✔  File /usr/share/baselayout/shadow is expected not to be more permissive than \"0644\"\n     ✔  File /usr/share/baselayout/shadow uid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/shadow gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.4: Ensure permissions on /etc/group are configured\n     ✔  File /etc/group is expected to exist\n     ✔  File /etc/group mode is expected to cmp == \"0644\"\n     ✔  File /etc/group uid is expected to cmp == 0\n     ✔  File /etc/group gid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/group is expected to exist\n     ✔  File /usr/share/baselayout/group mode is expected to cmp == \"0644\"\n     ✔  File /usr/share/baselayout/group uid is expected to cmp == 0\n     ✔  File /usr/share/baselayout/group gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.5: Ensure permissions on /etc/gshadow are configured\n     ✔  File /etc/gshadow is expected to exist\n     ✔  File /etc/gshadow is expected not to be more permissive than \"0640\"\n     ✔  File /etc/gshadow uid is expected to cmp == 0\n     ✔  File /etc/gshadow gid is expected to cmp == 0\n  ×  cis-dil-benchmark-6.1.6: Ensure permissions on /etc/passwd- are configured (1 failed)\n     ✔  File /etc/passwd- is expected to exist\n     ×  File /etc/passwd- is expected not to be more permissive than \"0600\"\n     expected `File /etc/passwd-.more_permissive_than?(\"0600\")` to be falsey, got true\n     ✔  File /etc/passwd- uid is expected to cmp == 0\n     ✔  File /etc/passwd- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.7: Ensure permissions on /etc/shadow- are configured\n     ✔  File /etc/shadow- is expected to exist\n     ✔  File /etc/shadow- is expected not to be more permissive than \"0640\"\n     ✔  File /etc/shadow- uid is expected to cmp == 0\n     ✔  File /etc/shadow- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.8: Ensure permissions on /etc/group- are configured\n     ✔  File /etc/group- is expected to exist\n     ✔  File /etc/group- is expected not to be more permissive than \"0644\"\n     ✔  File /etc/group- uid is expected to cmp == 0\n     ✔  File /etc/group- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.9: Ensure permissions on /etc/gshadow- are configured\n     ✔  File /etc/gshadow- is expected to exist\n     ✔  File /etc/gshadow- is expected not to be more permissive than \"0640\"\n     ✔  File /etc/gshadow- uid is expected to cmp == 0\n     ✔  File /etc/gshadow- gid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.1.10: Ensure no world writable files exist\n     ✔  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -type f -perm -0002` stdout is expected to cmp == \"\"\n  ×  cis-dil-benchmark-6.1.11: Ensure no unowned files or directories exist\n     ×  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -nouser` stdout is expected to cmp == \"\"\n     \n     expected: \n          got: /media/configvirtfs\n     /media/configvirtfs\n     /media/configvirtfs/openstack\n     /media/configvirtfs/openstack/latest\n     /media/configvirtfs/openstack/latest/user_data\n     \n     \n     (compared using `cmp` matcher)\n\n  ×  cis-dil-benchmark-6.1.12: Ensure no ungrouped files or directories exist\n     ×  Command: `df --local -P | awk '{ if (NR!=1) print $6 }' | xargs -I '{}' find '{}' -xdev -nogroup` stdout is expected to cmp == \"\"\n     \n     expected: \n          got: /media/configvirtfs\n     /media/configvirtfs\n     /media/configvirtfs/openstack\n     /media/configvirtfs/openstack/latest\n     /media/configvirtfs/openstack/latest/user_data\n     \n     \n     (compared using `cmp` matcher)\n\n  ↺  cis-dil-benchmark-6.1.13: Audit SUID executables\n     ↺  Not implemented\n  ↺  cis-dil-benchmark-6.1.14: Audit SGID executables\n     ↺  Not implemented\n  ✔  cis-dil-benchmark-6.2.1: Ensure password fields are not empty\n     ✔  /etc/shadow passwords is expected not to include \"\"\n     ✔  /usr/share/baselayout/shadow passwords is expected not to include \"\"\n  ✔  cis-dil-benchmark-6.2.2: Ensure no legacy \"+\" entries exist in /etc/passwd\n     ✔  /etc/passwd users is expected not to include \"+\"\n     ✔  /etc/passwd users is expected not to include \"+\"\n  ✔  cis-dil-benchmark-6.2.3: Ensure no legacy \"+\" entries exist in /etc/shadow\n     ✔  /etc/shadow users is expected not to include \"+\"\n     ✔  /usr/share/baselayout/shadow users is expected not to include \"+\"\n  ✔  cis-dil-benchmark-6.2.4: Ensure no legacy \"+\" entries exist in /etc/group\n     ✔  /etc/group groups is expected not to include \"+\"\n     ✔  /etc/group groups is expected not to include \"+\"\n  ✔  cis-dil-benchmark-6.2.5: Ensure root is the only UID 0 account\n     ✔  /etc/passwd with uid == 0 users is expected to cmp == [\"root\"]\n     ✔  /etc/passwd with uid == 0 users is expected to cmp == [\"root\"]\n  ✔  cis-dil-benchmark-6.2.6: Ensure root PATH Integrity\n     ✔  [\"/usr/bin\", \"/bin\", \"/usr/sbin\", \"/sbin\"] is expected not to be empty\n     ✔  [\"/usr/bin\", \"/bin\", \"/usr/sbin\", \"/sbin\"] is expected not to include \"\"\n     ✔  [\"/usr/bin\", \"/bin\", \"/usr/sbin\", \"/sbin\"] is expected not to include \".\"\n     ✔  File /usr/bin is expected to be directory\n     ✔  File /usr/bin is expected not to be writable by group\n     ✔  File /usr/bin is expected not to be writable by other\n     ✔  File /usr/bin uid is expected to cmp == 0\n     ✔  File /bin is expected to be directory\n     ✔  File /bin is expected not to be writable by group\n     ✔  File /bin is expected not to be writable by other\n     ✔  File /bin uid is expected to cmp == 0\n     ✔  File /usr/sbin is expected to be directory\n     ✔  File /usr/sbin is expected not to be writable by group\n     ✔  File /usr/sbin is expected not to be writable by other\n     ✔  File /usr/sbin uid is expected to cmp == 0\n     ✔  File /sbin is expected to be directory\n     ✔  File /sbin is expected not to be writable by group\n     ✔  File /sbin is expected not to be writable by other\n     ✔  File /sbin uid is expected to cmp == 0\n  ✔  cis-dil-benchmark-6.2.11: Ensure no users have .forward files\n     ✔  File /root/.forward is expected not to exist\n     ✔  File /home/core/.forward is expected not to exist\n     ✔  File //.forward is expected not to exist\n     ✔  File //.forward is expected not to exist\n     ✔  File /root/.forward is expected not to exist\n     ✔  File /bin/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /var/adm/.forward is expected not to exist\n     ✔  File /var/spool/lpd/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /sbin/.forward is expected not to exist\n     ✔  File /var/spool/news/.forward is expected not to exist\n     ✔  File /var/spool/uucp/.forward is expected not to exist\n     ✔  File /root/.forward is expected not to exist\n     ✔  File /usr/share/man/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/empty/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/lib/dhcpcd/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/lib/polkit-1/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /dev/null/.forward is expected not to exist\n     ✔  File /var/tmp/portage/.forward is expected not to exist\n     ✔  File /home/core/.forward is expected not to exist\n     ✔  File /var/empty/.forward is expected not to exist\n  ✔  cis-dil-benchmark-6.2.12: Ensure no users have .netrc files\n     ✔  File /root/.netrc is expected not to exist\n     ✔  File /home/core/.netrc is expected not to exist\n     ✔  File //.netrc is expected not to exist\n     ✔  File //.netrc is expected not to exist\n     ✔  File /root/.netrc is expected not to exist\n     ✔  File /bin/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /var/adm/.netrc is expected not to exist\n     ✔  File /var/spool/lpd/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /sbin/.netrc is expected not to exist\n     ✔  File /var/spool/news/.netrc is expected not to exist\n     ✔  File /var/spool/uucp/.netrc is expected not to exist\n     ✔  File /root/.netrc is expected not to exist\n     ✔  File /usr/share/man/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/empty/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/lib/dhcpcd/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/lib/polkit-1/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /dev/null/.netrc is expected not to exist\n     ✔  File /var/tmp/portage/.netrc is expected not to exist\n     ✔  File /home/core/.netrc is expected not to exist\n     ✔  File /var/empty/.netrc is expected not to exist\n  ✔  cis-dil-benchmark-6.2.14: Ensure no users have .rhosts files\n     ✔  File /root/.rhosts is expected not to exist\n     ✔  File /home/core/.rhosts is expected not to exist\n     ✔  File //.rhosts is expected not to exist\n     ✔  File //.rhosts is expected not to exist\n     ✔  File /root/.rhosts is expected not to exist\n     ✔  File /bin/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /var/adm/.rhosts is expected not to exist\n     ✔  File /var/spool/lpd/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /sbin/.rhosts is expected not to exist\n     ✔  File /var/spool/news/.rhosts is expected not to exist\n     ✔  File /var/spool/uucp/.rhosts is expected not to exist\n     ✔  File /root/.rhosts is expected not to exist\n     ✔  File /usr/share/man/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/empty/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/lib/dhcpcd/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/lib/polkit-1/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /dev/null/.rhosts is expected not to exist\n     ✔  File /var/tmp/portage/.rhosts is expected not to exist\n     ✔  File /home/core/.rhosts is expected not to exist\n     ✔  File /var/empty/.rhosts is expected not to exist\n  ×  cis-dil-benchmark-6.2.15: Ensure all groups in /etc/passwd exist in /etc/group (2 failed)\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 998\n     ✔  /etc/group gids is expected to include 997\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 1\n     ✔  /etc/group gids is expected to include 2\n     ✔  /etc/group gids is expected to include 4\n     ✔  /etc/group gids is expected to include 7\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 13\n     ✔  /etc/group gids is expected to include 14\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 0\n     ✔  /etc/group gids is expected to include 15\n     ✔  /etc/group gids is expected to include 201\n     ✔  /etc/group gids is expected to include 202\n     ✔  /etc/group gids is expected to include 203\n     ✔  /etc/group gids is expected to include 204\n     ✔  /etc/group gids is expected to include 215\n     ✔  /etc/group gids is expected to include 224\n     ✔  /etc/group gids is expected to include 232\n     ✔  /etc/group gids is expected to include 233\n     ✔  /etc/group gids is expected to include 233\n     ✔  /etc/group gids is expected to include 234\n     ✔  /etc/group gids is expected to include 235\n     ×  /etc/group gids is expected to include 236\n     expected [0, 10, 150, 233, 500, 999, 251, 998, 997] to include 236\n     ×  /etc/group gids is expected to include 236\n     expected [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 26, 27, 28, 29, 30, 78, 80, 85, 100, 1..., 204, 215, 224, 232, 233, 234, 235, 242, 244, 245, 246, 248, 249, 250, 252, 406, 500, 65533, 65534] to include 236\n     ✔  /etc/group gids is expected to include 242\n     ✔  /etc/group gids is expected to include 244\n     ✔  /etc/group gids is expected to include 245\n     ✔  /etc/group gids is expected to include 246\n     ✔  /etc/group gids is expected to include 250\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 500\n     ✔  /etc/group gids is expected to include 65534\n  ✔  cis-dil-benchmark-6.2.16: Ensure no duplicate UIDs exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.17: Ensure no duplicate GIDs exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.18: Ensure no duplicate user names exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.19: Ensure no duplicate group names exist\n     ✔  is expected to be nil\n     ✔  is expected to be nil\n  ✔  cis-dil-benchmark-6.2.20: Ensure shadow group is empty\n     ✔  #<Inspec::Resources::EtcGroupView:0x000056415b46c1f0> users is expected to be empty\n     ✔  #<Inspec::Resources::EtcGroupView:0x000056415ad369d0> users is expected to be empty\n\n\nProfile Summary: 68 successful controls, 118 control failures, 43 controls skipped\nTest Summary: 606 successful, 344 failures, 50 skipped\n"
  },
  {
    "path": "CIS/level1-remediation_notes-2020-12-08.md",
    "content": "# CIS review\n\n## Level 1\n\n### Level 1 benchmark feedback\n\n* 1.1.1.1   - cramfs: is not disabled, because it is not even provided\n* 1.1.1.2   - freevxfs: is not disabled, because it is not even provided\n* 1.1.1.3   - jffs2: is not disabled, because it is not even provided\n* 1.1.1.4   - hfs: is not disabled, because it is not even provided\n* 1.1.1.5   - hfsplus: is not disabled, because it is not even provided\n* 1.1.1.6   - squashfs: we provide hardening to remediate\n* 1.1.1.7   - udf: we provide hardening to remediate\n* 1.1.5     - /tmp \"noexec\": remediation provided\n* 1.1.17    - /dev/shm \"noexec\": remediation provided\n* 1.1.23    - usb_storage: we provide hardening to remediate\n* 1.3.1     - aide: available to be run in a container (even the system `toolbox`)\n* 1.3.2     - scheduled aide checks: available through container\n* 1.4.1     - grub config is stored in the cryptographically immutable /usr partition (/usr/boot/syslinux/root.A.cfg and /usr/boot/syslinux/root.B.cfg), though it is readable 0644.\n* 1.4.2     - grub password: remediation provided\n* 1.4.3     - root password: remediation provided (/etc/inittab nor /etc/sysconfig/init will exist or matter)\n* 1.4.4     - core dump restriction: remediation provided\n* 1.7.1.6   - /etc/issue.net does not exist\n* 2.2.1.2   - ntpd: is ready, but not enabled by default. And will run as non-root user \"ntp\"\n* 3.1.1     - sysctl ip_forward: remediation provided\n* 3.1.2     - sysctl send_redirects: remediation provided\n* 3.2.2     - sysctl accept_redirects: remediation provided\n* 3.2.3     - sysctl secure_redirects: remediation provided\n* 3.2.4     - sysctl log_martians: remediation provided\n* 3.2.9     - sysctl accept_ra: remediation provided\n* 3.3.1     - tcp_wrappers (libwrap0): this package is not provided, as it only works for TCP traffic, and unless an application links to libwrap, then the /etc/hosts.{allow,deny} do not apply anyways. Modern applications require iptables, nftables, ipset, and/or BPF rules for network policy.\n* 3.3.2     - see 3.3.1 answer\n* 3.3.3     - see 3.3.1 answer\n* 3.3.4     - see 3.3.1 answer\n* 3.3.5     - see 3.3.1 answer\n* 3.5.1.1   - ip6tables: our default policy is clean slate. remediation provided.\n* 3.5.1.2   - ip6tables: remediation provided\n* 3.5.1.3   - ip6tables: remediation provided\n* 3.5.1.4   - ip6tables ports: remediation provided\n* 3.5.2.1   - iptables: remediation provided\n* 3.5.2.2   - iptables: remediation provided\n* 3.5.2.3   - iptables: remediation provided\n* 3.5.2.4   - iptables: remediation provided\n* 4.2.1.2   - rsyslog: available via container\n* 4.2.1.3   - rsyslog: remediation provided\n* 4.2.1.4   - rsyslog: remediation provided\n* 4.2.1.5   - rsyslog: remediation provided\n* 4.2.2.1   - journald to syslog: remediation provided\n* 4.2.3     - log permissions (faillog and btmp): remediation provided\n* 5.1.1     - cron: this is not provided. Use systemd.timer instead\n* 5.1.2     - cron: this is not provided. Use systemd.timer instead\n* 5.1.3     - cron: this is not provided. Use systemd.timer instead\n* 5.1.4     - cron: this is not provided. Use systemd.timer instead\n* 5.1.5     - cron: this is not provided. Use systemd.timer instead\n* 5.1.6     - cron: this is not provided. Use systemd.timer instead\n* 5.1.7     - cron: this is not provided. Use systemd.timer instead\n* 5.1.8     - cron.allow/cron.deny: concept does not translate to systemd.timer\n* 5.2.4     - sshd protocol: 2 has been the default, and the field is a noop\n* 5.2.5     - sshd: remediation provided\n* 5.2.6     - sshd: remediation provided\n* 5.2.7     - sshd: remediation provided\n* 5.2.8     - sshd: remediation provided\n* 5.2.9     - sshd: remediation provided\n* 5.2.10    - sshd: remediation provided\n* 5.2.11    - sshd: remediation provided\n* 5.2.12    - sshd: remediation provided\n* 5.2.13    - sshd: remediation provided\n* 5.2.14    - sshd: remediation provided\n* 5.2.15    - sshd: remediation provided\n* 5.2.16    - sshd: remediation provided\n* 5.2.17    - sshd: remediation provided\n* 5.2.18    - sshd: remediation provided\n* 5.2.19    - sshd: remediation provided\n* 5.2.22    - sshd: remediation provided\n* 5.2.23    - sshd: remediation provided\n* 5.3.3     - pam: TODO testing needed, as /usr/lib64/pam.d/ is readonly\n* 5.3.4     - pam: TODO testing needed, as /usr/lib64/pam.d/ is readonly\n* 5.4.1.1   - login.defs: remediation provided\n* 5.4.1.2   - login.defs: remediation provided\n* 5.4.1.4   - useradd: remediation provided\n* 5.4.2     - system accounts: TODO not sure about making \"core\" as a UID >=1000 and `/sbin/nologin` for all other accounts\n* 5.4.4     - umask: remediation provided\n* 5.6       - su: su is unusable by any user but root by default (/usr/lib64/pam.d/su is the location)\n* 6.1.6     - /etc/passwd- permission: remediation provided\n* 6.1.11    - unowned files (UID): the config filesystem (i.e. cloud-init, or qemu config) are UID 1000, which is not mapped. Also, this is largely irrelevant for UIDs that are not mapped by the host, as this is a container host, and files on the disk will be owned the full range of the 128 bit integer UIDs.\n* 6.1.12    - unowned files (GID): see 6.1.11 explanation\n* 6.2.15    - accounted for groups: TODO determine why this 236 GID is there (it's not in the qemu image)\n\n### Level 1 hardening notes\n\n* /etc/modprobe.d/blacklist-1.1.1.conf to blacklist modules\n\n```shell\nblacklist cramfs\nblacklist freevxfs\nblacklist jffs2\nblacklist hfs\nblacklist hfsplus\nblacklist squashfs\nblacklist udf\n```\n\n* /tmp with \"noexec\"\n\n```ini\n# /etc/systemd/system/tmp.mount.d/noexec.conf\n[Mount]\nOptions=mode=1777,strictatime,nosuid,nodev,size=50%,nr_inodes=400k,noexec\n```\n\n* /dev/shm with \"noexec\" (could figure this out in a systemd drop-in...)\n\n```shell\necho \"none /dev/shm tmpfs rw,nosuid,nodev,seclabel,noexec 0 0\" >> /etc/fstab\n```\n\n* /etc/modprobe.d/blacklist-1.1.23.conf to blacklist modules\n\n```shell\nblacklist usb_storage\n```\n\n* install aide (NOTE: this will require an updated toolbox:/etc/aide.conf for looking into /media/root/)\n\n```shell\ntoolbox\ndnf install -y aide\naide --init\nmv /var/lib/aide/aide.db{.new,}.gz\naide --check\n```\n\n* check with aide (NOTE: see prior)\n\n```shell\ntoolbox aide --check\n```\n\n* grub/menu.list permissions:\n\n```shell\nchmod 0600 /boot/boot/grub/menu.lst\n# BUG permissions are 0755, and the chmod does not persist on reboot...\n# https://github.com/kinvolk/Flatcar/issues/296\n```\n\n* grub password: /usr/share/oem/grub.cfg\n\n```shell\nset superusers=\"user1\"\npassword user1 password1\n```\n\n* root password: `passwd` to set a root password; or hash in cloud-init/ignition\n* core dump restriction:\n\n```shell\n# /etc/security/limits.d/restrict.conf\n*               hard    core          0\n```\n\n* sysctl (currently there is a bug for persistence of these settings https://github.com/kinvolk/Flatcar/issues/297)\n  * IP forwarding\n\n```sysclt\n# /etc/sysctl.d/forward.conf\nnet.ipv4.ip_forward=0\n```\n\n  * send_redirects; accept_redirects; secure_redirects\n\n```sysctl\n# /etc/sysctl.d/redirects.conf\nnet.ipv4.conf.all.send_redirects=0\nnet.ipv4.conf.default.send_redirects=0\nnet.ipv4.conf.default.accept_redirects=0\nnet.ipv6.conf.all.accept_redirects=0\nnet.ipv6.conf.default.accept_redirects=0\nnet.ipv4.conf.all.secure_redirect=0\nnet.ipv4.conf.default.secure_redirects=0\n```\n\n  * log_martians\n\n```sysctl\n# /etc/sysctl.d/martians.conf\nnet.ipv4.conf.all.log_martians=1\nnet.ipv4.conf.default.log_martians=1\n```\n\n  * accept_ra (router advertisements)\n\n```sysctl\nnet.ipv6.conf.all.accept_ra=0\nnet.ipv6.conf.default.accept_ra=0\n```\n\n  * lastly, after all that;\n\n```shell\nsysctl --system\n# OR\nsystemctl restart systemd-sysctl # this ought to pick this up on reboot...\n```\n\n* ip6tables\n\n```shell\nip6tables -P INPUT DROP\nip6tables -P OUTPUT DROP\nip6tables -P FORWARD DROP\nip6tables -I INPUT 1 -i lo -j ACCEPT\nip6tables -I FORWARD 1 -i lo -j ACCEPT # needs to be validated\nip6tables -I FORWARD 2 -o lo -j ACCEPT # needs to be validated\nip6tables -I FORWARD 3 -i lo -o lo -j ACCEPT # needs to be validated\nip6tables -I OUTPUT 1 -o lo -j ACCEPT\nip6tables -A INPUT -s ::1 -j DROP\nip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT\nip6tables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT\nip6tables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT\nip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT\nip6tables -A INPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT\nip6tables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT\nip6tables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT\nip6tables -A INPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT\nip6tables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT\nip6tables -A INPUT -p udp --dport 68 -j ACCEPT\nip6tables -A INPUT -p tcp --dport 22 -j ACCEPT\n\n# Persist with something like (which may screw up container networking tools):\nsystemctl enable --now ip6tables-store.service ip6tables-restore.service\n```\n\n* iptables:\n\n```shell\niptables -P INPUT DROP\niptables -P OUTPUT DROP\niptables -P FORWARD DROP\niptables -I INPUT 1 -i lo -j ACCEPT\niptables -I FORWARD 1 -i lo -j ACCEPT # needs to be validated\niptables -I FORWARD 2 -o lo -j ACCEPT # needs to be validated\niptables -I FORWARD 3 -i lo -o lo -j ACCEPT # needs to be validated\niptables -I OUTPUT 1 -o lo -j ACCEPT\niptables -A INPUT -s 127.0.0.0/8 -j DROP\niptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT\niptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT\niptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT\niptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT\niptables -A INPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT\niptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT\niptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT\niptables -A INPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT\niptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT\niptables -A INPUT -p udp --dport 68 -j ACCEPT\niptables -A INPUT -p tcp --dport 22 -j ACCEPT\n\n# Persist with something like (which may screw up container networking tools):\nsystemctl enable --now iptables-store.service iptables-restore.service\n```\n\n* rsyslog, configured like a host service\n\n```Dockerfile\n# https://github.com/voxxit/dockerfiles/blob/master/rsyslog/Dockerfile\n\nFROM alpine:latest\n\n#FROM voxxit/base:alpine\n#MAINTAINER Joshua Delsman <j (at) srv.im>\n\nRUN  apk add --update rsyslog \\\n  && rm -rf /var/cache/apk/*\n\nEXPOSE 514 514/udp\n\nVOLUME [ \"/var/log\", \"/etc/rsyslog.d\" ]\n\n# for some reason, the apk comes built with a v5\n# config file. using this one for v8:\nCOPY ./etc/rsyslog.conf /etc/rsyslog.conf\n\nENTRYPOINT [ \"rsyslogd\", \"-n\" ]\n```\n\n```rsyslog\n# rsyslog.conf\n#\n# if you experience problems, check:\n# http://www.rsyslog.com/troubleshoot\n\n$FileCreateMode 0640\n\n#### MODULES ####\n\nmodule(load=\"imuxsock\")    # local system logging support (e.g. via logger command)\n#module(load=\"imklog\")     # kernel logging support (previously done by rklogd)\nmodule(load=\"immark\")      # --MARK-- message support\nmodule(load=\"imudp\")       # UDP listener support\nmodule(load=\"imtcp\")       # TCP listener support\n\ninput(type=\"imudp\" port=\"514\")\ninput(type=\"imtcp\" port=\"514\")\n\n# Log all kernel messages to the console.\n# Logging much else clutters up the screen.\nkern.*                                                 action(type=\"omfile\" file=\"/dev/console\")\n\n# Log anything (except mail) of level info or higher.\n# Don't log private authentication messages!\n*.info;mail.none;authpriv.none;cron.none                action(type=\"omfile\" file=\"/var/log/messages\")\n\n# The authpriv file has restricted access.\nauthpriv.*                                              action(type=\"omfile\" file=\"/var/log/secure\")\n\n# Log all the mail messages in one place.\nmail.*                                                  action(type=\"omfile\" file=\"/var/log/maillog\")\n\n# Log cron stuff\ncron.*                                                  action(type=\"omfile\" file=\"/var/log/cron\")\n\n# Everybody gets emergency messages\n*.emerg                                                 action(type=\"omusrmsg\" users=\"*\")\n\n# Save news errors of level crit and higher in a special file.\nuucp,news.crit                                          action(type=\"omfile\" file=\"/var/log/spooler\")\n\n# Save boot messages also to boot.log\nlocal7.*                                                action(type=\"omfile\" file=\"/var/log/boot.log\")\n\n#*.*          @@loghost.example.com\n\n# Include all .conf files in /etc/rsyslog.d\n$IncludeConfig /etc/rsyslog.d/*.conf\n```\n\n```shell\ndocker run -it --rm --entrypoint=\"\" rsyslog cat /etc/rsyslog.conf > /etc/rsyslog.conf\ndocker run -d -it --name rsyslog --restart=always --env TZ=UTC --cap-add SYSLOG -v /etc/rsyslog.conf:/etc/rsyslog.conf -v /var/log/:/var/log -v /etc/rsyslog.d:/etc/rsyslog.d -p 514:514/udp -p 514:514 rsyslog\n```\n\n* journald\n\n```shell\nsed -i 's/^#*ForwardToSyslog=.*$/ForwardToSyslog=yes/' /etc/systemd/journald.conf\nsed -i 's/^#*Compress=.*$/Compress=yes/' /etc/systemd/journald.conf\nsed -i 's/^#*Storage=.*$/Storage=persistent/' /etc/systemd/journald.conf\nsystemctl restart systemd-journald\n```\n\n* permissions of faillog and btmp\n\n```shell\nchmod 0600 /var/log/faillog\nchmod 0600 /var/log/btmp\n\n# if they're wanting to be sure, then make a systemd unit that sets it on boot\n```\n\n* sshd configs\n\n```shell\ncat /etc/ssh/sshd_config > /tmp/sshd_config\nrm /etc/ssh/sshd_config\nmv /tmp/sshd_config\nchmod 0600 /etc/ssh/sshd_config\n\n# maybe sed -i 'd/...' to clean the file first?\necho \"Protocol 2\" >> /etc/ssh/sshd_config\necho \"LogLevel VERBOSE\" >> /etc/ssh/sshd_config\necho \"X11Forwarding no\" >> /etc/ssh/sshd_config\necho \"MaxAuthTries 4\" >> /etc/ssh/sshd_config\necho \"IgnoreRhosts yes\" >> /etc/ssh/sshd_config\necho \"HostbasedAuthentication no\" >> /etc/ssh/sshd_config\necho \"PermitRootLogin no\" >> /etc/ssh/sshd_config\necho \"PermitEmptyPasswords no\" >> /etc/ssh/sshd_config\necho \"PermitUserEnvironment no\" >> /etc/ssh/sshd_config\necho \"Ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com\" >> /etc/ssh/sshd_config\necho \"MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-512,umac-128-etm@openssh.com,umac-128@openssh.com\" >> /etc/ssh/sshd_config\necho \"KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256\" >> /etc/ssh/sshd_config\necho \"ClientAliveCountMax 0\" >> /etc/ssh/sshd_config\necho \"LoginGraceTime 60\" >> /etc/ssh/sshd_config\necho \"AllowGroups core\" >> /etc/ssh/sshd_config\ncat > /etc/ssh/banner.txt <<EOF\n ____________________________________\n< This machine is under surveillance >\n ------------------------------------\n        \\   ^__^\n         \\  (oo)\\_______\n            (__)\\       )\\/\\\n                ||----w |\n                ||     ||\nEOF\necho \"Banner /etc/ssh/banner.txt\" >> /etc/ssh/sshd_config\necho \"MaxStartups 10:30:60\" >> /etc/ssh/sshd_config\necho \"MaxSessions 4\" >> /etc/ssh/sshd_config\n\nsystemctl restart sshd.service\n```\n\n* pam\n\n```shell\n```\n\n* login.defs\n\n```shell\ncat /etc/login.defs > /tmp/login.defs\nrm /etc/login.defs\nmv /tmp/login.defs /etc/login.defs\nchmod 0644 /etc/login.defs\n\nsed -i 's/^PASS_MAX_DAYS.*$/PASS_MAX_DAYS  365/' /etc/login.defs\nsed -i 's/^PASS_MIN_DAYS.*$/PASS_MIN_DAYS  7/' /etc/login.defs\n```\n\n* useradd defaults\n\n```shell\ncat /etc/default/useradd > /tmp/useradd\nrm /etc/default/useradd\nmv /tmp/useradd /etc/default/useradd\nchmod 0644 /etc/default/useradd\n\nsed -i 's/^INACTIVE.*$/INACTIVE=30/' /etc/default/useradd\n```\n\n* umask for logins\n\n```shell\ncat /etc/profile > /tmp/profile\nrm /etc/profile\nmv /tmp/profile /etc/profile\nchmod 0644 /etc/profile\n\nsed -i 's/^umask.*$/umask 027/' /etc/profile\n```\n\n* passwd- permission\n\n```shell\nchmod 0600 /etc/passwd-\n```\n"
  },
  {
    "path": "CODEOWNERS",
    "content": "# CODEOWNERS file for Flatcar\n# This file defines who is responsible for code review\n# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners\n\n* @flatcar/flatcar-maintainers\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\nWe follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).\n\nPlease contact [private Maintainer mailing list](maintainers@flatcar-linux.org) or the Cloud Native Foundation mediator, conduct@cncf.io, to report an issue.\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing Guide\n\nWelcome! We're so glad you're here and interested in contributing to Flatcar! 💖\n\n## Table of Contents\n\n- [Contributing Guide](#contributing-guide)\n  - [Table of Contents](#table-of-contents)\n  - [Ways to Contribute](#ways-to-contribute)\n  - [Getting Started](#getting-started)\n    - [Finding Issues](#finding-issues)\n    - [Proposing New Features](#proposing-new-features)\n  - [Communication Channels](#communication-channels)\n  - [Development](#development)\n    - [Development Environment Setup](#development-environment-setup)\n    - [Pull Request Lifecycle](#pull-request-lifecycle)\n    - [Authoring PRs](#authoring-prs)\n      - [Commit Best Practices](#commit-best-practices)\n      - [PR Description](#pr-description)\n    - [Commit Guidelines](#commit-guidelines)\n      - [The Rules](#the-rules)\n      - [Examples](#examples)\n\n---\n\nAs a newcomer, you're actually in the best position to help us improve! We'd really love your feedback on:\n\n- Confusing steps when setting up your developer environment\n- Missing information in our guides or documentation\n- Bugs or rough edges in our automation scripts\n\nIf something doesn't make sense or doesn't work, please let us know by opening a bug report — we genuinely appreciate it and every bit of feedback helps make Flatcar better!\n\n---\n\n## Ways to Contribute\n\nThere are so many ways to get involved! We welcome all kinds of contributions:\n\n| Category          | Examples                                                                                                                                                                                                            |\n| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Code**          | New features, bug fixes, builds, CI/CD                                                                                                                                                                              |\n| **Documentation** | Guides, tutorials, API docs                                                                                                                                                                                         |\n| **Community**     | Issue triage, answering questions on Discord/Matrix/Slack                                                                                                                                                           |\n| **Flatcar Apps**  | Create reference implementations for running services on Flatcar (e.g., [Minecraft](https://github.com/flatcar/flatcar-app-minecraft), [Jitsi](https://github.com/flatcar/flatcar-app-jitsi)) — great for learning! |\n| **Outreach**      | Blog posts, talks, presentations, workshops                                                                                                                                                                         |\n| **Coordination**  | Release management, upstream project coordination (e.g., Flatcar CAPI, sysext initiative)                                                                                                                           |\n| **Events**        | Bug fixing days, doc writing days, devrooms, meetups, conferences                                                                                                                                                   |\n| **Design**        | Web design, maintaining the Flatcar website                                                                                                                                                                         |\n\nNot everything happens through a GitHub pull request. Please come to our [meetings or contact us](https://github.com/flatcar/Flatcar/blob/main/README.md#community-meetings) to discuss how we can work together — we'd love to meet you!\n\n---\n\n## Getting Started\n\nThinking of contributing? Awesome! The best way to start is to engage with the project early — drop a comment on an existing issue or open a new one. Let us know what you're interested in working on. This helps us help you, and it's often the key to getting your contribution accepted smoothly.\n\nTo report bugs or request features, just file an [issue](https://github.com/flatcar/Flatcar/issues) — we're always happy to help point you in the right direction!\n\n### Finding Issues\n\nNot sure where to start? No worries — we've got you covered!\n\n| Label                                                                                                                 | Description                                             |\n| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |\n| [`good first issue`](https://github.com/flatcar/Flatcar/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) | Extra guidance to help you make your first contribution |\n| [`help wanted`](https://github.com/flatcar/Flatcar/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)           | Issues suitable for non-core maintainers                |\n\n> 💡 **Tip:** Don't see any issues with these labels? No problem! There's always something exciting to work on. Hop on [Discord](https://discord.gg/PMYjFUsJyq) or join one of our Office Hours — we'll find something that fits your interests and skill level.\n\n> 🌟 **Great for newcomers:** Consider contributing a [Flatcar App](https://github.com/flatcar/Flatcar/issues/2029)! A Flatcar App is a reference implementation showing how to run a specific service on Flatcar (e.g., [Minecraft Server](https://github.com/flatcar/flatcar-app-minecraft), [Jitsi](https://github.com/flatcar/flatcar-app-jitsi)). It's a fantastic way to learn Flatcar hands-on while creating something awesome that helps other newcomers learn too!\n\nFound something you'd like to work on? Excellent! Just leave a comment like \"I'd like to work on this\" — that's all it takes to claim it.\n\n### Proposing New Features\n\nGot an idea for a new feature or a big architectural change? We'd love to hear it! Don't be shy — the best approach is to open an issue first so we can discuss it together before you invest time in implementation.\n\nFor package requests, use the \"New Package Request\" issue type and check out [Adding New Packages](https://github.com/flatcar/Flatcar/blob/main/adding-new-packages.md) for guidelines.\n\n---\n\n## Communication Channels\n\nFor all communication channels, community meetings, and social media links, see the [Communication Channels](https://github.com/flatcar/Flatcar/blob/main/README.md#communication-channels) section in the README. Come hang out with us on [Discord](https://discord.gg/PMYjFUsJyq)!\n\n---\n\n## Development\n\n### Development Environment Setup\n\nReady to dive into the code? Let's go! Our [Developer Guides](https://www.flatcar.org/docs/latest/reference/developer-guides/) will walk you through the Flatcar SDK and common tasks like adding or upgrading packages. Start here:\n\n- [Building Custom Images from Source](https://www.flatcar.org/docs/latest/reference/developer-guides/sdk-modifying-flatcar/)\n\nThese guides will give you a solid foundation for working with the SDK and help you submit PRs that sail through review!\n\n### Pull Request Lifecycle\n\nPull requests can be issued from repository branches (maintainers only) or from forks. The project treats all PRs equally for review and merge, regardless of origin.\n\n**Requirements:**\n- Successful CI\n- At least one LGTM from a maintainer who is not the PR author\n- Approvers may be co-authors (allowing reviewers to suggest changes)\n\n**Stages:**\n\n| Stage                   | Description                                                                                                      |\n| ----------------------- | ---------------------------------------------------------------------------------------------------------------- |\n| **1. Filed**            | PR is created. Draft PRs only undergo build+test when explicitly requested.                                      |\n| **2. Ready for Review** | Maintainers can begin reviewing and approve CI runs. Authors may file directly in this stage if the PR is ready. |\n| **3. Under Review**     | Maintainers add comments, request changes, and vet against Flatcar's mission and core principles.                |\n| **4. Merged or Closed** | PR is merged upon approval or closed without merge.                                                              |\n\n> 💡 **Tip:** PR feeling stuck? Don't be shy — reach out on [Discord](https://discord.gg/PMYjFUsJyq) or bring it up in a community meeting. We're here to help and we want to see your contribution succeed!\n\n### Authoring PRs\n\nHere are some tips to make your PRs shine and get merged quickly:\n\n#### Commit Best Practices\n\n- **Atomic commits:** Each commit should be self-contained and address a single logical change. See the Linux Kernel guide on [separating changes][linux-sep-changes].\n\n- **Meaningful messages:** Commit messages should explain _why_ something is done, not just _what_. See [describing changes][linux-desc-changes].\n\n- **Clean history:** Use `git rebase` to squash and order commits logically. Don't retain messy development history.\n\n- **No throwaway commits:** Don't add code you'll change in a later commit. Squash related changes together.\n\n- **Self-review:** Give your own code a critical look before submitting — you'll often spot things you missed, and reviewers will thank you!\n\n#### PR Description\n\nThink of your PR description as a cover letter. Help reviewers understand:\n- Explain _why_ you're proposing the change\n- Provide an overview of the changes\n- List any unresolved questions or TODO items\n- Give reviewers the context they need\n\n### Commit Guidelines\n\nGreat commit messages make everyone's life easier (and make you look like a pro!). Here's the format we use:\n\n```\n<area>: <description of changes>\n\nDetailed information about the commit message goes here.\n```\n\n#### The Rules\n\n| Rule                  | Details                                                                                                              |\n| --------------------- | -------------------------------------------------------------------------------------------------------------------- |\n| **Line length**       | Title ≤ 72 characters; body wrapped at 72 characters                                                                 |\n| **Blank line**        | Separate title and body with one empty line                                                                          |\n| **Title mood**        | Use [imperative mood](https://chris.beams.io/posts/git-commit/#imperative) (e.g., \"Add feature\" not \"Added feature\") |\n| **Title punctuation** | No period at the end                                                                                                 |\n| **Body punctuation**  | End sentences with periods                                                                                           |\n\n#### Examples\n\n✅ **Good:**\n```\napp-shells/bash: update ebuild to 5.3\n\nGentoo upstream has unmasked bash 5.3 and declared it stable.\nThis change updates the component to use the latest upstream ebuild.\n```\n\n❌ **Bad:**\n```\nUpdate bash\n\nUpdated bash to the latest one.\n```\n\n---\n\nThanks for reading, and thank you so much for contributing! 🙏 We're thrilled to have you as part of the Flatcar community. If you have any questions at all, don't hesitate to reach out — we're always happy to help and can't wait to see what you build! 🎉\n\n[linux-sep-changes]: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#separate-your-changes\n[linux-desc-changes]: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes"
  },
  {
    "path": "EMERITUS_MAINTAINERS.md",
    "content": "# Flatcar Container Linux Emeritus Maintainers\r\n\r\nThis file lists contributors to the Flatcar project whose maintainership rests.\r\nIt is meant to provide a fast-track back to active maintainer status should the emeritus decide to do so.\r\n\r\n\r\n* William Light [@wrl](https://github.com/wrl)"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "MAINTAINERS.md",
    "content": "# Maintainers\n\nSee [Governance](https://github.com/flatcar/Flatcar/blob/main/governance.md) for governance, access, and voting guidelines as well as maintainer responsibilities. Everybody listed in this file is a maintainer as per governance definition. See also [Onboarding](https://github.com/flatcar/Flatcar/blob/main/ONBOARDING.md) for the new maintainer onboarding checklist, [Contributing](https://github.com/flatcar/Flatcar/blob/main/CONTRIBUTING.md) for contribution guidelines, [README](https://github.com/flatcar/Flatcar/blob/main/README.md) for general project information, and [Security](https://github.com/flatcar/Flatcar/blob/main/SECURITY.md) for security policies and reporting.\n\n\n## Flatcar Maintainers\n\nOfficial Flatcar project maintainers. All maintainers listed here should also be present in the [CNCF project maintainers list](https://github.com/cncf/foundation/blob/main/project-maintainers.csv).\n\n| Name              | GitHub                                                 |\n| ----------------- | ------------------------------------------------------ |\n| James Le Cuirot   | [@chewi](https://github.com/chewi)                     |\n| Thilo From        | [@t-lo](https://github.com/t-lo)                       |\n| Krzesimir Nowak   | [@krnowak](https://github.com/krnowak)                 |\n| Sayan Chowdhury   | [@sayanchowdhury](https://github.com/sayanchowdhury)   |\n| Gabriel Samfira   | [@gabriel-samfira](https://github.com/gabriel-samfira) |\n| Kai Lüke          | [@pothos](https://github.com/pothos)                   |\n| Adrian Vladu      | [@ader1990](https://github.com/ader1990)               |\n| Daniel Zatovic    | [@danzatt](https://github.com/danzatt)                 |\n| Jeremi Piotrowski | [@jepio](https://github.com/jepio)                     |\n| Dongsu Park       | [@dongsupark](https://github.com/dongsupark)           |\n| Danielle Tal      | [@miao0miao](https://github.com/miao0miao)             |\n| Mathieu Tortuyaux | [@tormath1](https://github.com/tormath1)               |\n| Ervin Racz        | [@ervcz](https://github.com/ervcz)                     |\n| Jan Bronicki      | [@John15321](https://github.com/John15321)             |\n\n## Flatcar Security Team\n\nThe Flatcar Security Task Force.\n\n| Name              | GitHub                                               |\n| ----------------- | ---------------------------------------------------- |\n| Vincent Batts     | [@vbatts](https://github.com/vbatts)                 |\n| Thilo Fromm       | [@t-lo](https://github.com/t-lo)                     |\n| Krzesimir Nowak   | [@krnowak](https://github.com/krnowak)               |\n| Sayan Chowdhury   | [@sayanchowdhury](https://github.com/sayanchowdhury) |\n| Kai Lüke          | [@pothos](https://github.com/pothos)                 |\n| Dongsu Park       | [@dongsupark](https://github.com/dongsupark)         |\n| Mathieu Tortuyaux | [@tormath1](https://github.com/tormath1)             |\n\n## Maintainer Subgroups\n\nSubgroups are teams of maintainers responsible for specific sets of repositories. They serve as primary reviewers and first responders for changes in their area. These subgroups are enforced via [GitHub teams](https://github.com/orgs/flatcar/teams) and `CODEOWNERS` files in each repository. All groups and subgroups listed in this document are sourced from the [Flatcar GitHub teams page](https://github.com/orgs/flatcar/teams). Repositories not listed below have `@flatcar/flatcar-maintainers` assigned in their `CODEOWNERS`, meaning all maintainers will be requested for review.\n\n| Subgroup                  | Description                                                     | Members                                                                                                                                                                                                                                                                                                            | Repositories                                                                                                                                                                                                                                                           |\n| ------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **nebraska-maintainers**  | Reviews Nebraska-related update and Omaha projects for Flatcar. | [@t-lo](https://github.com/t-lo)<br>[@pothos](https://github.com/pothos)<br>[@jepio](https://github.com/jepio)<br>[@miao0miao](https://github.com/miao0miao)<br>[@tormath1](https://github.com/tormath1)<br>[@ervcz](https://github.com/ervcz)                                                                     | [flatcar-maintainer-private](https://github.com/flatcar/flatcar-maintainer-private)<br>[go-omaha](https://github.com/flatcar/go-omaha)<br>[nebraska](https://github.com/flatcar/nebraska)<br>[nebraska-update-agent](https://github.com/flatcar/nebraska-update-agent) |\n| **flatcar-integrations**  | Reviews integrations and extension projects for Flatcar.        | [@t-lo](https://github.com/t-lo)<br>[@danzatt](https://github.com/danzatt)<br>[@tormath1](https://github.com/tormath1)<br>[@John15321](https://github.com/John15321)<br>[@pothos](https://github.com/pothos)                                                                                                       | [sysext-bakery](https://github.com/flatcar/sysext-bakery)<br>[flatcar-app-minecraft](https://github.com/flatcar/flatcar-app-minecraft)<br>[flatcar-app-jitsi](https://github.com/flatcar/flatcar-app-jitsi)                                                            |\n| **flatcar-communication** | Reviews website, social, and communication content for Flatcar. | [@sayanchowdhury](https://github.com/sayanchowdhury)<br>[@pothos](https://github.com/pothos)<br>[@LexiNadolski](https://github.com/LexiNadolski)<br>[@tormath1](https://github.com/tormath1)<br>[@ervcz](https://github.com/ervcz)<br>[@John15321](https://github.com/John15321)                                   | [flatcar-website](https://github.com/flatcar/flatcar-website)<br>[flatcar-socials](https://github.com/flatcar/flatcar-socials)                                                                                                                                         |\n| **flatcar-ci**            | Reviews CI/CD and build automation for Flatcar.                 | [@tormath1](https://github.com/tormath1)<br>[@jepio](https://github.com/jepio)<br>[@sayanchowdhury](https://github.com/sayanchowdhury)<br>[@chewi](https://github.com/chewi)<br>[@pothos](https://github.com/pothos)<br>[@dongsupark](https://github.com/dongsupark)<br>[@John15321](https://github.com/John15321) | [mantle](https://github.com/flatcar/mantle)<br>[jenkins-os](https://github.com/flatcar/jenkins-os)<br>[jenkins-secret](https://github.com/flatcar/jenkins-secret)                                                                                                      |\n| **flatcar-infra**         | Reviews infrastructure and secrets management for Flatcar.      | [@tormath1](https://github.com/tormath1)<br>[@John15321](https://github.com/John15321)<br>[@sayanchowdhury](https://github.com/sayanchowdhury)<br>[@jepio](https://github.com/jepio)<br>[@pothos](https://github.com/pothos)<br>[@dongsupark](https://github.com/dongsupark)                                       | [flatcar-linux-build-secrets](https://github.com/flatcar/flatcar-linux-build-secrets)<br>[flatcar-linux-infra-secrets](https://github.com/flatcar/flatcar-linux-infra-secrets)<br>[flatcar-linux-infra](https://github.com/flatcar/flatcar-linux-infra)                |"
  },
  {
    "path": "ONBOARDING.md",
    "content": "# Maintainer Onboarding Checklist\n\nWelcome to the Flatcar maintainer team! 🎉\n\nThis document is a **template** for onboarding new Flatcar maintainers.\n\n> **How to use this template:**\n> Copy the raw Markdown contents of this file and paste them into a new GitHub issue (e.g. titled _\"Onboarding: \\<new maintainer's name\\>\"_). Track progress and tick off checklist items in that issue — do **not** edit the checkboxes in this file. This document remains the canonical template for all future onboardings.\n>\n> **Improving this template:**\n> If you find that this document does not reflect the realities of onboarding (missing steps, outdated information, etc.), please open a pull request to update it.\n\nThe checklist is split into two parts:\n\n- **[For the onboarding coordinator](#for-the-onboarding-coordinator)** — actions that an existing maintainer or project coordinator must perform on behalf of the new maintainer.\n- **[For the new maintainer](#for-the-new-maintainer)** — actions the new maintainer should complete themselves.\n\nOnce onboarding is complete, both parties should confirm each item is ticked off in the tracking issue.\n\n---\n\n## For the Onboarding Coordinator\n\nThese steps require elevated access and must be completed by an existing maintainer or project coordinator.\n\n### GitHub Access\n\n- [ ] Add the new maintainer to the [flatcar-maintainers](https://github.com/orgs/flatcar/teams/flatcar-maintainers) GitHub team.\n- [ ] Verify the new maintainer has appropriate permissions on all relevant repositories (see [MAINTAINERS.md](./MAINTAINERS.md) for the list of repositories).\n- [ ] Assign the new maintainer to the relevant PR review groups based on their area of focus, for example:\n  - `flatcar-ci`\n  - `nebraska-maintainers`\n  - Other repository-specific teams as applicable.\n- [ ] If the new maintainer will be involved in release management, add them to the Nebraska read-only (`ro`) or read-write (`rw`) groups in the Nebraska release process as appropriate. See [RELEASES.md](./RELEASES.md) for the full release guide.\n\n### CNCF Registration\n\n- [ ] Add the new maintainer to the [CNCF project maintainers list](https://github.com/cncf/foundation/blob/main/project-maintainers.csv) by opening a pull request against the [cncf/foundation](https://github.com/cncf/foundation/) repository (see [example PR](https://github.com/cncf/foundation/pull/1075)).\n- [ ] Ensure the new maintainer has access to CNCF accounts and services used by the project (e.g. CNCF service desk, CNCF Slack).\n\n### Mailing Lists\n\nAdd the new maintainer to the following mailing lists:\n\n**Private lists** (maintainer-only):\n- [ ] `maintainers@flatcar-linux.org` — maintainer coordination and voting\n- [ ] Infra mailing list — infrastructure and operational discussions\n- [ ] Security mailing list — undisclosed security issue handling\n\n**Public lists** (community-facing):\n- [ ] [Flatcar Users](https://groups.google.com/g/flatcar-linux-user)\n\n### Infrastructure Access\n\nGrant the new maintainer access to the following infrastructure systems (at minimum read/user level; escalate as required by their role):\n\n- [ ] Jenkins (CI)\n\n### Communication and Collaboration Tools\n\n- [ ] Grant access to the shared Flatcar events Google Calendar.\n- [ ] Grant access to the Flatcar YouTube channel.\n- [ ] Grant access to the [HackMD](https://hackmd.io) workspace used for collaborative documents.\n\n### Linux Foundation\n\n- [ ] Ensure the new maintainer has a Linux Foundation account.\n- [ ] Grant access to the Linux Foundation Jira project used for tracking Flatcar work items.\n\n---\n\n## For the New Maintainer\n\nThese are steps you should complete yourself after your coordinator has provisioned your access.\n\n### GitHub\n\n- [ ] Accept the invitation to the [flatcar GitHub organisation](https://github.com/flatcar) and the `flatcar-maintainers` team.\n- [ ] Review the list of repositories you have been added to and familiarise yourself with their purpose (see [MAINTAINERS.md](./MAINTAINERS.md)).\n- [ ] Review the [Governance document](./governance.md) to understand the project's decision-making process, voting, and maintainer responsibilities.\n\n### Calendar and Meetings\n\n- [ ] Add the Flatcar community calendar to your calendar app using the iCal link:\n  `https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics`\n- [ ] Alternatively, subscribe via the [Google Calendar link](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com).\n- [ ] Attend your first [Flatcar Developer Sync](https://meet.flatcar.org/OfficeHours) — check the community calendar for the current schedule.\n- [ ] Attend your first [Flatcar Office Hours](https://meet.flatcar.org/OfficeHours) — check the community calendar for the current schedule.\n\n### Mailing Lists\n\n- [ ] Confirm you have been added to the private maintainer, infra, and security mailing lists and that you can send and receive messages.\n- [ ] Confirm you have been subscribed to the [Flatcar Users](https://groups.google.com/g/flatcar-linux-user) public mailing list.\n\n### Community Channels\n\n- [ ] Join the Flatcar Discord server: [discord.gg/PMYjFUsJyq](https://discord.gg/PMYjFUsJyq)\n- [ ] Join the Flatcar Matrix room: [#flatcar:matrix.org](https://app.element.io/#/room/#flatcar:matrix.org)\n- [ ] Join the [#flatcar channel](https://kubernetes.slack.com/archives/C03GQ8B5XNJ) in the Kubernetes Slack workspace.\n\n### Infrastructure and Tooling\n\n- [ ] Verify your access to Jenkins\n- [ ] Log in to HackMD and confirm access to shared Flatcar documents.\n- [ ] Log in to the Linux Foundation Jira and confirm access to the Flatcar project board.\n- [ ] Verify CNCF account access.\n\n### Knowledge Sharing\n\n- [ ] Schedule onboarding knowledge-sharing sessions with existing maintainers to cover key areas of the project. Suggested topics include:\n  - Overview of the Flatcar build system and SDK\n  - CI/CD pipeline and infrastructure\n  - Release management process (see [RELEASES.md](./RELEASES.md))\n  - Security response process\n  - Governance and decision-making\n- [ ] Read through the [Flatcar developer guides](https://www.flatcar.org/docs/latest/reference/developer-guides/) and the [SDK how-to](https://www.flatcar.org/docs/latest/reference/developer-guides/sdk-modifying-flatcar/).\n- [ ] Review the [CONTRIBUTING.md](./CONTRIBUTING.md) guide.\n- [ ] Review the [SECURITY.md](./SECURITY.md) policy.\n- [ ] Review the [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md).\n\n---\n\n## Questions and Support\n\nIf you have any questions during onboarding, please reach out to the maintainer team via:\n\n- Discord: [discord.gg/PMYjFUsJyq](https://discord.gg/PMYjFUsJyq)\n- Matrix: [#flatcar:matrix.org](https://app.element.io/#/room/#flatcar:matrix.org)\n- Slack: [#flatcar](https://kubernetes.slack.com/archives/C03GQ8B5XNJ) in the Kubernetes Slack org\n- Private maintainer mailing list: `maintainers@flatcar-linux.org`\n"
  },
  {
    "path": "README.md",
    "content": "<div style=\"text-align: center\">\n\n[![Flatcar OS](https://img.shields.io/badge/Flatcar-Website-blue?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNi4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4wIiBpZD0ia2F0bWFuXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgODAwIDYwMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDYwMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzA5QkFDODt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQ0MCwxODIuOGgtMTUuOXYxNS45SDQ0MFYxODIuOHoiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MDAuNSwzMTcuOWgtMzEuOXYxNS45aDMxLjlWMzE3Ljl6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNTQzLjgsMzE3LjlINTEydjE1LjloMzEuOVYzMTcuOXoiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik02NTUuMiw0MjAuOXYtOTUuNGgtMTUuOXY5NS40aC0xNS45VjI2MmgtMzEuOVYxMzQuOEgyMDkuNFYyNjJoLTMxLjl2MTU5aC0xNS45di05NS40aC0xNnY5NS40aC0xNS45djMxLjINCgloMzEuOXYxNS44aDQ3Ljh2LTE1LjhoMTUuOXYxNS44SDI3M3YtMTUuOGgyNTQuOHYxNS44aDQ3Ljh2LTE1LjhoMTUuOXYxNS44aDQ3Ljh2LTE1LjhoMzEuOXYtMzEuMkg2NTUuMnogTTQ4Ny44LDE1MWg3OS42djMxLjgNCgloLTIzLjZ2NjMuNkg1MTJ2LTYzLjZoLTI0LjJMNDg3LjgsMTUxTDQ4Ny44LDE1MXogTTIzMywyMTQuNlYxNTFoNjMuN3YyMy41aC0zMS45djE1LjhoMzEuOXYyNC4yaC0zMS45djMxLjhIMjMzVjIxNC42eiBNMzA1LDMxNy45DQoJdjE1LjhoLTQ3Ljh2MzEuOEgzMDV2NDcuN2gtOTUuNVYyODYuMUgzMDVMMzA1LDMxNy45eiBNMzEyLjYsMjQ2LjRWMTUxaDMxLjl2NjMuNmgzMS45djMxLjhMMzEyLjYsMjQ2LjRMMzEyLjYsMjQ2LjRMMzEyLjYsMjQ2LjR6DQoJIE00NDguMywzMTcuOXY5NS40aC00Ny44di00Ny43aC0zMS45djQ3LjdoLTQ3LjhWMzAyaDE1Ljl2LTE1LjhoOTUuNVYzMDJoMTUuOUw0NDguMywzMTcuOXogTTQ0MCwyNDYuNHYtMzEuOGgtMTUuOXYzMS44aC0zMS45DQoJdi03OS41aDE1Ljl2LTE1LjhoNDcuOHYxNS44aDE1Ljl2NzkuNUg0NDB6IE01OTEuNiwzMTcuOXY0Ny43aC0xNS45djE1LjhoMTUuOXYzMS44aC00Ny44di0zMS43SDUyOHYtMTUuOGgtMTUuOXY0Ny43aC00Ny44VjI4Ni4xDQoJaDEyNy4zVjMxNy45eiIvPg0KPC9zdmc+DQo=)](https://www.flatcar.org/)\n[![Discord](https://img.shields.io/badge/Discord-Chat%20with%20us!-5865F2?logo=discord)](https://discord.gg/PMYjFUsJyq)\n[![Matrix](https://img.shields.io/badge/Matrix-Chat%20with%20us!-green?logo=matrix)](https://app.element.io/#/room/#flatcar:matrix.org)\n[![Slack](https://img.shields.io/badge/Slack-Chat%20with%20us!-4A154B?logo=slack)](https://kubernetes.slack.com/archives/C03GQ8B5XNJ)\n[![Twitter Follow](https://img.shields.io/twitter/follow/flatcar?style=social)](https://x.com/flatcar)\n[![Mastodon Follow](https://img.shields.io/badge/Mastodon-Follow-6364FF?logo=mastodon)](https://hachyderm.io/@flatcar)\n[![Bluesky](https://img.shields.io/badge/Bluesky-Follow-0285FF?logo=bluesky)](https://bsky.app/profile/flatcar.org)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/10926/badge)](https://www.bestpractices.dev/projects/10926)\n\n\n> **Note:** To file an issue for any Flatcar repository, please use the [central Flatcar issue tracker](https://github.com/flatcar/Flatcar/issues).\n</div>\n\n# Flatcar Container Linux\n\nWelcome to the Flatcar community! Whether you're a user, contributor, or just curious — we're glad you're here! 👋\n\n_Flatcar Container Linux is a fully open source, minimal-footprint, secure by default and always up-to-date Linux distribution for running containers at scale._\n\nFlatcar ships only the essentials needed to run containers — no package manager, no configuration drift. Its immutable, read-only filesystem minimizes attack surfaces, and atomic, automated updates keep your system secure and up-to-date without manual intervention.\n\nDon't forget to check out [flatcar.org](https://www.flatcar.org/) for documentation, guides, and other useful resources!\n\n## Table of Contents\n\n- [Flatcar Container Linux](#flatcar-container-linux)\n  - [Table of Contents](#table-of-contents)\n  - [Install and Operate Flatcar](#install-and-operate-flatcar)\n  - [Communication Channels](#communication-channels)\n      - [Social Media](#social-media)\n    - [Community Meetings](#community-meetings)\n      - [Office Hours](#office-hours)\n      - [Developer Syncs](#developer-syncs)\n  - [Report Bugs and Request Features](#report-bugs-and-request-features)\n  - [Participate and Contribute](#participate-and-contribute)\n    - [Becoming a Maintainer](#becoming-a-maintainer)\n  - [Project Status and Roadmap](#project-status-and-roadmap)\n  - [Release Process](#release-process)\n    - [LTS](#lts)\n  - [Project Governance](#project-governance)\n  - [Code of Conduct](#code-of-conduct)\n  - [Reference](#reference)\n\n---\n\n## Install and Operate Flatcar\n\nFlatcar Container Linux has a dedicated [documentation site](https://www.flatcar.org/docs/latest/). Start here:\n\n- [Getting Started](https://www.flatcar.org/docs/latest/installing/) — covers Ignition, local testing with QEMU, automatic updates, and cloud providers\n\n| Resource                    | Link                                                     |\n| --------------------------- | -------------------------------------------------------- |\n| **Current Releases**        | [flatcar.org/releases](https://www.flatcar.org/releases) |\n| **Interoperability Matrix** | [interop-matrix.md](interop-matrix.md)                   |\n| **CIS Benchmarks**          | [CIS reports](CIS/README.md)                             |\n\n---\n\n## Communication Channels\n\nWe're a friendly bunch and always excited to chat! Here's where you can find us:\n\n| Channel                  | Link                                                                                                           |\n| ------------------------ | -------------------------------------------------------------------------------------------------------------- |\n| **Discord** (preferred)  | [discord.gg/PMYjFUsJyq](https://discord.gg/PMYjFUsJyq) — text, voice & video with contributors and maintainers |\n| **Matrix**               | [#flatcar:matrix.org](https://app.element.io/#/room/#flatcar:matrix.org)                                       |\n| **Slack**                | [#flatcar](https://kubernetes.slack.com/archives/C03GQ8B5XNJ) (Kubernetes Slack)                               |\n| **GitHub Discussions**   | [flatcar/Flatcar/discussions](https://github.com/flatcar/Flatcar/discussions)                                  |\n| **Mailing List (Users)** | [flatcar-linux-user](https://groups.google.com/g/flatcar-linux-user)                                           |\n\n> 💡 Want to report a bug or request a feature? [File an issue](https://github.com/flatcar/Flatcar/issues/new/choose). Have a question or not sure where to start? Jump into one of our chats and ask — we're happy to help!\n\n#### Social Media\n\n| Platform     | Link                                                   |\n| ------------ | ------------------------------------------------------ |\n| **Mastodon** | [@flatcar@hachyderm.io](https://hachyderm.io/@flatcar) |\n| **Bluesky**  | [@flatcar.org](https://bsky.app/profile/flatcar.org)   |\n| **X**        | [@flatcar](https://x.com/flatcar)                      |\n\n### Community Meetings\n\nCome say hi! Check our [Google Calendar](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com) ([iCal](https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics)) for all meeting times.\n\n#### Office Hours\n\n|            |                                                                                                                                      |\n| ---------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n| **When**   | 2nd Wednesday of every month at 2:30pm UTC (double check calendar)                                                                   |\n| **Where**  | [meet.flatcar.org/OfficeHours](https://meet.flatcar.org/OfficeHours) (all you need is a browser, no installations/accounts required) |\n| **Agenda** | [Office Hours Discussions](https://github.com/flatcar/Flatcar/discussions/categories/flatcar-office-hours)                           |\n\nEngage with the Flatcar community, learn about project directions, discuss contributions, and catch occasional demos of image-based Linux technologies. Each call includes a brief Release Planning update.\n\n#### Developer Syncs\n\n|            |                                                                                                                                      |\n| ---------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n| **When**   | 4th Wednesday of every month at 2:30pm UTC (check calendar)                                                                          |\n| **Where**  | [meet.flatcar.org/OfficeHours](https://meet.flatcar.org/OfficeHours) (all you need is a browser, no installations/accounts required) |\n| **Agenda** | [Developer Sync Discussions](https://github.com/flatcar/Flatcar/discussions/categories/flatcar-developer-sync)                       |\n\nBacklog grooming, task planning, roadmap discussions, and day-to-day issues. If you want to get hands-on with development, this is the call for you!\n\n> 🎥 All meetings are live-streamed on YouTube — recordings are linked in each meeting's agenda.\n\n---\n\n## Report Bugs and Request Features\n\nFound a bug or have a feature request? [File an issue](https://github.com/flatcar/Flatcar/issues/new/choose) — please select the appropriate issue type to help us triage.\n\n> 💡 **Tip:** Want a new package in the base image? Use the \"New Package Request\" issue type and check out the [package addition guidelines](adding-new-packages.md).\n\n---\n\n## Participate and Contribute\n\nThinking of making a contribution? Engage with the project early — comment on an existing issue or create a new one. Making your intent visible is often the key to getting your work accepted!\n\nFor full details, check out our [Contributing Guide](CONTRIBUTING.md) which covers:\n\n| Topic                  | What you'll find                                                                                        |\n| ---------------------- | ------------------------------------------------------------------------------------------------------- |\n| **Ways to Contribute** | Code, docs, community, outreach, and more                                                               |\n| **Finding Issues**     | Labels like `good first issue` and `help wanted`                                                        |\n| **Development Setup**  | SDK walkthrough and [developer guides](https://www.flatcar.org/docs/latest/reference/developer-guides/) |\n| **PR Lifecycle**       | From filing to merge                                                                                    |\n| **Commit Guidelines**  | Format, style, and best practices                                                                       |\n\n> 🌟 **New to Flatcar?** Consider building a [Flatcar App](https://github.com/flatcar/Flatcar/issues/2029) — a great hands-on way to learn!\n\n### Becoming a Maintainer\n\nThe Flatcar maintainer path is laid out in our [governance document](governance.md).\n\n---\n\n## Project Status and Roadmap\n\n| Board                                                                    | Description                                                |\n| ------------------------------------------------------------------------ | ---------------------------------------------------------- |\n| [**Issue Tracker**](https://github.com/flatcar/Flatcar/issues)           | Short-term concerns — bugs and minor enhancements          |\n| [**Tactical Board**](https://github.com/orgs/flatcar/projects/7/views/1) | What maintainers and contributors are currently working on |\n| [**Release Board**](https://github.com/orgs/flatcar/projects/7/views/8)  | Completed items assigned to upcoming releases              |\n| [**Releases Tracker**](https://github.com/orgs/flatcar/projects/7/views/24) | Track the status of each release across all channels    |\n| [**Roadmap Board**](https://github.com/orgs/flatcar/projects/7/views/9)  | Epics, major features, and long-term items                 |\n\n---\n\n## Release Process\n\nFlatcar Container Linux follows an **Alpha → Beta → Stable** release process:\n\n- **New features** and major version upgrades enter Alpha, transition to Beta, then land in Stable.\n- **Bug fixes** are released directly to the affected channel (Alpha fixes go to Alpha, Beta to Beta, Stable to Stable).\n\nWithin each channel, updates are planned on a **14-day cadence**. Major releases follow a broader rhythm:\n\n| Promotion | Target cadence |\n|-----------|----------------|\n| New major **Alpha** | Monthly |\n| Alpha → **Beta** | Every 2 months |\n| Beta → **Stable** | Every 3–4 months |\n| New **LTS** | Yearly |\n\nUp-to-date planning status is reflected in our [release planning board](https://github.com/orgs/flatcar/projects/7). For the full release process documentation, see the [Release Guide](RELEASES.md).\n\n### LTS\n\nSome users prefer to avoid frequent version upgrades. The Flatcar **LTS channel** provides a longer support window:\n\n| Detail                 | Value                     |\n| ---------------------- | ------------------------- |\n| **Based on**           | A \"golden Stable\" release |\n| **Maintenance period** | 18 months                 |\n| **New LTS frequency**  | Every 12 months           |\n| **Upgrade window**     | 6 months overlap          |\n\n---\n\n## Project Governance\n\nFlatcar is a community-driven project. Every participant — bug reporter, feature requester, code contributor — is considered a contributor. Maintainers have commit access and help govern the project, driving it forward and maintaining its scope and vision.\n\nFor full details see our [governance document](governance.md).\n\n| Resource            | Link                             |\n| ------------------- | -------------------------------- |\n| **Governance**      | [governance.md](governance.md)   |\n| **Maintainers**     | [MAINTAINERS.md](MAINTAINERS.md) |\n| **Security Policy** | [SECURITY.md](SECURITY.md)       |\n\n---\n\n## Code of Conduct\n\nWe follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).\n\nPlease contact the [private Maintainer mailing list](mailto:maintainers@flatcar-linux.org) or the Linux Foundation mediator, Mishi Choudhary ([mishi@linux.com](mailto:mishi@linux.com)), to report an issue.\n\n---\n\n## Reference\n\n| Document                                           | Description                                                                            |\n| -------------------------------------------------- | -------------------------------------------------------------------------------------- |\n| [CONTRIBUTING.md](CONTRIBUTING.md)                 | How to contribute — finding issues, development setup, PR lifecycle, commit guidelines |\n| [RELEASES.md](RELEASES.md)                         | Release channels, downloads, and the release process                                   |\n| [governance.md](governance.md)                     | Project governance model, maintainer roles, and decision-making                        |\n| [MAINTAINERS.md](MAINTAINERS.md)                   | Current list of project maintainers                                                    |\n| [EMERITUS_MAINTAINERS.md](EMERITUS_MAINTAINERS.md) | Former maintainers who have stepped down                                               |\n| [ONBOARDING.md](ONBOARDING.md)                     | Checklist for onboarding new maintainers                                               |\n| [SECURITY.md](SECURITY.md)                         | Security policy and vulnerability reporting                                            |\n| [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)           | CNCF Code of Conduct                                                                   |\n| [adding-new-packages.md](adding-new-packages.md)   | Guidelines for requesting and adding new packages to Flatcar                           |\n| [interop-matrix.md](interop-matrix.md)             | Platform and provider interoperability matrix                                          |\n| [CODEOWNERS](CODEOWNERS)                           | Code ownership and review assignments                                                  |\n| [LICENSE](LICENSE)                                 | Project license (Apache 2.0)                                                           |\n"
  },
  {
    "path": "RELEASES.md",
    "content": "# Flatcar Releases\n\nFlatcar Container Linux uses **automatic, atomic updates** to keep your system secure and up-to-date without manual intervention. Each Flatcar instance receives updates from one of four release channels:\n\n- **Alpha** — the bleeding edge. New features, major version upgrades, and experimental changes land here first. Expect frequent updates and occasional rough edges.\n- **Beta** — a stabilization step. Changes that have proven themselves in Alpha are promoted here for broader testing before reaching production.\n- **Stable** — the default and recommended channel for production workloads. Only thoroughly tested releases make it here.\n- **LTS** — the gold standard for stability. An LTS release is cut from a battle-tested Stable version that has proven itself exceptionally reliable across the community. It receives only critical security and bug fix updates for **18 months**, with a new LTS published every 12 months and a 6-month overlap between consecutive LTS releases so you have plenty of time to upgrade. Ideal for environments where predictability and minimal change are paramount.\n\nEach channel always points to its latest version as the `current` release. Every release has its own version number and dedicated release notes. Bug fixes are shipped directly to the affected channel — an Alpha fix goes to Alpha, a Beta fix to Beta, a Stable fix to Stable, and an LTS fix to LTS.\n\nWithin each channel, updates are planned on a **14-day cadence**. Major releases follow a broader rhythm:\n\n| Promotion | Target cadence |\n|-----------|----------------|\n| New major **Alpha** | Monthly |\n| Alpha → **Beta** | Every 2 months |\n| Beta → **Stable** | Every 3–4 months |\n| New **LTS** | Yearly |\n\nYou can learn more about switching between channels and configuring update behavior in the [channel docs](https://www.flatcar.org/docs/latest/setup/releases/switching-channels/).\n\n## Download Images\n\nBrowse all available releases at [flatcar.org/releases](https://www.flatcar.org/releases/). Click `amd64` or `arm64` on the channel overview to download images for the `current` release, or navigate to a specific version's release notes to grab that particular build. You'll be able to choose from images for many platforms and cloud providers. The [installation docs](https://www.flatcar.org/docs/latest/installing/) have a quick start guide and information about public images directly available at each cloud provider.\n\n## Track Releases\n\n| Resource | Link |\n|----------|------|\n| **Releases Tracker** | [Project board](https://github.com/orgs/flatcar/projects/7/views/24) — status of each release across all channels |\n| **Release issues** | [kind/release](https://github.com/flatcar/Flatcar/issues?q=is%3Aissue+state%3Aopen+label%3Akind%2Frelease) — upcoming and in-progress releases that populate the tracker |\n\n## Release Process\n\nFor the full release process documentation — how releases are built, tested, signed, and published — see the [Release Guide](https://www.flatcar.org/docs/latest/reference/developer-guides/release-guide/) on the Flatcar documentation site.\n\nHave questions about releases or updates? Join one of our [chats or community calls](https://github.com/flatcar/Flatcar/blob/main/README.md#communication-channels) — we're always happy to help!\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Flatcar Security\nTo keep Flatcar secure, the maintainers put a strong focus on tracking new and existing security issues.\nDealing with Security concerns is owned by the [Flatcar Security team](https://github.com/orgs/flatcar/teams/flatcar-security-team), a subset of the Maintainers team, and elected by the Maintainers (see [governance.md](./governance.md)).\n\nWhile the team actively researches and tracks new and existing security issues, it may also be notified of issues via [security@flatcar-linux.org](mailto:security@flatcar-linux.org).\n\nThe Security team meets on a fortnightly cadence, in a private video call.\nThe team maintains an internal list of security Primaries and Secondaries, which are rotated on a weekly basis. \nThe Primary and Secondary are expected to actively engage in security work each day, including executing the Runbook (see below) and working on fixing ongoing security issues.\n\nUndisclosed security issues are tracked in a private repository only accessible by members of the security team.\nPublic issues are tracked publicly in the project's main issue tracker.\n\nSecurity issues are addressed by releasing an updated OS image. Releases may be expedited depending on the issues' severity. For each release, release notes contain a concise list of security issues fixed. Also, a separate, detailed report on each of the issues addressed is part of every release.\n\n## Daily security runbook for Security team primaries and secondaries\n\nThe runbook below discusses steps for identifying new potential security issues and for making the issues known to the Flatcar project's maintainers and/or the other members of the Security team.\n\nPrimaries are expected to execute the runbook at least once per day, optionally assisted or off-loaded by Secondaries.\n\nEvery day look into upstream security trackers like below:\n- Gentoo security vulnerabilities. It might be useful to use gorss + RSS feed for this.\n- oss-security mailing list\n- Golang announce mailing list\n- Rust security announcements\n- (optional) issue trackers of other distros\n- Whenever we discover any new CVE, we add it to an internal database, and use automation tools to create a new issue about the CVE in [Flatcar GitHub issues](https://github.com/Flatcar/Flatcar/issues) with labels `security` and `advisory`.\n- If an issue for updating the specific package affected by the new CVE is already open in [Flatcar GitHub issues](https://github.com/Flatcar/Flatcar/issues), then unfortunately we need to manually edit the existing issue to add the new CVE.\n"
  },
  {
    "path": "adding-new-packages.md",
    "content": "# Proposing new packages for inclusion into Flatcar Container Linux\n\nFlatcar Container Linux is a modern Linux distribution for running container workloads.\nTo stay modern, the packages included need to be kept up-to-date, and sometimes new packages introduced.\nThis documents explains the process for the latter.\n\n## Project definition\n\nWhen proposing new packages for inclusion into Flatcar Container Linux, it's important to keep in mind how the project defines itself:  \n_Flatcar Container Linux is a fully open source, minimal-footprint, secure by default and always up-to-date Linux distribution for running containers at scale._\n\n## New package criteria\n\nAs a minimal Linux distribution, the tools and applications included in Flatcar Container Linux are to be kept to a minimum.\nThis is to reduce both the image size and attack surface.\nPackage addition requests are evaluated with this in mind.\nOther criteria that are weighed are the following.\n\n- ***Secure by default***: Does the package increase the security of Flatcar?\n- ***Always up-to-date***: Is the package actively maintained?\n- ***Running containers***: Does the package make Flatcar more relevant for container environments?\n- ***At scale***: Does the package improve automation of or telemetry served by Flatcar and/or ease operational burden?\n\n## How to propose a package for inclusion\n\nIn order to propose a new package for inclusion, [open an issue using the \"New Package Request\" template](https://github.com/flatcar/Flatcar/issues/new?assignees=&labels=kind%2Fnew-package&template=new-package-request.md&title=New+Package+Request%3A+%5Bpackage-name%5D).\n"
  },
  {
    "path": "attic/community-meetings/2021-05-11.md",
    "content": "# Flatcar community call Tuesday, 11th of May, 17:30 CEST\n\n- [Slide deck](2021-05-11-slides.pdf)\n- Youtube recording: [https://youtu.be/YBfq2fcjp8E](https://youtu.be/YBfq2fcjp8E)\n\n# Call Agenda\n\n## Welcome\n- Introduction to the new community meetings\n- Meet the team\n- Review agenda\n- Introduction: Brief intro of the team and community members participating in the call\n\n## Flatcar Interoperability\nReview of our work on interoperability and how we plan to track/report\n\n ## Upcoming releases\nWe give a brief overview of upcoming releases and the features included.\n\n## Spotlight: CAPI\nDetails on our ClusterAPI work so far and future plans\n\n## Community Q&A\nOpen Q&A / discussion\n\n\n# Call Minutes\n\nThe meeting largely followed the [slide deck](2021-05-11-slides.pdf). After the presentation, community participants raised a total of 3 questions.\n\n1. The Flatcar team, Thilo, Sayan, Marga, Dongsu, Mathieu, Andy, Kai, and Iago introduce themselves.\n2. Andy briefly addresses the future of Flatcar following Kinvolk's acquisition by Microsoft.\n   - “[...] we want to assure the Flatcar community that Microsoft and the Kinvolk team will continue to collaborate with the larger Flatcar community on the evolution of Flatcar Container Linux.” - Brendan Burns, Microsoft\n   - “This will not be a replay of the movie you’ve seen before. In fact, we and Microsoft are committed to doubling down on the Flatcar community: we want to expand the universe of partners, contributors, and users, to ensure a vibrant, successful and sustainable long-term future for Flatcar as a truly open, community-driven project.” - Chris Kühl, Kinvolk\n3. Thilo introduces monthly community calls and the new community focus of the Flatcar project, overcoming and leaving behind its single vendor past.\n4. Marga introduces the [interop matrix](../interop-matrix.md) as a means to track Flatcar's support of runtime environments (clouds, on premise, etc.).\n   - Some environments, while supported, do not currently have an owner.\n   - The project aims to have community owners who operate workloads / clusters in the respective environments, in the long term.\n5. Andy elaborates on Flatcar's core philosophy and shares details on stabilisation process and on release cadence.\n   - Alpha introduces new major versions, which then transition to Beta and Stable. Not every Alpha is promoted to Beta, not every Beta becomes Stable.\n   - Frequent Alpha releases, every 2 weeks on average.\n   - Beta release for (typically) every second Alpha, with patch releases in between.\n   - Stable releases roughly every 2 months.\n   - \"golden\" Stable to become LTS once a year.\n6. Sayan summarises the last round of releases, and provides an outlook of upcoming releases.\n   - April 28th round shipped new major Alpha (2857.0.0) and Beta (2823.1.0) versions, and patch level updates to Stable (2765.2.3) and to LTS (2605.15.1).\n     - Alpha release removes `rkt` and `kubelet-wrapper`. The changes will transition to Beta in June, and to Stable in July.\n   - Upcoming May 19th releases will ship a new major Alpha (2879.0.0) and patch level updates to Beta, Stable, and LTS.\n7. Dongsu provide an overview of ClusterAPI, and elaborates on our work to add Flatcar support to CAPI.\n   - CAPI utilises a management cluster to deploy workload clusters on a variety of inrastructure providers.\n   - Adding OS support for providers requires a separate implementation for each; there is no unified standard for OS config.\n   - OS images are provided via the ClusterAPI Image Builder project.\n   - Workload clusters are provisioned via the ClusterAPI Bootstrap provider.\n   - Current Flatcar status:\n     - QEmu and AWS OS images supported for Flatcar in Image builder.\n     - Bootstrap (kubeadm) Ignition support added to enable Flatcar OS config.\n     - AWS provider Ignition support added to enable Flatcar OS config.\n   - Future plans:\n     - support other cloud providers (Metal3, Azure, vSphere, Tinkerbell, Equinix Metal)\n8. Thilo shares call for action to the community to join the project\n\n## Q&A\n\n- Q: **What's the relationship between ClusterAPI and Lokomotive?**\n- Iago: Currently, no direct relation. We plan to investigate using parts of CAPI in the future, e.g. provisioning, but we do not plan to support the full-blown management / workload clusters pattern at this time.\n\n- Q: **here seems to be a lack of bare metal deployments / supported platforms in the compatibility matrix - is this intentional? Do we exepct Flatcar to \"just work\" since it's using Linux? Is there potential to add bare metal platforms (we use / plan to use Flatcar primarily on bare metal)?**\n- Thilo: It's Linux, as long as it PXE boots, you should be fine.\n- Andy: Are we discussing a hardware compatibility list?\n- Jannik: Not quite, however since we'll be running on bare metal we'll also test our bare metal. We're willing to support the community for our use cases.\n- Vincent: Currently, if you run into issues it's best to just open a ticket. If you'd like to expose your work to the community (test results etc.) you're of course welcome to do so!\n- Kai: We cover bare metal PXE boot / ignition config implicitly by our Equinix Metal workloads / CI / release tests. Lokomotive also maintains a bare metal CI test which covers PXE boots and deployments.\n- Marga: It's a good point that our interop matrix currently does not discuss hardware support at all. For instance, it's tribal knowledge that Flatcar boots on Rasperry Pi (with some tweaks), but that's not documented anywhere.\n- Andy: This might be something we should involve the larger community with, e.g. establishing a hardware interop list for users' existing deployments. Individual users then could volunteer to keep that list up to date for new releases since they'd be testing the release on their hardware anyway.\n- Jannik: We could use the hardware interop doc to also share tweaks / notes for specific environments more easily.\n\n- Q: **Can you talk about ARM64 support? There's Alpha support, but what's the path to Beta and Stable?**\n- Thilo: It's work in progress, we staffed / resourced this concern very recently. Some plumbing level and package upgrades are necessary to make things work for Stable, these are being worked on as we speak.\n- Kai: A number of system components' tests are currently failing. We're also interested in hardware enablement, i.e. getting feedback on our ARM64 kernel config / modules on different ARM64 platforms. Other than that, it's about ensuring our release tests pass.\n- Thilo: We need to discuss this in terms of support levels - you could go ahead and use Alpha ARM64 support today, there are no deal breakers we know of - it will support your workload. \n  It just won't support the entire range of Flatcar features, and some boot-up units might fail (SELinux in particular).\n  We're working on bringing up these components on ARM64.\n"
  },
  {
    "path": "attic/community-meetings/2021-06-08.md",
    "content": "# Flatcar community call Tuesday, 8th of June, 17:30 CEST\n\n- [Slide deck](2021-06-08-slides.pdf)\n- Youtube recording: [https://www.youtube.com/watch?v=cZ4o-ZD6r10&t=235s](https://www.youtube.com/watch?v=cZ4o-ZD6r10&t=235s)\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n- Review the meeting agenda.\n\n## Spotlight: Nebraska update server\n- Brief presentation of Flatcar’s open source update server.\n\n## Spotlight: Nightlies, Tests, and Releases\n- Brief presentation of Flatcar’s test and releases process.\n\n## Status update: ARM64\n- What’s done, what’s missing, and how to help.\n\n## Releases review & planning\n- We share details of the May 19th release, some bumps encountered.\n- We plan the next releases, including new features, bug fixes, and related PRs.\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n\n\n# Call Minutes\n\nAs usual, the meeting minutes will be added here after the call.\n[tbd.]\n\n## Q&A\n\nNo questions this time.\n"
  },
  {
    "path": "attic/community-meetings/2021-07-13.md",
    "content": "# Agenda for the Flatcar community call on Tuesday, 13th of July, 17:30 CEST\n\n## Links for participants\n- [Slide deck](2021-07-13-slides.pdf)\n- Youtube live stream link (for passively watching): [http://www.youtube.com/watch?v=jcwH4ZTrXnk](http://www.youtube.com/watch?v=jcwH4ZTrXnk)\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n- Review the meeting agenda.\n\n## Spotlight: Flatcar Release Process\n- We will be talking about the Flatcar Release Process and Planning.\n\n## Status update: ARM64\n- List of release tests that fail\n- Deep dive into selected test failures\n\n## NEW: Release planning\n- Introducing our public release planning board\n- Items to be in the release of the week of July 21st\n- Community input wanted for upcoming releases!\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n\n# Call Minutes\n\n1.  Sayan introduces agenda for today: \n    - Flatcar releases \n    - Arm updates \n    - Flatcar release planning \n    - QA \n2. Flatcar team introduce themselves: Sayan, Jeremi, Kai, Marga, William, Danielle (program manager for ARM support for Flatcar)\n3. Kai talks about Flatcar Release Process \n    - In contrast to regular distros, releases are not just bi-yearly but more frequent \n    - Update granularity is whole image, not single packages \n    - Releases are based on package updates, open PRs that are ready, and critical security fixes \n    - Build is performed on private Jenkins instance, from scratch \n    - Flatcar test suite runs on PRs\n    - Big test run right before a release may uncover issues not found during development \n    - Each release is signed and gets uploaded to our website and all supported cloud providers \n    - Release planning happens every two weeks: review pending PRs and see if they can be fast tracked into the release \n      - Release planning board has been made public today (https://github.com/orgs/kinvolk/projects/15) 😊 Community input is welcome! \n    - Build/Test:\n      - New SDK is produced on alpha release \n      - Update signature is always cryptographically verified \n      - Nightlies: packages from nightly builds can be consumed by SDK\n    - Planned improvements to the CI process\n      - Setting up a community accessible CI system (Concourse maybe) \n      - Setting up automatic CI for PRs \n      - Making release scripts independent of Jenkins and making it possible to build releases on dev machines \n4. William talks about state of ARM64:\n    - William lists failing test cases \n    - A lot of test cases seem to be failing due to similar root causes, we hope the community can help investigate \n    - Ongoing work in the ARM64 stream: \n       - Polkit depends on spidermonkey, but spidermonkey is complex for cross-compilation and ARM64 \n       - We are going to replace spidermonkey with duktape like others in open source community have done \n       - Help welcome! Find us on Matrix/IRC \"wrl\" \n5.  Sayan talks about recent releases: \n    - Alpha 2920.0.0, Beta 2905.1.0 \n    - There will be monthly community call for release planning and a smaller bi-weekly to check progress\n    - Sayan introduces the planning board (https://github.com/orgs/kinvolk/projects/15)  \n    - Columns for planned/in-progress/ready-for-review and items-completed for the closest update of alpha (and bumps of the other release channels). \n\n## Q&A\n\n* Q (Adam): migrated from CoreOS to Flatcar for hosting bioinformatics workloads on Kubernetes. Hitting limits on ignition file sizes on AWS (16K), wondering about possibility of using compression to buy some more time (ignition v3). Is ignition the right thing to use, plans for upgrade (flatcar is currently on v2)? \n   * A (Kai): Probably will upgrade to v3 at some point, but keep v2 support unlike upstream. For the AWS issue, recommend fetching bigger ignition payloads from S3, is secured by IAM. \n\n* Q (Adam): what's the practical difference between cloud-config vs. Ignition. If cloud-config works for us, should we still migrate? \n   * A (Kai): differences: ignition runs during initramfs, before systemd from rootfs starts, allowing more customization and potentially sparing users from a reboot. Also ignition runs once and not on every boot. Coreos-cloudconfig is an independent Go implementation of the Python cloudconfig found in Ubuntu. It’s not actively developed but will stick around. \n"
  },
  {
    "path": "attic/community-meetings/2021-07-26.md",
    "content": "# Agenda for the Flatcar Release Planning call on Monday, 26th of July, 17:30 CEST\n\n## Links for participants\n- Call (for actively participating): [https://zoom.us/j/99741357880](https://zoom.us/j/99741357880)\n- Youtube live stream link (for passively watching): https://www.youtube.com/watch?v=SM4lfaITzsI\n- Release Planning Board: [https://github.com/orgs/kinvolk/projects/15](https://github.com/orgs/kinvolk/projects/15)\n\n## Welcome\n- Brief introduction of new participants or attendees\n- Status of the previous Flatcar Release\n- Planning for the upcoming release for the week of August 2nd.\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n\n# Call Minutes\nAs usual, the meeting minutes will be added here after the call.\n"
  },
  {
    "path": "attic/community-meetings/2021-08-10.md",
    "content": "# Flatcar community call Tuesday, 10th of August, 5:30 pm CEST\n\n- [Slide deck](2021-08-10-slides.pdf)\n- Youtube recording: [https://www.youtube.com/watch?v=Hy34rw7kax8](https://www.youtube.com/watch?v=Hy34rw7kax8)\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n- Review the meeting agenda.\n\n## News\n- New section! We will discuss news and happenings in the Flatcar world, including how the team handled issues recently with Cilium interoperability and an image availability failure.\n\n## Spotlight: Docker 20.10 / cgroups v2 update\n- Docker 20 and CGroups v2 (unified mode) are coming to Flatcar Linux! We'll give an overview of the challenges and the implications, as well as discuss the timeline.\n\n## Spotlight community committer: contributing to Flatcar\n- What it took Aniruddha to contribute to Flatcar and solve the locksmith reboot issue.\n\n## Status update: ARM64\n- What’s done, what’s missing, and how to help.\n\n## Releases review & planning\n- Update from our planning for the next releases, including new features, bug fixes, and related PRs.\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n"
  },
  {
    "path": "attic/community-meetings/2021-08-23.md",
    "content": "# Agenda for the Flatcar Release Planning call on Monday, August of 23rd, 17:30 CEST\n\n## Links for participants\n- Call (for actively participating): [https://us06web.zoom.us/j/85781192057](https://us06web.zoom.us/j/85781192057)\n- Youtube live stream link (for passively watching): http://www.youtube.com/watch?v=TfmiNy5020g\n- Release Planning Board: [https://github.com/orgs/kinvolk/projects/15](https://github.com/orgs/kinvolk/projects/15)\n\n## Welcome\n- Brief introduction of new participants or attendees\n- Status of the previous Flatcar Release\n- Planning for the upcoming release for the week of August 30th.\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n"
  },
  {
    "path": "attic/community-meetings/2021-09-14.md",
    "content": "# Flatcar community call Tuesday, 14th of September, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST\n\n- [Slide deck](2021-09-14-slides.pdf)\n- Youtube recording: http://www.youtube.com/watch?v=9YxsZYyQrkA\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n\n## News\n- We will discuss news and happenings in the Flatcar world, including our move out of the Kinvolk github org / website back into our own, features coming to the Flatcar community release images, and the results of our recent user survey.\n\n## Spotlight: Equinix Metal's use of Flatcar Container Linux\n- Andy Holtzmann [@andy-v-h](https://github.com/andy-v-h) gives an introduction on EM's use of Flatcar.\n\n## Status update: ARM64\n- Progress made, remaining items, and next steps.\n- Ed Vielmetti [@vielmetti](https://github.com/vielmetti) shares information on the \"Works on ARM\" project at Equinix Metal, inclunding hardware available today and in the near future.\n\n## Releases review & planning (updated section!)\n- We'll wrap up changes for the upcoming release (week of September 20) and will plan items we aim to integrate for the release after that (week of October 4th).\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n"
  },
  {
    "path": "attic/community-meetings/2021-09-28.md",
    "content": "# Agenda for the Flatcar Release Team call on Tuesday, September 28th, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST\n\n## Links for participants\n* Zoom link: [https://us06web.zoom.us/j/82054240491](https://us06web.zoom.us/j/82054240491)\n  * Meeting ID: 843 3611 6610\n  * Passcode: 444888\n- Youtube live stream / recording: [https://www.youtube.com/watch?v=XbkHZMJlC8g](https://www.youtube.com/watch?v=XbkHZMJlC8g)\n- Release Planning Board: [https://github.com/orgs/flatcar-linux/projects/5](https://github.com/orgs/flatcar-linux/projects/5)\n\n## Welcome\n- Brief introduction of new participants or attendees\n- Status of the previous Flatcar Release\n- Status/Planning for the release for the week of October 4th\n- Planning for the release for the week of October 18th\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n"
  },
  {
    "path": "attic/community-meetings/2021-10-19.md",
    "content": "# Flatcar community call Tuesday, 19th of October, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST\n\n- [Slide deck](2021-10-11-slides.pdf)\n- Youtube recording: [https://www.youtube.com/watch?v=YP9HnYxepVo](https://www.youtube.com/watch?v=YP9HnYxepVo)\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n\n## News\n- We will discuss news and happenings in the Flatcar world.\n  - We will elaborate on recent issues with our CI infrastructure, and repercussions for people using the SDK or the developer container.\n  - Today's call won't have a release planning section (there's a dedicated release planning coming up right next week).\n- We're participating in [Hacktoberfest](https://hacktoberfest.digitalocean.com/), your contribution to a Flatcar repo will count!\n\n## Spotlight: Flatcar dev mini-projects\n- Support for Ignition v3\n- Flog, the automated changelog generator\n- SDK container\n\n## Status update: ARM64\n- Progress made, remaining items, and next steps.\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n"
  },
  {
    "path": "attic/community-meetings/2021-10-26.md",
    "content": "# Agenda for the Flatcar Release Team call on Tuesday, October 26th, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST\n\n## Links for participants\n- Zoom link: [https://us06web.zoom.us/j/82054240491](https://us06web.zoom.us/j/82054240491)\n  - Meeting ID: 820 5424 0491\n  - Passcode: 444888\n- Youtube live stream / recording: [https://www.youtube.com/watch?v=xh-MkIoZvVw](https://www.youtube.com/watch?v=xh-MkIoZvVw)\n- Release Planning Board: [https://github.com/orgs/flatcar-linux/projects/5](https://github.com/orgs/flatcar-linux/projects/5)\n\n## Welcome\n- Brief introduction of new participants or attendees\n- Status of the previous Flatcar Release\n- Status/Planning for the release for the week of November 1st\n- Planning for the release for the week of November 15th\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n"
  },
  {
    "path": "attic/community-meetings/2021-11-09.md",
    "content": "# Flatcar community call Tuesday, 9th of November, 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST\n\n- Zoom link: [https://us06web.zoom.us/j/84336116610](https://us06web.zoom.us/j/84336116610)\n  - Meeting ID: 843 3611 6610\n  - Passcode: 444888\n- Youtube live stream / recording: https://www.youtube.com/watch?v=5XCgOByOSeQ\n\n- Community Calls calendar (all future calls): [link](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com)\n  - iCal version: [link](https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics)\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n\n## News\n- We will discuss news and happenings in the Flatcar world.\n  - CGroups V2 are coming to stable\n  - ARM64 goes beta\n\n## Spotlight: Flatcar dev mini-projects\n- OpenSSL 3.0 in Alpha-3046.0.0 FIPS provider showcase\n- ignition-as-a-service: online ignition transpiler\n- Flatcar on Firecracker hack + demo\n\n## Status update: ARM64\n- Progress made, next steps, and path to stable.\n\n## Release planning\n- Status/Planning for the release for the week of November 15th\n- Planning for the release for the week of November 29th\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers - e.g. feedback on the new Stable release w/ cgroups v2.\n"
  },
  {
    "path": "attic/community-meetings/2021-11-23.md",
    "content": "# Agenda for the Flatcar Release Team call on Tuesday, 23rd of November 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST\n\n## Links for participants\n- Zoom link: [https://us06web.zoom.us/j/82054240491](https://us06web.zoom.us/j/82054240491)\n  - Meeting ID: 820 5424 0491\n  - Passcode: 444888\n- Youtube live stream / recording: [https://www.youtube.com/watch?v=VUzMuZgFQfY](https://www.youtube.com/watch?v=VUzMuZgFQfY)\n- Release Planning Board: [https://github.com/orgs/flatcar-linux/projects/5](https://github.com/orgs/flatcar-linux/projects/5)\n\n## Welcome\n- Brief introduction of new participants or attendees\n- Status of the previous Flatcar Release\n- Status/Planning for the release for the week of November 29th\n- Planning for the release for the week of December 13th\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers.\n"
  },
  {
    "path": "attic/community-meetings/2021-12-17.md",
    "content": "# Agenda for the Flatcar community call on Friday, 17th of December 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST\n\n- [Slide deck](2021-12-17-slides.pdf)\n- Youtube recording: [https://www.youtube.com/watch?v=1YsY9XEtF7Q](https://www.youtube.com/watch?v=1YsY9XEtF7Q)\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n\n## News\n- We will discuss news and happenings in the Flatcar world.\n  - ARM64 goes stable\n  - Flatcar CAPI support with CAPI release 1.1\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers \n"
  },
  {
    "path": "attic/community-meetings/2022-01-11.md",
    "content": "# Agenda for the Flatcar community call on Tuesday, 11th of January 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST\n\n- Zoom link: [https://us06web.zoom.us/j/84336116610](https://us06web.zoom.us/j/84336116610)\n  - Meeting ID: 843 3611 6610\n  - Passcode: 444888\n- Youtube live stream / recording: [link](https://www.youtube.com/watch?v=X_nqgXLOmLk)\n- [Slide deck](2022-01-11-slides.pdf)\n- Community Calls calendar (all future calls): [link](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com)\n  - iCal version: [link](https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics)\n\n\n## Welcome\n- Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.\n\n## News\n- 5.15 Kernel in Alpha \n- upcoming FOSDEM devroom talks overview\n\n## Spotlight\n- 2021 recap - cgroupsv2, systemd updates, docker 20, ARM64  \n- Flatcar on Raspberry Pi blog\n- Fleetlock (@aniruddha2000, @tormath1 )\n\n## Release planning\n- Ongoing and upcoming releases (https://github.com/orgs/flatcar-linux/projects/5)\n\n## Q&A\n- Questions from community participants, answered by the Flatcar maintainers \n\n"
  },
  {
    "path": "attic/community-meetings/README.md",
    "content": "# Old-style community meeting agendas and presentation slides\n\nCommunity meeting planning / agendas has moved to [Github discussions](../../../../discussions/categories/community-meeting-agenda)\n\nThis section in the attic contains agenda markdown files of \"old style\" Flatcar community calls where the agenda was agreed on in a PR instead of a github discussion.\nAlso archived here are slide decks used in these meetings.\n\n"
  },
  {
    "path": "governance.md",
    "content": "# Flatcar Project Governance\n\n\nFlatcar is a community based project, anyone who wants to participate is welcomed.\nWe adopted the [CNCF code of Conduct](./CODE_OF_CONDUCT.md) as we pledge to be an opening and welcoming community for anyone who want to participate in it.\n\nThe project is governed by a flat hierarchy - a group of people sharing a common vision of Flatcar in accordance to its mission statement.\n\nThis goverance explains how the project is run.\n\n- [Values](#values)\n- [Maintainers](#maintainers)\n- [Becoming a Maintainer](#becoming-a-maintainer)\n- [Meetings](#meetings)\n- [CNCF Resources](#cncf-resources)\n- [Code of Conduct Enforcement](#code-of-conduct)\n- [Security Response Team](#security-response-team)\n- [Voting](#voting)\n- [Modifications](#modifying-this-charter)\n\n## Values\n\nThe Flatcar project, its leadership, and its maintainers embrace the following values:\n\n* Openness: Communication and decision-making happens in the open and is discoverable for future\n  reference. As much as possible, all discussions and work take place in public\n  forums and open repositories.\n\n* Fairness: All stakeholders have the opportunity to provide feedback and submit\n  contributions, which will be considered on their merits.\n\n* Community over Product or Company: Sustaining and growing our community takes\n  priority over shipping code or sponsors' organizational goals.  Each\n  contributor participates in the project as an individual.\n\n* Inclusivity: We innovate through different perspectives and skill sets, which\n  can only be accomplished in a welcoming and respectful environment.\n\n* Participation: Responsibilities within the project are earned through\n  participation, and there is a clear path up the contributor ladder into leadership\n  positions.\n\n## Maintainers\n\nFlatcar Maintainers have full access to most of the repositories in the [Flatcar project](https://github.com/orgs/flatcar/), except for very few repositories that contain sensitive information, e.g. for with undisclosed security issues (see [SECURITY.md](./SECURITY.md) for more information).\nMaintainers can merge PRs, approve PR builds+tests, and create and publish releases.\nMaintainers collectively manage the project's resources, interact with contributors, elect new maintainers, and remove inactive ones.\nThe current list of maintainers can be found in [MAINTAINERS.md](./MAINTAINERS.md). Most maintainer access privileges are granted via membership of the Flatcar Github organisation's [Flatcar Maintainers team](https://github.com/orgs/flatcar/teams/flatcar-maintainers).\n\nThis privilege is granted with some expectation of responsibility: maintainers\nare people who care about the Flatcar project and want to help it grow and\nimprove. A maintainer is not just someone who can make changes, but someone who\nhas demonstrated their ability to collaborate with the team, get the most\nknowledgeable people to review code and docs, contribute high-quality code, and\nfollow through to fix issues (in code or tests).\n\nA maintainer is a contributor to the project's success and a citizen helping\nthe project succeed.\n\nThe collective team of all Maintainers is known as the Maintainer Council, which\nis the governing body for the project.\n\n### Becoming a Maintainer\n\nMaintainers are active community members who are responsible for the overall quality and stewardship of the project, and are expected to remain actively involved in the project and participate in voting and discussing of proposed project level changes.\n\nAnyone with an established track record of contributions to the project can become a maintainer.\nThe contributions are expected to be substantial, and must demonstrate a commitment to the long-term success of the project.\nMaintainership is not limited to engineering / development merits; all contributions - e.g. working with issues, providing guidance and feedback to users, reviewing PRs, contributing to docs, evangelising Flatcar - count.\nBecoming a maintainer is about building trust with the current maintainers of the project and being a person that they can depend on to make decisions in the best interest of the project in a consistent manner.\n\nMaintainer candidates should have demonstrated they:\n- Collaborate well.\n- Have a deep and comprehensive understanding of the Flatcar code base, technical goals, and directions.\n- Actively engage with major Flatcar feature proposals and implementations.\n\nThe Flatcar project welcomes both development as well as community-focuses contributions.\nTo gain maintainership, the following is expected:\n  * commitment to the project's continued success:\n    * participate in discussions, contributions, code and documentation reviews for 6 months or more,\n    * actively evangelise Flatcar in at least 20 talks/presentations at 10 different conferences or meetups\n    * organise and chair at least 15 maintainer events, e.g. bug fixing or doc writing days, with at least 5 maintainers participating each event\n  * Contribute to the project's development\n    * perform reviews for 30 non-trivial pull requests,\n    * contribute 10 non-trivial pull requests and have them merged,\n  * ability to write quality code and/or documentation,\n  * ability to collaborate with the team,\n  * demonstrated understanding of how the team works (policies, processes for testing and code review, etc),\n  * understanding of the project's code base and coding and / or documentation style.\n\nPeriodically, the existing maintainers curate a list of contributors that have shown regular activity on the project over the prior months.\nThe nominating maintainer will create a PR to update the Maintainers List.\nIt is recommended to describe the reasons for the nomination and the contribution of the nominee in the PR.\nUpon consensus of incumbent maintainers, the PR will be approved and the new maintainer becomes active.\n\nMaintainers who are selected will be granted the necessary GitHub rights.\n\n\n### Removing a Maintainer\n\nLife priorities, interests, and passions can change.\nIf you're a maintainer but feel you must remove yourself from the list, inform other maintainers that you intend to step down, and if possible, help find someone to pick up your work. \nAt the very least, ensure your work can be continued where you left off.\nAfter you've informed other maintainers, create a pull request to remove yourself from the [MAINTAINERS](MAINTAINERS.md) file.\nIf applicable, include a change to [EMERITUS_MAINTAINERS](EMERITUS_MAINTAINERS.md) to add yourself to the list of emeritus maintainers.\nThis will ease your return to active maintainership in the future.\n\nMaintainers may also be removed after being inactive, failure to fulfill their \nMaintainer responsibilities, violating the Code of Conduct, or other reasons.\nInactivity is defined as a period of very low or no activity in the project \nfor a year or more, with no definite schedule to return to full Maintainer \nactivity.\n\nA Maintainer may be removed at any time by a 2/3 vote of the remaining maintainers.\n\nDepending on the reason for removal, a Maintainer may be converted to Emeritus\nstatus.  Emeritus Maintainers will still be consulted on some project matters,\nand can be rapidly returned to Maintainer status if their availability changes.\n\n\n## Meetings\n\nTime zones permitting, Maintainers are expected to participate in the Flatcar Developer Syncs meeting every 4th Wednesday of a month.\nThe meeting time observes the Universal Coordinated time. It occurs at 2:30pm UTC.\nDepending on your local timezone, the slot might be subject to summer time changes.\n* During daylight saving time, the meeting occurs at 8pm IST (IST does not observe daylight saving time) / 4:30pm CEST / 10:30am EDT / 7:30am PST.\n* Outside of daylight saving time, the meeting occurs at 8pm IST  / 3:30pm CET / 9:30am EST / 6:30am PST.\n\nA calendar is available to ease planning. The calendar contains Developer syncs, project office hours, and one-off events like bug fixing or doc writing days.\n* Google calendar link: https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com\n* iCal link (for importing): https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics\n\nMaintainers will also have closed meetings in order to discuss security reports\nor Code of Conduct violations.  Such meetings should be scheduled by any\nMaintainer on receipt of a security issue or CoC report.  All current Maintainers\nmust be invited to such closed meetings, except for any Maintainer who is\naccused of a CoC violation.\n\n## CNCF Resources\n\nAny Maintainer may suggest a request for CNCF resources during a\nmeeting.  A simple majority of Maintainers approves the request.  The Maintainers\nmay also choose to delegate working with the CNCF to non-Maintainer community\nmembers, who will then be added to the [CNCF's Maintainer List](https://github.com/cncf/foundation/blob/main/project-maintainers.csv)\nfor that purpose.\n\n## Code of Conduct\n\n[Code of Conduct](./code-of-conduct.md)\nviolations by community members will be discussed and resolved\non the [private Maintainer mailing list](maintainers@flatcar-linux.org).  If a Maintainer is directly involved\nin the report, the Maintainers will instead designate two Maintainers to work\nwith the CNCF Code of Conduct Committee in resolving it.\n\n## Security Response Team\n\nThe Maintainers will appoint a Security Response Team to handle security reports.\nThis committee is a sub-set of the Maintainer Council with full access to undisclosed security issues tracked by the project.\nMembers of the Security Response team as well as respective access permissions to sensitive data are administrated via membership in the [Flatcar Github organisation's Security team](https://github.com/orgs/flatcar/teams/flatcar-security-team).\nThe Maintainers will review who is assigned to this at least once a year.\n\nThe Security Response Team is responsible for handling all reports of security\nissues and breaches according to the [security policy](./SECURITY.md).\n\n## Voting\n\nWhile most business in Flatcar is conducted by \"[lazy consensus](https://community.apache.org/committers/lazyConsensus.html)\", \nperiodically the Maintainers may need to vote on specific actions or changes.\nA vote can be taken on \n[the private Maintainer mailing list](maintainers@flatcar-linux.org) for security or conduct matters.  \nVotes may also be taken at [Flatcar Developer Syncs meetings](https://meet.flatcar.org/OfficeHours).  Any Maintainer may\ndemand a vote be taken.\n\nMost votes require a simple majority of all Maintainers to succeed, except where\notherwise noted.  Two-thirds majority votes mean at least two-thirds of all \nexisting maintainers.\n\n## Modifying this Charter\n\nChanges to this Governance and its supporting documents may be approved by \na 2/3 vote of the Maintainers.\n"
  },
  {
    "path": "interop-matrix.md",
    "content": "# Flatcar inter-operation matrix\n\nThis document tracks Flatcar inter-operability across environments.\n\nOwnership of an item implies ensuring test coverage in release tests of official Flatcar releases (L2 and above) as well as handling bugs and feature requests that affect the respective environment specifically.\nPlease propose ownership by filing a PR for this document.\n\n## Public cloud (machines)\n\n| Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |\n|-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|\n| EC2         |           Partial              |   X   |      X      | @flatcar/flatcar-maintainers |    | IAM 2.0 support missing |\n| Azure       |               X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n| GCE         |               X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n| Digital Ocean (VMs) |       X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n| Equinix Metal |             X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n| ESXi / vSphere |            X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n| Hetzner Cloud |                              |   X   |             | [no owner] |                      |       |\n| Vultr VPS  |                                 |   X   |             | [no owner] |                      |       |\n| Cloudscale |                                 |   X   |             | [no owner] |                      |       |\n| Oracle Cloud |                               |   X   |             | [no owner] |                      | Bring-your-own-image on OCI VMs; install via Ubuntu on OCI bare metal |\n| Tencent |                                    |       |             | [no owner] |                      |       |\n| AliCloud |                                   |       |             | [no owner] |                      |       |\n| Yandex |                                     |       |             | [no owner] |                      |       |\n| Brightbox |                 X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n\n## Private Cloud (machines)\n\n| Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |\n|-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|\n| Azure Stack |                                | w/ caveat |         | [no owner] |                      | controller node not supported on Flatcar (cloud-init feature missing) |\n| Tinkerbell  |                                |   X   |             | [no owner] |                      |       |\n| Rancher (VMs) |                              |   X   |             | [no owner] |                      |       |\n| QEmu / KVM backed |         X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n| OpenStack |                 X                |   X   |      X      | @flatcar/flatcar-maintainers |    |       |\n| VirtualBox |                                 |   X   |             | [no owner] |                      |       |\n| Vagrant |                                    |   X   |             | [no owner] |                      | Isn't this plain qemu/kvm? |\n\n## Managed Kubernetes\n\n| Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |\n|-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|\n| EKS         |                                |   X   |             | [no owner] |                      |       |\n| GiantSwarm  |                                |   X   |             | Provider |                        |       |\n\n## Cluster API\n\n| Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |\n|-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|\n| CAPB        |              X                 |   X   |  X (upstream) | Upstream |                      | Covered by CAPB release tests |\n| CAPA        |              X                 |   X   |  X (upstream) | Upstream |                      | Covered by CAPA release tests |\n| CAPA EKS    |                                |       |             | [no owner] |                      |       |\n| CAPZ        |                                |   w/ caveat |       | @flatcar/flatcar-maintainers |  | WIP Prototype |\n| CAPV        |                                | [no owner] |        |                                   |       |\n| CAPM3       |                                | [no owner] |        |                                   |       |\n| CAPG        |                                | [no owner] |        |                                   |       |\n| CAPO        |                                |   X   |  X (upstream) | Upstream |                      |       |\n\n## Kubernetes Distros\n\n| Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |\n|-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|\n| AKS Engine  |                                |   X   |             | [no owner] |                      | https://kinvolk.io/blog/2020/12/supercharging-aks-engine-with-flatcar-container-linux/ |\n| Rancher (rke) |                              |   X   |             | [no owner] |                      |       |\n| Rancher (rke2) |                             |       |             | [no owner] |                      |       |\n| Lokomotive |                X                |   X   |      X      | @kinvolk/lokomotive-developers |  |       |\n| Tanzu KG |                                   |   X   |             | [no owner] |                      |       |\n| K3s |                                        |   X   |             | [no owner] |                      |       |\n| EKS-Distro |                                 |   X   |             | [no owner] |                      |       |\n| KOPS |                                       |   X   |             | upstream |                        |       |\n| Kubematic |                                  |   X   |             | [no owner] |                      |       |\n| Gardener |                                   |   X   |             | [no owner] |                      |       |\n\n## Other\n\nPlease add below what does not fit into any of the categories above.\n\n| Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |\n|-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|\n|             |                                |       |             |       |                           |       |\n"
  },
  {
    "path": "sync-maintainers/README",
    "content": "A personal access token with public_repo scope is needed.\nUsage:\n\n```\npython3 -m venv venv\n. venv/bin/activate\npip install -r requirements.txt\n./sync-maintainers.py list\n./sync-maintainers.py repo --repo=REPONAME\nGITHUB_TOKEN=... ./sync-maintainers github --repo=REPONAME\n```\n"
  },
  {
    "path": "sync-maintainers/requirements.txt",
    "content": "requests\nblack\n"
  },
  {
    "path": "sync-maintainers/sync-maintainers.py",
    "content": "#!/usr/bin/env python3\nimport requests\nimport json\nimport subprocess\nimport os\nimport sys\nimport argparse\n\n\ndef parse(m):\n    para = []\n    repos = []\n    while len(m):\n        line = m.pop(0)\n        if line == \"# Maintainers\":\n            line = m.pop(0)\n            while not line.startswith(\"#\"):\n                para.append(line)\n                line = m.pop(0)\n        if line.startswith(\"###\"):\n            repo = line.split(\"### \")[1].strip()\n            maint = []\n            m.pop(0)  # maintainers:\n            line = m.pop(0)\n            while line.startswith(\"* \"):\n                maint.append(line)\n                line = m.pop(0) if len(m) else \"\"\n            if repo != \"Flatcar\":\n                repos.append((repo, maint))\n    return para, repos\n\n\nMAINTAINERS_TEMPLATE = \"\"\"# Maintainers\n\n{maintainers}\n\n{paragraph}\n\nThe contents of this file are synchronized from [Flatcar/MAINTAINERS.md](https://github.com/flatcar/Flatcar/blob/main/MAINTAINERS.md).\n\"\"\"\n\n\ndef write_maintainers_file(repo_name, paragraph, maintainers):\n    maintainers_entry = \"\\n\".join(maintainers)\n    maintainers_content = MAINTAINERS_TEMPLATE.format(\n        maintainers=maintainers_entry, paragraph=paragraph\n    )\n    repo_filename = f\"{repo_name}/MAINTAINERS.md\"\n    with open(repo_filename, \"w\") as f:\n        f.write(maintainers_content)\n\n\nBRANCH_NAME = \"sync-maintainers\"\n\n\ndef checkout_branch(repo_name):\n    return subprocess.run(\n        [\"git\", \"-C\", repo_name, \"checkout\", \"-B\", BRANCH_NAME, \"origin/HEAD\"],\n        check=True,\n    )\n\n\ndef commit(repo_name):\n    subprocess.run([\"git\", \"-C\", repo_name, \"add\", \"MAINTAINERS.md\"], check=True)\n    subprocess.run(\n        [\n            \"git\",\n            \"-C\",\n            repo_name,\n            \"commit\",\n            \"-m\",\n            \"Sync maintainers file from flatcar/flatcar repository\",\n        ],\n        check=True,\n    )\n\n\ndef push(repo_name):\n    subprocess.run(\n        [\"git\", \"-C\", repo_name, \"push\", \"--force\", \"origin\", BRANCH_NAME], check=True\n    )\n\n\ndef parse_maintainers(repo=None):\n    maint_file = \"../MAINTAINERS.md\"\n    with open(maint_file) as f:\n        m = f.read().splitlines()\n    para, repos = parse(m)\n    paragraph = \"\\n\".join(para).strip()\n    if repo:\n        repos = [r for r in repos if r[0] == repo]\n    return repos, paragraph\n\n\ndef main_repo(args):\n    repos, paragraph = parse_maintainers(args.repo)\n    for (repo_name, maintainers) in repos:\n        repo_url = f\"git@github.com:flatcar/{repo_name}\"\n        subprocess.run([\"git\", \"clone\", \"--depth=1\", repo_url])\n        checkout_branch(repo_name)\n        write_maintainers_file(repo_name, paragraph, maintainers)\n        commit(repo_name)\n        push(repo_name)\n\n\ndef prepare_req(repo, token, api):\n    api = \"/\" + api if api else \"\"\n    url = f\"https://api.github.com/repos/flatcar/{repo}{api}\"\n    headers = {\n        \"Accept\": \"application/vnd.github+json\",\n        f\"Authorization\": \"Bearer {token}\",\n    }\n    return url, headers\n\n\ndef get_pr(repo, token):\n    url, headers = prepare_req(repo, token, \"pulls\")\n    params = {\"state\": \"open\", \"head\": f\"flatcar:{BRANCH_NAME}\"}\n    return requests.get(url, headers=headers, params=params)\n\n\ndef get_default_branch(repo, token):\n    url, headers = prepare_req(repo, token, \"\")\n    resp = requests.get(url, headers=headers).json()\n    return resp[\"default_branch\"]\n\n\ndef create_pr(repo, token, base):\n    url, headers = prepare_req(repo, token, \"pulls\")\n    data = {\n        \"title\": \"Sync MAINTAINERS.md\",\n        \"head\": f\"flatcar:{BRANCH_NAME}\",\n        \"base\": base,\n    }\n    return requests.post(url, headers=headers, json=data)\n\n\ndef update_assignees(repo, token, pr, assignees):\n    url, headers = prepare_req(repo, token, f\"pulls/{pr}/requested_reviewers\")\n    data = {\"reviewers\": assignees}\n    return requests.post(url, headers=headers, json=data)\n\n\ndef get_assignees(maintainers):\n    assignees = [e.split(\"@\")[1] for e in maintainers]\n    return assignees\n\n\ndef main_github(args):\n    token = os.getenv(\"GITHUB_TOKEN\")\n    if not token:\n        raise Exception(\"Missing GITHUB_TOKEN env variable\")\n    repos, _ = parse_maintainers(args.repo)\n    for (repo_name, maintainers) in repos:\n        pr = get_pr(repo_name, token).json()\n        if not pr:\n            print(f\"{repo_name} creating pr\")\n            base = get_default_branch(repo_name, token)\n            pr = [create_pr(repo_name, token, base).json()]\n        prnum = pr[0][\"number\"]\n        assignees = get_assignees(maintainers)\n        resp = update_assignees(repo_name, token, prnum, assignees)\n        if resp.status_code != 201:\n            print(resp.json())\n        else:\n            print(\"{repo_name} ok\")\n\n\ndef main_list(args):\n    repos, _ = parse_maintainers()\n    for (repo_name, _) in repos:\n        print(repo_name)\n\n\nparser = argparse.ArgumentParser(prog=\"sync-maintainers.py\")\nsubparser = parser.add_subparsers(required=True, dest=\"cmd\")\nparser_repo = subparser.add_parser(\"repo\", help=\"perform git repository operations\")\nparser_repo.add_argument(\"--repo\", help=\"Repository to operate on; default all\")\nparser_repo.set_defaults(func=main_repo)\nparser_github = subparser.add_parser(\n    \"github\", help=\"perform github pull request operations\"\n)\nparser_github.add_argument(\"--repo\", help=\"Repository to operate on; default all\")\nparser_github.set_defaults(func=main_github)\nparser_list = subparser.add_parser(\"list\", help=\"list all repositories with entries\")\nparser_list.set_defaults(func=main_list)\n\nif __name__ == \"__main__\":\n    args = parser.parse_args()\n    args.func(args)\n"
  }
]