Compare commits

..
1 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
85 changed files with 327 additions and 634 deletions

No files matched your search

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