Compare commits

...
181 Commits
Author SHA1 Message Date
dev-sec CI c21ff3d2c3 update changelog 2026-05-13 07:44:08 +00:00
renovate[bot] 1fb77e4c9c Update dev-sec/.github digest to 2cd0028 (#943)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-13 09:43:08 +02:00
renovate[bot] 02d583a01d Update dependency molecule to v26 (#935)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-13 09:42:53 +02:00
dev-sec CI 4d436b0697 update changelog 2026-05-12 22:14:21 +00:00
renovate[bot] c801b54cf8 Update dependency ansible-core to v2.20.5 (#910)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 22:10:07 +00:00
dev-sec CI 41320ed028 update os_hardening readme 2026-05-12 13:35:56 +00:00
dev-sec CI 3a6e3fedb2 update nginx_hardening readme 2026-05-12 13:35:06 +00:00
dev-sec CI a72d4da2ef update mysql_hardening readme 2026-05-12 13:34:08 +00:00
dev-sec CI 1d856393e0 update ssh_hardening readme 2026-05-12 13:31:57 +00:00
dev-sec CI 2d9e7028ba update changelog 2026-05-12 13:28:19 +00:00
Martin Schurz 38791f0199 Update supported OS versions to current Fedora (42/43/44) and Ubuntu (22.04/24.04/26.04) (#946)
* Update testing and remove old, unsupported OS versions

Signed-off-by: Martin Schurz <[email protected]>

* Update Arch OS

Signed-off-by: Martin Schurz <[email protected]>

* Fix SuSE login.defs issues

Signed-off-by: Martin Schurz <[email protected]>

* Debug ...

Signed-off-by: Martin Schurz <[email protected]>

* Fix SuSE stuff

Signed-off-by: Martin Schurz <[email protected]>

* Fix SuSE stuff

Signed-off-by: Martin Schurz <[email protected]>

* Update OS Support

Signed-off-by: Martin Schurz <[email protected]>

* Use Ansible mysql module

Signed-off-by: Martin Schurz <[email protected]>

* Update OS Support

Signed-off-by: Martin Schurz <[email protected]>

* Use existing Fedora images

Signed-off-by: Martin Schurz <[email protected]>

* Fix VM tests

Signed-off-by: Martin Schurz <[email protected]>

* fix last errors

Signed-off-by: Martin Schurz <[email protected]>

* Final fixes

Signed-off-by: Martin Schurz <[email protected]>

---------

Signed-off-by: Martin Schurz <[email protected]>
2026-05-12 15:25:57 +02:00
dev-sec CI 6c0d54cbe5 update changelog 2026-05-06 08:44:51 +00:00
renovate[bot] 1830c8df23 Update actions/labeler action to v6.1.0 (#947)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 08:43:30 +00:00
dev-sec CI a506cc63f5 update changelog 2026-04-16 07:52:30 +00:00
renovate[bot] f24952f110 chore(deps): update ansible/ansible-lint digest to 5fac056 (#942)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-16 09:50:53 +02:00
dev-sec CI 1199cbd8ee update galaxy.yml with new version 2026-03-28 21:29:36 +00:00
dev-sec CI 13515e3fe2 update changelog 2026-03-28 20:37:44 +00:00
renovate[bot] 882637dd13 chore(deps): update actions/checkout digest to de0fac2 (#932) 2026-03-28 21:36:28 +01:00
dev-sec CI 0f0761fb7e update changelog 2026-03-28 19:44:38 +00:00
renovate[bot] dec15ae057 chore(deps): pin dependencies (#938)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-28 20:43:21 +01:00
renovate[bot] f174f69e9e chore(deps): update hugo19941994/delete-draft-releases action to v3 (#940)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-28 20:42:51 +01:00
dev-sec CI 13444e5e9b update changelog 2026-03-28 19:29:07 +00:00
Eike SauerandEike Sauer f68429cff0 do not update apt cache when installing libpam-passwdqc (#939)
* updating apt is not in the scope of a libpam-passwdqc task, IMHO

---------

Signed-off-by: Eike Sauer <[email protected]>
Co-authored-by: Eike Sauer <[email protected]>
2026-03-28 20:27:51 +01:00
dev-sec CI 7c2168bd21 update galaxy.yml with new version 2026-03-20 22:10:01 +00:00
dev-sec CI 70da85de4d update changelog 2026-03-20 21:26:29 +00:00
schurzi a62b40e6b0 Prettified Code! 2026-03-20 21:25:18 +00:00
Martin Schurz 9bbae051d6 Improve VM based testing of SSH hardening (#878) 2026-03-20 22:24:57 +01:00
dev-sec CI c89fe9e5e4 update changelog 2026-03-20 14:11:16 +00:00
Tatu Argillander d7487032d2 disable sshd socket activation first (#931)
Ansible can open multiple connections and it's possible for a new socket
to open before activation is fully disabled, leaving a zombie sshd
process. At least that is the guess. Ubuntu 24.04 suffers from this.

Reload the configuration after disabling socket activation to not enable
it again.

Signed-off-by: Tatu Argillander <[email protected]>
2026-03-20 15:06:59 +01:00
dev-sec CI 7b1052db3a update changelog 2026-03-14 10:53:31 +00:00
renovate[bot] 7d80c0cdc5 chore(deps): update artis3n/ansible_galaxy_collection action to v3 (#933)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-14 11:51:58 +01:00
renovate[bot] 56af318f67 chore(deps): update juliangruber/read-file-action digest to 271ff31 (#937)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-14 11:51:31 +01:00
renovate[bot] af19631274 chore(deps): update ansible/ansible-lint digest to 8ba9595 (#934)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-14 11:51:03 +01:00
dev-sec CI 90568a27a8 update galaxy.yml with new version 2026-01-22 22:12:05 +00:00
dev-sec CI 01121abab4 update changelog 2026-01-22 21:31:25 +00:00
renovate[bot] 83167cdd4c chore(deps): update dependency jmespath to v1.1.0 (#930)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 22:29:59 +01:00
dev-sec CI 7bf49663dd update changelog 2026-01-22 09:10:00 +00:00
dev-sec CI c751768731 update changelog 2026-01-22 07:02:40 +00:00
renovate[bot] 05cf135b52 chore(deps): update actions/setup-python digest to a309ff8 (#929)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 08:01:08 +01:00
dev-sec CI 2341043c79 update changelog 2026-01-18 18:58:41 +00:00
renovate[bot] 7c99aa19e0 chore(deps): update artis3n/ansible_galaxy_collection digest to 415a92b (#927)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-18 19:57:44 +01:00
renovate[bot] 745931444a chore(deps): update ansible/ansible-lint action to v26 (#928)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-18 19:57:26 +01:00
dev-sec CI 8f7f3f0695 update changelog 2025-12-23 11:03:34 +00:00
renovate[bot] a97cc1d6ce chore(deps): update ansible/ansible-lint digest to a2bc8b8 (#924)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-23 12:02:13 +01:00
dev-sec CI ebbbde5ea8 update changelog 2025-12-14 11:20:20 +00:00
renovate[bot] 8826a81a74 chore(deps): update dependency molecule to v25.12.0 (#914)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 12:19:19 +01:00
renovate[bot] fdfb86b6bb chore(deps): update actions/setup-python digest to 83679a8 (#920)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 12:19:05 +01:00
dev-sec CI 1328c7ae93 update changelog 2025-12-13 12:47:30 +00:00
renovate[bot] 43b6402acf chore(deps): update actions/checkout action to v6 (#919)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 13:44:59 +01:00
renovate[bot] c4acd62225 chore(deps): update ansible/ansible-lint digest to 40f24c2 (#913)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 13:42:47 +01:00
dev-sec CI 936240fc7a update changelog 2025-12-13 12:39:19 +00:00
Norman Ziegner 209ba1dabf Consistently access facts via the ansible_facts.* namespace (#917)
* ci: disable injecting facts as own vars in the main namespace

Signed-off-by: Norman Ziegner <[email protected]>

* Consistently access facts via the ansible_facts.* namespace

Signed-off-by: Norman Ziegner <[email protected]>

---------

Signed-off-by: Norman Ziegner <[email protected]>
2025-12-13 13:38:02 +01:00
dev-sec CI db998ef8c5 update changelog 2025-11-28 17:38:08 +00:00
Norman Ziegner 4e5c4478d8 fix: remove yaml callback entirely for EL8 compatibility (#918)
Signed-off-by: Norman Ziegner <[email protected]>
2025-11-28 18:36:51 +01:00
dev-sec CI f6b52d55fc update changelog 2025-10-27 21:25:00 +00:00
ChristophandChristoph Sieber 940ed980b3 disable systemd audit logging (#902)
* os_hardening: disable systemd audit logging

disable audit logging via systemd-journald when enabling auditd
as this leads to duplicate logs in the journal or even /var/log/messages
depending on the configuration

Signed-off-by: Christoph Sieber <[email protected]>

* Don't disable systemd-journald-audit.socket on Suse

it seems the socket doesn't exist on this OS

Signed-off-by: Christoph Sieber <[email protected]>

---------

Signed-off-by: Christoph Sieber <[email protected]>
Co-authored-by: Christoph Sieber <[email protected]>
2025-10-27 22:23:39 +01:00
dev-sec CI 9976169cad update changelog 2025-10-27 09:37:20 +00:00
Martin Schurz 24d4d04840 Update test environments to current Ansible version (#909)
* Update test environments to current Ansible version

Signed-off-by: Martin Schurz <[email protected]>

* Add Workaround for vagrant

Signed-off-by: Martin Schurz <[email protected]>

---------

Signed-off-by: Martin Schurz <[email protected]>
2025-10-27 10:32:41 +01:00
dev-sec CI 95e50cb69d update changelog 2025-10-26 16:17:56 +00:00
renovate[bot] 2484831bca chore(deps): update ansible/ansible-lint digest to d7cd7cf (#903)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-26 17:15:44 +01:00
dev-sec CI 76b0ae3000 update galaxy.yml with new version 2025-10-22 10:35:43 +00:00
dev-sec CI 1e40024850 update changelog 2025-10-22 09:02:34 +00:00
Martin Schurz 1512111726 Write sysctl config to separate file (#907)
* Write sysctl config to separate file

Write our sysctl config to separate file, since newer distributions no longer use the global /etc/sysctl.conf file. All older distributions seem to already support reading from /etc/sysctl.d so this should be no breaking change.
2025-10-22 11:01:01 +02:00
dev-sec CI 328644e1fe update changelog 2025-10-22 08:22:11 +00:00
Martin Schurz f377395e00 Update ArchLinux test environment before testing (#908)
* Update ArchLinux test environment before testing

Update Arch packages and Keyrings to avoid problems when installing Ansible and dependencies.
2025-10-22 10:20:40 +02:00
dev-sec CI e4d736cde2 update changelog 2025-09-25 16:37:46 +00:00
renovate[bot] 548e888c40 chore(deps): update actions/setup-python action to v6 (#901)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-25 18:36:52 +02:00
renovate[bot] 77f0d32af7 chore(deps): update actions/labeler action to v6 (#900)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-25 18:36:33 +02:00
renovate[bot] 5701f291db chore(deps): update ansible/ansible-lint digest to 8861a73 (#899)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-25 18:36:24 +02:00
dev-sec CI 50befb5fe8 update changelog 2025-08-13 13:24:28 +00:00
renovate[bot] afdfdb065f chore(deps): update actions/checkout action to v5 (#895)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-13 15:19:49 +02:00
dev-sec CI 4075c453a9 update changelog 2025-08-12 19:20:05 +00:00
renovate[bot] 306903b19d chore(deps): update hugo19941994/delete-draft-releases action to v2 (#885)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-12 21:18:50 +02:00
dev-sec CI 61c7c9a823 update ssh_hardening readme 2025-08-12 10:57:52 +00:00
dev-sec CI 1876ee1bf5 update nginx_hardening readme 2025-08-12 10:55:17 +00:00
dev-sec CI 91f8dada4c update mysql_hardening readme 2025-08-12 10:51:39 +00:00
dev-sec CI ae3cbf27a6 update os_hardening readme 2025-08-12 10:50:37 +00:00
dev-sec CI 734f2d205e update changelog 2025-08-12 10:49:32 +00:00
Martin SchurzandJonathan Wright b87188c619 Add support for current versions of Debian and EL (#893)
* Add support for current versions of Debian and EL

Signed-off-by: Martin Schurz <[email protected]>

* Add conditions for EL8

Signed-off-by: Martin Schurz <[email protected]>

* Fix Audit in AlmaLinux

Signed-off-by: Martin Schurz <[email protected]>

* Fix broken SSH host key config in rhel/almalinux 10

Signed-off-by: Jonathan Wright <[email protected]>

* Generate SSH Keys on EL10

Signed-off-by: Martin Schurz <[email protected]>

* Generate SSH Keys for tests via Systemd

Signed-off-by: Martin Schurz <[email protected]>

* Fixup tests

Signed-off-by: Martin Schurz <[email protected]>

* Remove auditd conditions

Signed-off-by: Martin Schurz <[email protected]>

* Add path to audit handler

Signed-off-by: Martin Schurz <[email protected]>

* Install init scripts

Signed-off-by: Martin Schurz <[email protected]>

* Update main README

---------

Signed-off-by: Martin Schurz <[email protected]>
Signed-off-by: Jonathan Wright <[email protected]>
Co-authored-by: Jonathan Wright <[email protected]>
2025-08-12 12:48:46 +02:00
Martin Schurz f14460514d Merge pull request #888 from jonathanspw/almalinux10
Add SSH config for EL/AlmaLinux 10
2025-08-12 12:48:21 +02:00
dev-sec CI 311cf40c50 update changelog 2025-08-10 15:46:58 +00:00
renovate[bot] a2d64b5642 chore(deps): update dependency python to 3.13 (#892)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-10 15:43:12 +00:00
dev-sec CI 1f92bc7f6a update changelog 2025-08-05 12:43:06 +00:00
renovate[bot] 41618f14f4 chore(deps): update dependency aar-doc to v2.3.0 (#890)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-05 12:41:52 +00:00
dev-sec CI 33c7bbdec3 update changelog 2025-08-04 06:22:35 +00:00
Martin Schurz e234ac57e3 Merge pull request #889 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to 9765b87
2025-08-04 08:21:18 +02:00
dev-sec CI 6edcedc9b6 update changelog 2025-08-04 06:00:35 +00:00
renovate[bot] 0eb6fbeae3 chore(deps): update ansible/ansible-lint digest to 9765b87
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-04 06:00:10 +00:00
Martin Schurz 9634efbdff Merge pull request #887 from jonathanspw/patch-1
Improve OS support accuracy
2025-08-04 07:59:19 +02:00
Jonathan Wright 157832e472 Fix broken SSH host key config in rhel/almalinux 10
Signed-off-by: Jonathan Wright <[email protected]>
2025-07-31 09:50:38 -05:00
Jonathan Wright 3d076bb92e Improve OS support accuracy
These roles are used/tested extensively within AlmaLinux's own infrastructure.

Signed-off-by: Jonathan Wright <[email protected]>
2025-07-31 09:49:21 -05:00
dev-sec CI db61a1d4c5 update galaxy.yml with new version 2025-07-25 07:39:59 +00:00
dev-sec CI f4d4246ddf update changelog 2025-07-24 15:18:32 +00:00
schurzi ec97936cce Merge pull request #873 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to 06f616d
2025-07-24 17:17:15 +02:00
Martin Schurz 96e7d7a5bd Use different names for test tasks
Signed-off-by: Martin Schurz <[email protected]>
2025-07-24 16:43:52 +02:00
dev-sec CI acccf3f6bb update changelog 2025-07-24 14:40:44 +00:00
schurzi a3935ee6cd Merge pull request #877 from dev-sec/renovate/aar-doc-2.x
chore(deps): update dependency aar-doc to v2.2.0
2025-07-24 16:39:11 +02:00
dev-sec CI 6c58601b4c update changelog 2025-07-24 10:33:00 +00:00
renovate[bot] a68817a1d4 chore(deps): update dependency aar-doc to v2.2.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-24 10:31:46 +00:00
schurzi 946ffc5f93 Merge pull request #866 from dev-sec/renovate/actions-setup-python-digest
chore(deps): update actions/setup-python digest to a26af69
2025-07-24 12:31:17 +02:00
renovate[bot] 87b04e61c2 chore(deps): update actions/setup-python digest to a26af69
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-24 09:50:39 +00:00
dev-sec CI 4a245e98cd update changelog 2025-07-24 09:44:59 +00:00
schurzi 422d58fd14 Merge pull request #884 from dev-sec/fix_bsd_tests
Use fixed test env for BSD VMs
2025-07-24 11:41:45 +02:00
Martin Schurz bb7e74407d Use fixed test env for BSD VMs
Signed-off-by: Martin Schurz <[email protected]>
2025-07-24 11:32:55 +02:00
dev-sec CI c5d9e8aaeb update changelog 2025-07-24 08:05:00 +00:00
schurzi 6cba622ea1 Merge pull request #882 from dev-sec/fix_rocky8
Downgrade community.crypto for rocky8
2025-07-24 10:03:41 +02:00
Martin Schurz ec7603846d Downgrade community.crypto for rocky8
Signed-off-by: Martin Schurz <[email protected]>
2025-07-24 09:37:39 +02:00
renovate[bot] dff7e83f6a chore(deps): update ansible/ansible-lint digest to 06f616d
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-19 11:30:12 +00:00
dev-sec CI 9ebc603b6b update changelog 2025-06-10 01:33:21 +00:00
renovate[bot] ff63c3fe7a chore(deps): update creyd/prettier_action action to v4.6 (#876)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-10 01:32:07 +00:00
dev-sec CI 38eede7e03 update changelog 2025-05-20 10:30:26 +00:00
rndmh3ro 41264cdc10 Prettified Code! 2025-05-20 10:29:33 +00:00
Sebastian Gumprich 02db22f6fc Update minimum ansible version 2025-05-20 12:29:15 +02:00
renovate[bot] 4ab70a7d07 chore(deps): update dependency ansible-core to v2.18.6 (#872)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 04:03:37 +00:00
dev-sec CI 04c6ed3bd1 update changelog 2025-05-16 08:29:26 +00:00
schurzi bb951fc55f Merge pull request #867 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to e98f9b3
2025-05-16 10:28:17 +02:00
dev-sec CI 71ce99183d update changelog 2025-05-08 23:50:12 +00:00
renovate[bot] acd7470619 chore(deps): update creyd/prettier_action action to v4.5 (#869)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-08 23:49:05 +00:00
dev-sec CI 57ba543be0 update changelog 2025-05-08 11:51:48 +00:00
Moritz e75072989f chore(ssh_hardening): ansible 2.19 compatibility (#868)
* chore(ssh_hardening): jinja2 templates header fixed

Signed-off-by: Nemental <[email protected]>

* chore(ssh_hardening): conditional bool handling

Signed-off-by: Nemental <[email protected]>

---------

Signed-off-by: Nemental <[email protected]>
2025-05-08 13:50:38 +02:00
renovate[bot] 0d944bccd6 chore(deps): update ansible/ansible-lint digest to e98f9b3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 14:28:13 +00:00
dev-sec CI 1388eea064 update changelog 2025-04-22 03:24:15 +00:00
renovate[bot] 3f158165bf chore(deps): update dependency ansible-core to v2.18.5 (#865)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-22 03:23:07 +00:00
dev-sec CI 69bdd58226 update changelog 2025-04-04 11:16:58 +00:00
renovate[bot] 65cf22801b chore(deps): update dependency aar-doc to v2.1.0 (#861)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-04 11:15:41 +00:00
dev-sec CI 88c823f2b8 update changelog 2025-04-04 02:21:03 +00:00
renovate[bot] 628c3542da chore(deps): update dependency ansible-core to v2.18.4 (#860)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-04 02:19:47 +00:00
dev-sec CI e954eb83a6 update changelog 2025-04-03 20:06:37 +00:00
schurzi 72297cf078 Merge pull request #859 from dev-sec/renovate/actions-setup-python-digest
chore(deps): update actions/setup-python digest to 8d9ed9a
2025-04-03 22:04:06 +02:00
dev-sec CI a60279a158 update changelog 2025-04-03 15:49:46 +00:00
schurzi 8f2c7d6866 Merge pull request #863 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to c16f018
2025-04-03 17:48:38 +02:00
renovate[bot] c757f40909 chore(deps): update ansible/ansible-lint digest to c16f018
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 14:50:04 +00:00
dev-sec CI 14a3cd5613 update changelog 2025-04-03 14:49:12 +00:00
schurzi 9378570308 Merge pull request #862 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to 6a4fcdb
2025-04-03 16:47:50 +02:00
renovate[bot] d22a086c41 chore(deps): update ansible/ansible-lint digest to 6a4fcdb
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-02 14:06:21 +00:00
renovate[bot] 86a1570bd0 chore(deps): update actions/setup-python digest to 8d9ed9a
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 06:46:20 +00:00
dev-sec CI 3172a43202 update changelog 2025-03-17 17:12:44 +00:00
Ali Mehraji 031b62ff4c Fix: ForwardAgent j2 template space in roles/ssh_hardening/templates/openssh.conf.j2 (#856)
Signed-off-by: Ali Mehraji <[email protected]>
2025-03-17 18:11:32 +01:00
dev-sec CI d4ca770dcd update changelog 2025-03-10 13:40:57 +00:00
schurzi 2a5dac1918 Merge pull request #853 from dev-sec/renovate/artis3n-ansible_galaxy_collection-digest
chore(deps): update artis3n/ansible_galaxy_collection digest to f6110ae
2025-03-10 14:39:46 +01:00
renovate[bot] 49f3a98bee chore(deps): update artis3n/ansible_galaxy_collection digest to f6110ae
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-01 21:38:20 +00:00
dev-sec CI ac522c4a66 update galaxy.yml with new version 2025-02-26 18:18:12 +00:00
dev-sec CI 367bf150a8 update changelog 2025-02-25 20:48:25 +00:00
schurzi cf655a35d8 Merge pull request #794 from mib1185/allow-seperate-password-login-for-sftp
Allow to override settings for sftponly users
2025-02-25 21:47:06 +01:00
Michael 4ae5acf050 move Match Group sftponly block to the end
Signed-off-by: Michael <[email protected]>
2025-02-25 15:29:00 +00:00
mib1185 0a52f9195a allow seperate password login for sftp
Signed-off-by: Michael <[email protected]>
2025-02-25 15:28:54 +00:00
dev-sec CI e318aab870 update changelog 2025-02-24 22:13:33 +00:00
renovate[bot] b01085e9b9 chore(deps): update dependency ansible-core to v2.18.3 (#852)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-24 22:12:20 +00:00
dev-sec CI 35908806bf update changelog 2025-02-20 12:24:40 +00:00
schurzi fc3e20cdf3 Merge pull request #851 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to 49ded6a
2025-02-20 13:23:21 +01:00
renovate[bot] 40228b8e97 chore(deps): update ansible/ansible-lint digest to 49ded6a
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 15:25:19 +00:00
dev-sec CI 95323b3792 update changelog 2025-02-09 11:21:38 +00:00
dev-sec CI 3d6b05d4e7 update ssh_hardening readme 2025-02-09 11:20:57 +00:00
dev-sec CI e4ed1ca972 update os_hardening readme 2025-02-09 11:20:56 +00:00
schurzi 68ac7869f4 Merge pull request #839 from Normo/set-pw-warn-days
Set number of warning days before password expires for existing users
2025-02-09 12:20:32 +01:00
Martin Schurz 78b9cbdc60 bump min_ansible_version
Signed-off-by: Martin Schurz <[email protected]>
2025-02-09 11:21:06 +01:00
Norman Ziegner 8b24d49c00 Set number of warning days before password expires for existing users
Signed-off-by: Norman Ziegner <[email protected]>
2025-02-08 22:30:24 +01:00
dev-sec CI e746a25fe8 update changelog 2025-02-08 14:40:25 +00:00
schurzi f0596e36b7 Merge pull request #841 from dev-sec/renovate/molecule-25.x
chore(deps): update dependency molecule to v25
2025-02-08 15:39:13 +01:00
Martin Schurz 4880a5f852 Downgrade molecule
Signed-off-by: Martin Schurz <[email protected]>
2025-02-08 14:59:27 +01:00
Martin Schurz f620ee1548 Also update plugins
Signed-off-by: Martin Schurz <[email protected]>
2025-02-08 14:32:45 +01:00
dev-sec CI 2ef4f026da update changelog 2025-02-08 11:15:29 +00:00
schurzi 2372abd97f Merge pull request #846 from Tinyblargon/reduce-set-fact
Refactor: combine multiple set_fact into single jinja filter
2025-02-08 12:14:24 +01:00
Tinyblargon 85415e7127 Combine multiple set_fact into jinja filter
Signed-off-by: Tinyblargon <[email protected]>
2025-02-08 11:55:07 +01:00
dev-sec CI 3be6a3b2a5 update changelog 2025-02-08 10:35:06 +00:00
schurzi 8582cae0d4 Merge pull request #844 from dev-sec/renovate/actions-setup-python-digest
chore(deps): update actions/setup-python digest to 4237552
2025-02-08 11:34:17 +01:00
schurzi 22aec478d8 Merge pull request #840 from dev-sec/renovate/ansible-ansible-lint-25.x
chore(deps): update ansible/ansible-lint action to v25
2025-02-08 11:33:59 +01:00
renovate[bot] 46441448be chore(deps): update actions/setup-python digest to 4237552
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-08 08:41:58 +00:00
renovate[bot] 9158d01ee4 chore(deps): update dependency molecule to v25
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-08 08:41:39 +00:00
renovate[bot] 78adcf4e15 chore(deps): update ansible/ansible-lint action to v25
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-08 08:41:35 +00:00
dev-sec CI 32f88e5456 update changelog 2025-02-08 04:32:39 +00:00
renovate[bot] 49e17ad910 chore(deps): update dependency ansible-core to v2.18.2 (#843)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-08 04:31:24 +00:00
dev-sec CI 07b20eb796 update changelog 2025-02-07 21:30:41 +00:00
schurzi 1d49d86d8c Merge pull request #847 from dev-sec/pin_runner_images 2025-02-07 22:29:26 +01:00
Martin Schurz c029b84138 update zypper
Signed-off-by: Martin Schurz <[email protected]>
2025-02-07 21:32:45 +01:00
Martin Schurz c41fd51b63 minor fixups
Signed-off-by: Martin Schurz <[email protected]>
2025-02-07 20:50:10 +01:00
Martin Schurz dfdbeaa247 minor fixups
Signed-off-by: Martin Schurz <[email protected]>
2025-02-07 19:57:21 +01:00
Martin Schurz 9f48cf4bbc Pin runner image to specific version to decouple from GitHub updates
Signed-off-by: Martin Schurz <[email protected]>
2025-02-07 18:49:52 +01:00
dev-sec CI 829c1d88dc update galaxy.yml with new version 2024-12-23 12:38:41 +00:00
dev-sec CI 144c308ee0 update changelog 2024-12-23 12:06:14 +00:00
schurzi 0bd061c02d Prettified Code! 2024-12-23 12:05:29 +00:00
86 changed files with 677 additions and 367 deletions

No files matched your search

+2 -3
View File
@@ -5,11 +5,10 @@
# option will be parsed relative to the CWD of execution. # option will be parsed relative to the CWD of execution.
exclude_paths: exclude_paths:
- .cache/ # implicit unless exclude_paths is defined in config - .cache/ # implicit unless exclude_paths is defined in config
- .ansible/ # somehow someone decided that the cache directory should be renamed
# add all waivers individually, since exclude_files does not support globs # add all waivers individually, since exclude_files does not support globs
- molecule/os_hardening/waivers.yaml - molecule/os_hardening/waivers.yaml
- molecule/ssh_hardening_bsd/waivers_freebsd13.yaml - molecule/ssh_hardening_vm/waivers_*.yaml
- molecule/ssh_hardening_bsd/waivers_freebsd14.yaml
- molecule/ssh_hardening_bsd/waivers_openbsd7.yaml
mock_roles: mock_roles:
- geerlingguy.git - geerlingguy.git
+3 -3
View File
@@ -23,10 +23,10 @@ on: # yamllint disable-line rule:truthy
jobs: jobs:
ansible-lint: ansible-lint:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Lint Ansible Playbook - name: Lint Ansible Playbook
uses: ansible/ansible-lint@4ce8e497d462cf73b4d4fac1e97b4ace4f317dcc # v24 uses: ansible/ansible-lint@5fac056c45595896c973fbde871f01f6cb14d74c # v26
+1 -1
View File
@@ -9,6 +9,6 @@ on: # yamllint disable-line rule:truthy
jobs: jobs:
codespell: codespell:
uses: "dev-sec/.github/.github/workflows/codespell.yml@main" uses: "dev-sec/.github/.github/workflows/codespell.yml@2cd00282cfdb322243d879a96d9494ce64e76119" # main
with: with:
ignore_words_list: "chage,BOOTUP" ignore_words_list: "chage,BOOTUP"
+2 -2
View File
@@ -12,8 +12,8 @@ permissions:
jobs: jobs:
enforce-label: enforce-label:
if: github.repository == 'dev-sec/ansible-collection-hardening' if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest runs-on: ubuntu-22.04
steps: steps:
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0
with: with:
repo-token: "${{ secrets.GITHUB_TOKEN }}" repo-token: "${{ secrets.GITHUB_TOKEN }}"
+4 -4
View File
@@ -9,20 +9,20 @@ on: # yamllint disable-line rule:truthy
jobs: jobs:
deploy: deploy:
if: github.repository == 'dev-sec/ansible-collection-hardening' if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
# deploy the collection first, because if it fails, we don't want # deploy the collection first, because if it fails, we don't want
# to update the galaxy.yml # to update the galaxy.yml
- name: Deploy the collection - name: Deploy the collection
uses: artis3n/ansible_galaxy_collection@3368f56529a2ef47ef0ac1ecfcda039f90d0174a # v2 uses: artis3n/ansible_galaxy_collection@ffbca2460a5a1c600b941bbf1536bd61de1c2227 # v3
with: with:
api_key: ${{ secrets.GALAXY_API_KEY }} api_key: ${{ secrets.GALAXY_API_KEY }}
galaxy_version: ${{ github.event.release.tag_name }} galaxy_version: ${{ github.event.release.tag_name }}
# checkout master instead of the release-tag so we can push the galaxy.yml # checkout master instead of the release-tag so we can push the galaxy.yml
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
ref: master ref: master
+15 -7
View File
@@ -29,7 +29,7 @@ concurrency:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
env: env:
PY_COLORS: 1 PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1 ANSIBLE_FORCE_COLOR: 1
@@ -37,29 +37,34 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
molecule_distro: molecule_distro:
- almalinux8
- almalinux9
# - almalinux10 # problem with baseline
- centosstream9 - centosstream9
- rocky8 - rocky8
- rocky9 - rocky9
- ubuntu2004 # - rocky10 # problem with baseline
- ubuntu2204 - ubuntu2204
- ubuntu2404 - ubuntu2404
# - ubuntu2604 # problem with test setup
- debian11 - debian11
- debian12 - debian12
- debian13
# - amazon # geerlingguy.mysql does not support fedora # - amazon # geerlingguy.mysql does not support fedora
# - arch # geerlingguy.mysql does not support arch # - arch # geerlingguy.mysql does not support arch
- opensuse_tumbleweed - opensuse_tumbleweed
# - fedora # geerlingguy.mysql does not support fedora # - fedora # geerlingguy.mysql does not support fedora
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
path: ansible_collections/devsec/hardening path: ansible_collections/devsec/hardening
submodules: true submodules: true
- name: Set up Python - name: Set up Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with: with:
python-version: 3.12 python-version: 3.13
cache: 'pip' cache: 'pip'
- name: Install dependencies - name: Install dependencies
@@ -67,9 +72,12 @@ jobs:
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests - name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17" run: |
pip install "ansible-core<2.17"
ansible-galaxy collection install 'community.crypto:<3.0.0'
ansible-galaxy collection install 'community.general:<12.0.0'
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8' if: matrix.molecule_distro == 'rocky8' || matrix.molecule_distro == 'almalinux8'
# that was a hard one to fix. robert did it thankfully # that was a hard one to fix. robert did it thankfully
# https://github.com/robertdebock/ansible-role-mysql/commit/7562e99099b06282391ab7ed102b393a0406d212 # https://github.com/robertdebock/ansible-role-mysql/commit/7562e99099b06282391ab7ed102b393a0406d212
+15 -7
View File
@@ -28,7 +28,7 @@ concurrency:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
env: env:
PY_COLORS: 1 PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1 ANSIBLE_FORCE_COLOR: 1
@@ -36,29 +36,34 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
molecule_distro: molecule_distro:
- almalinux8
- almalinux9
- almalinux10
- centosstream9 - centosstream9
- rocky8 - rocky8
- rocky9 - rocky9
- ubuntu2004 - rocky10
- ubuntu2204 - ubuntu2204
- ubuntu2404 - ubuntu2404
- ubuntu2604
- debian11 - debian11
- debian12 - debian12
- debian13
- amazon2023 - amazon2023
# - arch # needs to be fixed # - arch # needs to be fixed
# - opensuse_tumbleweed # needs to be fixed # - opensuse_tumbleweed # needs to be fixed
# - fedora # no support from geerlingguy role # - fedora # no support from geerlingguy role
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
path: ansible_collections/devsec/hardening path: ansible_collections/devsec/hardening
submodules: true submodules: true
- name: Set up Python - name: Set up Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with: with:
python-version: 3.12 python-version: 3.13
cache: 'pip' cache: 'pip'
- name: Install dependencies - name: Install dependencies
@@ -66,9 +71,12 @@ jobs:
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests - name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17" run: |
pip install "ansible-core<2.17"
ansible-galaxy collection install 'community.crypto:<3.0.0'
ansible-galaxy collection install 'community.general:<12.0.0'
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8' if: matrix.molecule_distro == 'rocky8' || matrix.molecule_distro == 'almalinux8'
# Molecule has problems detecting the proper location for installing roles # Molecule has problems detecting the proper location for installing roles
# https://github.com/ansible/molecule/issues/3806 # https://github.com/ansible/molecule/issues/3806
+18 -9
View File
@@ -28,7 +28,7 @@ concurrency:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
env: env:
PY_COLORS: 1 PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1 ANSIBLE_FORCE_COLOR: 1
@@ -39,31 +39,37 @@ jobs:
- molecule_distro: opensuse_tumbleweed - molecule_distro: opensuse_tumbleweed
molecule_docker_command: "/usr/lib/systemd/systemd" molecule_docker_command: "/usr/lib/systemd/systemd"
molecule_distro: molecule_distro:
- almalinux8
- almalinux9
- almalinux10
- centosstream9 - centosstream9
- rocky8 - rocky8
- rocky9 - rocky9
- fedora39 - rocky10
- fedora40 - fedora42
- ubuntu2004 - fedora43
- fedora44
- ubuntu2204 - ubuntu2204
- ubuntu2404 - ubuntu2404
- ubuntu2604
- debian11 - debian11
- debian12 - debian12
- debian13
- amazon2023 - amazon2023
- arch - arch
molecule_docker_command: molecule_docker_command:
- "/lib/systemd/systemd" - "/lib/systemd/systemd"
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
path: ansible_collections/devsec/hardening path: ansible_collections/devsec/hardening
submodules: true submodules: true
- name: Set up Python - name: Set up Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with: with:
python-version: 3.12 python-version: 3.13
cache: 'pip' cache: 'pip'
- name: Install dependencies - name: Install dependencies
@@ -71,9 +77,12 @@ jobs:
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests - name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17" run: |
pip install "ansible-core<2.17"
ansible-galaxy collection install 'community.crypto:<3.0.0'
ansible-galaxy collection install 'community.general:<12.0.0'
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8' if: matrix.molecule_distro == 'rocky8' || matrix.molecule_distro == 'almalinux8'
- name: Test with molecule - name: Test with molecule
run: molecule test -s os_hardening run: molecule test -s os_hardening
+19 -6
View File
@@ -9,6 +9,7 @@ on: # yamllint disable-line rule:truthy
- 'molecule/os_hardening_vm/**' - 'molecule/os_hardening_vm/**'
- '.github/workflows/os_hardening_vm.yml' - '.github/workflows/os_hardening_vm.yml'
- 'requirements.txt' - 'requirements.txt'
- 'requirements-vm.txt'
pull_request: pull_request:
branches: [master] branches: [master]
paths: paths:
@@ -16,6 +17,7 @@ on: # yamllint disable-line rule:truthy
- 'molecule/os_hardening_vm/**' - 'molecule/os_hardening_vm/**'
- '.github/workflows/os_hardening_vm.yml' - '.github/workflows/os_hardening_vm.yml'
- 'requirements.txt' - 'requirements.txt'
- 'requirements-vm.txt'
schedule: schedule:
- cron: '0 6 * * 2' - cron: '0 6 * * 2'
@@ -36,21 +38,25 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
molecule_distro: molecule_distro:
- almalinux/8
- almalinux/9
# - almalinux/10 # boot loop
- generic/centos9s - generic/centos9s
- generic/rocky8 - generic/rocky8
- generic/rocky9 - generic/rocky9
- fedora/39-cloud-base - alvistack/fedora-42
- fedora/40-cloud-base # - alvistack/fedora-43 # no compatible test image
- generic/ubuntu2004
- generic/ubuntu2204 - generic/ubuntu2204
- alvistack/ubuntu-24.04 - alvistack/ubuntu-24.04
# - alvistack/ubuntu-26.04 # no compatible test image
- generic/debian11 - generic/debian11
- generic/debian12 - generic/debian12
- cloud-image/debian-13
- generic/opensuse15 - generic/opensuse15
- generic/arch - generic/arch
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
path: ansible_collections/devsec/hardening path: ansible_collections/devsec/hardening
submodules: true submodules: true
@@ -60,15 +66,20 @@ jobs:
source ~/.venv/ansible-collection-hardening/bin/activate source ~/.venv/ansible-collection-hardening/bin/activate
python -m pip install --no-cache-dir --upgrade pip python -m pip install --no-cache-dir --upgrade pip
pip install -r requirements.txt pip install -r requirements.txt
pip install python-vagrant pip install -r requirements-vm.txt
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests - name: Downgrade Ansible for Rocky 8 tests
run: | run: |
source ~/.venv/ansible-collection-hardening/bin/activate source ~/.venv/ansible-collection-hardening/bin/activate
pip install "ansible-core<2.17" pip install "ansible-core<2.17"
ansible-galaxy collection install 'community.crypto:<3.0.0'
ansible-galaxy collection install 'community.general:<12.0.0'
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'generic/rocky8' || matrix.molecule_distro == 'generic/opensuse15' if: >
matrix.molecule_distro == 'generic/rocky8' ||
matrix.molecule_distro == 'almalinux/8' ||
matrix.molecule_distro == 'generic/opensuse15'
- name: Update Vagrant Box - name: Update Vagrant Box
run: | run: |
@@ -77,6 +88,8 @@ jobs:
- name: Test with molecule - name: Test with molecule
run: | run: |
source ~/.venv/ansible-collection-hardening/bin/activate source ~/.venv/ansible-collection-hardening/bin/activate
# Workaround for https://github.com/ansible-community/molecule-plugins/issues/301
export MOLECULE_VAGRANT_PLUGIN_DIR=$(python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')/molecule_plugins/vagrant
molecule test -s os_hardening_vm molecule test -s os_hardening_vm
env: env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }} MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
+3 -3
View File
@@ -11,16 +11,16 @@ on: # yamllint disable-line rule:truthy
jobs: jobs:
prettier-md: prettier-md:
if: github.repository == 'dev-sec/ansible-collection-hardening' if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest runs-on: ubuntu-22.04
timeout-minutes: 1 timeout-minutes: 1
steps: steps:
- name: Git checkout - name: Git checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
ref: ${{ github.head_ref }} ref: ${{ github.head_ref }}
- name: Prettify code - name: Prettify code
uses: creyD/prettier_action@31355f8eef017f8aeba2e0bc09d8502b13dbbad1 # v4.3 uses: creyD/prettier_action@8c18391fdc98ed0d884c6345f03975edac71b8f0 # v4.6
with: with:
prettier_options: --write {**/*,*}.md prettier_options: --write {**/*,*}.md
+5 -5
View File
@@ -11,16 +11,16 @@ jobs:
generate_changelog: generate_changelog:
name: create release draft name: create release draft
if: github.repository == 'dev-sec/ansible-collection-hardening' if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
fetch-depth: 0 fetch-depth: 0
ref: master ref: master
- name: 'Get Previous tag' - name: 'Get Previous tag'
id: previoustag id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@master" uses: "WyriHaximus/github-action-get-previous-tag@61819f33034117e6c686e6a31dba995a85afc9de" # master
env: env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
@@ -58,12 +58,12 @@ jobs:
- name: Read CHANGELOG.md - name: Read CHANGELOG.md
id: package id: package
uses: juliangruber/read-file-action@b549046febe0fe86f8cb4f93c24e284433f9ab58 # v1 uses: juliangruber/read-file-action@271ff311a4947af354c6abcd696a306553b9ec18 # v1
with: with:
path: ./CHANGELOGRELEASE.md path: ./CHANGELOGRELEASE.md
- name: Delete old drafts - name: Delete old drafts
uses: hugo19941994/delete-draft-releases@1bdca1ea7ffb25ae7f468a7bdb40056dae98175e # v1.0.1 uses: hugo19941994/delete-draft-releases@3f19a25abf2ce87850c2268938f98f14e4d3d1f1 # v3.0.0
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+4 -4
View File
@@ -17,7 +17,7 @@ on: # yamllint disable-line rule:truthy
jobs: jobs:
readme: readme:
name: create roles readme name: create roles readme
runs-on: ubuntu-latest runs-on: ubuntu-22.04
strategy: strategy:
matrix: matrix:
roles: roles:
@@ -27,12 +27,12 @@ jobs:
- ssh_hardening - ssh_hardening
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Python - name: Set up Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with: with:
python-version: 3.12 python-version: 3.13
cache: 'pip' cache: 'pip'
- name: Install dependencies - name: Install dependencies
+18 -9
View File
@@ -28,7 +28,7 @@ concurrency:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
env: env:
PY_COLORS: 1 PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1 ANSIBLE_FORCE_COLOR: 1
@@ -42,31 +42,37 @@ jobs:
- molecule_distro: alpine - molecule_distro: alpine
molecule_docker_command: "/sbin/init" molecule_docker_command: "/sbin/init"
molecule_distro: molecule_distro:
- almalinux8
- almalinux9
- almalinux10
- centosstream9 - centosstream9
- rocky8 - rocky8
- rocky9 - rocky9
- fedora39 - rocky10
- fedora40 - fedora42
- ubuntu2004 - fedora43
- fedora44
- ubuntu2204 - ubuntu2204
- ubuntu2404 - ubuntu2404
- ubuntu2604
- debian11 - debian11
- debian12 - debian12
- debian13
- amazon2023 - amazon2023
- arch - arch
molecule_docker_command: molecule_docker_command:
- "/lib/systemd/systemd" - "/lib/systemd/systemd"
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
path: ansible_collections/devsec/hardening path: ansible_collections/devsec/hardening
submodules: true submodules: true
- name: Set up Python - name: Set up Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with: with:
python-version: 3.12 python-version: 3.13
cache: 'pip' cache: 'pip'
- name: Install dependencies - name: Install dependencies
@@ -74,9 +80,12 @@ jobs:
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests - name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17" run: |
pip install "ansible-core<2.17"
ansible-galaxy collection install 'community.crypto:<3.0.0'
ansible-galaxy collection install 'community.general:<12.0.0'
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8' if: matrix.molecule_distro == 'rocky8' || matrix.molecule_distro == 'almalinux8'
- name: Test with molecule - name: Test with molecule
run: molecule test -s ssh_hardening run: molecule test -s ssh_hardening
-56
View File
@@ -1,56 +0,0 @@
---
name: "devsec.ssh_hardening BSD"
on: # yamllint disable-line rule:truthy
workflow_dispatch:
push:
branches: [master]
paths:
- 'roles/ssh_hardening/**'
- 'molecule/ssh_hardening_bsd/**'
- '.github/workflows/ssh_hardening_bsd.yml'
- 'requirements.txt'
pull_request:
branches: [master]
paths:
- 'roles/ssh_hardening/**'
- 'molecule/ssh_hardening_bsd/**'
- '.github/workflows/ssh_hardening_bsd.yml'
- 'requirements.txt'
schedule:
- cron: '0 6 * * 5'
concurrency:
group: >-
${{ github.workflow }}-${{
github.event.pull_request.number || github.sha
}}
cancel-in-progress: true
jobs:
build:
runs-on: self-hosted
env:
PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1
strategy:
fail-fast: false
matrix:
molecule_distro:
- openbsd7
- freebsd13
- freebsd14
steps:
- name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: ansible_collections/devsec/hardening
submodules: true
- name: Update Vagrant Box
run: vagrant box update --box generic/${{ matrix.molecule_distro }} || true
- name: Test with molecule
run: molecule test -s ssh_hardening_bsd
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
working-directory: ansible_collections/devsec/hardening
@@ -28,7 +28,7 @@ concurrency:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
env: env:
PY_COLORS: 1 PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1 ANSIBLE_FORCE_COLOR: 1
@@ -42,31 +42,37 @@ jobs:
- molecule_distro: alpine - molecule_distro: alpine
molecule_docker_command: "/sbin/init" molecule_docker_command: "/sbin/init"
molecule_distro: molecule_distro:
- almalinux8
- almalinux9
- almalinux10
- centosstream9 - centosstream9
- rocky8 - rocky8
- rocky9 - rocky9
- fedora39 - rocky10
- fedora40 - fedora42
- ubuntu2004 - fedora43
- fedora44
- ubuntu2204 - ubuntu2204
- ubuntu2404 - ubuntu2404
- ubuntu2604
- debian11 - debian11
- debian12 - debian12
- debian13
- amazon2023 - amazon2023
- arch - arch
molecule_docker_command: molecule_docker_command:
- "/lib/systemd/systemd" - "/lib/systemd/systemd"
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
path: ansible_collections/devsec/hardening path: ansible_collections/devsec/hardening
submodules: true submodules: true
- name: Set up Python - name: Set up Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with: with:
python-version: 3.12 python-version: 3.13
cache: 'pip' cache: 'pip'
- name: Install dependencies - name: Install dependencies
@@ -74,9 +80,12 @@ jobs:
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests - name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17" run: |
pip install "ansible-core<2.17"
ansible-galaxy collection install 'community.crypto:<3.0.0'
ansible-galaxy collection install 'community.general:<12.0.0'
working-directory: ansible_collections/devsec/hardening working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8' if: matrix.molecule_distro == 'rocky8' || matrix.molecule_distro == 'almalinux8'
- name: Test with molecule - name: Test with molecule
run: molecule test -s ssh_hardening_custom_tests run: molecule test -s ssh_hardening_custom_tests
+73
View File
@@ -0,0 +1,73 @@
---
name: "devsec.ssh_hardening VM"
on: # yamllint disable-line rule:truthy
workflow_dispatch:
push:
branches: [master]
paths:
- 'roles/ssh_hardening/**'
- 'molecule/ssh_hardening_vm/**'
- '.github/workflows/ssh_hardening_vm.yml'
- 'requirements.txt'
- 'requirements-vm.txt'
pull_request:
branches: [master]
paths:
- 'roles/ssh_hardening/**'
- 'molecule/ssh_hardening_vm/**'
- '.github/workflows/ssh_hardening_vm.yml'
- 'requirements.txt'
- 'requirements-vm.txt'
schedule:
- cron: '0 6 * * 5'
concurrency:
group: >-
${{ github.workflow }}-${{
github.event.pull_request.number || github.sha
}}
cancel-in-progress: true
jobs:
build:
runs-on: self-hosted
env:
PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1
strategy:
fail-fast: false
matrix:
molecule_distro:
- generic/openbsd7
- generic/freebsd14
- cloud-image/debian-13
- cloud-image/ubuntu-24.04
- cloud-image/ubuntu-26.04
steps:
- name: Checkout repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
path: ansible_collections/devsec/hardening
submodules: true
- name: Install dependencies
run: |
source ~/.venv/ansible-collection-hardening/bin/activate
python -m pip install --no-cache-dir --upgrade pip
pip install -r requirements.txt
pip install -r requirements-vm.txt
working-directory: ansible_collections/devsec/hardening
- name: Update Vagrant Box
run: |
vagrant box update --box ${{ matrix.molecule_distro }} || true
- name: Test with molecule
run: |
source ~/.venv/ansible-collection-hardening/bin/activate
# Workaround for https://github.com/ansible-community/molecule-plugins/issues/301
export MOLECULE_VAGRANT_PLUGIN_DIR=$(python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')/molecule_plugins/vagrant
molecule test -s ssh_hardening_vm
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
working-directory: ansible_collections/devsec/hardening
+170 -8
View File
@@ -1,20 +1,184 @@
# Changelog # Changelog
## [10.6.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.6.0) (2026-05-13)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.5.2...10.6.0)
**Implemented enhancements:**
- Update APT package cache before installing any package in case freshly installed system. [\#945](https://github.com/dev-sec/ansible-collection-hardening/issues/945)
- Update supported OS versions to current Fedora \(42/43/44\) and Ubuntu \(22.04/24.04/26.04\) [\#946](https://github.com/dev-sec/ansible-collection-hardening/pull/946) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([schurzi](https://github.com/schurzi))
**Merged pull requests:**
- Update actions/labeler action to v6.1.0 [\#947](https://github.com/dev-sec/ansible-collection-hardening/pull/947) ([renovate[bot]](https://github.com/apps/renovate))
- Update dev-sec/.github digest to 2cd0028 [\#943](https://github.com/dev-sec/ansible-collection-hardening/pull/943) ([renovate[bot]](https://github.com/apps/renovate))
- Update ansible/ansible-lint digest to 5fac056 [\#942](https://github.com/dev-sec/ansible-collection-hardening/pull/942) ([renovate[bot]](https://github.com/apps/renovate))
- Update dependency molecule to v26 [\#935](https://github.com/dev-sec/ansible-collection-hardening/pull/935) ([renovate[bot]](https://github.com/apps/renovate))
- Update dependency ansible-core to v2.20.5 [\#910](https://github.com/dev-sec/ansible-collection-hardening/pull/910) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
## [10.5.2](https://github.com/dev-sec/ansible-collection-hardening/tree/10.5.2) (2026-03-28)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.5.1...10.5.2)
**Fixed bugs:**
- do not update apt cache when installing libpam-passwdqc [\#939](https://github.com/dev-sec/ansible-collection-hardening/pull/939) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([eikesauer](https://github.com/eikesauer))
**Merged pull requests:**
- chore\(deps\): update hugo19941994/delete-draft-releases action to v3 [\#940](https://github.com/dev-sec/ansible-collection-hardening/pull/940) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): pin dependencies [\#938](https://github.com/dev-sec/ansible-collection-hardening/pull/938) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/checkout digest to de0fac2 [\#932](https://github.com/dev-sec/ansible-collection-hardening/pull/932) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
## [10.5.1](https://github.com/dev-sec/ansible-collection-hardening/tree/10.5.1) (2026-03-20)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.5.0...10.5.1)
**Fixed bugs:**
- fix flaky failures on Ubuntu 24.04 and newer by disabling sshd socket activation first [\#931](https://github.com/dev-sec/ansible-collection-hardening/pull/931) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([kuglimon](https://github.com/kuglimon))
**Closed issues:**
- SSH issue after running devsec.hardening.ssh\_hardening role [\#854](https://github.com/dev-sec/ansible-collection-hardening/issues/854)
**Merged pull requests:**
- chore\(deps\): update juliangruber/read-file-action digest to 271ff31 [\#937](https://github.com/dev-sec/ansible-collection-hardening/pull/937) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 8ba9595 [\#934](https://github.com/dev-sec/ansible-collection-hardening/pull/934) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update artis3n/ansible\_galaxy\_collection action to v3 [\#933](https://github.com/dev-sec/ansible-collection-hardening/pull/933) ([renovate[bot]](https://github.com/apps/renovate))
- Improve VM based testing of SSH hardening [\#878](https://github.com/dev-sec/ansible-collection-hardening/pull/878) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([schurzi](https://github.com/schurzi))
## [10.5.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.5.0) (2026-01-22)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.4.0...10.5.0)
**Implemented enhancements:**
- fix: replace deprecated community.general.yaml callback plugin [\#918](https://github.com/dev-sec/ansible-collection-hardening/pull/918) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([Normo](https://github.com/Normo))
- Consistently access facts via the ansible\_facts.\* namespace [\#917](https://github.com/dev-sec/ansible-collection-hardening/pull/917) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([Normo](https://github.com/Normo))
- disable systemd audit logging [\#902](https://github.com/dev-sec/ansible-collection-hardening/pull/902) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([z-bsod](https://github.com/z-bsod))
**Fixed bugs:**
- /etc/sysctl.conf is no longer honored in Debian 13 [\#905](https://github.com/dev-sec/ansible-collection-hardening/issues/905)
**Merged pull requests:**
- chore\(deps\): update dependency jmespath to v1.1.0 [\#930](https://github.com/dev-sec/ansible-collection-hardening/pull/930) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/setup-python digest to a309ff8 [\#929](https://github.com/dev-sec/ansible-collection-hardening/pull/929) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint action to v26 [\#928](https://github.com/dev-sec/ansible-collection-hardening/pull/928) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update artis3n/ansible\_galaxy\_collection digest to 415a92b - autoclosed [\#927](https://github.com/dev-sec/ansible-collection-hardening/pull/927) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to a2bc8b8 [\#924](https://github.com/dev-sec/ansible-collection-hardening/pull/924) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/setup-python digest to 83679a8 [\#920](https://github.com/dev-sec/ansible-collection-hardening/pull/920) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/checkout action to v6 [\#919](https://github.com/dev-sec/ansible-collection-hardening/pull/919) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency molecule to v25.12.0 [\#914](https://github.com/dev-sec/ansible-collection-hardening/pull/914) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 40f24c2 [\#913](https://github.com/dev-sec/ansible-collection-hardening/pull/913) ([renovate[bot]](https://github.com/apps/renovate))
- Update test environments to current Ansible version [\#909](https://github.com/dev-sec/ansible-collection-hardening/pull/909) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] ([schurzi](https://github.com/schurzi))
- chore\(deps\): update ansible/ansible-lint digest to d7cd7cf [\#903](https://github.com/dev-sec/ansible-collection-hardening/pull/903) ([renovate[bot]](https://github.com/apps/renovate))
## [10.4.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.4.0) (2025-10-22)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.3.1...10.4.0)
**Implemented enhancements:**
- Support Debian 13 [\#891](https://github.com/dev-sec/ansible-collection-hardening/issues/891)
- Support EL10 [\#870](https://github.com/dev-sec/ansible-collection-hardening/issues/870)
- Add support for current versions of Debian and EL [\#893](https://github.com/dev-sec/ansible-collection-hardening/pull/893) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([schurzi](https://github.com/schurzi))
- Add SSH config for EL/AlmaLinux 10 [\#888](https://github.com/dev-sec/ansible-collection-hardening/pull/888) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([jonathanspw](https://github.com/jonathanspw))
**Fixed bugs:**
- Write sysctl config to separate file [\#907](https://github.com/dev-sec/ansible-collection-hardening/pull/907) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
**Closed issues:**
- sysctl-34 - fs.protected\_regular not set [\#536](https://github.com/dev-sec/ansible-collection-hardening/issues/536)
**Merged pull requests:**
- Update ArchLinux test environment before testing [\#908](https://github.com/dev-sec/ansible-collection-hardening/pull/908) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
- chore\(deps\): update actions/setup-python action to v6 [\#901](https://github.com/dev-sec/ansible-collection-hardening/pull/901) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/labeler action to v6 [\#900](https://github.com/dev-sec/ansible-collection-hardening/pull/900) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 8861a73 [\#899](https://github.com/dev-sec/ansible-collection-hardening/pull/899) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/checkout action to v5 [\#895](https://github.com/dev-sec/ansible-collection-hardening/pull/895) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency python to 3.13 [\#892](https://github.com/dev-sec/ansible-collection-hardening/pull/892) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency aar-doc to v2.3.0 [\#890](https://github.com/dev-sec/ansible-collection-hardening/pull/890) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 9765b87 [\#889](https://github.com/dev-sec/ansible-collection-hardening/pull/889) ([renovate[bot]](https://github.com/apps/renovate))
- Improve OS support accuracy [\#887](https://github.com/dev-sec/ansible-collection-hardening/pull/887) ([jonathanspw](https://github.com/jonathanspw))
- chore\(deps\): update hugo19941994/delete-draft-releases action to v2 [\#885](https://github.com/dev-sec/ansible-collection-hardening/pull/885) ([renovate[bot]](https://github.com/apps/renovate))
## [10.3.1](https://github.com/dev-sec/ansible-collection-hardening/tree/10.3.1) (2025-07-24)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.3.0...10.3.1)
**Fixed bugs:**
- Readme states Ansible \>= 2.9.10, but it uses password\_expire\_warn from 2.16 [\#871](https://github.com/dev-sec/ansible-collection-hardening/issues/871)
**Merged pull requests:**
- Use fixed test env for BSD VMs [\#884](https://github.com/dev-sec/ansible-collection-hardening/pull/884) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([schurzi](https://github.com/schurzi))
- Downgrade community.crypto for rocky8 [\#882](https://github.com/dev-sec/ansible-collection-hardening/pull/882) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([schurzi](https://github.com/schurzi))
- chore\(deps\): update dependency aar-doc to v2.2.0 [\#877](https://github.com/dev-sec/ansible-collection-hardening/pull/877) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update creyd/prettier\_action action to v4.6 [\#876](https://github.com/dev-sec/ansible-collection-hardening/pull/876) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 06f616d [\#873](https://github.com/dev-sec/ansible-collection-hardening/pull/873) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency ansible-core to v2.18.6 [\#872](https://github.com/dev-sec/ansible-collection-hardening/pull/872) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update creyd/prettier\_action action to v4.5 [\#869](https://github.com/dev-sec/ansible-collection-hardening/pull/869) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(ssh\_hardening\): ansible 2.19 compatibility [\#868](https://github.com/dev-sec/ansible-collection-hardening/pull/868) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([Nemental](https://github.com/Nemental))
- chore\(deps\): update ansible/ansible-lint digest to e98f9b3 [\#867](https://github.com/dev-sec/ansible-collection-hardening/pull/867) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/setup-python digest to a26af69 [\#866](https://github.com/dev-sec/ansible-collection-hardening/pull/866) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency ansible-core to v2.18.5 [\#865](https://github.com/dev-sec/ansible-collection-hardening/pull/865) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to c16f018 [\#863](https://github.com/dev-sec/ansible-collection-hardening/pull/863) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 6a4fcdb [\#862](https://github.com/dev-sec/ansible-collection-hardening/pull/862) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency aar-doc to v2.1.0 [\#861](https://github.com/dev-sec/ansible-collection-hardening/pull/861) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency ansible-core to v2.18.4 [\#860](https://github.com/dev-sec/ansible-collection-hardening/pull/860) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/setup-python digest to 8d9ed9a [\#859](https://github.com/dev-sec/ansible-collection-hardening/pull/859) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- Fix: ForwardAgent j2 template space [\#856](https://github.com/dev-sec/ansible-collection-hardening/pull/856) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([cod3mas0n](https://github.com/cod3mas0n))
- chore\(deps\): update artis3n/ansible\_galaxy\_collection digest to f6110ae [\#853](https://github.com/dev-sec/ansible-collection-hardening/pull/853) ([renovate[bot]](https://github.com/apps/renovate))
## [10.3.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.3.0) (2025-02-25)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.2.0...10.3.0)
**Implemented enhancements:**
- Password expiry for users without password should not block SSH key based login [\#681](https://github.com/dev-sec/ansible-collection-hardening/issues/681)
- Set number of warning days before password expires for existing users [\#839](https://github.com/dev-sec/ansible-collection-hardening/pull/839) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([Normo](https://github.com/Normo))
- Allow to override settings for sftponly users [\#794](https://github.com/dev-sec/ansible-collection-hardening/pull/794) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([mib1185](https://github.com/mib1185))
**Closed issues:**
- os\_hardening & sysctl\_overwrite with host\_vars [\#837](https://github.com/dev-sec/ansible-collection-hardening/issues/837)
**Merged pull requests:**
- chore\(deps\): update dependency ansible-core to v2.18.3 [\#852](https://github.com/dev-sec/ansible-collection-hardening/pull/852) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 49ded6a [\#851](https://github.com/dev-sec/ansible-collection-hardening/pull/851) ([renovate[bot]](https://github.com/apps/renovate))
- Pin runner image to specific version to decouple from GitHub updates [\#847](https://github.com/dev-sec/ansible-collection-hardening/pull/847) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([schurzi](https://github.com/schurzi))
- Refactor: combine multiple set\_fact into single jinja filter [\#846](https://github.com/dev-sec/ansible-collection-hardening/pull/846) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([Tinyblargon](https://github.com/Tinyblargon))
- chore\(deps\): update actions/setup-python digest to 4237552 [\#844](https://github.com/dev-sec/ansible-collection-hardening/pull/844) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency ansible-core to v2.18.2 [\#843](https://github.com/dev-sec/ansible-collection-hardening/pull/843) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency molecule to v25 [\#841](https://github.com/dev-sec/ansible-collection-hardening/pull/841) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint action to v25 [\#840](https://github.com/dev-sec/ansible-collection-hardening/pull/840) ([renovate[bot]](https://github.com/apps/renovate))
## [10.2.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.2.0) (2024-12-23) ## [10.2.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.2.0) (2024-12-23)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.1.0...10.2.0) [Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.1.0...10.2.0)
**Implemented enhancements:** **Implemented enhancements:**
- Re-enable OpenBSD tests [\#826](https://github.com/dev-sec/ansible-collection-hardening/issues/826) - Re-enable OpenBSD tests [\#826](https://github.com/dev-sec/ansible-collection-hardening/issues/826) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)]
- Allow configuring the name\_format variable in auditd config [\#796](https://github.com/dev-sec/ansible-collection-hardening/issues/796) - Allow configuring the name\_format variable in auditd config [\#796](https://github.com/dev-sec/ansible-collection-hardening/issues/796) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)]
- Modify PAM to allow SSH key based logins with locked passwords [\#835](https://github.com/dev-sec/ansible-collection-hardening/pull/835) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
- adding switch for ForwardAgent in ssh\_config [\#818](https://github.com/dev-sec/ansible-collection-hardening/pull/818) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([Shizzlebix](https://github.com/Shizzlebix)) - adding switch for ForwardAgent in ssh\_config [\#818](https://github.com/dev-sec/ansible-collection-hardening/pull/818) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([Shizzlebix](https://github.com/Shizzlebix))
**Fixed bugs:** **Fixed bugs:**
- ssh\_hardening error on 10.1.0. Probably... Missing privilege separation directory: /run/sshd [\#830](https://github.com/dev-sec/ansible-collection-hardening/issues/830) - File system loop detected; ‘/bin/X11’ is part of the same file system loop as ‘/bin’." [\#815](https://github.com/dev-sec/ansible-collection-hardening/issues/815) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)]
- File system loop detected; ‘/bin/X11’ is part of the same file system loop as ‘/bin’." [\#815](https://github.com/dev-sec/ansible-collection-hardening/issues/815) - Not working ssh\_hardening on Centos 7 [\#813](https://github.com/dev-sec/ansible-collection-hardening/issues/813) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)]
- Not working ssh\_hardening on Centos 7 [\#813](https://github.com/dev-sec/ansible-collection-hardening/issues/813)
**Merged pull requests:** **Merged pull requests:**
@@ -939,7 +1103,6 @@
- Standardize the var ordering [\#251](https://github.com/dev-sec/ansible-collection-hardening/pull/251) ([dustinmiller](https://github.com/dustinmiller)) - Standardize the var ordering [\#251](https://github.com/dev-sec/ansible-collection-hardening/pull/251) ([dustinmiller](https://github.com/dustinmiller))
- Add initial support for OpenSUSE [\#250](https://github.com/dev-sec/ansible-collection-hardening/pull/250) ([dustinmiller](https://github.com/dustinmiller)) - Add initial support for OpenSUSE [\#250](https://github.com/dev-sec/ansible-collection-hardening/pull/250) ([dustinmiller](https://github.com/dustinmiller))
- Make max\_log\_file\_action for auditd configurable [\#246](https://github.com/dev-sec/ansible-collection-hardening/pull/246) ([jandd](https://github.com/jandd)) - Make max\_log\_file\_action for auditd configurable [\#246](https://github.com/dev-sec/ansible-collection-hardening/pull/246) ([jandd](https://github.com/jandd))
- Add exception in sysctl task [\#240](https://github.com/dev-sec/ansible-collection-hardening/pull/240) ([ghost](https://github.com/ghost))
- Fedora - Use new auto ansible\_python\_interpreter for dnf [\#239](https://github.com/dev-sec/ansible-collection-hardening/pull/239) ([jaredledvina](https://github.com/jaredledvina)) - Fedora - Use new auto ansible\_python\_interpreter for dnf [\#239](https://github.com/dev-sec/ansible-collection-hardening/pull/239) ([jaredledvina](https://github.com/jaredledvina))
- add test support for CentOS8 [\#237](https://github.com/dev-sec/ansible-collection-hardening/pull/237) ([yeoldegrove](https://github.com/yeoldegrove)) - add test support for CentOS8 [\#237](https://github.com/dev-sec/ansible-collection-hardening/pull/237) ([yeoldegrove](https://github.com/yeoldegrove))
- Support configuring SELinux and default to enforcing [\#236](https://github.com/dev-sec/ansible-collection-hardening/pull/236) ([jaredledvina](https://github.com/jaredledvina)) - Support configuring SELinux and default to enforcing [\#236](https://github.com/dev-sec/ansible-collection-hardening/pull/236) ([jaredledvina](https://github.com/jaredledvina))
@@ -980,7 +1143,7 @@
- remove prelink package, control package-09 [\#135](https://github.com/dev-sec/ansible-collection-hardening/pull/135) ([rndmh3ro](https://github.com/rndmh3ro)) - remove prelink package, control package-09 [\#135](https://github.com/dev-sec/ansible-collection-hardening/pull/135) ([rndmh3ro](https://github.com/rndmh3ro))
- style update [\#134](https://github.com/dev-sec/ansible-collection-hardening/pull/134) ([rndmh3ro](https://github.com/rndmh3ro)) - style update [\#134](https://github.com/dev-sec/ansible-collection-hardening/pull/134) ([rndmh3ro](https://github.com/rndmh3ro))
- Remove deprecated include for static tasks and use instead import\_tasks fix \#131 [\#132](https://github.com/dev-sec/ansible-collection-hardening/pull/132) ([HelioCampos](https://github.com/HelioCampos)) - Remove deprecated include for static tasks and use instead import\_tasks fix \#131 [\#132](https://github.com/dev-sec/ansible-collection-hardening/pull/132) ([HelioCampos](https://github.com/HelioCampos))
- Fix ansible.cfg and use comment filter [\#130](https://github.com/dev-sec/ansible-collection-hardening/pull/130) ([fazlearefin](https://github.com/fazlearefin)) - Fix ansible.cfg and use comment filter [\#130](https://github.com/dev-sec/ansible-collection-hardening/pull/130) ([FazleArefin](https://github.com/FazleArefin))
- install initramfs-tools [\#114](https://github.com/dev-sec/ansible-collection-hardening/pull/114) ([rndmh3ro](https://github.com/rndmh3ro)) - install initramfs-tools [\#114](https://github.com/dev-sec/ansible-collection-hardening/pull/114) ([rndmh3ro](https://github.com/rndmh3ro))
- omit empty variables [\#106](https://github.com/dev-sec/ansible-collection-hardening/pull/106) ([rndmh3ro](https://github.com/rndmh3ro)) - omit empty variables [\#106](https://github.com/dev-sec/ansible-collection-hardening/pull/106) ([rndmh3ro](https://github.com/rndmh3ro))
- Supports --check mode [\#93](https://github.com/dev-sec/ansible-collection-hardening/pull/93) ([conorsch](https://github.com/conorsch)) - Supports --check mode [\#93](https://github.com/dev-sec/ansible-collection-hardening/pull/93) ([conorsch](https://github.com/conorsch))
@@ -1047,7 +1210,6 @@
- replace module parameter fixed [\#297](https://github.com/dev-sec/ansible-collection-hardening/pull/297) ([danielkubat](https://github.com/danielkubat)) - replace module parameter fixed [\#297](https://github.com/dev-sec/ansible-collection-hardening/pull/297) ([danielkubat](https://github.com/danielkubat))
- Addressing issue \#255 [\#258](https://github.com/dev-sec/ansible-collection-hardening/pull/258) ([ljkimmel](https://github.com/ljkimmel)) - Addressing issue \#255 [\#258](https://github.com/dev-sec/ansible-collection-hardening/pull/258) ([ljkimmel](https://github.com/ljkimmel))
- Fix \#247, cleanup conditions [\#248](https://github.com/dev-sec/ansible-collection-hardening/pull/248) ([fernandezcuesta](https://github.com/fernandezcuesta)) - Fix \#247, cleanup conditions [\#248](https://github.com/dev-sec/ansible-collection-hardening/pull/248) ([fernandezcuesta](https://github.com/fernandezcuesta))
- Fix error on applying the sysctl vars on containers [\#243](https://github.com/dev-sec/ansible-collection-hardening/pull/243) ([ghost](https://github.com/ghost))
- Update location of NSA RHEL 5 Guide [\#235](https://github.com/dev-sec/ansible-collection-hardening/pull/235) ([jaredledvina](https://github.com/jaredledvina)) - Update location of NSA RHEL 5 Guide [\#235](https://github.com/dev-sec/ansible-collection-hardening/pull/235) ([jaredledvina](https://github.com/jaredledvina))
- Fix typo [\#212](https://github.com/dev-sec/ansible-collection-hardening/pull/212) ([ruslo](https://github.com/ruslo)) - Fix typo [\#212](https://github.com/dev-sec/ansible-collection-hardening/pull/212) ([ruslo](https://github.com/ruslo))
- Update modprobe to 0644 [\#211](https://github.com/dev-sec/ansible-collection-hardening/pull/211) ([joshuatalb](https://github.com/joshuatalb)) - Update modprobe to 0644 [\#211](https://github.com/dev-sec/ansible-collection-hardening/pull/211) ([joshuatalb](https://github.com/joshuatalb))
+8 -7
View File
@@ -3,7 +3,7 @@
[![devsec.os_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening.yml) [![devsec.os_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening.yml)
[![devsec.os_hardening VM](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening_vm.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening_vm.yml) [![devsec.os_hardening VM](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening_vm.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening_vm.yml)
[![devsec.ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml) [![devsec.ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml)
[![devsec.ssh_hardening BSD](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_bsd.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_bsd.yml) [![devsec.ssh_hardening VM](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_vm.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_vm.yml)
[![devsec.ssh_hardening with custom tests](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml) [![devsec.ssh_hardening with custom tests](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml)
[![devsec.nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/nginx_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/nginx_hardening.yml) [![devsec.nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/nginx_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/nginx_hardening.yml)
[![devsec.mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/mysql_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/mysql_hardening.yml) [![devsec.mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/mysql_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/mysql_hardening.yml)
@@ -13,13 +13,14 @@
This collection provides battle tested hardening for: This collection provides battle tested hardening for:
- Linux operating systems: - Linux operating systems:
- CentOS 9 - CentOS Stream 9
- Rocky Linux 8/9 - AlmaLinux 8/9/10
- Debian 11/12 - Rocky Linux 8/9/10
- Ubuntu 20.04/22.04/24.04 - Debian 11/12/13
- Ubuntu 22.04/24.04/26.04
- Amazon Linux (some roles supported) - Amazon Linux (some roles supported)
- Arch Linux (some roles supported) - Arch Linux (some roles supported)
- Fedora 39/40 (some roles supported) - Fedora 42/43/44 (some roles supported)
- Suse Tumbleweed (some roles supported) - Suse Tumbleweed (some roles supported)
- MySQL - MySQL
- MariaDB >= 5.5.65, >= 10.1.45, >= 10.3.17 - MariaDB >= 5.5.65, >= 10.1.45, >= 10.3.17
@@ -50,7 +51,7 @@ The other roles are in separate archives repositories:
## Minimum required Ansible-version ## Minimum required Ansible-version
- Ansible >= 2.9.10 - Ansible >= 2.16
## Included content ## Included content
+1 -1
View File
@@ -1,6 +1,6 @@
namespace: devsec namespace: devsec
name: hardening name: hardening
version: 10.1.0 version: 10.5.2
readme: README.md readme: README.md
authors: authors:
- dev-sec <[email protected]> - dev-sec <[email protected]>
+3 -11
View File
@@ -12,22 +12,14 @@
mysql_python_package_debian: python3-pymysql mysql_python_package_debian: python3-pymysql
when: when:
- mysql_python_package_debian is not defined - mysql_python_package_debian is not defined
- ansible_distribution == "Ubuntu" - ansible_facts.distribution == "Ubuntu"
- ansible_distribution_major_version|int > 19 - ansible_facts.distribution_major_version|int > 19
- name: Determine required MySQL Python libraries.
ansible.builtin.set_fact:
mysql_python_package_debian: "{% if 'python3' in ansible_python_interpreter | default('') %}python3-mysqldb{% else %}python-mysqldb{% endif %}"
when:
- mysql_python_package_debian is not defined
- ansible_distribution != "Ubuntu"
- ansible_distribution_major_version|int < 20
- name: Use Python 3 on Suse - name: Use Python 3 on Suse
ansible.builtin.set_fact: ansible.builtin.set_fact:
ansible_python_interpreter: /usr/bin/python3 ansible_python_interpreter: /usr/bin/python3
when: when:
- ansible_os_family == 'Suse' - ansible_facts.os_family == 'Suse'
- name: Include mysql_hardening role - name: Include mysql_hardening role
ansible.builtin.include_role: ansible.builtin.include_role:
+3 -1
View File
@@ -22,7 +22,9 @@ provisioner:
config_options: config_options:
defaults: defaults:
interpreter_python: auto_silent interpreter_python: auto_silent
callbacks_enabled: profile_tasks, timer, yaml callbacks_enabled: profile_tasks, timer
# Currently not supported by dev-sec.mysql role
# inject_facts_as_vars: false
verifier: verifier:
name: ansible name: ansible
+10 -18
View File
@@ -17,25 +17,25 @@
ansible.builtin.set_fact: ansible.builtin.set_fact:
ansible_python_interpreter: /usr/bin/python3 ansible_python_interpreter: /usr/bin/python3
when: when:
- ansible_distribution == 'Debian' - ansible_facts.distribution == 'Debian'
- ansible_distribution_major_version|int >= 11 - ansible_facts.distribution_major_version|int >= 11
- name: Use Python 3 on Suse - name: Use Python 3 on Suse
ansible.builtin.set_fact: ansible.builtin.set_fact:
ansible_python_interpreter: /usr/bin/python3 ansible_python_interpreter: /usr/bin/python3
when: when:
- ansible_os_family == 'Suse' - ansible_facts.os_family == 'Suse'
- name: Run the equivalent of "apt-get update && apt-get upgrade" - name: Run the equivalent of "apt-get update && apt-get upgrade"
ansible.builtin.apt: ansible.builtin.apt:
upgrade: safe upgrade: safe
update_cache: true update_cache: true
when: ansible_os_family == 'Debian' when: ansible_facts.os_family == 'Debian'
- name: Install required python packages on Suse - name: Install required python packages on Suse
ansible.builtin.command: zypper -n install python-xml python3-rpm python3-PyMySQL ansible.builtin.command: zypper -n install python311-rpm python311-PyMySQL
changed_when: false changed_when: false
when: ansible_os_family == 'Suse' when: ansible_facts.os_family == 'Suse'
- name: Create missing directory - name: Create missing directory
ansible.builtin.file: ansible.builtin.file:
@@ -48,23 +48,15 @@
mysql_python_package_debian: python3-pymysql mysql_python_package_debian: python3-pymysql
when: when:
- mysql_python_package_debian is not defined - mysql_python_package_debian is not defined
- ansible_distribution == "Ubuntu" - ansible_facts.distribution == "Ubuntu"
- ansible_distribution_major_version|int > 19 - ansible_facts.distribution_major_version|int > 19
- name: Determine required MySQL Python libraries.
ansible.builtin.set_fact:
mysql_python_package_debian: "{% if 'python3' in ansible_python_interpreter | default('') %}python3-mysqldb{% else %}python-mysqldb{% endif %}"
when:
- mysql_python_package_debian is not defined
- ansible_distribution != "Ubuntu"
- ansible_distribution_major_version|int < 20
- name: Install required MySQL Python libraries on RHEL - name: Install required MySQL Python libraries on RHEL
ansible.builtin.dnf: ansible.builtin.dnf:
name: "{% if 'python3' in ansible_python_interpreter | default('') %}python36-PyMySQL{% else %}python2-PyMySQL{% endif %}" name: "{% if 'python3' in ansible_python_interpreter | default('') %}python36-PyMySQL{% else %}python2-PyMySQL{% endif %}"
when: when:
- ansible_os_family == "RedHat" - ansible_facts.os_family == "RedHat"
- ansible_distribution_major_version == "7" - ansible_facts.distribution_major_version == "7"
- name: Install mysql with a generic Ansible role - name: Install mysql with a generic Ansible role
ansible.builtin.include_role: ansible.builtin.include_role:
@@ -1,6 +1,6 @@
--- ---
- name: Create users for test - name: Create users for test
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: query:
- CREATE USER 'user'@'delete'; - CREATE USER 'user'@'delete';
- CREATE USER 'user'@'127.0.0.1'; - CREATE USER 'user'@'127.0.0.1';
@@ -15,7 +15,7 @@
login_unix_socket: "{{ login_unix_socket | default(omit) }}" login_unix_socket: "{{ login_unix_socket | default(omit) }}"
- name: Detect role support on MySQL - name: Detect role support on MySQL
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: > query: >
SELECT 1 FROM information_schema.COLUMNS SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user' WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user'
@@ -24,7 +24,7 @@
register: mysql_role_support register: mysql_role_support
- name: Create roles for test - name: Create roles for test
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: query:
- CREATE ROLE 'role_keep'; - CREATE ROLE 'role_keep';
login_unix_socket: "{{ login_unix_socket | default(omit) }}" login_unix_socket: "{{ login_unix_socket | default(omit) }}"
@@ -2,8 +2,3 @@
roles: roles:
- name: dev-sec.mysql - name: dev-sec.mysql
version: master version: master
collections:
- name: https://github.com/ansible-collections/community.mysql.git
type: git
version: main
+2 -2
View File
@@ -11,14 +11,14 @@
ansible.builtin.set_fact: ansible.builtin.set_fact:
ansible_python_interpreter: /usr/bin/python3 ansible_python_interpreter: /usr/bin/python3
when: when:
- ansible_os_family == 'Suse' - ansible_facts.os_family == 'Suse'
- name: Install procps for debian systems - name: Install procps for debian systems
ansible.builtin.apt: ansible.builtin.apt:
name: procps name: procps
state: present state: present
update_cache: true update_cache: true
when: ansible_distribution == 'Debian' when: ansible_facts.distribution == 'Debian'
- name: Include tests for the service - name: Include tests for the service
ansible.builtin.include_tasks: verify_tasks/service.yml ansible.builtin.include_tasks: verify_tasks/service.yml
@@ -1,6 +1,6 @@
--- ---
- name: Get all users from MySQL server - name: Get all users from MySQL server
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: > query: >
SELECT CONCAT(USER, '@', HOST) AS users FROM mysql.user; SELECT CONCAT(USER, '@', HOST) AS users FROM mysql.user;
login_unix_socket: "{{ login_unix_socket | default(omit) }}" login_unix_socket: "{{ login_unix_socket | default(omit) }}"
@@ -25,7 +25,7 @@
- '"[email protected].%" in mysql_users_list' - '"[email protected].%" in mysql_users_list'
- name: Detect role support on MySQL - name: Detect role support on MySQL
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: > query: >
SELECT 1 FROM information_schema.COLUMNS SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user' WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user'
+3 -1
View File
@@ -21,7 +21,9 @@ provisioner:
config_options: config_options:
defaults: defaults:
interpreter_python: auto_silent interpreter_python: auto_silent
callbacks_enabled: profile_tasks, timer, yaml callbacks_enabled: profile_tasks, timer
# Currently not supported by geerlingguy.nginx role
# inject_facts_as_vars: false
verifier: verifier:
name: ansible name: ansible
+1 -7
View File
@@ -7,12 +7,6 @@
https_proxy: "{{ lookup('env', 'https_proxy') | default(omit) }}" https_proxy: "{{ lookup('env', 'https_proxy') | default(omit) }}"
no_proxy: "{{ lookup('env', 'no_proxy') | default(omit) }}" no_proxy: "{{ lookup('env', 'no_proxy') | default(omit) }}"
tasks: tasks:
- name: Install required tools on SuSE
community.general.zypper:
name: python-xml
state: present
when: ansible_facts.os_family == 'Suse'
- name: Install required packages - name: Install required packages
ansible.builtin.package: ansible.builtin.package:
name: python3-apt name: python3-apt
@@ -22,7 +16,7 @@
- name: Set correct distribution Version for Amazon Linux - name: Set correct distribution Version for Amazon Linux
ansible.builtin.set_fact: ansible.builtin.set_fact:
ansible_distribution_major_version: 7 ansible_distribution_major_version: 7
when: ansible_distribution == 'Amazon' when: ansible_facts.distribution == 'Amazon'
- name: Install nginx with a generic Ansible role - name: Install nginx with a generic Ansible role
ansible.builtin.include_role: ansible.builtin.include_role:
+1 -1
View File
@@ -12,7 +12,7 @@
name: procps name: procps
state: present state: present
update_cache: true update_cache: true
when: ansible_distribution == 'Debian' when: ansible_facts.distribution == 'Debian'
- name: Verify - name: Verify
hosts: localhost hosts: localhost
+2 -1
View File
@@ -17,7 +17,8 @@ provisioner:
config_options: config_options:
defaults: defaults:
interpreter_python: auto_silent interpreter_python: auto_silent
callbacks_enabled: profile_tasks, timer, yaml callbacks_enabled: profile_tasks, timer
inject_facts_as_vars: false
verifier: verifier:
name: ansible name: ansible
+2 -2
View File
@@ -16,11 +16,11 @@
ansible.builtin.apt: ansible.builtin.apt:
upgrade: safe upgrade: safe
update_cache: true update_cache: true
when: ansible_os_family == 'Debian' when: ansible_facts.os_family == 'Debian'
- name: Install required tools on SuSE - name: Install required tools on SuSE
# cannot use zypper module, since it depends on python-xml # cannot use zypper module, since it depends on python-xml
ansible.builtin.command: zypper -n install python-xml awk ansible.builtin.command: zypper -n install awk
changed_when: false changed_when: false
when: ansible_facts.os_family == 'Suse' when: ansible_facts.os_family == 'Suse'
@@ -3,8 +3,10 @@
user: user:
name: pw_no_ageing name: pw_no_ageing
password: $6$mysecretsalt$qJbapG68nyRab3gxvKWPUcs2g3t0oMHSHMnSKecYNpSi3CuZm.GbBqXO8BE6EI6P1JUefhA0qvD7b5LSh./PU1 password: $6$mysecretsalt$qJbapG68nyRab3gxvKWPUcs2g3t0oMHSHMnSKecYNpSi3CuZm.GbBqXO8BE6EI6P1JUefhA0qvD7b5LSh./PU1
password_expire_max: "-1"
- name: Create user those password ageing should be changed - name: Create user those password ageing should be changed
user: user:
name: pw_ageing name: pw_ageing
password: $6$mysecretsalt$qJbapG68nyRab3gxvKWPUcs2g3t0oMHSHMnSKecYNpSi3CuZm.GbBqXO8BE6EI6P1JUefhA0qvD7b5LSh./PU1 password: $6$mysecretsalt$qJbapG68nyRab3gxvKWPUcs2g3t0oMHSHMnSKecYNpSi3CuZm.GbBqXO8BE6EI6P1JUefhA0qvD7b5LSh./PU1
password_expire_max: "-1"
@@ -19,7 +19,7 @@
# this uses the date from the expire_date variable and subtracts the current date. # this uses the date from the expire_date variable and subtracts the current date.
# it should be bigger that the password_expire_min of the user "pw_no_ageing" # it should be bigger that the password_expire_min of the user "pw_no_ageing"
that: that:
- ( expiry_date.stdout | trim | to_datetime('%b %d, %Y') - ansible_date_time.date | to_datetime('%Y-%m-%d')).days == 60 - ( expiry_date.stdout | trim | to_datetime('%b %d, %Y') - ansible_facts.date_time.date | to_datetime('%Y-%m-%d')).days == 60
- name: Get Password Expiry warning days for pw_ageing - name: Get Password Expiry warning days for pw_ageing
ansible.builtin.shell: chage -l pw_ageing | grep "warning before password expires" | cut -d ":" -f 2 ansible.builtin.shell: chage -l pw_ageing | grep "warning before password expires" | cut -d ":" -f 2
@@ -80,7 +80,7 @@
ansible.builtin.assert: ansible.builtin.assert:
that: that:
- output.rc | int == 5 - output.rc | int == 5
- output.stderr | length == 0 - "'(password expired)' in output.stderr"
- output.stdout | length == 0 - output.stdout | length == 0
when: when:
- ansible_facts.os_family == "Suse" - ansible_facts.os_family == "Suse"
@@ -6,4 +6,4 @@
- name: Check that shell_sys_acc's shell is still bash - name: Check that shell_sys_acc's shell is still bash
ansible.builtin.assert: ansible.builtin.assert:
that: that:
- getent_passwd['shell_sys_acc'][5] == "/bin/bash" - ansible_facts.getent_passwd['shell_sys_acc'][5] == "/bin/bash"
+10 -1
View File
@@ -30,7 +30,16 @@
os_mnt_var_options: rw,nosuid,nodev,compress=zstd:1,subvol=var os_mnt_var_options: rw,nosuid,nodev,compress=zstd:1,subvol=var
when: when:
- ansible_facts.distribution == 'Fedora' - ansible_facts.distribution == 'Fedora'
- ansible_distribution_major_version|int == 40 - ansible_facts.distribution_major_version|int == 40
- name: Overrides for Debian 13 image
ansible.builtin.set_fact:
os_mnt_tmp_enabled: true
os_mnt_tmp_src: tmpfs
os_mnt_tmp_filesystem: tmpfs
when:
- ansible_facts.distribution == 'Debian'
- ansible_facts.distribution_major_version|int == 13
- name: Include os_hardening role - name: Include os_hardening role
ansible.builtin.include_role: ansible.builtin.include_role:
+4 -1
View File
@@ -24,7 +24,10 @@ provisioner:
config_options: config_options:
defaults: defaults:
interpreter_python: auto_silent interpreter_python: auto_silent
callbacks_enabled: profile_tasks, timer, yaml callbacks_enabled: profile_tasks, timer
# Workaround for https://github.com/ansible-community/molecule-plugins/issues/301
library: "${MOLECULE_PROJECT_DIRECTORY}/plugins/modules:/usr/share/ansible:${MOLECULE_VAGRANT_PLUGIN_DIR}"
inject_facts_as_vars: false
verifier: verifier:
name: ansible name: ansible
env: env:
+28 -12
View File
@@ -4,6 +4,16 @@
become: true become: true
gather_facts: false gather_facts: false
tasks: tasks:
- name: Update keyring
ansible.builtin.raw: pacman --noconfirm -Sy archlinux-keyring
changed_when: false
when: lookup('env', 'MOLECULE_DISTRO') == 'generic/arch'
- name: Update OS
ansible.builtin.raw: pacman --noconfirm -Suy
changed_when: false
when: lookup('env', 'MOLECULE_DISTRO') == 'generic/arch'
- name: Install python, since it's not installed by default - name: Install python, since it's not installed by default
ansible.builtin.raw: pacman --noconfirm -Sy python ansible.builtin.raw: pacman --noconfirm -Sy python
changed_when: false changed_when: false
@@ -26,7 +36,7 @@
ansible.builtin.dpkg_selections: ansible.builtin.dpkg_selections:
name: grub-pc name: grub-pc
selection: hold selection: hold
when: ansible_os_family == 'Debian' when: ansible_facts.os_family == 'Debian'
# we need to free up space, since the /boot partition in some Vagrant images is # we need to free up space, since the /boot partition in some Vagrant images is
# pretty small and system updates might fail # pretty small and system updates might fail
@@ -35,26 +45,20 @@
paths: /boot paths: /boot
patterns: "initrd.img*" patterns: "initrd.img*"
register: find_results register: find_results
when: ansible_os_family == 'Debian' when: ansible_facts.os_family == 'Debian'
- name: Delete all initrd.img to free space on /boot - name: Delete all initrd.img to free space on /boot
ansible.builtin.file: ansible.builtin.file:
path: "{{ item['path'] }}" path: "{{ item['path'] }}"
state: absent state: absent
with_items: "{{ find_results['files'] }}" with_items: "{{ find_results['files'] }}"
when: ansible_os_family == 'Debian' when: ansible_facts.os_family == 'Debian'
- name: Run the equivalent of "apt-get update && apt-get upgrade" - name: Run the equivalent of "apt-get update && apt-get upgrade"
ansible.builtin.apt: ansible.builtin.apt:
upgrade: safe upgrade: safe
update_cache: true update_cache: true
when: ansible_os_family == 'Debian' when: ansible_facts.os_family == 'Debian'
- name: Install required tools on SuSE
# cannot use zypper module, since it depends on python-xml
ansible.builtin.command: zypper -n install python-xml
changed_when: false
when: ansible_facts.os_family == 'Suse'
- name: Install required tools on fedora - name: Install required tools on fedora
ansible.builtin.dnf: ansible.builtin.dnf:
@@ -65,14 +69,27 @@
- python3-libselinux - python3-libselinux
when: ansible_facts.distribution == 'Fedora' when: ansible_facts.distribution == 'Fedora'
- name: Install required tools on AlmaLinux
ansible.builtin.dnf:
name:
- initscripts
when: ansible_facts.distribution == 'AlmaLinux'
- name: Install required tools on Arch - name: Install required tools on Arch
community.general.pacman: community.general.pacman:
name: name:
- awk - awk
state: present - archlinux-keyring
state: latest
update_cache: true update_cache: true
when: ansible_facts.os_family == 'Archlinux' when: ansible_facts.os_family == 'Archlinux'
- name: Run the equivalent of "pacman -Syu"
community.general.pacman:
update_cache: true
upgrade: true
when: ansible_facts.os_family == 'Archlinux'
- name: Install required tools on RHEL # noqa ignore-errors - name: Install required tools on RHEL # noqa ignore-errors
ansible.builtin.dnf: ansible.builtin.dnf:
name: name:
@@ -90,7 +107,6 @@
ansible.posix.mount: ansible.posix.mount:
path: /boot/efi path: /boot/efi
state: unmounted state: unmounted
when: ansible_facts.distribution == 'Fedora'
- name: Include YUM prepare tasks - name: Include YUM prepare tasks
ansible.builtin.include_tasks: prepare_tasks/yum.yml ansible.builtin.include_tasks: prepare_tasks/yum.yml
+1 -1
View File
@@ -5,5 +5,5 @@
- name: Make sure environment variable for MOLECULE_DISTRO is set - name: Make sure environment variable for MOLECULE_DISTRO is set
ansible.builtin.assert: ansible.builtin.assert:
that: that:
- "lookup('env','MOLECULE_DISTRO')" - "lookup('env','MOLECULE_DISTRO') | length > 0"
fail_msg: "You need to set MOLECULE_DISTRO to a supported image name. See CONTRIBUTING.md" fail_msg: "You need to set MOLECULE_DISTRO to a supported image name. See CONTRIBUTING.md"
+2 -1
View File
@@ -17,7 +17,8 @@ provisioner:
config_options: config_options:
defaults: defaults:
interpreter_python: auto_silent interpreter_python: auto_silent
callbacks_enabled: profile_tasks, timer, yaml callbacks_enabled: profile_tasks, timer
inject_facts_as_vars: false
inventory: inventory:
host_vars: host_vars:
# https://molecule.readthedocs.io/en/latest/examples.html#docker-with-non-privileged-user # https://molecule.readthedocs.io/en/latest/examples.html#docker-with-non-privileged-user
+12 -12
View File
@@ -12,27 +12,32 @@
ansible_python_interpreter: /usr/bin/python3 ansible_python_interpreter: /usr/bin/python3
when: ansible_facts.distribution == 'Fedora' when: ansible_facts.distribution == 'Fedora'
- name: Install packages # noqa ignore-errors - name: Install dnf packages # noqa ignore-errors
ansible.builtin.dnf: ansible.builtin.dnf:
name: name:
- openssh-clients - openssh-clients
- openssh-server - openssh-server
state: present
update_cache: true
ignore_errors: true
- name: Install libselinux-python # noqa ignore-errors
ansible.builtin.dnf:
name:
- libselinux-python - libselinux-python
state: present state: present
update_cache: true update_cache: true
ignore_errors: true ignore_errors: true
- name: Install packages # noqa ignore-errors - name: Install procps-ng # noqa ignore-errors
ansible.builtin.dnf: ansible.builtin.dnf:
name: name:
- openssh-clients
- openssh-server
- procps-ng - procps-ng
state: present state: present
update_cache: true update_cache: true
ignore_errors: true ignore_errors: true
- name: Install packages # noqa ignore-errors - name: Install apt packages # noqa ignore-errors
ansible.builtin.apt: ansible.builtin.apt:
name: name:
- openssh-client - openssh-client
@@ -47,7 +52,7 @@
changed_when: false changed_when: false
when: ansible_facts.os_family == 'Suse' when: ansible_facts.os_family == 'Suse'
- name: Install packages - name: Install packages on SuSE
community.general.zypper: community.general.zypper:
name: name:
- openssh - openssh
@@ -70,11 +75,6 @@
update_cache: true update_cache: true
when: ansible_facts.os_family == 'Archlinux' when: ansible_facts.os_family == 'Archlinux'
- name: Create ssh host keys # noqa ignore-errors - name: Create ssh host keys # noqa ignore-errors no-changed-when
ansible.builtin.command: ssh-keygen -A ansible.builtin.command: ssh-keygen -A
when: not ((ansible_facts.os_family in ['Oracle Linux', 'RedHat']) and ansible_facts.distribution_major_version < '7')
or ansible_facts.distribution == "Fedora"
or ansible_facts.distribution == "Amazon"
or ansible_facts.os_family == "Suse"
changed_when: false
ignore_errors: true ignore_errors: true
@@ -1,3 +0,0 @@
sshd-45:
run: false
justification: "PrintLastLog is broken on FreeBSD. see: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209441"
@@ -17,7 +17,8 @@ provisioner:
config_options: config_options:
defaults: defaults:
interpreter_python: auto_silent interpreter_python: auto_silent
callbacks_enabled: profile_tasks, timer, yaml callbacks_enabled: profile_tasks, timer
inject_facts_as_vars: false
verifier: verifier:
name: ansible name: ansible
+12 -12
View File
@@ -12,27 +12,32 @@
ansible_python_interpreter: /usr/bin/python3 ansible_python_interpreter: /usr/bin/python3
when: ansible_facts.distribution == 'Fedora' when: ansible_facts.distribution == 'Fedora'
- name: Install packages # noqa ignore-errors - name: Install dnf packages # noqa ignore-errors
ansible.builtin.dnf: ansible.builtin.dnf:
name: name:
- openssh-clients - openssh-clients
- openssh-server - openssh-server
state: present
update_cache: true
ignore_errors: true
- name: Install libselinux-python # noqa ignore-errors
ansible.builtin.dnf:
name:
- libselinux-python - libselinux-python
state: present state: present
update_cache: true update_cache: true
ignore_errors: true ignore_errors: true
- name: Install packages # noqa ignore-errors - name: Install procps-ng # noqa ignore-errors
ansible.builtin.dnf: ansible.builtin.dnf:
name: name:
- openssh-clients
- openssh-server
- procps-ng - procps-ng
state: present state: present
update_cache: true update_cache: true
ignore_errors: true ignore_errors: true
- name: Install packages # noqa ignore-errors - name: Install apt packages # noqa ignore-errors
ansible.builtin.apt: ansible.builtin.apt:
name: name:
- openssh-client - openssh-client
@@ -47,7 +52,7 @@
changed_when: false changed_when: false
when: ansible_facts.os_family == 'Suse' when: ansible_facts.os_family == 'Suse'
- name: Install packages - name: Install packages on SuSE
community.general.zypper: community.general.zypper:
name: name:
- openssh - openssh
@@ -70,11 +75,6 @@
update_cache: true update_cache: true
when: ansible_facts.os_family == 'Alpine' when: ansible_facts.os_family == 'Alpine'
- name: Create ssh host keys # noqa ignore-errors - name: Create ssh host keys # noqa ignore-errors no-changed-when
ansible.builtin.command: ssh-keygen -A ansible.builtin.command: ssh-keygen -A
when: not ((ansible_facts.os_family in ['Oracle Linux', 'RedHat']) and ansible_facts.distribution_major_version < '7')
or ansible_facts.distribution == "Fedora"
or ansible_facts.distribution == "Amazon"
or ansible_facts.os_family == "Suse"
changed_when: false
ignore_errors: true ignore_errors: true
File renamed without changes.
@@ -8,7 +8,7 @@ platforms:
# since we also need to use different OS users to run the tests because of how molecule operates, # since we also need to use different OS users to run the tests because of how molecule operates,
# the VM names must be predictable by OS user (to clean up canceled runs) # the VM names must be predictable by OS user (to clean up canceled runs)
- name: ${USER} - name: ${USER}
box: generic/${MOLECULE_DISTRO} box: ${MOLECULE_DISTRO}
memory: 1024 memory: 1024
cpus: 2 cpus: 2
provisioner: provisioner:
@@ -20,7 +20,10 @@ provisioner:
config_options: config_options:
defaults: defaults:
interpreter_python: auto_silent interpreter_python: auto_silent
callbacks_enabled: profile_tasks, timer, yaml callbacks_enabled: profile_tasks, timer
# Workaround for https://github.com/ansible-community/molecule-plugins/issues/301
library: "${MOLECULE_PROJECT_DIRECTORY}/plugins/modules:/usr/share/ansible:${MOLECULE_VAGRANT_PLUGIN_DIR}"
inject_facts_as_vars: false
verifier: verifier:
name: ansible name: ansible
env: env:
@@ -8,13 +8,13 @@
# temporary fix for https://github.com/lavabit/robox/issues/305 # temporary fix for https://github.com/lavabit/robox/issues/305
ansible.builtin.raw: echo "https://ftp.eu.openbsd.org/pub/OpenBSD" > /etc/installurl ansible.builtin.raw: echo "https://ftp.eu.openbsd.org/pub/OpenBSD" > /etc/installurl
changed_when: false changed_when: false
when: lookup('env', 'MOLECULE_DISTRO') == 'openbsd7' when: lookup('env', 'MOLECULE_DISTRO') == 'generic/openbsd7'
- name: Install python - name: Install python
# BSDs are special for Ansible - https://docs.ansible.com/ansible/latest/os_guide/intro_bsd.html # BSDs are special for Ansible - https://docs.ansible.com/ansible/latest/os_guide/intro_bsd.html
ansible.builtin.raw: pkg_add python%3.10 ansible.builtin.raw: pkg_add -I python%3.11
changed_when: false changed_when: false
when: lookup('env', 'MOLECULE_DISTRO') == 'openbsd7' when: lookup('env', 'MOLECULE_DISTRO') == 'generic/openbsd7'
- name: Wrapper playbook for kitchen testing "ansible-ssh-hardening" with default settings - name: Wrapper playbook for kitchen testing "ansible-ssh-hardening" with default settings
hosts: all hosts: all
@@ -9,7 +9,7 @@
dest: /usr/bin/type dest: /usr/bin/type
state: hard state: hard
mode: "0770" mode: "0770"
when: lookup('env', 'MOLECULE_DISTRO') == 'openbsd7' when: lookup('env', 'MOLECULE_DISTRO') == 'generic/openbsd7'
- name: Verify - name: Verify
hosts: localhost hosts: localhost
@@ -36,7 +36,7 @@
ansible.builtin.command: > ansible.builtin.command: >
docker run --rm docker run --rm
--volume {{ molecule_ephemeral_directory }}:{{ molecule_ephemeral_directory }} --volume {{ molecule_ephemeral_directory }}:{{ molecule_ephemeral_directory }}
--volume ./waivers_{{ lookup('env', 'MOLECULE_DISTRO') }}.yaml:/waivers.yaml --volume ./waivers_{{ lookup('env', 'MOLECULE_DISTRO') | regex_replace('^.*/', '') }}.yaml:/waivers.yaml
docker.io/cincproject/auditor exec docker.io/cincproject/auditor exec
--ssh-config-file={{ molecule_ephemeral_directory }}/ssh-config --ssh-config-file={{ molecule_ephemeral_directory }}/ssh-config
-t ssh://{{ lookup('env', 'USER') }} -t ssh://{{ lookup('env', 'USER') }}
@@ -0,0 +1,3 @@
unrelated:
run: false
justification: "cinc-auditor needs at least one waived control"
@@ -0,0 +1,3 @@
unrelated:
run: false
justification: "cinc-auditor needs at least one waived control"
@@ -0,0 +1,3 @@
unrelated:
run: false
justification: "cinc-auditor needs at least one waived control"
@@ -0,0 +1,3 @@
unrelated:
run: false
justification: "cinc-auditor needs at least one waived control"
+1
View File
@@ -0,0 +1 @@
molecule-plugins[vagrant]==25.8.12
+5 -5
View File
@@ -1,7 +1,7 @@
molecule==24.12.0 molecule==26.4.0
molecule-plugins[docker]==23.6.0 molecule-plugins[docker]==25.8.12
ansible-core==2.18.1 ansible-core==2.20.5
docker==7.1.0 docker==7.1.0
jmespath==1.0.1 jmespath==1.1.0
aar-doc==2.0.1 aar-doc==2.3.0
passlib==1.7.4 passlib==1.7.4
+3 -3
View File
@@ -25,11 +25,11 @@ Further information is available at [Deutsche Telekom (German)](http://www.telek
## Supported Operating Systems ## Supported Operating Systems
- EL - EL
- 8, 9 - 8, 9, 10
- Ubuntu - Ubuntu
- focal, jammy, noble - jammy, noble
- Debian - Debian
- bullseye, bookworm - trixie, bookworm, bullseye
- Amazon - Amazon
- opensuse - opensuse
+3 -2
View File
@@ -10,15 +10,16 @@ galaxy_info:
versions: versions:
- "8" - "8"
- "9" - "9"
- "10"
- name: Ubuntu - name: Ubuntu
versions: versions:
- focal
- jammy - jammy
- noble - noble
- name: Debian - name: Debian
versions: versions:
- bullseye - trixie
- bookworm - bookworm
- bullseye
- name: Amazon - name: Amazon
- name: opensuse - name: opensuse
galaxy_tags: galaxy_tags:
+1 -1
View File
@@ -14,7 +14,7 @@
state: directory state: directory
owner: "{{ mysql_hardening_user }}" owner: "{{ mysql_hardening_user }}"
group: "{{ mysql_hardening_user }}" group: "{{ mysql_hardening_user }}"
mode: "0750" mode: '{{ mysql_hardening_datadir_permissions | default("0750") }}'
when: item is defined and item != "" when: item is defined and item != ""
loop: loop:
- "{{ mysql_settings.settings.datadir }}" - "{{ mysql_settings.settings.datadir }}"
+2 -2
View File
@@ -39,13 +39,13 @@
when: not mysql_distribution is defined when: not mysql_distribution is defined
- name: Check which MySQL/MariaDB version is used - name: Check which MySQL/MariaDB version is used
community.mysql.mysql_info: ansible.mysql.mysql_info:
filter: version filter: version
login_unix_socket: "{{ login_unix_socket | default(omit) }}" login_unix_socket: "{{ login_unix_socket | default(omit) }}"
register: mysql_version register: mysql_version
- name: Check MySQL/MariaDB settings - name: Check MySQL/MariaDB settings
community.mysql.mysql_info: ansible.mysql.mysql_info:
filter: settings filter: settings
login_unix_socket: "{{ login_unix_socket | default(omit) }}" login_unix_socket: "{{ login_unix_socket | default(omit) }}"
register: mysql_settings register: mysql_settings
@@ -5,7 +5,7 @@
when: mysql_root_password == '-----====>SetR00tPa$$wordH3r3!!!<====-----' when: mysql_root_password == '-----====>SetR00tPa$$wordH3r3!!!<====-----'
- name: Ensure that the root password is present - name: Ensure that the root password is present
community.mysql.mysql_user: ansible.mysql.mysql_user:
name: root name: root
host_all: true host_all: true
password: "{{ mysql_root_password | mandatory }}" password: "{{ mysql_root_password | mandatory }}"
@@ -20,14 +20,14 @@
tags: my_cnf tags: my_cnf
- name: Ensure that the test database is absent - name: Ensure that the test database is absent
community.mysql.mysql_db: ansible.mysql.mysql_db:
name: test name: test
state: absent state: absent
login_unix_socket: "{{ login_unix_socket | default(omit) }}" login_unix_socket: "{{ login_unix_socket | default(omit) }}"
when: mysql_remove_test_database when: mysql_remove_test_database
- name: Ensure that anonymous users are absent - name: Ensure that anonymous users are absent
community.mysql.mysql_user: ansible.mysql.mysql_user:
name: "" name: ""
state: absent state: absent
host_all: true host_all: true
@@ -35,7 +35,7 @@
when: mysql_remove_anonymous_users when: mysql_remove_anonymous_users
- name: Ensure that root can only login from localhost - name: Ensure that root can only login from localhost
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: > query: >
DELETE DELETE
FROM mysql.user FROM mysql.user
@@ -47,7 +47,7 @@
when: mysql_remove_remote_root when: mysql_remove_remote_root
- name: Detect role support on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0 - name: Detect role support on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: > query: >
SELECT 1 FROM information_schema.COLUMNS SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user' WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user'
@@ -57,7 +57,7 @@
check_mode: false check_mode: false
- name: Get all users that have no authentication_string on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0 - name: Get all users that have no authentication_string on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: > query: >
SELECT CONCAT(QUOTE(USER), '@', QUOTE(HOST)) AS user SELECT CONCAT(QUOTE(USER), '@', QUOTE(HOST)) AS user
FROM mysql.user FROM mysql.user
@@ -76,7 +76,7 @@
is version('10.4.0', '>=')) is version('10.4.0', '>='))
- name: Get all users that have no password or authentication_string on MySQL version < 5.7.6 or Mariadb version < 10.4.0 - name: Get all users that have no password or authentication_string on MySQL version < 5.7.6 or Mariadb version < 10.4.0
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: > query: >
SELECT CONCAT(QUOTE(USER), '@', QUOTE(HOST)) AS user SELECT CONCAT(QUOTE(USER), '@', QUOTE(HOST)) AS user
FROM mysql.user FROM mysql.user
@@ -97,7 +97,7 @@
version('10.4.0', '<')) version('10.4.0', '<'))
- name: Ensure that there are no users without password or authentication_string - name: Ensure that there are no users without password or authentication_string
community.mysql.mysql_query: ansible.mysql.mysql_query:
query: query:
- DROP USER {{ item.user }} - DROP USER {{ item.user }}
login_unix_socket: "{{ login_unix_socket | default(omit) }}" login_unix_socket: "{{ login_unix_socket | default(omit) }}"
+2
View File
@@ -6,5 +6,7 @@ mysql_hardening_mysql_confd_dir: '/etc/my.cnf.d'
mysql_cnf_owner: 'root' # owner of /etc/my.cnf.d/*.cnf files mysql_cnf_owner: 'root' # owner of /etc/my.cnf.d/*.cnf files
mysql_cnf_group: 'mysql' # owner of /etc/my.cnf.d/*.cnf files mysql_cnf_group: 'mysql' # owner of /etc/my.cnf.d/*.cnf files
mysql_hardening_datadir_permissions: "0700"
mysql_hardening_group: 'mysql' mysql_hardening_group: 'mysql'
login_unix_socket: '/run/mysql/mysql.sock' login_unix_socket: '/run/mysql/mysql.sock'
+3 -3
View File
@@ -18,11 +18,11 @@ It works with the following nginx-roles, including, but not limited to:
## Supported Operating Systems ## Supported Operating Systems
- EL - EL
- 8, 9 - 8, 9, 10
- Ubuntu - Ubuntu
- focal, jammy, noble - jammy, noble, resolute
- Debian - Debian
- bookworm, bullseye - trixie, bookworm, bullseye
- Amazon - Amazon
## Role Variables ## Role Variables
+3 -1
View File
@@ -10,13 +10,15 @@ galaxy_info:
versions: versions:
- "8" - "8"
- "9" - "9"
- "10"
- name: Ubuntu - name: Ubuntu
versions: versions:
- focal
- jammy - jammy
- noble - noble
- resolute
- name: Debian - name: Debian
versions: versions:
- trixie
- bookworm - bookworm
- bullseye - bullseye
- name: Amazon - name: Amazon
+3 -3
View File
@@ -158,11 +158,11 @@ This role is mostly based on guides by:
## Supported Operating Systems ## Supported Operating Systems
- EL - EL
- 8, 9 - 8, 9, 10
- Ubuntu - Ubuntu
- focal, jammy, noble - jammy, noble, resolute
- Debian - Debian
- bookworm, bullseye - trixie, bookworm, bullseye
- Amazon - Amazon
- Fedora - Fedora
- ArchLinux - ArchLinux
+1 -1
View File
@@ -146,7 +146,7 @@ sysctl_config:
# The PTRACE system is used for debugging. With it, a single user process # The PTRACE system is used for debugging. With it, a single user process
# can attach to any other dumpable process owned by the same user. In the # can attach to any other dumpable process owned by the same user. In the
# case of malicious software, it is possible to use PTRACE to access # case of malicious software, it is possible to use PTRACE to access
# credentials that exist in memory (re-using existing SSH connections, # credentials that exist in memory (reusing existing SSH connections,
# extracting GPG agent information, etc). # extracting GPG agent information, etc).
# #
# A PTRACE scope of "0" is the more permissive mode. A scope of "1" limits # A PTRACE scope of "0" is the more permissive mode. A scope of "1" limits
+5
View File
@@ -27,3 +27,8 @@
path: "{{ item }}" path: "{{ item }}"
state: remounted state: remounted
loop: "{{ mountpoints_changed }}" loop: "{{ mountpoints_changed }}"
- name: Restart journald
ansible.builtin.systemd:
name: systemd-journald.service
state: restarted
+4 -2
View File
@@ -4,19 +4,21 @@ galaxy_info:
description: This Ansible role provides numerous security-related ssh configurations, providing all-round base protection. description: This Ansible role provides numerous security-related ssh configurations, providing all-round base protection.
company: Hardening Framework Team company: Hardening Framework Team
license: Apache License 2.0 license: Apache License 2.0
min_ansible_version: "2.11" min_ansible_version: "2.16"
platforms: platforms:
- name: EL - name: EL
versions: versions:
- "8" - "8"
- "9" - "9"
- "10"
- name: Ubuntu - name: Ubuntu
versions: versions:
- focal
- jammy - jammy
- noble - noble
- resolute
- name: Debian - name: Debian
versions: versions:
- trixie
- bookworm - bookworm
- bullseye - bullseye
- name: Amazon - name: Amazon
+12
View File
@@ -16,3 +16,15 @@
- Restart auditd via service - Restart auditd via service
- Restart auditd via systemd - Restart auditd via systemd
tags: auditd tags: auditd
- name: Disable systemd-journald.audit
when:
- ansible_facts.os_family != 'Suse' # socket doesn't seem to exist on suse
ansible.builtin.systemd:
name: systemd-journald-audit.socket
state: stopped
enabled: false
masked: true
notify:
- Restart journald
tags: auditd
+1 -1
View File
@@ -4,4 +4,4 @@
name: ctrl-alt-del.target name: ctrl-alt-del.target
masked: true masked: true
daemon_reload: true daemon_reload: true
when: ansible_service_mgr == "systemd" when: ansible_facts.service_mgr == "systemd"
+3 -3
View File
@@ -37,7 +37,7 @@
group: root group: root
mode: "0755" mode: "0755"
state: directory state: directory
when: ansible_service_mgr == "systemd" when: ansible_facts.service_mgr == "systemd"
- name: Create custom.conf for disabling coredumps - name: Create custom.conf for disabling coredumps
ansible.builtin.template: ansible.builtin.template:
@@ -46,7 +46,7 @@
owner: root owner: root
group: root group: root
mode: "0644" mode: "0644"
when: ansible_service_mgr == "systemd" when: ansible_facts.service_mgr == "systemd"
notify: Reload systemd notify: Reload systemd
- name: Enable coredumps - name: Enable coredumps
@@ -56,7 +56,7 @@
ansible.builtin.file: ansible.builtin.file:
path: /etc/systemd/coredump.conf.d path: /etc/systemd/coredump.conf.d
state: absent state: absent
when: ansible_service_mgr == "systemd" when: ansible_facts.service_mgr == "systemd"
notify: Reload systemd notify: Reload systemd
- name: Remove 10.hardcore.conf config file - name: Remove 10.hardcore.conf config file
+1 -1
View File
@@ -89,7 +89,7 @@
- name: Generate list of current available mounted filesystems on the system - name: Generate list of current available mounted filesystems on the system
ansible.builtin.set_fact: ansible.builtin.set_fact:
mountpoints_list: "{{ ansible_mounts | map(attribute='mount') | list }}" mountpoints_list: "{{ ansible_facts.mounts | map(attribute='mount') | list }}"
- name: Append special devices list to valid mountpoint list - name: Append special devices list to valid mountpoint list
ansible.builtin.set_fact: ansible.builtin.set_fact:
@@ -13,7 +13,7 @@
- mount.enabled | bool - mount.enabled | bool
- mount.path in mountpoints_list - mount.path in mountpoints_list
vars: vars:
mountinfo: "{{ ansible_mounts | selectattr('mount', 'equalto', mount.path) | list | first | default(None) }}" mountinfo: "{{ ansible_facts.mounts | selectattr('mount', 'equalto', mount.path) | list | first | default(None) }}"
notify: Remount filesystems notify: Remount filesystems
- name: "Check for existence of mount {{ mount.path }}" - name: "Check for existence of mount {{ mount.path }}"
+1 -1
View File
@@ -18,7 +18,7 @@
- name: Remove used filesystems from fs-list - name: Remove used filesystems from fs-list
ansible.builtin.set_fact: ansible.builtin.set_fact:
os_unused_filesystems: "{{ os_unused_filesystems | difference(ansible_mounts | map(attribute='fstype') | list) }}" os_unused_filesystems: "{{ os_unused_filesystems | difference(ansible_facts.mounts | map(attribute='fstype') | list) }}"
- name: Disable unused filesystems | os-10 - name: Disable unused filesystems | os-10
ansible.builtin.template: ansible.builtin.template:
-1
View File
@@ -3,7 +3,6 @@
ansible.builtin.apt: ansible.builtin.apt:
name: libpam-passwdqc name: libpam-passwdqc
state: present state: present
update_cache: true
when: when:
- os_auth_pam_passwdqc_enable - os_auth_pam_passwdqc_enable
+17 -27
View File
@@ -1,14 +1,4 @@
--- ---
- name: Protect sysctl.conf
ansible.builtin.file:
path: /etc/sysctl.conf
owner: root
group: root
mode: "0440"
state: touch
modification_time: preserve
access_time: preserve
- name: Set Daemon umask, do config for rhel-family | NSA 2.2.4.1 - name: Set Daemon umask, do config for rhel-family | NSA 2.2.4.1
ansible.builtin.template: ansible.builtin.template:
src: etc/sysconfig/rhel_sysconfig_init.j2 src: etc/sysconfig/rhel_sysconfig_init.j2
@@ -19,33 +9,33 @@
when: ansible_facts.os_family == 'RedHat' when: ansible_facts.os_family == 'RedHat'
- name: Change sysctls - name: Change sysctls
when: ansible_virtualization_type not in ['docker', 'lxc', 'openvz'] when: ansible_facts.virtualization_type not in ['docker', 'lxc', 'openvz']
block: block:
- name: Create a combined sysctl-dict if os-dependent sysctls are defined - name: Protect sysctl.conf
ansible.builtin.set_fact: ansible.builtin.file:
sysctl_config: "{{ sysctl_config | combine(sysctl_custom_config) }}" path: /etc/sysctl.d/90-dev-sec.conf
when: sysctl_custom_config | default() owner: root
group: root
# sysctl_rhel_config is kept for backwards-compatibility. use sysctl_custom_config instead mode: "0440"
- name: Create a combined sysctl-dict if os-dependent sysctls are defined state: touch
ansible.builtin.set_fact: modification_time: preserve
sysctl_config: "{{ sysctl_config | combine(sysctl_rhel_config) }}" access_time: preserve
when: sysctl_rhel_config | default()
- name: Create a combined sysctl-dict if overwrites are defined
ansible.builtin.set_fact:
sysctl_config: "{{ sysctl_config | combine(sysctl_overwrite) }}"
when: sysctl_overwrite | default()
- name: Change various sysctl-settings, look at the sysctl-vars file for documentation - name: Change various sysctl-settings, look at the sysctl-vars file for documentation
ansible.posix.sysctl: ansible.posix.sysctl:
name: "{{ item.key }}" name: "{{ item.key }}"
value: "{{ item.value }}" value: "{{ item.value }}"
sysctl_set: true sysctl_set: true
sysctl_file: /etc/sysctl.d/90-dev-sec.conf
state: present state: present
reload: true reload: true
ignoreerrors: true ignoreerrors: true
with_dict: "{{ sysctl_config }}" # sysctl_rhel_config is kept for backwards-compatibility. use sysctl_custom_config instead
# combines all sysctl-dicts into one, adds empty dicts if they are not defined
with_dict: "{{ ((sysctl_config
| combine(sysctl_custom_config | default({})))
| combine(sysctl_rhel_config | default({})))
| combine(sysctl_overwrite | default({})) }}"
when: item.key not in sysctl_unsupported_entries | default() when: item.key not in sysctl_unsupported_entries | default()
- name: Apply ufw defaults - name: Apply ufw defaults
+21 -17
View File
@@ -4,28 +4,28 @@
database: passwd database: passwd
# creates a dict for each user containing UID/HOMEDIR etc... # creates a dict for each user containing UID/HOMEDIR etc...
# skip this task if getent was run before without specifying a key (single entry) # skip this task if getent was run before without specifying a key (single entry)
when: getent_passwd is undefined or when: ansible_facts.getent_passwd is undefined or
getent_passwd | length <= 1 ansible_facts.getent_passwd | length <= 1
- name: Read local linux shadow database - name: Read local linux shadow database
ansible.builtin.getent: ansible.builtin.getent:
database: shadow database: shadow
- name: Extract system accounts from local user database - name: Extract system accounts from local user database
loop: "{{ getent_passwd.keys() | list }}" loop: "{{ ansible_facts.getent_passwd.keys() | list }}"
when: when:
- getent_passwd[item][1]|int > 0 - ansible_facts.getent_passwd[item][1]|int > 0
- getent_passwd[item][1]|int <= os_auth_sys_uid_max|int - ansible_facts.getent_passwd[item][1]|int <= os_auth_sys_uid_max|int
- item is not in os_always_ignore_users # skip users from "os_always_ignore_users" list (taken from role "vars") - item is not in os_always_ignore_users # skip users from "os_always_ignore_users" list (taken from role "vars")
- item is not in os_ignore_users # skip users from "os_ignore_users" list (taken from role "defaults") - item is not in os_ignore_users # skip users from "os_ignore_users" list (taken from role "defaults")
ansible.builtin.set_fact: ansible.builtin.set_fact:
system_users: "{{ system_users | default([]) + [item] }}" system_users: "{{ system_users | default([]) + [item] }}"
- name: Extract regular (non-system, non-root) accounts from local user database - name: Extract regular (non-system, non-root) accounts from local user database
loop: "{{ getent_passwd.keys() | list }}" loop: "{{ ansible_facts.getent_passwd.keys() | list }}"
when: when:
- getent_passwd[item][1]|int >= os_auth_uid_min|int - ansible_facts.getent_passwd[item][1]|int >= os_auth_uid_min|int
- getent_passwd[item][1]|int <= os_auth_uid_max|int - ansible_facts.getent_passwd[item][1]|int <= os_auth_uid_max|int
- item is not in os_always_ignore_users # skip users from "os_always_ignore_users" list (taken from role "vars") - item is not in os_always_ignore_users # skip users from "os_always_ignore_users" list (taken from role "vars")
- item is not in os_ignore_users # skip users from "os_ignore_users" list (taken from role "defaults") - item is not in os_ignore_users # skip users from "os_ignore_users" list (taken from role "defaults")
ansible.builtin.set_fact: ansible.builtin.set_fact:
@@ -36,18 +36,20 @@
name: "{{ item }}" name: "{{ item }}"
password_expire_min: "{{ os_auth_pw_min_age }}" password_expire_min: "{{ os_auth_pw_min_age }}"
password_expire_max: "{{ os_auth_pw_max_age }}" password_expire_max: "{{ os_auth_pw_max_age }}"
password_expire_warn: "{{ os_auth_pw_warn_age }}"
loop: "{{ regular_users }}" loop: "{{ regular_users }}"
when: when:
- os_user_pw_ageing - os_user_pw_ageing
- regular_users is defined and (regular_users | length > 0) - regular_users is defined and (regular_users | length > 0)
- item not in os_users_without_password_ageing - item not in os_users_without_password_ageing
- getent_shadow[item][0] is not match("\*") # password hashes containing illegal characters like "*" are unusable (locked) and don't need to age # password hashes with illegal characters like "*" or "!" are unusable (locked) and don't need to age
- getent_shadow[item][0] is not match("\!") # password hashes containing illegal characters like "!" are unusable (locked) and don't need to age - ansible_facts.getent_shadow[item][0] is not match("\*")
- ansible_facts.getent_shadow[item][0] is not match("\!")
- name: Extract root account(s) from local user database - name: Extract root account(s) from local user database
loop: "{{ getent_passwd.keys() | list }}" loop: "{{ ansible_facts.getent_passwd.keys() | list }}"
when: when:
- getent_passwd[item][1]|int == 0 - ansible_facts.getent_passwd[item][1]|int == 0
ansible.builtin.set_fact: ansible.builtin.set_fact:
root_users: "{{ root_users | default([]) + [item] }}" root_users: "{{ root_users | default([]) + [item] }}"
@@ -55,7 +57,7 @@
ansible.builtin.file: ansible.builtin.file:
mode: "0700" mode: "0700"
owner: "{{ item }}" owner: "{{ item }}"
path: "{{ getent_passwd[item][4] }}" path: "{{ ansible_facts.getent_passwd[item][4] }}"
state: directory state: directory
loop: "{{ root_users }}" loop: "{{ root_users }}"
when: when:
@@ -66,11 +68,13 @@
name: "{{ item }}" name: "{{ item }}"
password_expire_min: "{{ os_auth_pw_min_age }}" password_expire_min: "{{ os_auth_pw_min_age }}"
password_expire_max: "{{ os_auth_pw_max_age }}" password_expire_max: "{{ os_auth_pw_max_age }}"
password_expire_warn: "{{ os_auth_pw_warn_age }}"
loop: "{{ root_users }}" loop: "{{ root_users }}"
when: when:
- os_rootuser_pw_ageing | bool - os_rootuser_pw_ageing | bool
- getent_shadow[item][0] is not match("\*") # password hashes containing illegal characters like "*" are unusable (locked) and don't need to age # password hashes with illegal characters like "*" or "!" are unusable (locked) and don't need to age
- getent_shadow[item][0] is not match("\!") # password hashes containing illegal characters like "!" are unusable (locked) and don't need to age - ansible_facts.getent_shadow[item][0] is not match("\*")
- ansible_facts.getent_shadow[item][0] is not match("\!")
- name: Remove additional users with UID=0 ("root" user is not touched) - name: Remove additional users with UID=0 ("root" user is not touched)
ansible.builtin.user: ansible.builtin.user:
@@ -96,13 +100,13 @@
createhome: false createhome: false
loop: "{{ system_users }}" loop: "{{ system_users }}"
when: when:
- getent_shadow[item][0] is not match("\!") # password hashes containing illegal characters like "!" are unusable already (locked) - ansible_facts.getent_shadow[item][0] is not match("\!") # password hashes containing illegal characters like "!" are unusable already (locked)
- name: Limit access to home directories of regular (non-system, non-root) accounts - name: Limit access to home directories of regular (non-system, non-root) accounts
ansible.builtin.file: ansible.builtin.file:
mode: "0700" mode: "0700"
owner: "{{ item }}" owner: "{{ item }}"
path: "{{ getent_passwd[item][4] }}" path: "{{ ansible_facts.getent_passwd[item][4] }}"
state: directory state: directory
loop: "{{ regular_users }}" loop: "{{ regular_users }}"
when: when:
@@ -5,7 +5,7 @@
# #
# Three items must be defined: `MAIL_DIR`, `ENV_SUPATH`, and `ENV_PATH`. If unspecified, some arbitrary (and possibly incorrect) value will be assumed. All other items are optional - if not specified then the described action or option will be inhibited. # Three items must be defined: `MAIL_DIR`, `ENV_SUPATH`, and `ENV_PATH`. If unspecified, some arbitrary (and possibly incorrect) value will be assumed. All other items are optional - if not specified then the described action or option will be inhibited.
# #
# Comment lines (lines beginning with `#`) and blank lines are ignored. # Comment lines and blank lines are ignored.
# #
#-- Modified for Linux. --marekm #-- Modified for Linux. --marekm
@@ -35,7 +35,7 @@ FAILLOG_ENAB yes
# Enable display of unknown usernames when login failures are recorded. # Enable display of unknown usernames when login failures are recorded.
# #
# *WARNING*: Unknown usernames may become world readable. See #290803 and #298773 for details about how this could become a security concern # *WARNING*: Unknown usernames may become world readable. See 290803 and 298773 for details about how this could become a security concern
LOG_UNKFAIL_ENAB no LOG_UNKFAIL_ENAB no
# Enable logging of successful logins # Enable logging of successful logins
@@ -56,7 +56,7 @@ SYSLOG_SG_ENAB yes
# If defined, login failures will be logged here in a utmp format last, when invoked as lastb, will read `/var/log/btmp`, so... # If defined, login failures will be logged here in a utmp format last, when invoked as lastb, will read `/var/log/btmp`, so...
FTMP_FILE /var/log/btmp FTMP_FILE /var/log/btmp
# If defined, the command name to display when running "su -". For # example, if this is defined as "su" then a "ps" will display the command is "-su". If not defined, then "ps" would display the name of the shell actually being run, e.g. something like "-sh". # If defined, the command name to display when running "su -". For example, if this is defined as "su" then a "ps" will display the command is "-su". If not defined, then "ps" would display the name of the shell actually being run, e.g. something like "-sh".
SU_NAME su SU_NAME su
# If defined, file which inhibits all the usual chatter during the login sequence. If a full pathname, then hushed mode will be enabled if the user's name or shell are found in the file. If not a full pathname, then hushed mode will be enabled if the file exists in the user's home directory. # If defined, file which inhibits all the usual chatter during the login sequence. If a full pathname, then hushed mode will be enabled if the user's name or shell are found in the file. If not a full pathname, then hushed mode will be enabled if the file exists in the user's home directory.
@@ -96,7 +96,7 @@ KILLCHAR 025
UMASK {{ os_env_umask }} UMASK {{ os_env_umask }}
# Enable setting of the umask group bits to be the same as owner bits (examples: `022` -> `002`, `077` -> `007`) for non-root users, if the uid is the same as gid, and username is the same as the primary group name. # Enable setting of the umask group bits to be the same as owner bits (examples: `022` -> `002`, `077` -> `007`) for non-root users, if the uid is the same as gid, and username is the same as the primary group name.
# If set to yes, userdel will remove the user´s group if it contains no more members, and useradd will create by default a group with the name of the user. # If set to yes, userdel will remove the user's group if it contains no more members, and useradd will create by default a group with the name of the user.
USERGROUPS_ENAB yes USERGROUPS_ENAB yes
+5 -5
View File
@@ -1,7 +1,7 @@
# dev-sec.ssh_hardening # dev-sec.ssh_hardening
[![devsec.ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml) [![devsec.ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml)
[![devsec.ssh_hardening BSD](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_bsd.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_bsd.yml) [![devsec.ssh_hardening VM](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_vm.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_vm.yml)
[![devsec.ssh_hardening with custom tests](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml) [![devsec.ssh_hardening with custom tests](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml/badge.svg)](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml)
## Description ## Description
@@ -47,18 +47,18 @@ For more information, see [this issue](https://github.com/dev-sec/ansible-collec
## Supported Operating Systems ## Supported Operating Systems
- EL - EL
- 8, 9 - 8, 9, 10
- Ubuntu - Ubuntu
- focal, jammy, noble - jammy, noble, resolute
- Debian - Debian
- bookworm, bullseye - trixie, bookworm, bullseye
- Alpine - Alpine
- Amazon - Amazon
- Fedora - Fedora
- ArchLinux - ArchLinux
- SmartOS - SmartOS
- FreeBSD - FreeBSD
- 13.2, 14.0 - 14.0
- OpenBSD - OpenBSD
- 7.0 - 7.0
+3 -2
View File
@@ -10,13 +10,15 @@ galaxy_info:
versions: versions:
- "8" - "8"
- "9" - "9"
- "10"
- name: Ubuntu - name: Ubuntu
versions: versions:
- focal
- jammy - jammy
- noble - noble
- resolute
- name: Debian - name: Debian
versions: versions:
- trixie
- bookworm - bookworm
- bullseye - bullseye
- name: Alpine - name: Alpine
@@ -26,7 +28,6 @@ galaxy_info:
- name: SmartOS - name: SmartOS
- name: FreeBSD - name: FreeBSD
versions: versions:
- "13.2"
- "14.0" - "14.0"
- name: OpenBSD - name: OpenBSD
versions: versions:
@@ -1,4 +1,11 @@
--- ---
- name: Disable systemd-socket activation
ansible.builtin.systemd:
name: ssh.socket
state: stopped
enabled: false
masked: true
- name: Remove ssh service systemd-socket file - name: Remove ssh service systemd-socket file
ansible.builtin.file: ansible.builtin.file:
path: "{{ item }}" path: "{{ item }}"
@@ -8,9 +15,8 @@
- /etc/systemd/system/ssh.service.requires/ssh.socket - /etc/systemd/system/ssh.service.requires/ssh.socket
- /etc/systemd/system/sockets.target.wants/ssh.socket - /etc/systemd/system/sockets.target.wants/ssh.socket
- name: Disable systemd-socket activation - name: Ensure ssh service is started after disabling socket activation
ansible.builtin.systemd: ansible.builtin.systemd:
name: ssh.socket name: "{{ sshd_service_name }}"
state: stopped state: started
enabled: false enabled: true
masked: true
+1 -1
View File
@@ -113,7 +113,7 @@
notify: Restart sshd notify: Restart sshd
when: when:
- ssh_server_hardening | bool - ssh_server_hardening | bool
- sshd_register_moduli.stdout - sshd_register_moduli.stdout is truthy
- name: Include tasks to setup ca keys and principals - name: Include tasks to setup ca keys and principals
ansible.builtin.include_tasks: ca_keys_and_principals.yml ansible.builtin.include_tasks: ca_keys_and_principals.yml
@@ -1,4 +1,4 @@
#jinja2: trim_blocks: "true", lstrip_blocks: "true" #jinja2: trim_blocks:True, lstrip_blocks:True
{{ ansible_managed | comment }} {{ ansible_managed | comment }}
# Generated by Ansible role {{ ansible_role_name }} # Generated by Ansible role {{ ansible_role_name }}
@@ -91,7 +91,7 @@ StrictHostKeyChecking ask
{% endif %} {% endif %}
# Disable agent forwarding, since local agent could be accessed through forwarded connection. # Disable agent forwarding, since local agent could be accessed through forwarded connection.
ForwardAgent {{ ((ssh_forward_agent) if ssh_forward_agent is defined else 'no')}} ForwardAgent {{ ((ssh_forward_agent) if ssh_forward_agent is defined else 'no') }}
# Disable X11 forwarding, since local X11 display could be accessed through forwarded connection. # Disable X11 forwarding, since local X11 display could be accessed through forwarded connection.
+15 -13
View File
@@ -1,4 +1,4 @@
#jinja2: trim_blocks: "true", lstrip_blocks: "true" #jinja2: trim_blocks:True, lstrip_blocks:True
{{ ansible_managed | comment }} {{ ansible_managed | comment }}
# Generated by Ansible role {{ ansible_role_name }} # Generated by Ansible role {{ ansible_role_name }}
@@ -274,18 +274,6 @@ RevokedKeys /etc/ssh/revoked_keys
# Subsystem sftp /opt/app/openssh5/libexec/sftp-server # Subsystem sftp /opt/app/openssh5/libexec/sftp-server
Subsystem sftp internal-sftp -l INFO -f LOCAL6 -u {{ sftp_umask }} Subsystem sftp internal-sftp -l INFO -f LOCAL6 -u {{ sftp_umask }}
# These lines must appear at the *end* of sshd_config
Match Group sftponly
ForceCommand internal-sftp -l INFO -f LOCAL6 -u {{ sftp_umask }}
{% if sftp_chroot %}
ChrootDirectory {{ sftp_chroot_dir }}
{% endif %}
AllowTcpForwarding no
AllowAgentForwarding no
PasswordAuthentication {{ 'yes' if (ssh_server_password_login|bool) else 'no' }}
PermitRootLogin no
X11Forwarding no
{% endif %} {% endif %}
{% if ssh_server_match_address %} {% if ssh_server_match_address %}
@@ -335,3 +323,17 @@ Match LocalPort {{ item.port }}
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if sftp_enabled %}
# These lines must appear at the *end* of sshd_config
Match Group sftponly
ForceCommand internal-sftp -l INFO -f LOCAL6 -u {{ sftp_umask }}
{% if sftp_chroot %}
ChrootDirectory {{ sftp_chroot_dir }}
{% endif %}
AllowTcpForwarding no
AllowAgentForwarding no
PasswordAuthentication {{ 'yes' if (ssh_server_password_login|bool) else 'no' }}
PermitRootLogin no
X11Forwarding no
{% endif %}
+26
View File
@@ -0,0 +1,26 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
ssh_owner: root
ssh_group: root
ssh_host_keys_owner: root
ssh_host_keys_group: root
ssh_host_keys_mode: "0600"
ssh_selinux_packages:
- policycoreutils-python-utils
- checkpolicy
# true if SSH support Kerberos
ssh_kerberos_support: true
# true if SSH has PAM support
ssh_pam_support: true
sshd_moduli_file: /etc/ssh/moduli
# disable CRYPTO_POLICY to take settings from sshd configuration
# see: https://access.redhat.com/solutions/4410591
sshd_disable_crypto_policy: true