Compare commits
201
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c4803e9a4 | ||
|
|
e746a25fe8 | ||
|
|
f0596e36b7 | ||
|
|
4880a5f852 | ||
|
|
f620ee1548 | ||
|
|
2ef4f026da | ||
|
|
2372abd97f | ||
|
|
85415e7127 | ||
|
|
3be6a3b2a5 | ||
|
|
8582cae0d4 | ||
|
|
22aec478d8 | ||
|
|
46441448be | ||
|
|
9158d01ee4 | ||
|
|
78adcf4e15 | ||
|
|
32f88e5456 | ||
|
|
49e17ad910 | ||
|
|
07b20eb796 | ||
|
|
1d49d86d8c | ||
|
|
c029b84138 | ||
|
|
c41fd51b63 | ||
|
|
dfdbeaa247 | ||
|
|
9f48cf4bbc | ||
|
|
829c1d88dc | ||
|
|
144c308ee0 | ||
|
|
0bd061c02d | ||
|
|
c53e8bcb1e | ||
|
|
ab93a75788 | ||
|
|
5e7005a91f | ||
|
|
4d32540823 | ||
|
|
b7f0bdd81f | ||
|
|
e13bb0fcae | ||
|
|
e8cf61bd3c | ||
|
|
767293e40b | ||
|
|
4b05df756c | ||
|
|
fba07a4d41 | ||
|
|
6f531d78f0 | ||
|
|
09ce9269a7 | ||
|
|
a40b1c8d0d | ||
|
|
c6c1a78497 | ||
|
|
b7aeb560c9 | ||
|
|
587bfc52b4 | ||
|
|
8d726c317f | ||
|
|
cb1ebe0ed8 | ||
|
|
ca17c66742 | ||
|
|
c2712fc3d9 | ||
|
|
7d8e792175 | ||
|
|
00161845d2 | ||
|
|
2634c624df | ||
|
|
74a121e774 | ||
|
|
28f9ef09ed | ||
|
|
674c7b4551 | ||
|
|
3db0a70ccf | ||
|
|
fd5a8f39dd | ||
|
|
f8e199b315 | ||
|
|
577c87d07b | ||
|
|
9096046161 | ||
|
|
fe6a957a90 | ||
|
|
47ff6e41ac | ||
|
|
069966702d | ||
|
|
ad79abb889 | ||
|
|
82a84eec94 | ||
|
|
cb85a99e22 | ||
|
|
96d318eaf4 | ||
|
|
5b28117d72 | ||
|
|
f2af5f0b52 | ||
|
|
8d9569cd71 | ||
|
|
259aa71946 | ||
|
|
5015cda4f0 | ||
|
|
532b7a70ea | ||
|
|
8d336bcdfa | ||
|
|
8fffcde096 | ||
|
|
37785016d9 | ||
|
|
5d95dc7083 | ||
|
|
f70a74f99f | ||
|
|
b6d11a0b19 | ||
|
|
92995bbee3 | ||
|
|
752a541507 | ||
|
|
45193e9ff1 | ||
|
|
7dab72c8c1 | ||
|
|
8619b26b75 | ||
|
|
7b112dcf87 | ||
|
|
cd9cf8f22a | ||
|
|
08dfeedbc0 | ||
|
|
759b746429 | ||
|
|
e6ea4f0b4c | ||
|
|
94f05a971a | ||
|
|
aa737011e4 | ||
|
|
19ac284200 | ||
|
|
141efbc516 | ||
|
|
7cca65bc90 | ||
|
|
cfd4536868 | ||
|
|
a97a54dc30 | ||
|
|
a1c7e77f08 | ||
|
|
be5a98bce5 | ||
|
|
1464ee7693 | ||
|
|
ba1991b4c1 | ||
|
|
a234d23d77 | ||
|
|
3923ea888b | ||
|
|
27aa081889 | ||
|
|
ee727ed9b2 | ||
|
|
d6d2624e4d | ||
|
|
62947a6ea2 | ||
|
|
6ff5cebeb3 | ||
|
|
421d502f90 | ||
|
|
d51f784244 | ||
|
|
fdcfd05a4c | ||
|
|
f5303344e4 | ||
|
|
9476dc9130 | ||
|
|
f445c29f26 | ||
|
|
2f93835a6f | ||
|
|
f380343a9d | ||
|
|
9c069ff8e8 | ||
|
|
6cc57e1581 | ||
|
|
5a28783a53 | ||
|
|
f3e012222a | ||
|
|
3bdae0d98f | ||
|
|
7faafb34de | ||
|
|
437546f4a9 | ||
|
|
1748396683 | ||
|
|
c185fa314f | ||
|
|
5ef0c42d64 | ||
|
|
3daba1f3ee | ||
|
|
ba5d025c82 | ||
|
|
2b495bf6b9 | ||
|
|
4c87d293ce | ||
|
|
2e3d5e916b | ||
|
|
077900eadd | ||
|
|
c705e50e0c | ||
|
|
75158eb6d3 | ||
|
|
ecee5ffcbd | ||
|
|
75f6b1a801 | ||
|
|
6824eda2ba | ||
|
|
d386d0fe1b | ||
|
|
e72f60e8e1 | ||
|
|
a1215c7bd4 | ||
|
|
1536b61e32 | ||
|
|
3f3e8cf2f2 | ||
|
|
83c5918339 | ||
|
|
4bf2d57013 | ||
|
|
683706a024 | ||
|
|
81067084d1 | ||
|
|
7cac37de92 | ||
|
|
ea2fe100b5 | ||
|
|
3e67f91dbd | ||
|
|
cd9cdff971 | ||
|
|
7ae5452355 | ||
|
|
3250d179bc | ||
|
|
b1cff78ae2 | ||
|
|
caaae61322 | ||
|
|
c5935d38e5 | ||
|
|
0989606757 | ||
|
|
69ab9e47ad | ||
|
|
118a0f07f6 | ||
|
|
7fd8a195aa | ||
|
|
e73f36d20b | ||
|
|
6c9de30d90 | ||
|
|
f7157dad4f | ||
|
|
f1fc3986fe | ||
|
|
2ff44f2145 | ||
|
|
f1b0bed5c8 | ||
|
|
f23d5d8eaf | ||
|
|
d92a1c9647 | ||
|
|
95a6f9b2e1 | ||
|
|
f1af4b7caa | ||
|
|
d37a2e5345 | ||
|
|
8b01afce46 | ||
|
|
237729a0c8 | ||
|
|
1c3f2418db | ||
|
|
41d922c2d4 | ||
|
|
a91343e180 | ||
|
|
ba1ab8fdfc | ||
|
|
059f9fe96c | ||
|
|
d0d438faa4 | ||
|
|
0233bfe543 | ||
|
|
ed85a70105 | ||
|
|
f9c8e4b749 | ||
|
|
77de9435fa | ||
|
|
7008a4b8ca | ||
|
|
563f1833df | ||
|
|
22e122ffdc | ||
|
|
c068979b91 | ||
|
|
b705cd95dc | ||
|
|
7f51a49265 | ||
|
|
aaaedee1cd | ||
|
|
c02b5d9c3a | ||
|
|
b0488e86d4 | ||
|
|
19ca997bd6 | ||
|
|
8dab761c52 | ||
|
|
26ecb3f5ea | ||
|
|
60de0ab50b | ||
|
|
265802360c | ||
|
|
b0f968af21 | ||
|
|
85aa1b22b3 | ||
|
|
4af40129c6 | ||
|
|
eb972f63f7 | ||
|
|
b6be42c3a0 | ||
|
|
296f46cc80 | ||
|
|
541c2df1ab | ||
|
|
2959a584a8 | ||
|
|
346ead4455 | ||
|
|
f3a1fcc16a |
No files matched your search
@@ -43,6 +43,7 @@ output_template: |
|
||||
|
||||
```
|
||||
- hosts: all
|
||||
become: true
|
||||
roles:
|
||||
- name: {{ role }}
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
major-labels: ['major']
|
||||
minor-labels: ['minor', 'enhancement']
|
||||
patch-labels: ['patch', 'bug']
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -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 }}"
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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))
|
||||
|
||||
@@ -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.
|
||||
@@ -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
@@ -1,6 +1,6 @@
|
||||
namespace: devsec
|
||||
name: hardening
|
||||
version: 9.0.1
|
||||
version: 10.2.0
|
||||
readme: README.md
|
||||
authors:
|
||||
- dev-sec <[email protected]>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:base",
|
||||
"config:best-practices",
|
||||
":gitSignOff"
|
||||
],
|
||||
"dependencyDashboard": true,
|
||||
|
||||
+7
-8
@@ -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
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
---
|
||||
- name: Install sssd-clients
|
||||
ansible.builtin.yum:
|
||||
ansible.builtin.dnf:
|
||||
name: sssd-client
|
||||
state: present
|
||||
when:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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'
|
||||
@@ -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
|
||||
@@ -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 }}"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh-portable
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/lib/ssh/sshd
|
||||
ssh_host_keys_dir: /var/ssh
|
||||
sshd_service_name: ssh
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
ssh_pkgs:
|
||||
- openssh
|
||||
sshd_path: /usr/sbin/sshd
|
||||
ssh_host_keys_dir: /etc/ssh
|
||||
sshd_service_name: sshd
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
|
||||
ssh_macs_53_default:
|
||||
- hmac-ripemd160
|
||||
- hmac-sha1
|
||||
|
||||
Reference in new issue
Block a user