Compare commits

...
Author SHA1 Message Date
Martin Schurz 5c4803e9a4 Accept strings and lists for ssh_allow_users
Signed-off-by: Martin Schurz <[email protected]>
2025-02-09 12:12:12 +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
schurzi c53e8bcb1e Merge pull request #835 from dev-sec/ssh_locked
Modify PAM to allow SSH key based logins with locked passwords
2024-12-23 12:52:33 +01:00
dev-sec CI ab93a75788 update changelog 2024-12-23 11:52:01 +00:00
schurzi 5e7005a91f Merge pull request #832 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to 4ce8e49
2024-12-23 12:51:15 +01:00
schurzi 4d32540823 Merge pull request #834 from dev-sec/renovate/molecule-plugins-23.x
chore(deps): update dependency molecule-plugins to v23.6.0
2024-12-23 12:50:49 +01:00
Martin Schurz b7f0bdd81f Add docs
Signed-off-by: Martin Schurz <[email protected]>
2024-12-23 00:53:32 +01:00
Martin Schurz e13bb0fcae Use correct os_family for Suse ...
Signed-off-by: Martin Schurz <[email protected]>
2024-12-22 22:23:40 +01:00
Martin Schurz e8cf61bd3c Make changes portable
Signed-off-by: Martin Schurz <[email protected]>

Make changes portable

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

Make changes portable

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

Make changes portable

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

Make changes portable

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

Make changes portable

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

Make changes portable

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

Make changes portable

Signed-off-by: Martin Schurz <[email protected]>
2024-12-22 22:23:38 +01:00
Martin Schurz 767293e40b Install passlib on executor
Signed-off-by: Martin Schurz <[email protected]>
2024-12-22 19:26:22 +01:00
Martin Schurz 4b05df756c fix errors
Signed-off-by: Martin Schurz <[email protected]>
2024-12-22 18:58:39 +01:00
Martin Schurz fba07a4d41 MOdify PAM to allow SSH Key logins with locked passwords
Signed-off-by: Martin Schurz <[email protected]>
2024-12-22 18:51:18 +01:00
renovate[bot] 6f531d78f0 chore(deps): update dependency molecule-plugins to v23.6.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 19:13:14 +00:00
renovate[bot] 09ce9269a7 chore(deps): update ansible/ansible-lint digest to 4ce8e49
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-12 16:04:42 +00:00
dev-sec CI a40b1c8d0d update changelog 2024-12-09 11:04:43 +00:00
schurzi c6c1a78497 Merge pull request #831 from dev-sec/renovate/molecule-24.x
chore(deps): update dependency molecule to v24.12.0
2024-12-09 12:03:28 +01:00
renovate[bot] b7aeb560c9 chore(deps): update dependency molecule to v24.12.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 19:04:42 +00:00
dev-sec CI 587bfc52b4 update changelog 2024-12-03 01:21:55 +00:00
renovate[bot] 8d726c317f chore(deps): update dependency ansible-core to v2.18.1 (#829)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 01:20:36 +00:00
dev-sec CI cb1ebe0ed8 update changelog 2024-11-30 12:51:53 +00:00
schurzi ca17c66742 Merge pull request #828 from dev-sec/readd_openbsd
Change installation source for OpenBSD tests
2024-11-30 13:50:41 +01:00
Martin Schurz c2712fc3d9 Change installation source for OpenBSD tests
Signed-off-by: Martin Schurz <[email protected]>
2024-11-30 12:54:11 +01:00
dev-sec CI 7d8e792175 update changelog 2024-11-22 21:03:35 +00:00
schurzi 00161845d2 Merge pull request #812 from dev-sec/renovate/actions-checkout-digest
chore(deps): update actions/checkout digest to 11bd719
2024-11-22 22:02:20 +01:00
dev-sec CI 2634c624df update changelog 2024-11-16 21:01:01 +00:00
renovate[bot] 74a121e774 chore(deps): update dependency ansible-core to v2.18.0 (#819)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-16 20:51:01 +00:00
renovate[bot] 28f9ef09ed chore(deps): update actions/checkout digest to 11bd719
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-16 20:50:58 +00:00
dev-sec CI 674c7b4551 update changelog 2024-11-16 15:16:13 +00:00
renovate[bot] 3db0a70ccf chore(deps): update dependency aar-doc to v2.0.1 (#817)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-16 15:14:57 +00:00
dev-sec CI fd5a8f39dd update changelog 2024-11-16 10:11:23 +00:00
schurzi f8e199b315 Merge pull request #825 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to 44be233
2024-11-16 11:10:38 +01:00
Martin Schurz 577c87d07b Add space ... 2024-11-16 11:10:10 +01:00
Martin Schurz 9096046161 Disable OpenBSD Tests 2024-11-16 01:13:50 +01:00
dev-sec CI fe6a957a90 update changelog 2024-11-16 00:11:46 +00:00
schurzi 47ff6e41ac Merge pull request #814 from dev-sec/renovate/actions-setup-python-digest
Update actions/setup-python digest to 0b93645
2024-11-16 01:10:29 +01:00
renovate[bot] 069966702d Update ansible/ansible-lint digest to 44be233
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 15:12:00 +00:00
dev-sec CI ad79abb889 update changelog 2024-11-11 18:53:54 +00:00
dev-sec CI 82a84eec94 update ssh_hardening readme 2024-11-11 18:53:09 +00:00
Shizzlebix cb85a99e22 adding switch for ForwardAgent in ssh_config (#818)
* Update openssh.conf.j2

add switch for FowardAgent

* Update openssh.conf.j2

fix typo

* Update openssh.conf.j2

change ssh_ForwardAgent to ssh_forward_agent

* Update argument_specs.yml

adding context for ssh_forward_agent
2024-11-11 19:52:38 +01:00
dev-sec CI 96d318eaf4 update changelog 2024-11-06 19:20:39 +00:00
dependabot[bot] 5b28117d72 Bump ansible-core from 2.17.5 to 2.17.6 (#820)
Bumps [ansible-core](https://github.com/ansible/ansible) from 2.17.5 to 2.17.6.
- [Release notes](https://github.com/ansible/ansible/releases)
- [Commits](https://github.com/ansible/ansible/compare/v2.17.5...v2.17.6)

---
updated-dependencies:
- dependency-name: ansible-core
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-06 20:08:54 +01:00
renovate[bot] f2af5f0b52 chore(deps): update actions/setup-python digest to 0b93645
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-24 16:43:41 +00:00
dev-sec CI 8d9569cd71 update galaxy.yml with new version 2024-10-22 08:25:58 +00:00
dev-sec CI 259aa71946 update changelog 2024-10-22 08:24:08 +00:00
dev-sec CI 5015cda4f0 update nginx_hardening readme 2024-10-22 07:18:55 +00:00
dev-sec CI 532b7a70ea update ssh_hardening readme 2024-10-22 07:18:52 +00:00
dev-sec CI 8d336bcdfa update os_hardening readme 2024-10-22 07:18:45 +00:00
dev-sec CI 8fffcde096 update mysql_hardening readme 2024-10-22 07:18:42 +00:00
dev-sec CI 37785016d9 update changelog 2024-10-22 06:54:58 +00:00
schurzi 5d95dc7083 Merge pull request #810 from dev-sec/audit_name
Add variable to set name_format for auditd
2024-10-22 08:47:36 +02:00
Martin Schurz f70a74f99f Add variable to set name_format for auditd
Signed-off-by: Martin Schurz <[email protected]>
2024-10-22 08:46:23 +02:00
schurzi b6d11a0b19 Merge pull request #811 from dev-sec/py_version
Pin python dependencies and optimize GitHub Actions
2024-10-22 08:45:40 +02:00
Martin Schurz 92995bbee3 Sort matrix builds
Signed-off-by: Martin Schurz <[email protected]>
2024-10-22 08:44:39 +02:00
Martin Schurz 752a541507 Fix copy&paste error
Signed-off-by: Martin Schurz <[email protected]>
2024-10-21 20:06:14 +02:00
Martin Schurz 45193e9ff1 Pin python dependencies and optimize GitHub Actions
Signed-off-by: Martin Schurz <[email protected]>
2024-10-21 20:01:14 +02:00
dev-sec CI 7dab72c8c1 update changelog 2024-10-13 19:43:46 +00:00
rndmh3ro 8619b26b75 Prettified Code! 2024-10-13 19:42:40 +00:00
Sebastian Gumprich 7b112dcf87 feat(ssh): add alpine support (#809)
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-10-13 21:42:28 +02:00
dev-sec CI cd9cf8f22a update changelog 2024-10-13 18:27:14 +00:00
dev-sec CI 08dfeedbc0 update os_hardening readme 2024-10-13 18:15:50 +00:00
dev-sec CI 759b746429 update ssh_hardening readme 2024-10-13 18:15:43 +00:00
dev-sec CI e6ea4f0b4c update mysql_hardening readme 2024-10-13 18:15:40 +00:00
dev-sec CI 94f05a971a update changelog 2024-10-13 18:14:26 +00:00
Sebastian Gumprich aa737011e4 fix(cicd): test idempotence on ssh custom tests (#807)
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-10-13 20:12:21 +02:00
dev-sec CI 19ac284200 update nginx_hardening readme 2024-10-13 18:12:08 +00:00
Sebastian Gumprich 141efbc516 fix(ssh_hardening): test setting kex to false, remove wrong default (#808)
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-10-13 20:11:47 +02:00
dev-sec CI 7cca65bc90 update changelog 2024-10-13 10:37:24 +00:00
rndmh3ro cfd4536868 Prettified Code! 2024-10-13 10:35:08 +00:00
seven-beep a97a54dc30 Provide granular noop for ssh configuration (#789)
* Provide granular noop for shh configuration

We would like to have more fine grained options on applying or not specific configurations.

This commit let the user choose to noop some configuration with a few new
boolean variables.

Motivation for theses options are we may configure ourselves some (ssh host key
regeneration in a templating system) or we are not ready for others (ssh_kex
will break dist-upgrades, letting the operator without ssh).

Signed-off-by: seven beep <[email protected]>

* Provide granula noop for ssh configuration

We would like to have more fine grained options on applying or not specific configurations.

This commit let the user choose to disable configurations for `ssh_host_key_config`,
`ssh_ciphers_config`, `ssh_host_key_config`, `ssh_macs_config` by setting them
to False.

Motivation for theses options are we may configure ourselves some (ssh host key
regeneration in a templating system) or we are not ready for others (ssh_kex
will break dist-upgrades, letting the operator without ssh).

Signed-off-by: seven beep <[email protected]>

---------

Signed-off-by: seven beep <[email protected]>
2024-10-13 12:34:52 +02:00
dev-sec CI a1c7e77f08 update changelog 2024-10-10 11:41:18 +00:00
dev-sec CI be5a98bce5 update mysql_hardening readme 2024-10-10 11:39:07 +00:00
dev-sec CI 1464ee7693 update nginx_hardening readme 2024-10-10 11:39:01 +00:00
dev-sec CI ba1991b4c1 update os_hardening readme 2024-10-10 11:39:00 +00:00
dev-sec CI a234d23d77 update ssh_hardening readme 2024-10-10 11:38:59 +00:00
schurzi 3923ea888b Merge pull request #806 from vmpr/patch-2
Document correct quotes for ssh_permit_tunnel parameter
2024-10-10 13:38:39 +02:00
vmpr 27aa081889 fixing missing quotes for ssh_permit_tunnel parameter in argument_specs.yml
ssh_permit_tunnel needs quotes otherwise we will end up with an error:
```
TASK [devsec.hardening.ssh_hardening : Create sshd_config and set permissions to root/600] **********************************************************************************************************************
fatal: [vampdock02]: FAILED! => {"changed": false, "checksum": "fe6b74e30b1a653f83c2cbe1dd1332c14bd55833", "exit_status": 255, "msg": "failed to validate", "stderr": "/home/debian/.ansible/tmp/ansible-tmp-1728530891.493071-72386-149151737175948/source line 123: bad PermitTunnel argument True\r\n", "stderr_lines": ["/home/debian/.ansible/tmp/ansible-tmp-1728530891.493071-72386-149151737175948/source line 123: bad PermitTunnel argument True"], "stdout": "", "stdout_lines": []}
```
2024-10-10 15:50:17 +08:00
dev-sec CI ee727ed9b2 update changelog 2024-10-09 12:42:51 +00:00
rndmh3ro d6d2624e4d Prettified Code! 2024-10-09 12:40:26 +00:00
Sebastian Gumprich 62947a6ea2 fix(docs): add 'become: true' to example playbooks. fix #787 (#804)
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-10-09 14:40:08 +02:00
dev-sec CI 6ff5cebeb3 update changelog 2024-10-08 22:03:42 +00:00
schurzi 421d502f90 Merge pull request #802 from dev-sec/renovate/ansible-core-2.x
chore(deps): update dependency ansible-core to v2.17.5
2024-10-09 00:01:03 +02:00
renovate[bot] d51f784244 chore(deps): update dependency ansible-core to v2.17.5
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 13:22:40 +00:00
dev-sec CI fdcfd05a4c update changelog 2024-10-08 11:28:54 +00:00
schurzi f5303344e4 Merge pull request #800 from dev-sec/renovate/actions-checkout-digest
chore(deps): update actions/checkout digest to eef6144
2024-10-08 13:27:16 +02:00
schurzi 9476dc9130 Merge pull request #795 from dev-sec/renovate/ansible-ansible-lint-digest
chore(deps): update ansible/ansible-lint digest to 3b5bee1
2024-10-08 13:26:49 +02:00
dev-sec CI f445c29f26 update changelog 2024-10-08 07:32:10 +00:00
schurzi 2f93835a6f Merge pull request #801 from dev-sec/guard_molecule
Don't run tests if the environment is not correct
2024-10-08 09:29:29 +02:00
dev-sec CI f380343a9d update changelog 2024-10-08 06:32:35 +00:00
T.O. 9c069ff8e8 feat: ✨ Corrected package name (#799)
`policycoreutils-python` does not exist and was corrected to
`policycoreutils-python-utils`. Only tested with debian
2024-10-08 08:29:52 +02:00
Martin Schurz 6cc57e1581 Don't run tests if the environment is not correct
Signed-off-by: Martin Schurz <[email protected]>
2024-10-07 23:02:51 +02:00
renovate[bot] 5a28783a53 chore(deps): update actions/checkout digest to eef6144
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-07 19:31:13 +00:00
dev-sec CI f3e012222a update changelog 2024-10-05 08:06:47 +00:00
Martin Schurz 3bdae0d98f Fix Changelog generation by adapting regex
Signed-off-by: Martin Schurz <[email protected]>
2024-10-05 10:04:07 +02:00
dev-sec CI 7faafb34de update changelog 2024-10-05 07:50:29 +00:00
schurzi 437546f4a9 Prettified Code! 2024-10-05 07:48:38 +00:00
Martin Schurz 1748396683 Fix Changelog
Signed-off-by: Martin Schurz <[email protected]>
2024-10-05 09:48:20 +02:00
dev-sec CI c185fa314f update changelog 2024-10-04 13:24:51 +00:00
dev-sec CI 5ef0c42d64 update os_hardening readme 2024-10-04 13:22:42 +00:00
schurzi 3daba1f3ee Merge pull request #797 from dev-sec/remdep
Remove unused files and variables
2024-10-04 15:22:15 +02:00
dev-sec CI ba5d025c82 update changelog 2024-10-04 11:31:17 +00:00
Martin Schurz 2b495bf6b9 Disable testing of audit in docker
Signed-off-by: Martin Schurz <[email protected]>
2024-10-04 13:29:17 +02:00
Martin Schurz 4c87d293ce Disable testing of audit in docker
Signed-off-by: Martin Schurz <[email protected]>
2024-10-04 13:29:17 +02:00
Martin Schurz 2e3d5e916b Remove unused files and variables
Signed-off-by: Martin Schurz <[email protected]>
2024-10-04 13:29:16 +02:00
schurzi 077900eadd Merge pull request #798 from dev-sec/vmvenv
Use Python venv for VM tests
2024-10-04 13:28:41 +02:00
Martin Schurz c705e50e0c Correct typo
Signed-off-by: Martin Schurz <[email protected]>
2024-10-04 12:23:18 +02:00
Martin Schurz 75158eb6d3 add Dependency
Signed-off-by: Martin Schurz <[email protected]>
2024-10-04 11:11:40 +02:00
Martin Schurz ecee5ffcbd Use Python venv for VM tests
Signed-off-by: Martin Schurz <[email protected]>
2024-10-04 11:07:42 +02:00
Martin Schurz 75f6b1a801 Use Python venv for VM tests
Signed-off-by: Martin Schurz <[email protected]>
2024-10-04 11:05:04 +02:00
renovate[bot] 6824eda2ba chore(deps): update ansible/ansible-lint digest to 3b5bee1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 18:20:52 +00:00
dev-sec CI d386d0fe1b update changelog 2024-09-15 19:44:24 +00:00
renovate[bot] e72f60e8e1 chore(deps): update dependency ansible-core to v2.17.4
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 19:42:18 +00:00
dev-sec CI a1215c7bd4 update changelog 2024-09-15 14:38:12 +00:00
renovate[bot] 1536b61e32 chore(deps): update ansible/ansible-lint digest to 25f783c (#792)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 16:36:49 +02:00
dev-sec CI 3f3e8cf2f2 update changelog 2024-09-04 08:38:54 +00:00
schurzi 83c5918339 Merge pull request #788 from dev-sec/renovate/actions-setup-python-digest
chore(deps): update actions/setup-python digest to f677139
2024-09-04 10:37:37 +02:00
renovate[bot] 4bf2d57013 chore(deps): update actions/setup-python digest to f677139
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-29 15:25:01 +00:00
dev-sec CI 683706a024 update changelog 2024-08-13 01:28:14 +00:00
renovate[bot] 81067084d1 chore(deps): update dependency ansible-core to v2.17.3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 01:25:56 +00:00
dev-sec CI 7cac37de92 update changelog 2024-08-07 09:06:02 +00:00
renovate[bot]andMartin Schurz ea2fe100b5 chore(deps): update dependency ansible-core to v2.17.2 (#756)
* chore(deps): update dependency ansible-core to v2.17.2

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Downgrade Ansible version for Rocky 8

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

* Downgrade Ansible version for Rocky 8

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

---------

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Martin Schurz <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Martin Schurz <[email protected]>
2024-08-07 11:04:39 +02:00
dev-sec CI 3e67f91dbd update galaxy.yml with new version 2024-08-06 17:25:36 +00:00
dev-sec CI cd9cdff971 update changelog 2024-08-06 17:23:31 +00:00
dev-sec CI 7ae5452355 update changelog 2024-08-06 17:12:44 +00:00
dev-sec CI 3250d179bc update nginx_hardening readme 2024-08-06 11:37:20 +00:00
dev-sec CI b1cff78ae2 update changelog 2024-08-06 11:14:16 +00:00
dev-sec CI caaae61322 update mysql_hardening readme 2024-08-06 11:12:00 +00:00
dev-sec CI c5935d38e5 update os_hardening readme 2024-08-06 11:11:58 +00:00
dev-sec CI 0989606757 update ssh_hardening readme 2024-08-06 11:11:57 +00:00
schurzi 69ab9e47ad Update Debian compatibility (#784)
* Update Ubuntu compatability

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

* reload systemd when disabling ssh socket

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

* manage systemd files

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

* Create privsep directory for Debian

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

* Use working Ubuntu 24.04 image for vm tests

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

* Remove deprecated Debian 10

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

---------

Signed-off-by: Martin Schurz <[email protected]>
2024-08-06 13:11:32 +02:00
dev-sec CI 118a0f07f6 update changelog 2024-07-30 06:49:04 +00:00
schurzi 7fd8a195aa Merge pull request #783 from dev-sec/fed40 2024-07-30 08:47:47 +02:00
Martin Schurz e73f36d20b Add special vars for Fedora 40
Signed-off-by: Martin Schurz <[email protected]>
2024-07-29 22:04:51 +02:00
Martin Schurz 6c9de30d90 Add needed package for tests
Signed-off-by: Martin Schurz <[email protected]>
2024-07-28 18:01:04 +02:00
Martin Schurz f7157dad4f Update to current Fedora releases
Signed-off-by: Martin Schurz <[email protected]>
2024-07-28 17:32:44 +02:00
dev-sec CI f1fc3986fe update changelog 2024-07-28 11:47:44 +00:00
schurzi 2ff44f2145 Prettified Code! 2024-07-28 11:45:51 +00:00
schurzi f1b0bed5c8 Merge pull request #782 from dev-sec/rem_dep
Remove deprecated rebuild of initrd
2024-07-28 13:45:39 +02:00
Martin Schurz f23d5d8eaf Remove deprecated rebuild of initrd
Signed-off-by: Martin Schurz <[email protected]>
2024-07-28 13:17:49 +02:00
dev-sec CI d92a1c9647 update changelog 2024-07-25 12:12:22 +00:00
renovate[bot] 95a6f9b2e1 chore(deps): update ansible/ansible-lint digest to 95382d3 (#779)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 14:09:49 +02:00
Sebastian Gumprich f1af4b7caa fix ansible-lint
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-07-25 13:09:28 +02:00
dev-sec CI d37a2e5345 update changelog 2024-07-25 10:54:47 +00:00
renovate[bot] 8b01afce46 chore(deps): update actions/setup-python digest to 39cd149 (#778)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 12:52:04 +02:00
dev-sec CI 237729a0c8 update changelog 2024-07-25 09:45:07 +00:00
schurzi 1c3f2418db Merge pull request #781 from dev-sec/renovate/patrickjahns-version-drafter-action-digest
chore(deps): update patrickjahns/version-drafter-action digest to 2076fa4
2024-07-25 11:41:56 +02:00
dev-sec CI 41d922c2d4 update changelog 2024-07-25 09:34:01 +00:00
renovate[bot] a91343e180 chore(deps): update patrickjahns/version-drafter-action digest to 2076fa4
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 09:31:39 +00:00
Martin Schurz ba1ab8fdfc fix release workflow
Signed-off-by: Martin Schurz <[email protected]>
2024-07-25 11:31:18 +02:00
Sebastian Gumprich 059f9fe96c try to fix release workflow
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-07-03 15:56:05 +02:00
Sebastian Gumprich d0d438faa4 try to fix release workflow
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-07-03 15:49:58 +02:00
Sevan 0233bfe543 Ensure that ssh is installed (#774)
Signed-off-by: Sevan Murriguian-Watrin <[email protected]>
2024-07-02 20:41:07 +02:00
dev-sec CI ed85a70105 update ssh_hardening readme 2024-07-02 16:20:50 +00:00
schurzi f9c8e4b749 Merge pull request #777 from dev-sec/fix_Bsd
remove tests for FreeBSD12 since it's out of support
2024-07-02 18:18:10 +02:00
Martin Schurz 77de9435fa remove freebsd12
Signed-off-by: Martin Schurz <[email protected]>
2024-07-02 17:31:22 +02:00
schurzi 7008a4b8ca Merge pull request #776 from dev-sec/renovate/pin-dependencies
chore(deps): pin dependencies
2024-06-25 13:09:14 +02:00
renovate[bot] 563f1833df chore(deps): pin dependencies
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-25 04:51:04 +00:00
schurzi 22e122ffdc Use best-practice preset for renovate (#775)
Signed-off-by: Martin Schurz <[email protected]>
2024-06-25 06:50:36 +02:00
dev-sec CI c068979b91 update os_hardening readme 2024-06-24 08:41:24 +00:00
dev-sec CI b705cd95dc update ssh_hardening readme 2024-06-24 08:41:00 +00:00
dev-sec CI 7f51a49265 update nginx_hardening readme 2024-06-24 08:40:57 +00:00
dev-sec CI aaaedee1cd update mysql_hardening readme 2024-06-24 08:40:50 +00:00
Sebastian Gumprich c02b5d9c3a add arg-spec for new variable ssh_server_service_enabled
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-06-24 10:28:53 +02:00
Sevan b0488e86d4 ssh: explicitly enable or disable the service at boot (#771)
Signed-off-by: Sevan Murriguian-Watrin <[email protected]>
2024-06-24 10:26:55 +02:00
Sebastian Gumprich 19ca997bd6 disable systemd socket activation (#769)
* disable systemd socket activation

Signed-off-by: Sebastian Gumprich <[email protected]>

* move start to after deactivation so it can start

---------

Signed-off-by: Sebastian Gumprich <[email protected]>
2024-06-18 15:56:09 +02:00
dev-sec CI 8dab761c52 update changelog 2024-06-04 08:19:05 +00:00
rndmh3ro 26ecb3f5ea Prettified Code! 2024-06-04 08:16:33 +00:00
Sebastian Gumprich 60de0ab50b centos8 stream is eol (#770)
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-06-04 10:10:19 +02:00
dev-sec CI 265802360c update changelog 2024-05-31 10:22:20 +00:00
dev-sec CI b0f968af21 update nginx_hardening readme 2024-05-31 10:21:00 +00:00
Sebastian Gumprich 85aa1b22b3 do not force type of ssh_gateway_ports (#765)
* do not force type of gatewayports-var

this way it can be a bool or a string. we also now test for it

Signed-off-by: Sebastian Gumprich <[email protected]>

* replace yum with dnf

Signed-off-by: Sebastian Gumprich <[email protected]>

---------

Signed-off-by: Sebastian Gumprich <[email protected]>
2024-05-31 12:20:00 +02:00
dev-sec CI 4af40129c6 update ssh_hardening readme 2024-05-31 09:42:36 +00:00
dev-sec CI eb972f63f7 update os_hardening readme 2024-05-31 09:42:33 +00:00
dev-sec CI b6be42c3a0 update mysql_hardening readme 2024-05-31 09:42:13 +00:00
Sebastian Gumprich 296f46cc80 centos7 is eol, remove it (#767)
* centos7 is eol, remove it

Signed-off-by: Sebastian Gumprich <[email protected]>

* change workflow to update readmes when meta/main.yml is changed

Signed-off-by: Sebastian Gumprich <[email protected]>

* remove mention of centos 7 from readme

Signed-off-by: Sebastian Gumprich <[email protected]>

---------

Signed-off-by: Sebastian Gumprich <[email protected]>
2024-05-31 11:25:01 +02:00
dev-sec CI 541c2df1ab update changelog 2024-05-31 09:07:00 +00:00
schurzi 2959a584a8 Merge pull request #766 from dev-sec/codespell
fix spelling
2024-05-31 10:55:45 +02:00
Sebastian Gumprich 346ead4455 fix spelling
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-05-30 15:07:27 +02:00
Sebastian Gumprich f3a1fcc16a fix spelling
Signed-off-by: Sebastian Gumprich <[email protected]>
2024-05-30 15:01:33 +02:00
86 changed files with 843 additions and 690 deletions

No files matched your search

+1
View File
@@ -43,6 +43,7 @@ output_template: |
```
- hosts: all
become: true
roles:
- name: {{ role }}
```
+1 -1
View File
@@ -5,9 +5,9 @@
# option will be parsed relative to the CWD of execution.
exclude_paths:
- .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
- molecule/os_hardening/waivers.yaml
- molecule/ssh_hardening_bsd/waivers_freebsd12.yaml
- molecule/ssh_hardening_bsd/waivers_freebsd13.yaml
- molecule/ssh_hardening_bsd/waivers_freebsd14.yaml
- molecule/ssh_hardening_bsd/waivers_openbsd7.yaml
+3
View File
@@ -0,0 +1,3 @@
major-labels: ['major']
minor-labels: ['minor', 'enhancement']
patch-labels: ['patch', 'bug']
+3 -3
View File
@@ -23,10 +23,10 @@ on: # yamllint disable-line rule:truthy
jobs:
ansible-lint:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Lint Ansible Playbook
uses: ansible/ansible-lint@v24
uses: ansible/ansible-lint@9cf49a01ac6b34f45aab16f0bbac1196fcd681e5 # v25
+1 -1
View File
@@ -11,4 +11,4 @@ jobs:
codespell:
uses: "dev-sec/.github/.github/workflows/codespell.yml@main"
with:
ignore_words_list: "chage"
ignore_words_list: "chage,BOOTUP"
+2 -2
View File
@@ -12,8 +12,8 @@ permissions:
jobs:
enforce-label:
if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/[email protected]
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
+6 -6
View File
@@ -9,32 +9,32 @@ on: # yamllint disable-line rule:truthy
jobs:
deploy:
if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
# deploy the collection first, because if it fails, we don't want
# to update the galaxy.yml
- name: Deploy the collection
uses: artis3n/ansible_galaxy_collection@v2
uses: artis3n/ansible_galaxy_collection@3368f56529a2ef47ef0ac1ecfcda039f90d0174a # v2
with:
api_key: ${{ secrets.GALAXY_API_KEY }}
galaxy_version: ${{ github.event.release.tag_name }}
# checkout master instead of the release-tag so we can push the galaxy.yml
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
ref: master
- name: update galaxy.yml with new version
uses: microsoft/variable-substitution@v1
uses: microsoft/variable-substitution@6287962da9e5b6e68778dc51e840caa03ca84495 # v1
with:
files: 'galaxy.yml'
env:
version: "${{ github.event.release.tag_name }}"
- name: push galaxy.yml
uses: github-actions-x/[email protected]
uses: github-actions-x/commit@722d56b8968bf00ced78407bbe2ead81062d8baa # v2.9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
push-branch: 'master'
+12 -14
View File
@@ -29,7 +29,7 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
env:
PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1
@@ -37,15 +37,12 @@ jobs:
fail-fast: false
matrix:
molecule_distro:
- centos7
- centosstream8
- centosstream9
- rocky8
- rocky9
- ubuntu1804
- ubuntu2004
- ubuntu2204
- debian10
- ubuntu2404
- debian11
- debian12
# - amazon # geerlingguy.mysql does not support fedora
@@ -54,23 +51,26 @@ jobs:
# - fedora # geerlingguy.mysql does not support fedora
steps:
- name: Checkout repo
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: ansible_collections/devsec/hardening
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5
with:
python-version: 3.12
cache: 'pip'
- name: Install dependencies
run: |
sudo apt install git
python -m pip install --no-cache-dir --upgrade pip
pip install -r requirements.txt
run: pip install -r requirements.txt
working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17"
working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8'
# that was a hard one to fix. robert did it thankfully
# https://github.com/robertdebock/ansible-role-mysql/commit/7562e99099b06282391ab7ed102b393a0406d212
- name: disable apparmor on debian systems
@@ -93,9 +93,7 @@ jobs:
/home/runner/.ansible/roles
- name: Test with molecule
run: |
molecule --version
molecule test -s mysql_hardening
run: molecule test -s mysql_hardening
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
working-directory: ansible_collections/devsec/hardening
+12 -14
View File
@@ -28,7 +28,7 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
env:
PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1
@@ -36,15 +36,12 @@ jobs:
fail-fast: false
matrix:
molecule_distro:
- centos7
- centosstream8
- centosstream9
- rocky8
- rocky9
- ubuntu1804
- ubuntu2004
- ubuntu2204
- debian10
- ubuntu2404
- debian11
- debian12
- amazon2023
@@ -53,23 +50,26 @@ jobs:
# - fedora # no support from geerlingguy role
steps:
- name: Checkout repo
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: ansible_collections/devsec/hardening
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5
with:
python-version: 3.12
cache: 'pip'
- name: Install dependencies
run: |
sudo apt install git
python -m pip install --no-cache-dir --upgrade pip
pip install -r requirements.txt
run: pip install -r requirements.txt
working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17"
working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8'
# Molecule has problems detecting the proper location for installing roles
# https://github.com/ansible/molecule/issues/3806
# we do not set a custom role path, but the automatically determined install path used is not compatible with the location molecule expects the role
@@ -82,9 +82,7 @@ jobs:
/home/runner/.ansible/roles
- name: Test with molecule
run: |
molecule --version
molecule test -s nginx_hardening
run: molecule test -s nginx_hardening
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
working-directory: ansible_collections/devsec/hardening
+19 -19
View File
@@ -28,56 +28,56 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
env:
PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1
strategy:
fail-fast: false
matrix:
include:
- molecule_distro: opensuse_tumbleweed
molecule_docker_command: "/usr/lib/systemd/systemd"
molecule_distro:
- centos7
- centosstream8
- centosstream9
- rocky8
- rocky9
- fedora38
- fedora39
- ubuntu1804
- fedora40
- ubuntu2004
- ubuntu2204
- debian10
- ubuntu2404
- debian11
- debian12
- amazon2023
- opensuse_tumbleweed
- arch
molecule_docker_command:
- "/lib/systemd/systemd"
steps:
- name: Checkout repo
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: ansible_collections/devsec/hardening
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5
with:
python-version: 3.12
cache: 'pip'
- name: Install dependencies
run: |
sudo apt install git
python -m pip install --no-cache-dir --upgrade pip
pip install -r requirements.txt
run: pip install -r requirements.txt
working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17"
working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8'
- name: Test with molecule
run: |
if [ "$MOLECULE_DISTRO" = "opensuse_tumbleweed" ]; then
export MOLECULE_DOCKER_COMMAND="/usr/lib/systemd/systemd"
fi
molecule --version
molecule test -s os_hardening
run: molecule test -s os_hardening
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
MOLECULE_DOCKER_COMMAND: ${{ matrix.molecule_docker_command }}
working-directory: ansible_collections/devsec/hardening
+19 -7
View File
@@ -36,35 +36,47 @@ jobs:
fail-fast: false
matrix:
molecule_distro:
- generic/centos7
- generic/centos8s
- generic/centos9s
- generic/rocky8
- generic/rocky9
- fedora/38-cloud-base
- fedora/39-cloud-base
- generic/ubuntu1804
- fedora/40-cloud-base
- generic/ubuntu2004
- generic/ubuntu2204
- generic/debian10
- alvistack/ubuntu-24.04
- generic/debian11
- generic/debian12
- generic/opensuse15
- generic/arch
steps:
- name: Checkout repo
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
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 python-vagrant
working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests
run: |
source ~/.venv/ansible-collection-hardening/bin/activate
pip install "ansible-core<2.17"
working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'generic/rocky8' || matrix.molecule_distro == 'generic/opensuse15'
- name: Update Vagrant Box
run: |
vagrant box update --box ${{ matrix.molecule_distro }} || true
- name: Test with molecule
run: |
molecule --version
source ~/.venv/ansible-collection-hardening/bin/activate
molecule test -s os_hardening_vm
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
+3 -3
View File
@@ -11,16 +11,16 @@ on: # yamllint disable-line rule:truthy
jobs:
prettier-md:
if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 1
steps:
- name: Git checkout
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
ref: ${{ github.head_ref }}
- name: Prettify code
uses: creyD/[email protected]
uses: creyD/prettier_action@31355f8eef017f8aeba2e0bc09d8502b13dbbad1 # v4.3
with:
prettier_options: --write {**/*,*}.md
+9 -9
View File
@@ -11,9 +11,9 @@ jobs:
generate_changelog:
name: create release draft
if: github.repository == 'dev-sec/ansible-collection-hardening'
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
ref: master
@@ -26,23 +26,23 @@ jobs:
- name: calculate next version
id: version
uses: patrickjahns/version-drafter-action@v1
uses: patrickjahns/version-drafter-action@2076fa43abb28f31d0e8b0890253fbd1d1a966fc # v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Generate changelog
uses: charmixer/auto-changelog-action@v1
uses: charmixer/auto-changelog-action@b25e89c9410e03189f0d48b02b3a8caad6e78015 # v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
future_release: ${{ steps.version.outputs.next-version }}
# this excludes all versions prior to the collection-release
# since they break the changelog generation with the error:
# "No common ancestor between ... and $version"
exclude_tags_regex: '[0-6]\.\d\.\d'
exclude_tags_regex: '^[0-6]\.\d\.\d'
issue_line_labels: mysql_hardening,os_hardening,ssh_hardening,nginx_hardening
- name: push changelog
uses: github-actions-x/[email protected]
uses: github-actions-x/commit@722d56b8968bf00ced78407bbe2ead81062d8baa # v2.9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
push-branch: 'master'
@@ -58,18 +58,18 @@ jobs:
- name: Read CHANGELOG.md
id: package
uses: juliangruber/read-file-action@v1
uses: juliangruber/read-file-action@b549046febe0fe86f8cb4f93c24e284433f9ab58 # v1
with:
path: ./CHANGELOGRELEASE.md
- name: Delete old drafts
uses: hugo19941994/[email protected]
uses: hugo19941994/delete-draft-releases@1bdca1ea7ffb25ae7f468a7bdb40056dae98175e # v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release draft
id: create_release
uses: actions/create-release@v1
uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
+12 -8
View File
@@ -6,15 +6,18 @@ on: # yamllint disable-line rule:truthy
branches: [master]
paths:
- 'roles/**/meta/argument_specs.yml'
- 'roles/**/meta/main.yml'
pull_request:
branches: [master]
paths:
- 'roles/**/meta/argument_specs.yml'
- 'roles/**/meta/main.yml'
- 'requirements.txt'
jobs:
readme:
name: create roles readme
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
strategy:
matrix:
roles:
@@ -24,25 +27,26 @@ jobs:
- ssh_hardening
steps:
- name: Check out code
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5
with:
python-version: 3.12
cache: 'pip'
- name: Install aar_doc
run: pip3 install aar_doc
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run aar_doc
run: aar_doc roles/${{ matrix.roles }} markdown
- name: Run aar-doc
run: aar-doc roles/${{ matrix.roles }} markdown
- name: Output diff
run: git diff roles/${{ matrix.roles }}/README.md
- name: Push README
if: github.event_name != 'pull_request'
uses: github-actions-x/[email protected]
uses: github-actions-x/commit@722d56b8968bf00ced78407bbe2ead81062d8baa # v2.9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
commit-message: 'update ${{ matrix.roles }} readme'
+22 -19
View File
@@ -28,56 +28,59 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
env:
PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1
strategy:
fail-fast: false
matrix:
include:
# needs fix - opensuse has different file location for conf and pam (/usr/etc/ssh/?, /usr/lib/pam.d/?)
# - molecule_distro: opensuse_tumbleweed
# molecule_docker_command: "/usr/lib/systemd/systemd"
- molecule_distro: alpine
molecule_docker_command: "/sbin/init"
molecule_distro:
- centos7
- centosstream8
- centosstream9
- rocky8
- rocky9
- fedora38
- fedora39
- ubuntu1804
- fedora40
- ubuntu2004
- ubuntu2204
- debian10
- ubuntu2404
- debian11
- debian12
- amazon2023
- arch
# - opensuse_tumbleweed # needs fix - opensuse has different file location for conf and pam (/usr/etc/ssh/?, /usr/lib/pam.d/?)
molecule_docker_command:
- "/lib/systemd/systemd"
steps:
- name: Checkout repo
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: ansible_collections/devsec/hardening
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5
with:
python-version: 3.12
cache: 'pip'
- name: Install dependencies
run: |
sudo apt install git
python -m pip install --no-cache-dir --upgrade pip
pip install -r requirements.txt
run: pip install -r requirements.txt
working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17"
working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8'
- name: Test with molecule
run: |
if [ "$MOLECULE_DISTRO" = "opensuse_tumbleweed" ]; then
export MOLECULE_DOCKER_COMMAND="/usr/lib/systemd/systemd"
fi
molecule --version
molecule test -s ssh_hardening
run: molecule test -s ssh_hardening
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
MOLECULE_DOCKER_COMMAND: ${{ matrix.molecule_docker_command }}
working-directory: ansible_collections/devsec/hardening
+3 -7
View File
@@ -37,24 +37,20 @@ jobs:
matrix:
molecule_distro:
- openbsd7
- freebsd12
- freebsd13
- freebsd14
steps:
- name: Checkout repo
uses: actions/checkout@v4
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
run: vagrant box update --box generic/${{ matrix.molecule_distro }} || true
- name: Test with molecule
run: |
molecule --version
molecule test -s ssh_hardening_bsd
run: molecule test -s ssh_hardening_bsd
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
working-directory: ansible_collections/devsec/hardening
@@ -28,56 +28,59 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
env:
PY_COLORS: 1
ANSIBLE_FORCE_COLOR: 1
strategy:
fail-fast: false
matrix:
include:
# needs fix - opensuse has different file location for conf and pam (/usr/etc/ssh/?, /usr/lib/pam.d/?)
# - molecule_distro: opensuse_tumbleweed
# molecule_docker_command: "/usr/lib/systemd/systemd"
- molecule_distro: alpine
molecule_docker_command: "/sbin/init"
molecule_distro:
- centos7
- centosstream8
- centosstream9
- rocky8
- rocky9
- fedora38
- fedora39
- ubuntu1804
- fedora40
- ubuntu2004
- ubuntu2204
- debian10
- ubuntu2404
- debian11
- debian12
- amazon2023
- arch
# - opensuse_tumbleweed # needs fix - opensuse has different file location for conf and pam (/usr/etc/ssh/?, /usr/lib/pam.d/?)
molecule_docker_command:
- "/lib/systemd/systemd"
steps:
- name: Checkout repo
uses: actions/checkout@v4
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: ansible_collections/devsec/hardening
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5
with:
python-version: 3.12
cache: 'pip'
- name: Install dependencies
run: |
sudo apt install git
python -m pip install --no-cache-dir --upgrade pip
pip install -r requirements.txt
run: pip install -r requirements.txt
working-directory: ansible_collections/devsec/hardening
- name: Downgrade Ansible for Rocky 8 tests
run: pip install "ansible-core<2.17"
working-directory: ansible_collections/devsec/hardening
if: matrix.molecule_distro == 'rocky8'
- name: Test with molecule
run: |
if [ "$MOLECULE_DISTRO" = "opensuse_tumbleweed" ]; then
export MOLECULE_DOCKER_COMMAND="/usr/lib/systemd/systemd"
fi
molecule --version
molecule converge -s ssh_hardening_custom_tests
run: molecule test -s ssh_hardening_custom_tests
env:
MOLECULE_DISTRO: ${{ matrix.molecule_distro }}
MOLECULE_DOCKER_COMMAND: ${{ matrix.molecule_docker_command }}
working-directory: ansible_collections/devsec/hardening
+110 -3
View File
@@ -1,25 +1,132 @@
# Changelog
## [9.0.2](https://github.com/dev-sec/ansible-collection-hardening/tree/9.0.2) (2024-05-09)
## [10.2.1](https://github.com/dev-sec/ansible-collection-hardening/tree/10.2.1) (2025-02-08)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/9.0.1...9.0.2)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.2.0...10.2.1)
**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)
**Closed issues:**
- os\_hardening & sysctl\_overwrite with host\_vars [\#837](https://github.com/dev-sec/ansible-collection-hardening/issues/837)
**Merged pull requests:**
- 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)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.1.0...10.2.0)
**Implemented enhancements:**
- 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) [[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))
**Fixed bugs:**
- 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)]
- 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)]
**Merged pull requests:**
- chore\(deps\): update dependency molecule-plugins to v23.6.0 [\#834](https://github.com/dev-sec/ansible-collection-hardening/pull/834) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 4ce8e49 [\#832](https://github.com/dev-sec/ansible-collection-hardening/pull/832) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency molecule to v24.12.0 [\#831](https://github.com/dev-sec/ansible-collection-hardening/pull/831) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency ansible-core to v2.18.1 [\#829](https://github.com/dev-sec/ansible-collection-hardening/pull/829) ([renovate[bot]](https://github.com/apps/renovate))
- Change installation source for OpenBSD tests [\#828](https://github.com/dev-sec/ansible-collection-hardening/pull/828) ([schurzi](https://github.com/schurzi))
- chore\(deps\): update ansible/ansible-lint digest to 44be233 [\#825](https://github.com/dev-sec/ansible-collection-hardening/pull/825) ([renovate[bot]](https://github.com/apps/renovate))
- Bump ansible-core from 2.17.5 to 2.17.6 [\#820](https://github.com/dev-sec/ansible-collection-hardening/pull/820) ([dependabot[bot]](https://github.com/apps/dependabot))
- chore\(deps\): update dependency ansible-core to v2.18.0 [\#819](https://github.com/dev-sec/ansible-collection-hardening/pull/819) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency aar-doc to v2.0.1 [\#817](https://github.com/dev-sec/ansible-collection-hardening/pull/817) ([renovate[bot]](https://github.com/apps/renovate))
- Update actions/setup-python digest to 0b93645 [\#814](https://github.com/dev-sec/ansible-collection-hardening/pull/814) [[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 digest to 11bd719 [\#812](https://github.com/dev-sec/ansible-collection-hardening/pull/812) [[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.1.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.1.0) (2024-10-22)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/10.0.0...10.1.0)
**Implemented enhancements:**
- Ubuntu 24.04 support [\#764](https://github.com/dev-sec/ansible-collection-hardening/issues/764)
- Add variable to set name\_format for auditd [\#810](https://github.com/dev-sec/ansible-collection-hardening/pull/810) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
- feat\(ssh\): add alpine support [\#809](https://github.com/dev-sec/ansible-collection-hardening/pull/809) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
- Provide granular noop for ssh configuration [\#789](https://github.com/dev-sec/ansible-collection-hardening/pull/789) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([seven-beep](https://github.com/seven-beep))
**Fixed bugs:**
- molecule scenario ssh\_hardening if failing due to missing docker image [\#790](https://github.com/dev-sec/ansible-collection-hardening/issues/790)
- getent\_shadow empty [\#787](https://github.com/dev-sec/ansible-collection-hardening/issues/787)
- Error: Missing privilege separation directory: /run/sshd [\#752](https://github.com/dev-sec/ansible-collection-hardening/issues/752)
- fix\(ssh\_hardening\): test setting kex to false, remove wrong default [\#808](https://github.com/dev-sec/ansible-collection-hardening/pull/808) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
**Merged pull requests:**
- Pin python dependencies and optimize GitHub Actions [\#811](https://github.com/dev-sec/ansible-collection-hardening/pull/811) [[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))
- fix\(cicd\): test idempotence on ssh custom tests [\#807](https://github.com/dev-sec/ansible-collection-hardening/pull/807) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
- Document correct quotes for ssh\_permit\_tunnel parameter [\#806](https://github.com/dev-sec/ansible-collection-hardening/pull/806) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([vmpr](https://github.com/vmpr))
- fix\(docs\): add 'become: true' to example playbooks. fix \#787 [\#804](https://github.com/dev-sec/ansible-collection-hardening/pull/804) [[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)] ([rndmh3ro](https://github.com/rndmh3ro))
- chore\(deps\): update dependency ansible-core to v2.17.5 [\#802](https://github.com/dev-sec/ansible-collection-hardening/pull/802) ([renovate[bot]](https://github.com/apps/renovate))
- Don't run tests if the environment is not correct [\#801](https://github.com/dev-sec/ansible-collection-hardening/pull/801) [[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 actions/checkout digest to eef6144 [\#800](https://github.com/dev-sec/ansible-collection-hardening/pull/800) [[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))
- feat: Corrected package name [\#799](https://github.com/dev-sec/ansible-collection-hardening/pull/799) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([PapaPeskwo](https://github.com/PapaPeskwo))
- Use Python venv for VM tests [\#798](https://github.com/dev-sec/ansible-collection-hardening/pull/798) ([schurzi](https://github.com/schurzi))
- Remove unused files and variables [\#797](https://github.com/dev-sec/ansible-collection-hardening/pull/797) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
- chore\(deps\): update ansible/ansible-lint digest to 3b5bee1 [\#795](https://github.com/dev-sec/ansible-collection-hardening/pull/795) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 25f783c [\#792](https://github.com/dev-sec/ansible-collection-hardening/pull/792) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency ansible-core to v2.17.4 [\#791](https://github.com/dev-sec/ansible-collection-hardening/pull/791) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/setup-python digest to f677139 [\#788](https://github.com/dev-sec/ansible-collection-hardening/pull/788) [[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.17.3 [\#786](https://github.com/dev-sec/ansible-collection-hardening/pull/786) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency ansible-core to v2.17.2 [\#756](https://github.com/dev-sec/ansible-collection-hardening/pull/756) [[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.0.0](https://github.com/dev-sec/ansible-collection-hardening/tree/10.0.0) (2024-08-06)
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/9.0.1...10.0.0)
**Implemented enhancements:**
- option to disable regeneration of ssh private key [\#772](https://github.com/dev-sec/ansible-collection-hardening/issues/772)
- Support systemd socket activation for sshd [\#763](https://github.com/dev-sec/ansible-collection-hardening/issues/763) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)]
- Release 9.0.2 [\#758](https://github.com/dev-sec/ansible-collection-hardening/issues/758)
- Make Publickey authentication configurable [\#750](https://github.com/dev-sec/ansible-collection-hardening/issues/750)
- Ansible Linting [\#747](https://github.com/dev-sec/ansible-collection-hardening/issues/747)
- Make value of kernel.unprivileged\_userns\_clone depending on kernel version [\#727](https://github.com/dev-sec/ansible-collection-hardening/issues/727)
- Ensure that ssh is installed \(cf \#771\) [\#774](https://github.com/dev-sec/ansible-collection-hardening/pull/774) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([Byh0ki](https://github.com/Byh0ki))
- ssh: explicitly enable or disable the service at boot [\#771](https://github.com/dev-sec/ansible-collection-hardening/pull/771) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([Byh0ki](https://github.com/Byh0ki))
- disable systemd socket activation [\#769](https://github.com/dev-sec/ansible-collection-hardening/pull/769) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
- Add ssh\_pubkey\_authentication variable to ssh hardening [\#749](https://github.com/dev-sec/ansible-collection-hardening/pull/749) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([debbabi](https://github.com/debbabi))
**Fixed bugs:**
- ssh hardening role fails when `ssh_permit_root_login` var is set on ubuntu 24.04 [\#768](https://github.com/dev-sec/ansible-collection-hardening/issues/768)
- os\_hardening fails when setting vm.mmap\_rnd\_bits [\#757](https://github.com/dev-sec/ansible-collection-hardening/issues/757)
- Error: Missing privilege separation directory: /run/sshd [\#752](https://github.com/dev-sec/ansible-collection-hardening/issues/752)
- `ssh_gateway_ports` is documented to accept 'clientspecified' string, but only accepts bools [\#755](https://github.com/dev-sec/ansible-collection-hardening/issues/755)
- harden permissions for directory mount /var/log fails for minimized Ubuntu 22.04 [\#741](https://github.com/dev-sec/ansible-collection-hardening/issues/741)
- Update Debian compatibility [\#784](https://github.com/dev-sec/ansible-collection-hardening/pull/784) [[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))
- do not force type of ssh\_gateway\_ports [\#765](https://github.com/dev-sec/ansible-collection-hardening/pull/765) [[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)] ([rndmh3ro](https://github.com/rndmh3ro))
**Merged pull requests:**
- Update to current Fedora releases [\#783](https://github.com/dev-sec/ansible-collection-hardening/pull/783) [[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)] ([schurzi](https://github.com/schurzi))
- Remove deprecated rebuild of initrd [\#782](https://github.com/dev-sec/ansible-collection-hardening/pull/782) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
- chore\(deps\): update patrickjahns/version-drafter-action digest to 2076fa4 [\#781](https://github.com/dev-sec/ansible-collection-hardening/pull/781) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update ansible/ansible-lint digest to 95382d3 [\#779](https://github.com/dev-sec/ansible-collection-hardening/pull/779) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update actions/setup-python digest to 39cd149 [\#778](https://github.com/dev-sec/ansible-collection-hardening/pull/778) [[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))
- remove tests for FreeBSD12 since it's out of support [\#777](https://github.com/dev-sec/ansible-collection-hardening/pull/777) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([schurzi](https://github.com/schurzi))
- chore\(deps\): pin dependencies [\#776](https://github.com/dev-sec/ansible-collection-hardening/pull/776) [[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))
- Use best-practice preset for renovate [\#775](https://github.com/dev-sec/ansible-collection-hardening/pull/775) ([schurzi](https://github.com/schurzi))
- Deprecate Centos Stream 8 [\#770](https://github.com/dev-sec/ansible-collection-hardening/pull/770) [[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)] ([rndmh3ro](https://github.com/rndmh3ro))
- centos7 is eol, remove it [\#767](https://github.com/dev-sec/ansible-collection-hardening/pull/767) [[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)] ([rndmh3ro](https://github.com/rndmh3ro))
- fix spelling [\#766](https://github.com/dev-sec/ansible-collection-hardening/pull/766) [[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)] ([rndmh3ro](https://github.com/rndmh3ro))
- ci: define permissions for enforce-labels workflow [\#760](https://github.com/dev-sec/ansible-collection-hardening/pull/760) ([fgreinacher](https://github.com/fgreinacher))
- Update dependency ansible-core to v2.16.5 [\#754](https://github.com/dev-sec/ansible-collection-hardening/pull/754) ([renovate[bot]](https://github.com/apps/renovate))
- Update dependency ansible-core to v2.16.4 [\#751](https://github.com/dev-sec/ansible-collection-hardening/pull/751) ([renovate[bot]](https://github.com/apps/renovate))
+15
View File
@@ -93,6 +93,21 @@ We generally include test for coding guidelines:
Remember: Code is generally read much more often than written.
### Local testing of roles in this collection
We are using Molecule to test our roles.
If you want to execute the tests on your machine you need Docker and Molecule.
You will also need to set the `MOLECULE_DISTRO` environment variable to execute the tests.
To find valid values for the variable you can take a look at our GitHub Action workflows in `.github/workflows/`.
Example for executing tests locally:
```bash
pip install -r requirements.txt
export MOLECULE_DISTRO="debian12"
molecule test -s os_hardening
```
### Use Markdown
Wherever possible, please refrain from any other formats and stick to simple markdown.
+4 -4
View File
@@ -13,13 +13,13 @@
This collection provides battle tested hardening for:
- Linux operating systems:
- CentOS 7/8/9
- CentOS 9
- Rocky Linux 8/9
- Debian 10/11/12
- Ubuntu 18.04/20.04/22.04
- Debian 11/12
- Ubuntu 20.04/22.04/24.04
- Amazon Linux (some roles supported)
- Arch Linux (some roles supported)
- Fedora 37/38 (some roles supported)
- Fedora 39/40 (some roles supported)
- Suse Tumbleweed (some roles supported)
- MySQL
- MariaDB >= 5.5.65, >= 10.1.45, >= 10.3.17
+1 -1
View File
@@ -1,6 +1,6 @@
namespace: devsec
name: hardening
version: 9.0.1
version: 10.2.0
readme: README.md
authors:
- dev-sec <[email protected]>
+2
View File
@@ -33,6 +33,7 @@ scenario:
- prepare
check_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- create
- prepare
@@ -48,6 +49,7 @@ scenario:
- destroy
test_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- syntax
- create
+2 -9
View File
@@ -26,13 +26,6 @@
when:
- ansible_os_family == 'Suse'
- name: Use Python 2 on Debian 10
ansible.builtin.set_fact:
ansible_python_interpreter: /usr/bin/python
when:
- ansible_distribution == 'Debian'
- ansible_distribution_major_version|int == 10
- name: Run the equivalent of "apt-get update && apt-get upgrade"
ansible.builtin.apt:
upgrade: safe
@@ -40,7 +33,7 @@
when: ansible_os_family == 'Debian'
- 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
when: ansible_os_family == 'Suse'
@@ -67,7 +60,7 @@
- ansible_distribution_major_version|int < 20
- name: Install required MySQL Python libraries on RHEL
ansible.builtin.yum:
ansible.builtin.dnf:
name: "{% if 'python3' in ansible_python_interpreter | default('') %}python36-PyMySQL{% else %}python2-PyMySQL{% endif %}"
when:
- ansible_os_family == "RedHat"
+2
View File
@@ -32,6 +32,7 @@ scenario:
- prepare
check_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- create
- prepare
@@ -47,6 +48,7 @@ scenario:
- destroy
test_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- syntax
- create
-6
View File
@@ -7,12 +7,6 @@
https_proxy: "{{ lookup('env', 'https_proxy') | default(omit) }}"
no_proxy: "{{ lookup('env', 'no_proxy') | default(omit) }}"
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
ansible.builtin.package:
name: python3-apt
+1 -2
View File
@@ -16,11 +16,10 @@
vars:
os_security_users_allow: change_user
os_security_kernel_enable_core_dump: false
os_auditd_num_logs: 10
os_auditd_enabled: false
os_security_suid_sgid_remove_from_unknown: true
os_auth_pam_passwdqc_enable: false
os_auth_lockout_time: 15
os_desktop_enable: true
os_env_extra_user_paths: [/home]
os_auth_allow_homeless: true
os_security_suid_sgid_blacklist: [/bin/umount]
+2
View File
@@ -28,6 +28,7 @@ scenario:
- prepare
check_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- create
- prepare
@@ -43,6 +44,7 @@ scenario:
- destroy
test_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- syntax
- create
+2 -2
View File
@@ -20,7 +20,7 @@
- name: Install required tools on SuSE
# 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
when: ansible_facts.os_family == 'Suse'
@@ -41,7 +41,7 @@
when: ansible_facts.os_family == 'Archlinux'
- name: Install required tools on RHEL # noqa ignore-errors
ansible.builtin.yum:
ansible.builtin.dnf:
name:
- openssh-clients
- openssh
+4 -1
View File
@@ -20,6 +20,7 @@
- verify_tasks/pw_ageing.yml
- verify_tasks/netrc.yml
- verify_tasks/ignore_home_folders.yml
- verify_tasks/ssh_auth_locked.yml
# temp. disabled - https://github.com/dev-sec/ansible-collection-hardening/issues/690
# - name: Include PAM tests
@@ -67,12 +68,14 @@
http_proxy: "{{ lookup('env', 'http_proxy') | default(omit) }}"
https_proxy: "{{ lookup('env', 'https_proxy') | default(omit) }}"
no_proxy: "{{ lookup('env', 'no_proxy') | default(omit) }}"
vars:
os_auditd_enabled: false
os_env_umask: "027 #override"
tasks:
# test if variable can be overridden
- name: Workaround for https://github.com/ansible/ansible/issues/66304
ansible.builtin.set_fact:
ansible_virtualization_type: docker
os_env_umask: "027 #override"
- name: Include os_hardening role
ansible.builtin.include_role:
@@ -0,0 +1,90 @@
---
- name: Install tools
package:
name: "{{ item }}"
state: present
ignore_errors: true
loop:
- sshpass
- openssh
- openssh-clients
- openssh-server
- name: Allow password Login for sshd
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
search_string: PasswordAuthentication no
line: PasswordAuthentication yes
when:
- ansible_facts.distribution == "Amazon"
- name: Start sshd service
ansible.builtin.service:
name: "{{ item }}"
state: started
ignore_errors: true
loop:
- sshd
- ssh
- name: Set password for test
ansible.builtin.set_fact:
test_pw: myTest!pw
- name: Create locked_user
user:
name: locked_user
password: "{{ test_pw | password_hash('sha512') }}"
- name: Create ssh-client-keypair
community.crypto.openssh_keypair:
path: /root/locked_user_id
type: ed25519
state: present
register: generated_key
- name: Add ssh-public-key to locked_user
ansible.posix.authorized_key:
user: locked_user
key: "{{ generated_key.public_key }}"
state: present
- name: Check successful login with password
ansible.builtin.shell:
cmd: sshpass -p {{ test_pw }} ssh -o StrictHostKeyChecking=no locked_user@localhost echo "success"
- name: Check successful login with ssh key
ansible.builtin.shell:
cmd: ssh -i /root/locked_user_id -o StrictHostKeyChecking=no locked_user@localhost echo "success"
- name: Set password change date for locked_user
ansible.builtin.shell:
cmd: chage -d 2020-01-01 locked_user
- name: Check unsuccessful login with password
ansible.builtin.shell:
cmd: sshpass -p {{ test_pw }} ssh -o StrictHostKeyChecking=no locked_user@localhost echo "success"
register: output
ignore_errors: true
- name: Assert check unsuccessful login
ansible.builtin.assert:
that:
- output.rc | int == 1
- "'WARNING: Your password has expired.' in output.stderr"
- "'success' not in output.stdout"
when:
- ansible_facts.os_family != "Suse"
- name: Assert check unsuccessful login
ansible.builtin.assert:
that:
- output.rc | int == 5
- output.stderr | length == 0
- output.stdout | length == 0
when:
- ansible_facts.os_family == "Suse"
- name: Check successful login with ssh key
ansible.builtin.shell:
cmd: ssh -i /root/locked_user_id -o StrictHostKeyChecking=no locked_user@localhost echo "success"
+12
View File
@@ -14,12 +14,24 @@
os_mnt_tmp_src: tmpfs
os_mnt_tmp_filesystem: tmpfs
when: ansible_facts.os_family == 'Archlinux'
- name: Overrides for Fedora image
ansible.builtin.set_fact:
os_mnt_tmp_enabled: true
os_mnt_tmp_src: tmpfs
os_mnt_tmp_filesystem: tmpfs
when: ansible_facts.distribution == 'Fedora'
- name: Overrides for Fedora 40 image
ansible.builtin.set_fact:
os_mnt_var_enabled: true
os_mnt_var_src: UUID=282c6d73-afc2-4113-9856-c7679ad51920
os_mnt_var_filesystem: btrfs
os_mnt_var_options: rw,nosuid,nodev,compress=zstd:1,subvol=var
when:
- ansible_facts.distribution == 'Fedora'
- ansible_distribution_major_version|int == 40
- name: Include os_hardening role
ansible.builtin.include_role:
name: devsec.hardening.os_hardening
+2
View File
@@ -37,6 +37,7 @@ scenario:
- prepare
check_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- create
- prepare
@@ -52,6 +53,7 @@ scenario:
- destroy
test_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- syntax
- create
+2 -7
View File
@@ -50,18 +50,13 @@
update_cache: true
when: ansible_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
ansible.builtin.dnf:
name:
- python
- findutils
- procps-ng
- python3-libselinux
when: ansible_facts.distribution == 'Fedora'
- name: Install required tools on Arch
@@ -73,7 +68,7 @@
when: ansible_facts.os_family == 'Archlinux'
- name: Install required tools on RHEL # noqa ignore-errors
ansible.builtin.yum:
ansible.builtin.dnf:
name:
- openssh-clients
- openssh
+9
View File
@@ -0,0 +1,9 @@
---
- name: Verify prerequisites
hosts: localhost
tasks:
- name: Make sure environment variable for MOLECULE_DISTRO is set
ansible.builtin.assert:
that:
- "lookup('env','MOLECULE_DISTRO')"
fail_msg: "You need to set MOLECULE_DISTRO to a supported image name. See CONTRIBUTING.md"
+2
View File
@@ -34,6 +34,7 @@ scenario:
- prepare
check_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- create
- prepare
@@ -49,6 +50,7 @@ scenario:
- destroy
test_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- syntax
- create
+10 -8
View File
@@ -1,5 +1,5 @@
---
- name: Wrapper playbook for kitchen testing "ansible-ssh-hardening" with default settings
- name: Prepare the molecule container for the role
hosts: all
become: true
environment:
@@ -13,7 +13,7 @@
when: ansible_facts.distribution == 'Fedora'
- name: Install packages # noqa ignore-errors
ansible.builtin.yum:
ansible.builtin.dnf:
name:
- openssh-clients
- openssh-server
@@ -53,6 +53,14 @@
- openssh
when: ansible_facts.os_family == 'Suse'
- name: Install required tools on Alpine
community.general.apk:
name:
- openssh
state: present
update_cache: true
when: ansible_facts.os_family == 'Alpine'
- name: Install required tools on Arch
community.general.pacman:
name:
@@ -62,12 +70,6 @@
update_cache: true
when: ansible_facts.os_family == 'Archlinux'
- name: Created needed directory
ansible.builtin.file:
path: /var/run/sshd
state: directory
mode: "0755"
- name: Create ssh host keys # noqa ignore-errors
ansible.builtin.command: ssh-keygen -A
when: not ((ansible_facts.os_family in ['Oracle Linux', 'RedHat']) and ansible_facts.distribution_major_version < '7')
+2
View File
@@ -33,6 +33,7 @@ scenario:
- prepare
check_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- create
- prepare
@@ -48,6 +49,7 @@ scenario:
- destroy
test_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- syntax
- create
+6 -6
View File
@@ -4,6 +4,12 @@
become: true
gather_facts: false
tasks:
- name: Change installation source
# temporary fix for https://github.com/lavabit/robox/issues/305
ansible.builtin.raw: echo "https://ftp.eu.openbsd.org/pub/OpenBSD" > /etc/installurl
changed_when: false
when: lookup('env', 'MOLECULE_DISTRO') == 'openbsd7'
- name: Install python
# BSDs are special for Ansible - https://docs.ansible.com/ansible/latest/os_guide/intro_bsd.html
ansible.builtin.raw: pkg_add python%3.10
@@ -18,12 +24,6 @@
https_proxy: "{{ lookup('env', 'https_proxy') | default(omit) }}"
no_proxy: "{{ lookup('env', 'no_proxy') | default(omit) }}"
tasks:
- name: Created needed directory
ansible.builtin.file:
path: /var/run/sshd
state: directory
mode: "0755"
- name: Create ssh host keys # noqa ignore-errors
ansible.builtin.command: ssh-keygen -A
when: not ((ansible_facts.os_family in ['Oracle Linux', 'RedHat']) and ansible_facts.distribution_major_version < '7')
@@ -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"
@@ -21,7 +21,7 @@
- root
network_ipv6_enable: true
ssh_allow_tcp_forwarding: "yes"
ssh_gateway_ports: true
ssh_gateway_ports: "clientspecified"
ssh_allow_agent_forwarding: true
ssh_server_permit_environment_vars: "yes"
ssh_server_accept_env_vars: PWD HTTP_PROXY
@@ -88,9 +88,8 @@
- aes192-ctr
- aes128-ctr
- aes256-cbc
ssh_kex:
- diffie-hellman-group-exchange-sha256
- diffie-hellman-group-exchange-sha1
# these should not be set in the final sshd_config
ssh_kex: false
ssh_custom_options:
- Include /etc/ssh/ssh_config.d/*
sshd_custom_options:
@@ -28,6 +28,7 @@ scenario:
- prepare
check_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- create
- prepare
@@ -43,6 +44,7 @@ scenario:
- destroy
test_sequence:
- dependency
- verify ../shared/prerequisites.yml
- destroy
- syntax
- create
@@ -50,5 +52,4 @@ scenario:
- check
- converge
- idempotence
- verify
- destroy
@@ -13,7 +13,7 @@
when: ansible_facts.distribution == 'Fedora'
- name: Install packages # noqa ignore-errors
ansible.builtin.yum:
ansible.builtin.dnf:
name:
- openssh-clients
- openssh-server
@@ -62,11 +62,13 @@
update_cache: true
when: ansible_facts.os_family == 'Archlinux'
- name: Created needed directory
ansible.builtin.file:
path: /var/run/sshd
state: directory
mode: "0755"
- name: Install required tools on Alpine
community.general.apk:
name:
- openssh
state: present
update_cache: true
when: ansible_facts.os_family == 'Alpine'
- name: Create ssh host keys # noqa ignore-errors
ansible.builtin.command: ssh-keygen -A
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base",
"config:best-practices",
":gitSignOff"
],
"dependencyDashboard": true,
+7 -8
View File
@@ -1,8 +1,7 @@
molecule
molecule-plugins[docker]
yamllint
ansible-core==2.16.5
ansible-lint
docker
flake8
jmespath
molecule==25.1.0
molecule-plugins[docker]==23.7.0
ansible-core==2.18.2
docker==7.1.0
jmespath==1.0.1
aar-doc==2.0.1
passlib==1.7.4
+11 -10
View File
@@ -26,18 +26,18 @@ Further information is available at [Deutsche Telekom (German)](http://www.telek
## Supported Operating Systems
- EL
- 7, 8, 9
- 8, 9
- Ubuntu
- bionic, focal, jammy
- focal, jammy, noble
- Debian
- bullseye, buster
- bullseye, bookworm
- Amazon
- opensuse
## Role Variables
- `mysql_daemon_enabled`
- Default: `true`
- Default: `True`
- Description: Whether to enable the MySQL-service so it starts on boot
- Type: bool
- Required: no
@@ -52,7 +52,7 @@ Further information is available at [Deutsche Telekom (German)](http://www.telek
- Type: int
- Required: no
- `mysql_hardening_enabled`
- Default: `true`
- Default: `True`
- Description: Whether to run the hardening
- Type: bool
- Required: no
@@ -87,12 +87,12 @@ Further information is available at [Deutsche Telekom (German)](http://www.telek
- Type: int
- Required: no
- `mysql_hardening_restart_mysql`
- Default: `true`
- Default: `True`
- Description: Restart mysql after running this role
- Type: bool
- Required: no
- `mysql_hardening_skip_grant_tables:`
- Default: `false`
- Default: `False`
- Description: [skip-grant-tables](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-grant-tables)
- Type: bool
- Required: no
@@ -102,17 +102,17 @@ Further information is available at [Deutsche Telekom (German)](http://www.telek
- Type: int
- Required: no
- `mysql_remove_anonymous_users`
- Default: `true`
- Default: `True`
- Description: Set to `false` to keep users without authentication
- Type: bool
- Required: no
- `mysql_remove_remote_root`
- Default: `true`
- Default: `True`
- Description: If `true`, root can only connect from localhost. Set to `false` to not remove remote root users.
- Type: bool
- Required: no
- `mysql_remove_test_database`
- Default: `true`
- Default: `True`
- Description: Set to `false` to keep the test database
- Type: bool
- Required: no
@@ -135,6 +135,7 @@ None.
```
- hosts: all
become: true
roles:
- name: devsec.hardening.mysql_hardening
```
+2 -3
View File
@@ -8,18 +8,17 @@ galaxy_info:
platforms:
- name: EL
versions:
- "7"
- "8"
- "9"
- name: Ubuntu
versions:
- bionic
- focal
- jammy
- noble
- name: Debian
versions:
- bullseye
- buster
- bookworm
- name: Amazon
- name: opensuse
galaxy_tags:
+7 -6
View File
@@ -19,19 +19,19 @@ It works with the following nginx-roles, including, but not limited to:
## Supported Operating Systems
- EL
- 7, 8, 9
- 8, 9
- Ubuntu
- bionic, focal, jammy
- focal, jammy, noble
- Debian
- buster, bullseye
- bookworm, bullseye
- Amazon
## Role Variables
- `nginx_add_header`
- Default: `["X-Frame-Options SAMEORIGIN", "X-Content-Type-Options nosniff", "X-XSS-Protection \"1; mode=block\"", "Content-Security-Policy \\\"script-src 'self'; object-src 'self'\\\""]`
- Default: `['X-Frame-Options SAMEORIGIN', 'X-Content-Type-Options nosniff', 'X-XSS-Protection "1; mode=block"', 'Content-Security-Policy \\"script-src \'self\'; object-src \'self\'\\"']`
- Description: Adds the specified field to a response header provided that the response code equals 200, 201, 204, 206, 301, 302, 303, 304, or 307. See [nginx_add_header](http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header)
- Type: list
- Type: list of ''
- Required: no
- `nginx_client_body_buffer_size`
- Default: `1k`
@@ -104,7 +104,7 @@ It works with the following nginx-roles, including, but not limited to:
- Type: str
- Required: no
- `nginx_remove_default_site`
- Default: `true`
- Default: `True`
- Description: Disables the default site. Set to false to enable the default site in nginx.
- Type: bool
- Required: no
@@ -142,6 +142,7 @@ None.
```
- hosts: all
become: true
roles:
- name: devsec.hardening.nginx_hardening
```
+2 -3
View File
@@ -8,17 +8,16 @@ galaxy_info:
platforms:
- name: EL
versions:
- "7"
- "8"
- "9"
- name: Ubuntu
versions:
- bionic
- focal
- jammy
- noble
- name: Debian
versions:
- buster
- bookworm
- bullseye
- name: Amazon
galaxy_tags:
+98 -85
View File
@@ -94,6 +94,18 @@ We are setting this sysctl to a default of `32`, some systems only support small
vm.mmap_rnd_bits: 16
```
### password expiry and SSH key based logins
With default PAM configuration setting a password expiry for users will also block SSH key logins after the password has expired.
We have added a flag for PAM to ignore the expiry if SSH keys or other login mechanisms are used.
If you choose to use your own PAM configuration please adjust it accordingly to contain `no_pass_expiry` in the `account` stage for the `pam_unix.so` module.
A valid example would look like this:
```text
account required pam_unix.so no_pass_expiry
```
## Testing with inspec
If you're using inspec to test your machines after applying this role, please make sure to add the connecting user to the `os_ignore_users`-variable.
@@ -147,11 +159,11 @@ This role is mostly based on guides by:
## Supported Operating Systems
- EL
- 7, 8, 9
- 8, 9
- Ubuntu
- bionic, focal, jammy
- focal, jammy, noble
- Debian
- buster, bullseye
- bookworm, bullseye
- Amazon
- Fedora
- ArchLinux
@@ -161,7 +173,7 @@ This role is mostly based on guides by:
## Role Variables
- `os_apt_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring apt.
- Type: bool
- Required: no
@@ -191,7 +203,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_auditd_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring auditd.
- Type: bool
- Required: no
@@ -220,6 +232,16 @@ This role is mostly based on guides by:
- Description: Defines the behaviour of auditd when its log file is filled up. Possible other values are described in the auditd.conf man page. The most common alternative to the default may be `rotate`.
- Type: str
- Required: no
- `os_auditd_name_format`
- Default: `NONE`
- Description: This keyword specifies how computer node names are inserted into the audit event stream.
- Type: str
- Required: no
- Choices:
- NONE
- hostname
- fqd
- numeric
- `os_auditd_num_logs`
- Default: `5`
- Description: This keyword specifies the number of log files to keep if `rotate` is given as the max_log_file_action. The value given must be numeric.
@@ -236,7 +258,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_auth_allow_homeless`
- Default: `false`
- Default: `False`
- Description: true if to allow users without home to login.
- Type: bool
- Required: no
@@ -256,12 +278,12 @@ This role is mostly based on guides by:
- Type: int
- Required: no
- `os_auth_pam_oddjob_mkhomedir`
- Default: `false`
- Default: `False`
- Description: Enables automatic homedir e.g. in FreeIPA environments
- Type: bool
- Required: no
- `os_auth_pam_passwdqc_enable`
- Default: `true`
- Default: `True`
- Description: true if you want to use strong password checking in PAM using passwdqc.
- Type: bool
- Required: no
@@ -301,9 +323,9 @@ This role is mostly based on guides by:
- Type: int
- Required: no
- `os_auth_root_ttys`
- Default: `["console", "tty1", "tty2", "tty3", "tty4", "tty5", "tty6"]`
- Default: `['console', 'tty1', 'tty2', 'tty3', 'tty4', 'tty5', 'tty6']`
- Description: A list of TTYs, from which root can log in, see `man securetty` for reference
- Type: list
- Type: list of ''
- Required: no
- `os_auth_sub_gid_count`
- Default: `65536`
@@ -356,72 +378,67 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_chmod_home_folders`
- Default: `true`
- Default: `True`
- Description: Set to `false` to disable "chmod 700" of home folders for regular users
- Type: bool
- Required: no
- `os_chmod_rootuser_home_folder`
- Default: `true`
- Default: `True`
- Description: Set to `false` to disable "chmod 700" of root's home folder
- Type: bool
- Required: no
- `os_cron_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring cron.
- Type: bool
- Required: no
- `os_ctrlaltdel_disabled`
- Default: `false`
- Default: `False`
- Description: Set to true to disable ctrl-alt-delete key combination.
- Type: bool
- Required: no
- `os_desktop_enable`
- Default: `false`
- Description: true if this is a desktop system, ie Xorg, KDE/GNOME/Unity/etc.
- Type: bool
- Required: no
- `os_env_extra_user_paths`
- Default: `"[]"`
- Default: `[]`
- Description: Specify additional paths that should be checked for binaries where access will be minimized
- Type: list
- Type: list of ''
- Required: no
- `os_env_user_paths`
- Default: `["/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin", "/sbin", "/bin"]`
- Default: `['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin']`
- Description: Specify paths that should be checked for binaries where access will be minimized
- Type: list
- Type: list of ''
- Required: no
- `os_filesystem_whitelist`
- Default: `"[]"`
- Default: `[]`
- Description: A list of filesystems that should not be disabled
- Type: list
- Type: list of ''
- Required: no
- `os_hardening_enabled`
- Default: `true`
- Default: `True`
- Description: Whether to run the hardening
- Type: bool
- Required: no
- `os_ignore_home_folder_users`
- Default: `"[]"`
- Default: `[]`
- Description: Specify user accounts, whose home folders shouldn't be chmodded to 700 when "os_chmod_home_folders" is enabled.
- Type: list
- Type: list of ''
- Required: no
- `os_ignore_users`
- Default: `["vagrant", "kitchen"]`
- Default: `['vagrant', 'kitchen']`
- Description: Specify system accounts whose login should not be disabled and password not changed
- Type: list
- Type: list of ''
- Required: no
- `os_limits_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring limits.
- Type: bool
- Required: no
- `os_login_defs_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring login_defs for newly created users.
- Type: bool
- Required: no
- `os_minimize_access_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring minimize_access.
- Type: bool
- Required: no
@@ -436,7 +453,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_boot_enabled`
- Default: `false`
- Default: `False`
- Description: Set to true to configure /boot mountpoint
- Type: bool
- Required: no
@@ -471,7 +488,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_dev_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to ignore /dev mountpoint
- Type: bool
- Required: no
@@ -501,7 +518,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_dev_shm_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to ignore /dev/shm mountpoint
- Type: bool
- Required: no
@@ -541,7 +558,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_home_enabled`
- Default: `false`
- Default: `False`
- Description: Set to true to configure /home mountpoint
- Type: bool
- Required: no
@@ -576,7 +593,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_run_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to ignore /run mountpoint
- Type: bool
- Required: no
@@ -611,7 +628,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_tmp_enabled`
- Default: `false`
- Default: `False`
- Description: Set to true to configure /tmp mountpoint
- Type: bool
- Required: no
@@ -646,7 +663,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_var_enabled`
- Default: `false`
- Default: `False`
- Description: Set to true to configure /var mountpoint
- Type: bool
- Required: no
@@ -666,7 +683,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_var_log_audit_enabled`
- Default: `false`
- Default: `False`
- Description: Set to true to configure /var/log/audit mountpoint
- Type: bool
- Required: no
@@ -701,7 +718,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_var_log_enabled`
- Default: `false`
- Default: `False`
- Description: Set to true to configure /var/log mountpoint
- Type: bool
- Required: no
@@ -751,7 +768,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_mnt_var_tmp_enabled`
- Default: `false`
- Default: `False`
- Description: Set to true to configure /var/tmp mountpoint
- Type: bool
- Required: no
@@ -776,47 +793,47 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `os_modprobe_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring modprobe.
- Type: bool
- Required: no
- `os_netrc_enabled`
- Default: `true`
- Default: `True`
- Description: Configure filesystem for existence of .netrc file in homedir
- Type: bool
- Required: no
- `os_netrc_whitelist_user`
- Default: `"[]"`
- Default: `[]`
- Description: Add list of user to allow creation of .netrc in users homedir
- Type: list
- Type: list of ''
- Required: no
- `os_pam_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring pam.
- Type: bool
- Required: no
- `os_profile_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring profile.
- Type: bool
- Required: no
- `os_remove_additional_root_users`
- Default: `false`
- Default: `False`
- Description: When enabled and there are multiple users with UID=0, only "root" will be kept. Others will be deleted.
- Type: bool
- Required: no
- `os_rhosts_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring rhosts.
- Type: bool
- Required: no
- `os_rootuser_pw_ageing`
- Default: `false`
- Default: `False`
- Description: Set to true to enforce password age settings for root user(s)
- Type: bool
- Required: no
- `os_securetty_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring securetty.
- Type: bool
- Required: no
@@ -826,62 +843,57 @@ This role is mostly based on guides by:
- Type: int
- Required: no
- `os_security_init_prompt`
- Default: `true`
- Default: `True`
- Description: The PROMPT option provides console users the ability to interactively boot the system and select which services to start on boot.
- Type: bool
- Required: no
- `os_security_init_single`
- Default: `false`
- Default: `False`
- Description: Single-user mode is intended as a system recovery method, providing a single user root access to the system by providing a boot option at startup. By default, no authentication is performed if single-user mode is selected. To require entry of the root password even if the system is started in single-user mode, set this to false
- Type: bool
- Required: no
- `os_security_kernel_enable_core_dump`
- Default: `false`
- Default: `False`
- Description: kernel is crashing or otherwise misbehaving and a kernel core dump is created.
- Type: bool
- Required: no
- `os_security_kernel_enable_module_loading`
- Default: `true`
- Description: true if you want to allowed to change kernel modules once the system is running (eg `modprobe`, `rmmod`). WARNING - Rebuilding initramfs is deprecated and will be removed in the next major release. For more information take a look at this issue <https://github.com/dev-sec/ansible-collection-hardening/pull/591>
- Type: bool
- Required: no
- `os_security_packages_clean`
- Default: `true`
- Default: `True`
- Description: removes packages with known issues. See section packages.
- Type: bool
- Required: no
- `os_security_packages_list`
- Default: `["xinetd", "inetd", "ypserv", "telnet-server", "rsh-server", "prelink"]`
- Default: `['xinetd', 'inetd', 'ypserv', 'telnet-server', 'rsh-server', 'prelink']`
- Description: List of deprecated or insecure packages to remove
- Type: list
- Type: list of ''
- Required: no
- `os_security_suid_sgid_blacklist`
- Default: `"[]"`
- Default: `[]`
- Description: a list of paths which should have their SUID/SGID bits removed.
- Type: list
- Type: list of ''
- Required: no
- `os_security_suid_sgid_enforce`
- Default: `true`
- Default: `True`
- Description: true if you want to reduce SUID/SGID bits. There is already a list of items which are searched for configured, but you can also add your own.
- Type: bool
- Required: no
- `os_security_suid_sgid_remove_from_unknown`
- Default: `false`
- Default: `False`
- Description: true if you want to remove SUID/SGID bits from any file, that is not explicitly configured in a `blacklist`. This will make every Ansible-run search through the mounted filesystems looking for SUID/SGID bits that are not configured in the default and user blacklist. If it finds an SUID/SGID bit, it will be removed, unless this file is in your `whitelist`.
- Type: bool
- Required: no
- `os_security_suid_sgid_whitelist`
- Default: `"[]"`
- Default: `[]`
- Description: a list of paths which should not have their SUID/SGID bits altered.
- Type: list
- Type: list of ''
- Required: no
- `os_security_users_allow`
- Default: `"[]"`
- Default: `[]`
- Description: list of things, that a user is allowed to do. May contain `change_user`.
- Type: list
- Type: list of ''
- Required: no
- `os_selinux_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring selinux.
- Type: bool
- Required: no
@@ -906,39 +918,39 @@ This role is mostly based on guides by:
- Type: int
- Required: no
- `os_sysctl_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring sysctl.
- Type: bool
- Required: no
- `os_unused_filesystems`
- Default: `["cramfs", "freevxfs", "jffs2", "hfs", "hfsplus", "squashfs", "udf", "vfat", "dccp", "rds", "sctp", "tipc"]`
- Default: `['cramfs', 'freevxfs', 'jffs2', 'hfs', 'hfsplus', 'squashfs', 'udf', 'vfat', 'dccp', 'rds', 'sctp', 'tipc']`
- Description: Disable this list of unused filesystems
- Type: list
- Type: list of ''
- Required: no
- `os_user_accounts_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring user_accounts.
- Type: bool
- Required: no
- `os_user_pw_ageing`
- Default: `true`
- Default: `True`
- Description: Set to false to disable password age enforcement on existing users
- Type: bool
- Required: no
- `os_users_without_password_ageing`
- Default: `"[]"`
- Default: `[]`
- Description: List of users, where password ageing should not be enforced even if "os_user_pw_ageing" is enabled
- Type: list
- Type: list of ''
- Required: no
- `os_yum_enabled`
- Default: `true`
- Default: `True`
- Description: Set to false to disable installing and configuring yum.
- Type: bool
- Required: no
- `os_yum_repo_file_whitelist`
- Default: `"[]"`
- Default: `[]`
- Description: List of yum repository files under /etc/yum.repos.d/ which should not be altered.
- Type: list
- Type: list of ''
- Required: no
- `proc_mnt_options`
- Default: `rw,nosuid,nodev,noexec,relatime`
@@ -976,7 +988,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `ufw_enable_ipv6`
- Default: `true`
- Default: `True`
- Description: Set to `true` to apply rules to support IPv6 (no means only IPv6 on loopback accepted).
- Type: bool
- Required: no
@@ -996,7 +1008,7 @@ This role is mostly based on guides by:
- Type: str
- Required: no
- `ufw_manage_defaults`
- Default: `true`
- Default: `True`
- Description: true means apply all settings with `ufw_` prefix.
- Type: bool
- Required: no
@@ -1009,6 +1021,7 @@ None.
```
- hosts: all
become: true
roles:
- name: devsec.hardening.os_hardening
```
+2 -3
View File
@@ -1,5 +1,4 @@
---
os_desktop_enable: false
os_env_user_paths: [/usr/local/sbin, /usr/local/bin, /usr/sbin, /usr/bin, /sbin, /bin]
os_env_extra_user_paths: []
os_auth_pw_max_age: 60
@@ -40,7 +39,6 @@ os_users_without_password_ageing: []
# Specify system accounts whose login should not be disabled and password not changed
os_ignore_users: [vagrant, kitchen]
os_security_kernel_enable_module_loading: true
os_security_kernel_enable_core_dump: false
os_security_suid_sgid_enforce: true
# User-defined blacklist and whitelist
@@ -148,7 +146,7 @@ sysctl_config:
# 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
# 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).
#
# A PTRACE scope of "0" is the more permissive mode. A scope of "1" limits
@@ -350,6 +348,7 @@ os_auditd_disk_error_action: SUSPEND
os_auditd_action_mail_acct: root
os_auditd_log_group: root
os_auditd_num_logs: 5
os_auditd_name_format: NONE
# Set the SELinux state, which can be either disabled, permissive, or enforcing.
os_selinux_state: enforcing
+10 -11
View File
@@ -4,10 +4,6 @@ argument_specs:
short_description: The main entry point for the os hardening role.
version_added: 8.8.0
options:
os_desktop_enable:
default: false
type: bool
description: true if this is a desktop system, ie Xorg, KDE/GNOME/Unity/etc.
os_env_user_paths:
default: [/usr/local/sbin, /usr/local/bin, /usr/sbin, /usr/bin, /sbin, /bin]
type: list
@@ -73,13 +69,6 @@ argument_specs:
default: '[]'
type: list
description: list of things, that a user is allowed to do. May contain `change_user`.
os_security_kernel_enable_module_loading:
default: true
type: bool
description: true if you want to allowed to change kernel modules once the
system is running (eg `modprobe`, `rmmod`). WARNING - Rebuilding initramfs
is deprecated and will be removed in the next major release. For more information
take a look at this issue <https://github.com/dev-sec/ansible-collection-hardening/pull/591>
os_security_kernel_enable_core_dump:
default: false
type: bool
@@ -218,6 +207,16 @@ argument_specs:
description: This keyword specifies the maximum file size in megabytes. When
this limit is reached, it will trigger a configurable action. The value
given must be numeric.
os_auditd_name_format:
default: NONE
type: str
description: This keyword specifies how computer node names are inserted
into the audit event stream.
choices:
- NONE
- hostname
- fqd
- numeric
os_auditd_num_logs:
default: 5
type: int
+2 -3
View File
@@ -8,17 +8,16 @@ galaxy_info:
platforms:
- name: EL
versions:
- "7"
- "8"
- "9"
- name: Ubuntu
versions:
- bionic
- focal
- jammy
- noble
- name: Debian
versions:
- buster
- bookworm
- bullseye
- name: Amazon
- name: Fedora
-10
View File
@@ -123,13 +123,3 @@
when:
- ansible_facts.selinux.status == 'enabled'
- os_selinux_enabled | bool
- name: Raise deprecation warning for initramfs tasks # noqa ignore-errors
ansible.builtin.fail:
msg: "WARNING: Rebuilding initramfs is deprecated and will be removed
in the next major release. For more information take a look at this issue:
https://github.com/dev-sec/ansible-collection-hardening/pull/591"
when:
- os_security_kernel_enable_module_loading
ignore_errors: true
tags: always
+18
View File
@@ -27,6 +27,24 @@
when:
- ansible_facts.os_family == 'RedHat'
- name: Allow Login with SSH Keys, when user password is expired
ansible.builtin.lineinfile:
path: /etc/pam.d/system-auth
backrefs: true
regexp: "^(account.*pam_unix.so(?!.*no_pass_expiry).*)$"
line: '\1 no_pass_expiry'
when:
- ansible_facts.os_family == 'Archlinux'
- name: Allow Login with SSH Keys, when user password is expired
ansible.builtin.lineinfile:
path: /etc/pam.d/common-account
backrefs: true
regexp: "^(account.*pam_unix.so(?!.*no_pass_expiry).*)$"
line: '\1 no_pass_expiry'
when:
- ansible_facts.os_family == 'Suse'
- name: NSA 2.3.3.5 Upgrade Password Hashing Algorithm to SHA-512
ansible.builtin.template:
src: etc/libuser.conf.j2
+7
View File
@@ -118,3 +118,10 @@
state: absent
when:
- not os_auth_pam_passwdqc_enable
- name: Allow Login with SSH Keys, when user password is expired
ansible.builtin.lineinfile:
path: /etc/pam.d/common-account
backrefs: true
regexp: "^(account.*pam_unix.so(?!.*no_pass_expiry).*)$"
line: '\1 no_pass_expiry'
+1 -1
View File
@@ -1,6 +1,6 @@
---
- name: Install sssd-clients
ansible.builtin.yum:
ansible.builtin.dnf:
name: sssd-client
state: present
when:
+6 -40
View File
@@ -18,48 +18,9 @@
mode: "0544"
when: ansible_facts.os_family == 'RedHat'
- name: Install initramfs-tools
ansible.builtin.apt:
name: initramfs-tools
state: present
update_cache: true
when:
- ansible_facts.os_family == 'Debian'
- os_security_kernel_enable_module_loading
- name: Rebuild initramfs with starting pack of modules, if module loading at runtime is disabled
ansible.builtin.template:
src: etc/initramfs-tools/modules.j2
dest: /etc/initramfs-tools/modules
owner: root
group: root
mode: "0440"
notify:
- Update-initramfs
when:
- ansible_facts.os_family == 'Debian'
- os_security_kernel_enable_module_loading
register: initramfs
- name: Change sysctls
when: ansible_virtualization_type not in ['docker', 'lxc', 'openvz']
block:
- name: Create a combined sysctl-dict if os-dependent sysctls are defined
ansible.builtin.set_fact:
sysctl_config: "{{ sysctl_config | combine(sysctl_custom_config) }}"
when: sysctl_custom_config | default()
# sysctl_rhel_config is kept for backwards-compatibility. use sysctl_custom_config instead
- name: Create a combined sysctl-dict if os-dependent sysctls are defined
ansible.builtin.set_fact:
sysctl_config: "{{ sysctl_config | combine(sysctl_rhel_config) }}"
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
ansible.posix.sysctl:
name: "{{ item.key }}"
@@ -68,7 +29,12 @@
state: present
reload: 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()
- name: Apply ufw defaults
+1 -1
View File
@@ -45,7 +45,7 @@
- /etc/yum/pluginconf.d/rhnplugin.conf
- name: Remove deprecated or insecure packages | package-01 - package-09
ansible.builtin.yum:
ansible.builtin.dnf:
name: "{{ os_security_packages_list }}"
state: absent
when: os_security_packages_clean | bool
@@ -11,7 +11,7 @@ freq = {{ os_auditd_freq }}
num_logs = {{ os_auditd_num_logs }}
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
name_format = {{ os_auditd_name_format }}
max_log_file = {{ os_auditd_max_log_file }}
max_log_file_action = {{ os_auditd_max_log_file_action }}
space_left = {{ os_auditd_space_left }}
@@ -1,113 +0,0 @@
{{ ansible_managed | comment }}
# Generated by Ansible role {{ ansible_role_name }}
# This file contains the names of kernel modules that should be loaded at boot time, one per line. Lines beginning with "#" are ignored.
#
# A list of all available kernel modules kann be found with `find /lib/modules/$(uname -r)/kernel/`
# We will sort by folder.
# Arch
# ----
#
# Modules for certains builds, contains support modules and some CPU-specific optimizations.
{% if ansible_facts.architecture == 'x86_64' %}
# Optimize for x86_64 cryptographic features
twofish-x86_64-3way
twofish-x86_64
aes-x86_64
salsa20-x86_64
blowfish-x86_64
{% endif %}
{% if 'AuthenticAMD' in ansible_facts.processor %}
# AMD-specific optimizations
kvm-amd
{% else %}
# Intel-specific optimizations
ghash-clmulni-intel
aesni-intel
kvm-intel
{% endif %}
kvm
# Crypto
# ------
# Some core modules which comprise strong cryptography.
blowfish_common
blowfish_generic
ctr
cts
lrw
lzo
rmd160
rmd256
rmd320
serpent
sha512_generic
twofish_common
twofish_generic
xts
zlib
# Drivers
# -------
# Basics
lp
rtc
loop
# Filesystems
ext2
btrfs
{% if os_desktop_enable %}
# Desktop
psmouse
snd
snd_ac97_codec
snd_intel8x0
snd_page_alloc
snd_pcm
snd_timer
soundcore
usbhid
{% endif %}
# Lib
# ---
xz
# Net
# ---
# All packets needed for netfilter rules (ie iptables, ebtables).
ip_tables
x_tables
iptable_filter
iptable_nat
# Targets
ipt_LOG
ipt_REJECT
# Modules
xt_connlimit
xt_tcpudp
xt_recent
xt_limit
xt_conntrack
nf_conntrack
nf_conntrack_ipv4
nf_defrag_ipv4
xt_state
nf_nat
# Addons
xt_pknock
@@ -24,7 +24,7 @@ auth required pam_deny.so
{% if os_auth_retries|int > 0 %}
account required pam_faillock.so
{% endif %}
account required pam_unix.so
account required pam_unix.so no_pass_expiry
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
{% if (os_auth_pam_sssd_enable | bool) %}
@@ -1,9 +1,9 @@
{{ ansible_managed | comment }}
# Generated by Ansible role {{ ansible_role_name }}
# color => new RH6.0 bootup
# verbose => old-style bootup
# anything else => new style bootup without ANSI colors or positioning
# color => new RH6.0 boot-up
# verbose => old-style boot-up
# anything else => new style boot-up without ANSI colors or positioning
BOOTUP=color
# column to start "[ OK ]" label in
RES_COL=60
-88
View File
@@ -1,88 +0,0 @@
---
os_packages_pam_ccreds: pam_ccreds
os_nologin_shell_path: /sbin/nologin
# Different distros use different standards for /etc/shadow perms, e.g.
# RHEL derivatives use root:root 0000, whereas Debian-based use root:shadow 0640.
# You must provide key/value pairs for owner, group, and mode if overriding.
os_shadow_perms:
owner: root
group: root
mode: "0000"
os_passwd_perms:
owner: root
group: root
mode: "0644"
os_env_umask: "077"
os_auth_uid_min: 1000
os_auth_uid_max: 60000
os_auth_gid_min: 1000
os_auth_gid_max: 60000
os_auth_sys_uid_min: 201
os_auth_sys_uid_max: 999
os_auth_sys_gid_min: 201
os_auth_sys_gid_max: 999
os_auth_sub_uid_min: 100000
os_auth_sub_uid_max: 600100000
os_auth_sub_uid_count: 65536
os_auth_sub_gid_min: 100000
os_auth_sub_gid_max: 600100000
os_auth_sub_gid_count: 65536
os_auth_pam_sssd_enable: false
os_mnt_boot_dir_mode: '0700'
os_mnt_boot_group: 'root'
os_mnt_boot_owner: 'root'
os_mnt_dev_dir_mode: '0755'
os_mnt_dev_group: 'root'
os_mnt_dev_owner: 'root'
os_mnt_dev_shm_dir_mode: '1777'
os_mnt_dev_shm_group: 'root'
os_mnt_dev_shm_owner: 'root'
os_mnt_home_dir_mode: '0755'
os_mnt_home_group: 'root'
os_mnt_home_owner: 'root'
os_mnt_run_dir_mode: '0755'
os_mnt_run_group: 'root'
os_mnt_run_owner: 'root'
os_mnt_tmp_dir_mode: '1777'
os_mnt_tmp_group: 'root'
os_mnt_tmp_owner: 'root'
os_mnt_var_dir_mode: '0755'
os_mnt_var_group: 'root'
os_mnt_var_owner: 'root'
os_mnt_var_log_dir_mode: '0755'
os_mnt_var_log_group: 'root'
os_mnt_var_log_owner: 'root'
os_mnt_var_log_audit_dir_mode: '0700'
os_mnt_var_log_audit_group: 'root'
os_mnt_var_log_audit_owner: 'root'
os_mnt_var_tmp_dir_mode: '1777'
os_mnt_var_tmp_group: 'root'
os_mnt_var_tmp_owner: 'root'
# defaults for useradd
os_useradd_mail_dir: /var/spool/mail
os_useradd_create_home: true
modprobe_package: module-init-tools
auditd_package: audit
hidepid_option: "0" # allowed values: 0, 1, 2
sysctl_unsupported_entries:
- fs.protected_fifos
- fs.protected_regular
+1 -1
View File
@@ -669,7 +669,7 @@
- Make MaxAuthTries configurable [\#31](https://github.com/dev-sec/ansible-ssh-hardening/pull/31) ([rndmh3ro](https://github.com/rndmh3ro))
- Change oneliner if-statements to be more readable [\#30](https://github.com/dev-sec/ansible-ssh-hardening/pull/30) ([rndmh3ro](https://github.com/rndmh3ro))
- Make ssh client password login configurable. [\#29](https://github.com/dev-sec/ansible-ssh-hardening/pull/29) ([ypid](https://github.com/ypid))
- Fix join-filter, jinja-cases, intendation [\#27](https://github.com/dev-sec/ansible-ssh-hardening/pull/27) ([rndmh3ro](https://github.com/rndmh3ro))
- Fix join-filter, jinja-cases, indentation [\#27](https://github.com/dev-sec/ansible-ssh-hardening/pull/27) ([rndmh3ro](https://github.com/rndmh3ro))
- Short role review. Fixed role when ssh_client_weak_kex == true. [\#26](https://github.com/dev-sec/ansible-ssh-hardening/pull/26) ([ypid](https://github.com/ypid))
- Make it configurable to only harden ssh client/server or both \(default\). [\#25](https://github.com/dev-sec/ansible-ssh-hardening/pull/25) ([ypid](https://github.com/ypid))
- Separate system-vars from editable vars [\#24](https://github.com/dev-sec/ansible-ssh-hardening/pull/24) ([rndmh3ro](https://github.com/rndmh3ro))
+78 -65
View File
@@ -37,34 +37,41 @@ This role uses the default port 22 or the port configured in the inventory to co
If idempotency is important, please consider using role [`ssh-hardening-fallback`](https://github.com/nununo/ansible-ssh-hardening-fallback), which is a wrapper around this role that falls back to port 22 if the configured port is unreachable.
## Disabling systemd-socket activation on Debian and Ubuntu systems
Since Debian 12 and Ubuntu 22.04 the ssh-daemon is not running by default anymore but is instead activated via systemd.
We revert this change to its traditional behaviour.
For more information, see [this issue](https://github.com/dev-sec/ansible-collection-hardening/issues/763).
<!-- BEGIN_ANSIBLE_DOCS -->
## Supported Operating Systems
- EL
- 7, 8, 9
- 8, 9
- Ubuntu
- bionic, focal, jammy
- focal, jammy, noble
- Debian
- buster, bullseye
- bookworm, bullseye
- Alpine
- Amazon
- Fedora
- ArchLinux
- SmartOS
- FreeBSD
- 12.2, 13.2, 14.0
- 13.2, 14.0
- OpenBSD
- 7.0
## Role Variables
- `network_ipv6_enable`
- Default: `true`
- Default: `True`
- Description: `false` if IPv6 is not needed. `ssh_listen_to` must also be set to listen to IPv6 addresses (for example `[::]`).
- Type: bool
- Required: no
- `sftp_chroot`
- Default: `true`
- Default: `True`
- Description: Set to `false` to disable chroot for sftp.
- Type: bool
- Required: no
@@ -74,7 +81,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `sftp_enabled`
- Default: `true`
- Default: `True`
- Description: Set to `false` to disable sftp configuration.
- Type: bool
- Required: no
@@ -84,7 +91,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_allow_agent_forwarding`
- Default: `false`
- Default: `False`
- Description: Set to `false` to disable Agent Forwarding. Set to `true` to allow Agent Forwarding.
- Type: bool
- Required: no
@@ -109,9 +116,9 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_authorized_principals`
- Default: ``
- Default: `[]`
- Description: list of hashes containing file paths and authorized principals, see `default_cstom.yml` for all options. Only used if `ssh_authorized_principals_file` is set
- Type: list
- Type: list of ''
- Required: no
- `ssh_authorized_principals_file`
- Default: ``
@@ -119,7 +126,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_banner`
- Default: `false`
- Default: `False`
- Description: Set to `true` to print a banner on login.
- Type: bool
- Required: no
@@ -129,14 +136,14 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_challengeresponseauthentication`
- Default: `false`
- Default: `False`
- Description: Specifies whether challenge-response authentication is allowed (e.g. via PAM).
- Type: bool
- Required: no
- `ssh_ciphers`
- Default: ``
- Description: Change this list to overwrite ciphers. Defaults found in `defaults/main.yml`
- Type: list
- Type: list of ''
- Required: no
- `ssh_client_alive_count`
- Default: `3`
@@ -149,7 +156,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: int
- Required: no
- `ssh_client_compression`
- Default: `false`
- Default: `False`
- Description: Specifies whether the client requests compression.
- Type: bool
- Required: no
@@ -159,17 +166,17 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_client_hardening`
- Default: `true`
- Default: `True`
- Description: Set to `false` to stop harden the client.
- Type: bool
- Required: no
- `ssh_client_host_key_algorithms`
- Default: ``
- Default: `[]`
- Description: Specifies the host key algorithms that the client wants to use in order of preference. If empty the default list will be used. Otherwise overrides the setting with specified list of algorithms. Check `man ssh_config`, `ssh -Q HostKeyAlgorithms` or other sources for supported algorithms - make sure you check the correct version!
- Type: list
- Type: list of ''
- Required: no
- `ssh_client_password_login`
- Default: `false`
- Default: `False`
- Description: Set to `true` to allow password-based authentication with the ssh client.
- Type: bool
- Required: no
@@ -179,19 +186,19 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_client_roaming`
- Default: `false`
- Default: `False`
- Description: enable experimental client roaming.
- Type: bool
- Required: no
- `ssh_compression`
- Default: `false`
- Default: `False`
- Description: Specifies whether server-side compression is enabled after the user has authenticated successfully.
- Type: bool
- Required: no
- `ssh_custom_options`
- Default: ``
- Default: `[]`
- Description: Custom lines for SSH client configuration.
- Type: list
- Type: list of ''
- Required: no
- `ssh_custom_selinux_dir`
- Default: `/etc/selinux/local-policies`
@@ -208,40 +215,45 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Description: if specified, login is disallowed for user names that match one of the patterns.
- Type: str
- Required: no
- `ssh_forward_agent`
- Default: `no`
- Description: Enables the ssh forward agent for the Cli if set to 'yes'
- Type: str
- Required: no
- `ssh_gateway_ports`
- Default: `false`
- Default: `False`
- Description: Set to `false` to disable binding forwarded ports to non-loopback addresses. Set to `true` to force binding on wildcard address. Set to `clientspecified` to allow the client to specify which address to bind to.
- Type: bool
- Type: raw
- Required: no
- `ssh_gssapi_delegation`
- Default: `false`
- Default: `False`
- Description: Set to `true` to enable GSSAPI credential forwarding.
- Type: bool
- Required: no
- `ssh_gssapi_support`
- Default: `false`
- Default: `False`
- Description: Set to `true` to enable GSSAPI authentication (both client and server).
- Type: bool
- Required: no
- `ssh_hardening_enabled`
- Default: `true`
- Default: `True`
- Description: Whether to run the hardening
- Type: bool
- Required: no
- `ssh_host_certificates`
- Default: ``
- Default: `[]`
- Description: Host certificates to look for when starting sshd
- Type: list
- Type: list of ''
- Required: no
- `ssh_host_key_algorithms`
- Default: ``
- Default: `[]`
- Description: Host key algorithms that the server offers. If empty the default list will be used. Otherwise overrides the setting with specified list of algorithms. Check `man sshd_config`, `ssh -Q HostKeyAlgorithms` or other sources for supported algorithms - make sure you check the correct version
- Type: list
- Type: list of ''
- Required: no
- `ssh_host_key_files`
- Default: ``
- Description: Host keys for sshd. If empty ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key'] will be used, as far as supported by the installed sshd version.
- Type: list
- Type: list of ''
- Required: no
- `ssh_host_rsa_key_size`
- Default: `4096`
@@ -249,19 +261,19 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: int
- Required: no
- `ssh_kerberos_support`
- Default: `true`
- Default: `True`
- Description: Set to `true` if SSH has Kerberos support.
- Type: bool
- Required: no
- `ssh_kex`
- Default: ``
- Description: Change this list to overwrite kexs. Defaults found in `defaults/main.yml`
- Type: list
- Type: list of ''
- Required: no
- `ssh_listen_to`
- Default: `["0.0.0.0"]`
- Default: `['0.0.0.0']`
- Description: one or more ip addresses, to which ssh-server should listen to. Default is all IPv4 addresses, but should be configured to specific addresses for security reasons
- Type: list
- Type: list of ''
- Required: no
- `ssh_login_grace_time`
- Default: `30s`
@@ -271,7 +283,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- `ssh_macs`
- Default: ``
- Description: Change this list to overwrite macs. Defaults found in `defaults/main.yml`
- Type: list
- Type: list of ''
- Required: no
- `ssh_max_auth_retries`
- Default: `2`
@@ -289,7 +301,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_pam_support`
- Default: `true`
- Default: `True`
- Description: Set to `true` if SSH has PAM support.
- Type: bool
- Required: no
@@ -300,7 +312,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Required: no
- `ssh_permit_tunnel`
- Default: `no`
- Description: Specifies whether tun(4) device forwarding is allowed. The argument must be yes, point-to-point (layer 3), ethernet (layer 2), or no. Specifying yes permits both point-to-point and ethernet.
- Description: Specifies whether tun(4) device forwarding is allowed. The argument must be "yes", point-to-point (layer 3), ethernet (layer 2), or "no". Specifying yes permits both point-to-point and ethernet. - The quotes are required!
- Type: str
- Required: no
- Choices:
@@ -309,22 +321,22 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- point-to-point
- ethernet
- `ssh_print_debian_banner`
- Default: `false`
- Default: `False`
- Description: Set to `true` to print debian specific banner.
- Type: bool
- Required: no
- `ssh_print_last_log`
- Default: `false`
- Default: `False`
- Description: Set to `false` to disable display of last login information.
- Type: bool
- Required: no
- `ssh_print_motd`
- Default: `false`
- Default: `False`
- Description: Set to `false` to disable printing of the MOTD.
- Type: bool
- Required: no
- `ssh_print_pam_motd`
- Default: `false`
- Default: `False`
- Description: Set to `false` to disable printing of the MOTD via pam (Debian and Ubuntu).
- Type: bool
- Required: no
@@ -334,9 +346,9 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_remote_hosts`
- Default: ``
- Default: `[]`
- Description: one or more hosts and their custom options for the ssh-client. Default is empty. See examples in `defaults/main.yml`
- Type: list
- Type: list of ''
- Required: no
- `ssh_server_accept_env_vars`
- Default: ``
@@ -349,12 +361,12 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_server_enabled`
- Default: `true`
- Default: `True`
- Description: Set to `false` to disable the opensshd server.
- Type: bool
- Required: no
- `ssh_server_hardening`
- Default: `true`
- Default: `True`
- Description: Set to `false` to stop harden the server.
- Type: bool
- Required: no
@@ -379,7 +391,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_server_password_login`
- Default: `false`
- Default: `False`
- Description: Set to `true` to allow password-based authentication to the ssh server. You probably also need to change `sshd_authenticationmethods` to include `password` if you set `ssh_server_password_login`: `true`.
- Type: bool
- Required: no
@@ -389,19 +401,24 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_server_ports`
- Default: `["22"]`
- Default: `['22']`
- Description: ports on which ssh-server should listen.
- Type: list
- Type: list of ''
- Required: no
- `ssh_server_revoked_keys`
- Default: ``
- Default: `[]`
- Description: a list of revoked public keys that the ssh server will always reject, useful to revoke known weak or compromised keys.
- Type: list
- Type: list of ''
- Required: no
- `ssh_server_service_enabled`
- Default: `True`
- Description: Set to `false` to disable starting sshd at boot.
- Type: bool
- Required: no
- `ssh_trusted_user_ca_keys`
- Default: ``
- Default: `[]`
- Description: set the trusted certificate authorities public keys used to sign user certificates. Only used if `ssh_trusted_user_ca_keys_file` is set.
- Type: list
- Type: list of ''
- Required: no
- `ssh_trusted_user_ca_keys_file`
- Default: ``
@@ -409,34 +426,29 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: str
- Required: no
- `ssh_use_dns`
- Default: `false`
- Default: `False`
- Description: Specifies whether sshd should look up the remote host name, and to check that the resolved host name for the remote IP address maps back to the very same IP address.
- Type: bool
- Required: no
- `ssh_use_pam`
- Default: `true`
- Default: `True`
- Description: Set to `false` to disable pam authentication.
- Type: bool
- Required: no
- `ssh_x11_forwarding`
- Default: `false`
- Default: `False`
- Description: Set to `false` to disable X11 Forwarding. Set to `true` to allow X11 Forwarding.
- Type: bool
- Required: no
- `ssh_pubkey_authentication`
- Default: `true`
- Description: Set to `false` to disable publickey authentication.
- Type: bool
- Required: no
- `sshd_authenticationmethods`
- Default: `publickey`
- Description: Specifies the authentication methods that must be successfully completed for a user to be granted access. Make sure to set all required variables for your selected authentication method. Defaults found in `defaults/main.yml`
- Type: str
- Required: no
- `sshd_custom_options`
- Default: ``
- Default: `[]`
- Description: Custom lines for SSH daemon configuration.
- Type: list
- Type: list of ''
- Required: no
- `sshd_log_level`
- Default: `VERBOSE`
@@ -454,7 +466,7 @@ If idempotency is important, please consider using role [`ssh-hardening-fallback
- Type: int
- Required: no
- `sshd_strict_modes`
- Default: `true`
- Default: `True`
- Description: Check file modes and ownership of the user's files and home directory before accepting login.
- Type: bool
- Required: no
@@ -472,6 +484,7 @@ None.
```
- hosts: all
become: true
roles:
- name: devsec.hardening.ssh_hardening
```
+5 -7
View File
@@ -1,4 +1,5 @@
---
# true if IPv6 is needed
network_ipv6_enable: true # sshd + ssh
@@ -6,9 +7,12 @@ network_ipv6_enable: true # sshd + ssh
ssh_client_config_file: /etc/ssh/ssh_config # ssh
ssh_server_config_file: /etc/ssh/sshd_config # sshd
# true if sshd should be started and enabled
# true if sshd should be started
ssh_server_enabled: true # sshd
# true if sshd should be enabled at boot
ssh_server_service_enabled: true # sshd
# true if DNS resolutions are needed, look up the remote host name,
# defaults to false from 6.8, see: http://www.openssh.com/txt/release-6.8
ssh_use_dns: false # sshd
@@ -36,9 +40,6 @@ ssh_client_port: "22" # ssh
# Default is empty, but should be configured for security reasons!
ssh_listen_to: [0.0.0.0] # sshd
# Host keys to look for when starting sshd.
ssh_host_key_files: [] # sshd
# Host RSA key size in bits
ssh_host_rsa_key_size: 4096 # sshd
@@ -202,9 +203,6 @@ ssh_max_startups: 10:30:60 # sshd
ssh_ps59: sandbox
ssh_macs: []
ssh_ciphers: []
ssh_kex: []
# directory where to store ssh_password policy
ssh_custom_selinux_dir: /etc/selinux/local-policies
+10 -7
View File
@@ -29,7 +29,6 @@ argument_specs:
Default is all IPv4 addresses, but should be configured to specific addresses
for security reasons
ssh_host_key_files:
default: []
type: list
description: Host keys for sshd. If empty ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key',
'/etc/ssh/ssh_host_ed25519_key'] will be used, as far as supported by the
@@ -65,8 +64,8 @@ argument_specs:
ssh_permit_tunnel:
default: 'no'
description: Specifies whether tun(4) device forwarding is allowed. The argument
must be yes, point-to-point (layer 3), ethernet (layer 2), or no. Specifying
yes permits both point-to-point and ethernet.
must be "yes", point-to-point (layer 3), ethernet (layer 2), or "no". Specifying
yes permits both point-to-point and ethernet. - The quotes are required!
choices:
- 'no'
- 'yes'
@@ -88,7 +87,7 @@ argument_specs:
you can specify `'yes'`, `'no'`, `'all'`, `'local'`or`'remote'`.
ssh_gateway_ports:
default: false
type: bool
type: raw
description: Set to `false` to disable binding forwarded ports to non-loopback
addresses. Set to `true` to force binding on wildcard address. Set to `clientspecified`
to allow the client to specify which address to bind to.
@@ -259,6 +258,10 @@ argument_specs:
default: true
type: bool
description: Set to `false` to disable the opensshd server.
ssh_server_service_enabled:
default: true
type: bool
description: Set to `false` to disable starting sshd at boot.
ssh_server_hardening:
default: true
type: bool
@@ -314,15 +317,12 @@ argument_specs:
description: Specifies the maximum number of concurrent unauthenticated connections
to the SSH daemon.
ssh_macs:
default: []
type: list
description: Change this list to overwrite macs. Defaults found in `defaults/main.yml`
ssh_kex:
default: []
type: list
description: Change this list to overwrite kexs. Defaults found in `defaults/main.yml`
ssh_ciphers:
default: []
type: list
description: Change this list to overwrite ciphers. Defaults found in `defaults/main.yml`
ssh_custom_options:
@@ -365,3 +365,6 @@ argument_specs:
default: sandbox
description: Specifies whether sshd separates privileges by creating an unprivileged
child process to deal with incoming network traffic.
ssh_forward_agent:
default: 'no'
description: Enables the ssh forward agent for the Cli if set to 'yes'
+3 -4
View File
@@ -8,25 +8,24 @@ galaxy_info:
platforms:
- name: EL
versions:
- "7"
- "8"
- "9"
- name: Ubuntu
versions:
- bionic
- focal
- jammy
- noble
- name: Debian
versions:
- buster
- bookworm
- bullseye
- name: Alpine
- name: Amazon
- name: Fedora
- name: ArchLinux
- name: SmartOS
- name: FreeBSD
versions:
- "12.2"
- "13.2"
- "14.0"
- name: OpenBSD
@@ -0,0 +1,16 @@
---
- name: Remove ssh service systemd-socket file
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- /etc/systemd/system/ssh.service.d/00-socket.conf
- /etc/systemd/system/ssh.service.requires/ssh.socket
- /etc/systemd/system/sockets.target.wants/ssh.socket
- name: Disable systemd-socket activation
ansible.builtin.systemd:
name: ssh.socket
state: stopped
enabled: false
masked: true
+15 -4
View File
@@ -22,6 +22,9 @@
with_dict: "{{ os_vars }}"
tags: always
- name: Install openssh package and configure the service
ansible.builtin.include_tasks: install.yml
- name: Get openssh-version
ansible.builtin.command: ssh -V
register: sshd_version_raw
@@ -36,19 +39,22 @@
ansible.builtin.include_tasks: crypto_hostkeys.yml
when:
- ssh_server_hardening | bool
- not ssh_host_key_files
- ssh_host_key_files is undefined
- name: Set default for ssh_macs if not supplied
ansible.builtin.include_tasks: crypto_macs.yml
when: not ssh_macs
when:
- ssh_macs is undefined
- name: Set default for ssh_ciphers if not supplied
ansible.builtin.include_tasks: crypto_ciphers.yml
when: not ssh_ciphers
when:
- ssh_ciphers is undefined
- name: Set default for ssh_kex if not supplied
ansible.builtin.include_tasks: crypto_kex.yml
when: not ssh_kex
when:
- ssh_kex is undefined
- name: Create revoked_keys and set permissions to root/600
ansible.builtin.template:
@@ -135,3 +141,8 @@
when:
- sshd_disable_crypto_policy | bool
- ('crypto-policies' in ansible_facts.packages)
- name: Enable or disable sshd service
ansible.builtin.service:
name: "{{ sshd_service_name }}"
enabled: "{{ ssh_server_service_enabled }}"
+35
View File
@@ -0,0 +1,35 @@
---
- name: Install openssh package(s)
ansible.builtin.package:
name: "{{ pkg }}"
state: present
loop: "{{ ssh_pkgs }}"
loop_control:
loop_var: pkg
# see https://github.com/dev-sec/ansible-collection-hardening/issues/763
- name: Change Debian/Ubuntu systems so ssh starts traditionally instead of socket-activated
ansible.builtin.include_tasks: disable-systemd-socket.yml
when:
- ssh_server_hardening | bool
- ssh_server_enabled | bool
- (ansible_facts.distribution == 'Ubuntu' and ansible_facts.distribution_major_version is version('22.04', '>=')) or
(ansible_facts.os_family == 'Debian' and ansible_facts.distribution_major_version is version('12', '>='))
- name: Ensure privilege separation directory exists
ansible.builtin.file:
path: /run/sshd
state: directory
owner: root
group: root
mode: '0755'
when:
- ssh_server_hardening | bool
- ssh_server_enabled | bool
- ansible_facts.os_family == 'Debian'
- name: Enable or disable sshd service
ansible.builtin.service:
name: "{{ sshd_service_name }}"
enabled: "{{ ssh_server_service_enabled }}"
@@ -90,7 +90,9 @@ StrictHostKeyChecking ask
{% endif %}
# Disable agent forwarding, since local agent could be accessed through forwarded connection.
ForwardAgent 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.
ForwardX11 no
+21 -7
View File
@@ -34,9 +34,11 @@ ListenAddress {{ address }}
{% endfor %}
# HostKeys are listed here.
{% for key in ssh_host_key_files %}
{% if ssh_host_key_files is defined and ssh_host_key_files -%}
{% for key in ssh_host_key_files %}
HostKey {{ key }}
{% endfor %}
{% endfor %}
{% endif %}
# HostCertificates are listed here.
{% for certificate in ssh_host_certificates -%}
@@ -73,14 +75,22 @@ LogLevel {{ sshd_log_level }}
# -- see: (http://net-ssh.github.com/net-ssh/classes/Net/SSH/Transport/CipherFactory.html)
#
{# This outputs 'Ciphers <list-of-ciphers>' if ssh_ciphers is defined or '#Ciphers' if ssh_ciphers is undefined -#}
{{ 'Ciphers ' ~ ssh_ciphers|join(',') if ssh_ciphers else 'Ciphers'|comment }}
{% if ssh_ciphers is defined and ssh_ciphers -%}
{{ 'Ciphers ' ~ ssh_ciphers|join(',') }}
{% else -%}
{{ 'Ciphers'|comment }}
{% endif %}
# **Hash algorithms** -- SHA-1 is formally deprecated by NIST in 2011 because of security issues.
# Weak HMAC is sometimes required if older package versions are used
# eg Ruby's Net::SSH at around 2.2.* doesn't support sha2 for hmac, so this will have to be set true in this case.
#
{# This outputs 'MACs <list-of-macs>' if ssh_macs is defined or '#MACs' if ssh_macs is undefined -#}
{{ 'MACs ' ~ ssh_macs|join(',') if ssh_macs else 'MACs'|comment }}
{% if ssh_macs is defined and ssh_macs -%}
{{ 'MACs ' ~ ssh_macs|join(',') }}
{% else -%}
{{ 'MACs'|comment }}
{% endif %}
{% if sshd_version is version('5.9', '<') %}
# Alternative setting, if OpenSSH version is below v5.9
@@ -92,8 +102,12 @@ LogLevel {{ sshd_log_level }}
# eg ruby's Net::SSH at around 2.2.* doesn't support sha2 for kex, so this will have to be set true in this case.
# based on: https://bettercrypto.org/static/applied-crypto-hardening.pdf
#
{# This outputs 'KexAlgorithms <list-of-algos>' if ssh_kex is defined or '#KexAlgorithms' if ssh_kex is undefined #}
{{ 'KexAlgorithms ' ~ ssh_kex|join(',') if ssh_kex else 'KexAlgorithms'|comment }}
{# This outputs 'KexAlgorithms <list-of-algos>' if ssh_kex is defined and ssh_kex or '#KexAlgorithms' if ssh_kex is undefined #}
{% if ssh_kex is defined and ssh_kex -%}
{{ 'KexAlgorithms ' ~ ssh_kex|join(',') }}
{% else -%}
{{ 'KexAlgorithms'|comment }}
{% endif %}
# Authentication
# --------------
@@ -157,7 +171,7 @@ DenyUsers {{ ssh_deny_users }}
{% endif %}
{% if ssh_allow_users %}
AllowUsers {{ ssh_allow_users }}
AllowUsers {{ ssh_allow_users if (ssh_allow_users is string) else (ssh_allow_users|join(' ')) }}
{% endif %}
{% if ssh_deny_groups %}
@@ -1,15 +1,14 @@
---
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: ssh_keys
ssh_host_keys_group: root
ssh_host_keys_mode: "0600"
ssh_selinux_packages:
- policycoreutils-python
- checkpolicy
# true if SSH support Kerberos
ssh_kerberos_support: true
@@ -19,6 +18,6 @@ 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
# CRYPTO_POLICY is not supported on Archlinux
# and the package check only works in Ansible >2.10
sshd_disable_crypto_policy: false
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+4 -1
View File
@@ -1,4 +1,7 @@
---
ssh_pkgs:
- openssh-server
- openssh-client
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: ssh
@@ -8,7 +11,7 @@ ssh_host_keys_owner: root
ssh_host_keys_group: root
ssh_host_keys_mode: "0600"
ssh_selinux_packages:
- policycoreutils-python
- policycoreutils-python-utils
- checkpolicy
# true if SSH support Kerberos
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh-portable
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+4
View File
@@ -1,4 +1,8 @@
---
# It seems that OpenBSD comes with openssh in the base install so we can't
# really install it as a separated package. Feel free to patch this if it's
# not the expected way to handle that on OpenBSD
ssh_pkgs: []
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/lib/ssh/sshd
ssh_host_keys_dir: /var/ssh
sshd_service_name: ssh
+2
View File
@@ -1,4 +1,6 @@
---
ssh_pkgs:
- openssh
sshd_path: /usr/sbin/sshd
ssh_host_keys_dir: /etc/ssh
sshd_service_name: sshd
+1
View File
@@ -1,4 +1,5 @@
---
ssh_macs_53_default:
- hmac-ripemd160
- hmac-sha1