Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2db75b53c1 | ||
|
|
aea12c8b90 | ||
|
|
0371a2690b | ||
|
|
3525db8c44 | ||
|
|
adda83572a | ||
|
|
01bde49fbc | ||
|
|
9bf243f198 | ||
|
|
3d98cbf67b | ||
|
|
4a5a6e18e7 | ||
|
|
5ac5547ba4 | ||
|
|
15f2de8b44 | ||
|
|
695f85f758 | ||
|
|
57d2d524b3 | ||
|
|
e4cfa198af | ||
|
|
eac33e8918 | ||
|
|
655cb49630 | ||
|
|
3c73f8ab1d | ||
|
|
8e97184d5e | ||
|
|
7437f68c86 | ||
|
|
bf177add07 | ||
|
|
fb22b242fe | ||
|
|
0c8c96a535 | ||
|
|
99784726f8 | ||
|
|
2f5360225b | ||
|
|
fdf7bbd7be | ||
|
|
ee1fec3d3e | ||
|
|
35df355248 | ||
|
|
ec8811acdf | ||
|
|
6681e0b319 | ||
|
|
79dc1d5474 | ||
|
|
219ec1938b | ||
|
|
336861838a | ||
|
|
b07ac77223 | ||
|
|
665edd5157 | ||
|
|
8f516018b6 | ||
|
|
4756a620f2 | ||
|
|
c59a4d4e48 | ||
|
|
216b56f468 | ||
|
|
36715017d7 | ||
|
|
2c18d3afda | ||
|
|
bd721317d2 | ||
|
|
92e6cad463 | ||
|
|
66adae0faa | ||
|
|
dc583422bc | ||
|
|
4c5a5deec6 | ||
|
|
a6892904bf | ||
|
|
0675167cb2 | ||
|
|
8d5143b5d7 | ||
|
|
0bf528d83b | ||
|
|
cd572de55a | ||
|
|
da017fa880 | ||
|
|
4978598e00 | ||
|
|
ac7ef8aae6 | ||
|
|
27a1f6e5e8 | ||
|
|
e84b407c44 | ||
|
|
8252b82764 | ||
|
|
5aa26aa039 | ||
|
|
1b0576695e | ||
|
|
d63015c2a7 | ||
|
|
a08a057f7b | ||
|
|
787ac9bd54 | ||
|
|
91d10892dc | ||
|
|
90ca33466e | ||
|
|
b01789b14b | ||
|
|
526e369999 | ||
|
|
9c2f12561a | ||
|
|
cec9c99763 | ||
|
|
dae8487ab3 | ||
|
|
35d87aa678 | ||
|
|
6833d66634 | ||
|
|
3bdd8c851e | ||
|
|
d86859962d | ||
|
|
965c9326d0 | ||
|
|
9c5b619149 | ||
|
|
ff4f2ee7f4 | ||
|
|
f602bc621a | ||
|
|
e3273a8d54 | ||
|
|
ca5484f96e | ||
|
|
c1a0bcbe9d | ||
|
|
f295397611 | ||
|
|
96ba9d1d8d | ||
|
|
3fb0831d7b |
No files matched your search
@@ -0,0 +1,50 @@
|
||||
output_template: |
|
||||
<!-- BEGIN_ANSIBLE_DOCS -->
|
||||
|
||||
## Supported Operating Systems
|
||||
|
||||
{%- for platform in metadata.galaxy_info.platforms %}
|
||||
- {{ platform.name }}
|
||||
{%- if "versions" in platform %}
|
||||
- {{ platform.versions | default([]) | join(', ') }}
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
|
||||
## Role Variables
|
||||
{% for entrypoint in argument_specs.keys() %}
|
||||
{%- set path, options=entrypoint_options[entrypoint][0] -%}
|
||||
{%- for name, details in options.items() |sort() %}
|
||||
- `{{ name }}`
|
||||
- Default: `{{ details.display_default }}`
|
||||
- Description: {{ details.display_description }}
|
||||
- Type: {{ details.display_type }}
|
||||
- Required: {{ details.display_required }}
|
||||
{%- if details.choices %}
|
||||
- Choices:
|
||||
{%- for choice in details.choices %}
|
||||
- {{ choice }}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- endfor %}
|
||||
|
||||
## Dependencies
|
||||
|
||||
{%- if ("dependencies" in metadata) and (metadata.dependencies | length > 0) %}
|
||||
{%- for dependency in metadata.dependencies %}
|
||||
- {{ dependency }}
|
||||
{%- endfor %}
|
||||
{%- else %}
|
||||
|
||||
None.
|
||||
{%- endif %}
|
||||
|
||||
## Example Playbook
|
||||
|
||||
```
|
||||
- hosts: all
|
||||
roles:
|
||||
- name: {{ role }}
|
||||
```
|
||||
|
||||
<!-- END_ANSIBLE_DOCS -->
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
# Important: This sets up your GITHUB_WORKSPACE environment variable
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Lint Ansible Playbook
|
||||
# replace "master" with any valid ref
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
if: github.repository == 'dev-sec/ansible-collection-hardening'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
# deploy the collection first, because if it fails, we don't want
|
||||
# to update the galaxy.yml
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
galaxy_version: ${{ github.event.release.tag_name }}
|
||||
|
||||
# checkout master instead of the release-tag so we can push the galaxy.yml
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: master
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
# - fedora # geerlingguy.mysql does not support fedora
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ansible_collections/devsec/hardening
|
||||
submodules: true
|
||||
@@ -79,6 +79,16 @@ jobs:
|
||||
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
|
||||
if: ${{ startsWith(matrix.molecule_distro, 'Debian') }}
|
||||
|
||||
# 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
|
||||
# see CI logs of this action "INFO Set ANSIBLE_ROLES_PATH" should not be present, since we do not set a custom path
|
||||
# we have to find a proper way to configure this
|
||||
- name: Temporary fix for roles
|
||||
run: |
|
||||
mkdir -p /home/runner/.ansible
|
||||
ln -s /home/runner/work/ansible-collection-hardening/ansible-collection-hardening/ansible_collections/devsec/hardening/roles /home/runner/.ansible/roles
|
||||
|
||||
- name: Test with molecule
|
||||
run: |
|
||||
molecule --version
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
# - fedora # no support from geerlingguy role
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ansible_collections/devsec/hardening
|
||||
submodules: true
|
||||
@@ -68,6 +68,16 @@ jobs:
|
||||
pip install -r requirements.txt
|
||||
working-directory: ansible_collections/devsec/hardening
|
||||
|
||||
# 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
|
||||
# see CI logs of this action "INFO Set ANSIBLE_ROLES_PATH" should not be present, since we do not set a custom path
|
||||
# we have to find a proper way to configure this
|
||||
- name: Temporary fix for roles
|
||||
run: |
|
||||
mkdir -p /home/runner/.ansible
|
||||
ln -s /home/runner/work/ansible-collection-hardening/ansible-collection-hardening/ansible_collections/devsec/hardening/roles /home/runner/.ansible/roles
|
||||
|
||||
- name: Test with molecule
|
||||
run: |
|
||||
molecule --version
|
||||
|
||||
@@ -39,8 +39,8 @@ jobs:
|
||||
- centosstream9
|
||||
- rocky8
|
||||
- rocky9
|
||||
- fedora37
|
||||
- fedora38
|
||||
- fedora39
|
||||
- ubuntu1804
|
||||
- ubuntu2004
|
||||
- ubuntu2204
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
- arch
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ansible_collections/devsec/hardening
|
||||
submodules: true
|
||||
|
||||
@@ -34,24 +34,24 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
molecule_distro:
|
||||
- centos7
|
||||
- centos8s
|
||||
- centos9s
|
||||
- rocky8
|
||||
- rocky9
|
||||
- fedora37
|
||||
- fedora38
|
||||
- ubuntu1804
|
||||
- ubuntu2004
|
||||
- ubuntu2204
|
||||
- debian10
|
||||
- debian11
|
||||
# - debian12 # waiting for https://github.com/lavabit/robox/pull/274
|
||||
- opensuse15
|
||||
# - arch # needs fix for audit
|
||||
- generic/centos7
|
||||
- generic/centos8s
|
||||
- generic/centos9s
|
||||
- generic/rocky8
|
||||
- generic/rocky9
|
||||
- fedora/38-cloud-base
|
||||
- fedora/39-cloud-base
|
||||
- generic/ubuntu1804
|
||||
- generic/ubuntu2004
|
||||
- generic/ubuntu2204
|
||||
- generic/debian10
|
||||
- generic/debian11
|
||||
- generic/debian12
|
||||
- generic/opensuse15
|
||||
# - generic/arch # needs fix for audit
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ansible_collections/devsec/hardening
|
||||
submodules: true
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Git checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ jobs:
|
||||
if: github.repository == 'dev-sec/ansible-collection-hardening'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: master
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
name: create roles readme
|
||||
|
||||
on: # yamllint disable-line rule:truthy
|
||||
push:
|
||||
branches: [master]
|
||||
paths:
|
||||
- 'roles/**/meta/argument_specs.yml'
|
||||
pull_request:
|
||||
branches: [master]
|
||||
paths:
|
||||
- 'roles/**/meta/argument_specs.yml'
|
||||
|
||||
jobs:
|
||||
readme:
|
||||
name: create roles readme
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
roles:
|
||||
- mysql_hardening
|
||||
- nginx_hardening
|
||||
- os_hardening
|
||||
- ssh_hardening
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.11
|
||||
|
||||
- name: Install aar_doc
|
||||
run: pip3 install aar_doc
|
||||
|
||||
- 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]
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: 'update ${{ matrix.roles }} readme'
|
||||
files: roles/${{ matrix.roles }}/README.md
|
||||
rebase: true
|
||||
name: dev-sec CI
|
||||
email: [email protected]
|
||||
@@ -39,8 +39,8 @@ jobs:
|
||||
- centosstream9
|
||||
- rocky8
|
||||
- rocky9
|
||||
- fedora37
|
||||
- fedora38
|
||||
- fedora39
|
||||
- ubuntu1804
|
||||
- ubuntu2004
|
||||
- ubuntu2204
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
# - opensuse_tumbleweed # needs fix - opensuse has different file location for conf and pam (/usr/etc/ssh/?, /usr/lib/pam.d/?)
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ansible_collections/devsec/hardening
|
||||
submodules: true
|
||||
|
||||
@@ -36,9 +36,11 @@ jobs:
|
||||
molecule_distro:
|
||||
- openbsd7
|
||||
- freebsd12
|
||||
- freebsd13
|
||||
- freebsd14
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ansible_collections/devsec/hardening
|
||||
submodules: true
|
||||
|
||||
@@ -39,8 +39,8 @@ jobs:
|
||||
- centosstream9
|
||||
- rocky8
|
||||
- rocky9
|
||||
- fedora37
|
||||
- fedora38
|
||||
- fedora39
|
||||
- ubuntu1804
|
||||
- ubuntu2004
|
||||
- ubuntu2204
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
# - opensuse_tumbleweed # needs fix - opensuse has different file location for conf and pam (/usr/etc/ssh/?, /usr/lib/pam.d/?)
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ansible_collections/devsec/hardening
|
||||
submodules: true
|
||||
|
||||
+51
-3
@@ -1,6 +1,54 @@
|
||||
# Changelog
|
||||
|
||||
## [8.8.0](https://github.com/dev-sec/ansible-collection-hardening/tree/8.8.0) (2023-07-24)
|
||||
## [8.9.0](https://github.com/dev-sec/ansible-collection-hardening/tree/8.9.0) (2023-11-16)
|
||||
|
||||
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/8.8.0...8.9.0)
|
||||
|
||||
**Breaking changes:**
|
||||
|
||||
- add role argument spec for os, ssh, mysql [\#687](https://github.com/dev-sec/ansible-collection-hardening/pull/687) [[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))
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- Create role documentation with Automated-Ansible-Role-Documentation [\#694](https://github.com/dev-sec/ansible-collection-hardening/issues/694)
|
||||
- Minimize access user paths should be fully configurable [\#689](https://github.com/dev-sec/ansible-collection-hardening/issues/689)
|
||||
- Add support for Debian 12 [\#672](https://github.com/dev-sec/ansible-collection-hardening/issues/672)
|
||||
- add testing and support for current versions of Fedora and FreeBSD [\#709](https://github.com/dev-sec/ansible-collection-hardening/pull/709) [[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))
|
||||
- feat: workflow for roles readme [\#705](https://github.com/dev-sec/ansible-collection-hardening/pull/705) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([Nemental](https://github.com/Nemental))
|
||||
- do not try to drop roles in mysql hardening [\#649](https://github.com/dev-sec/ansible-collection-hardening/pull/649) [[mysql_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/mysql_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- nginx conf.d directory is missing on Rocky Linux 8 [\#707](https://github.com/dev-sec/ansible-collection-hardening/issues/707)
|
||||
- Default value of `ssh_client_alive_interval` is inconsistent with what documentation says [\#701](https://github.com/dev-sec/ansible-collection-hardening/issues/701)
|
||||
- \[devsec.hardening.os\_hardening : restart-auditd\] fails [\#698](https://github.com/dev-sec/ansible-collection-hardening/issues/698)
|
||||
- sshd\_hardening role cannot be used to build system images [\#697](https://github.com/dev-sec/ansible-collection-hardening/issues/697)
|
||||
- Error: No file was found when using first\_found on Ubuntu 20.04 [\#676](https://github.com/dev-sec/ansible-collection-hardening/issues/676)
|
||||
- PUBLIC-role breaks mysql-hardening [\#648](https://github.com/dev-sec/ansible-collection-hardening/issues/648)
|
||||
- Error deploying the playbook [\#630](https://github.com/dev-sec/ansible-collection-hardening/issues/630)
|
||||
- Gather facts when os\_hardening role is executed with tags [\#708](https://github.com/dev-sec/ansible-collection-hardening/pull/708) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
|
||||
|
||||
**Closed issues:**
|
||||
|
||||
- Dependency Dashboard [\#655](https://github.com/dev-sec/ansible-collection-hardening/issues/655)
|
||||
- Add send-to-mailinglist to github release action [\#434](https://github.com/dev-sec/ansible-collection-hardening/issues/434)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- update status badges in README [\#714](https://github.com/dev-sec/ansible-collection-hardening/pull/714) [[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 CI test for os\_hardening [\#711](https://github.com/dev-sec/ansible-collection-hardening/pull/711) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([schurzi](https://github.com/schurzi))
|
||||
- fix nginx CI tests [\#710](https://github.com/dev-sec/ansible-collection-hardening/pull/710) [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([schurzi](https://github.com/schurzi))
|
||||
- fix: roles-readme action default value [\#706](https://github.com/dev-sec/ansible-collection-hardening/pull/706) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([Nemental](https://github.com/Nemental))
|
||||
- fix some wrong defaults and types in the readmes [\#703](https://github.com/dev-sec/ansible-collection-hardening/pull/703) [[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))
|
||||
- update links to new Ansible Galaxy [\#702](https://github.com/dev-sec/ansible-collection-hardening/pull/702) [[nginx_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/nginx_hardening)] ([schurzi](https://github.com/schurzi))
|
||||
- Fix typo in login.defs.j2 [\#700](https://github.com/dev-sec/ansible-collection-hardening/pull/700) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([nejch](https://github.com/nejch))
|
||||
- chore\(deps\): update actions/checkout action to v4 [\#696](https://github.com/dev-sec/ansible-collection-hardening/pull/696) [[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))
|
||||
- test debian12 on VM [\#695](https://github.com/dev-sec/ansible-collection-hardening/pull/695) ([rndmh3ro](https://github.com/rndmh3ro))
|
||||
- fix descriptions in readme [\#693](https://github.com/dev-sec/ansible-collection-hardening/pull/693) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
|
||||
- feat: customize user paths default [\#692](https://github.com/dev-sec/ansible-collection-hardening/pull/692) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([S0obi](https://github.com/S0obi))
|
||||
- disable PAM tests [\#691](https://github.com/dev-sec/ansible-collection-hardening/pull/691) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
|
||||
|
||||
## [8.8.0](https://github.com/dev-sec/ansible-collection-hardening/tree/8.8.0) (2023-08-04)
|
||||
|
||||
[Full Changelog](https://github.com/dev-sec/ansible-collection-hardening/compare/8.7.0...8.8.0)
|
||||
|
||||
@@ -8,13 +56,14 @@
|
||||
|
||||
- Add support for Fedora 38 [\#671](https://github.com/dev-sec/ansible-collection-hardening/issues/671)
|
||||
- auditd: add possibility to override config template [\#685](https://github.com/dev-sec/ansible-collection-hardening/pull/685) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([Meecr0b](https://github.com/Meecr0b))
|
||||
- add debian 12 support [\#684](https://github.com/dev-sec/ansible-collection-hardening/pull/684) [[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))
|
||||
- feat: explicitly support Fedora 37 and 38 [\#682](https://github.com/dev-sec/ansible-collection-hardening/pull/682) [[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)] ([nejch](https://github.com/nejch))
|
||||
- Replace ssh\_keys group with root, where applicable and use less permissive file mode [\#677](https://github.com/dev-sec/ansible-collection-hardening/pull/677) [[ssh_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/ssh_hardening)] ([rndmh3ro](https://github.com/rndmh3ro))
|
||||
- Add oddjob mkhomedir option rhel pam [\#675](https://github.com/dev-sec/ansible-collection-hardening/pull/675) [[os_hardening](https://github.com/dev-sec/ansible-collection-hardening/labels/os_hardening)] ([imp1sh](https://github.com/imp1sh))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- Error: No file was found when using first\_found on Ubuntu 20.04 [\#676](https://github.com/dev-sec/ansible-collection-hardening/issues/676)
|
||||
- How does one set `sshd_authenticationmethods` to include password authentication? [\#686](https://github.com/dev-sec/ansible-collection-hardening/issues/686)
|
||||
- FreeIPA environment mkhomedir fails [\#664](https://github.com/dev-sec/ansible-collection-hardening/issues/664)
|
||||
|
||||
**Closed issues:**
|
||||
@@ -54,7 +103,6 @@
|
||||
|
||||
**Closed issues:**
|
||||
|
||||
- Dependency Dashboard [\#655](https://github.com/dev-sec/ansible-collection-hardening/issues/655)
|
||||
- Invalid login.defs for RHEL6 [\#651](https://github.com/dev-sec/ansible-collection-hardening/issues/651)
|
||||
- Deprecation warnings for os\_hardening [\#638](https://github.com/dev-sec/ansible-collection-hardening/issues/638)
|
||||
- Write tests for MySQL user-deletion [\#445](https://github.com/dev-sec/ansible-collection-hardening/issues/445)
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
# Ansible Collection - devsec.hardening
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/os_hardening_vm.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_bsd.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/nginx_hardening.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/mysql_hardening.yml)
|
||||
|
||||
## Description
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
namespace: devsec
|
||||
name: hardening
|
||||
version: 8.7.0
|
||||
version: 8.8.0
|
||||
readme: README.md
|
||||
authors:
|
||||
- dev-sec <[email protected]>
|
||||
|
||||
@@ -13,3 +13,20 @@
|
||||
- "CREATE USER 'user'@'keep' IDENTIFIED BY 'keep';"
|
||||
- "CREATE USER 'user'@'192.168.%' IDENTIFIED BY 'keep';"
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
|
||||
- name: Detect role support on MySQL
|
||||
community.mysql.mysql_query:
|
||||
query: >
|
||||
SELECT 1 FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user'
|
||||
AND COLUMN_NAME = 'is_role';
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
register: mysql_role_support
|
||||
|
||||
- name: create roles for test
|
||||
community.mysql.mysql_query:
|
||||
query:
|
||||
- "CREATE ROLE 'role_keep';"
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
when:
|
||||
- mysql_role_support.rowcount[0] > 0
|
||||
@@ -23,3 +23,19 @@
|
||||
- '"[email protected]" in mysql_users_list'
|
||||
- '"user@keep" in mysql_users_list'
|
||||
- '"[email protected].%" in mysql_users_list'
|
||||
|
||||
- name: Detect role support on MySQL
|
||||
community.mysql.mysql_query:
|
||||
query: >
|
||||
SELECT 1 FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user'
|
||||
AND COLUMN_NAME = 'is_role';
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
register: mysql_role_support
|
||||
|
||||
- name: assert that roles remain
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- '"role_keep@" in mysql_users_list'
|
||||
when:
|
||||
- mysql_role_support.rowcount[0] > 0
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
- name: install required tools on SuSE
|
||||
# cannot use zypper module, since it depends on python-xml
|
||||
shell: "zypper -n install python-xml"
|
||||
shell: "zypper -n install python-xml awk"
|
||||
when: ansible_facts.os_family == 'Suse'
|
||||
|
||||
- name: install required tools on fedora
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
- name: set ansible_python_interpreter to "/usr/bin/python3"
|
||||
set_fact:
|
||||
ansible_python_interpreter: "/usr/bin/python3"
|
||||
when: ansible_facts.distribution == 'Fedora'
|
||||
|
||||
- name: include verification tasks
|
||||
ansible.builtin.include_tasks:
|
||||
@@ -20,9 +21,10 @@
|
||||
- verify_tasks/netrc.yml
|
||||
- verify_tasks/ignore_home_folders.yml
|
||||
|
||||
- name: include PAM tests
|
||||
include_tasks: verify_tasks/pam.yml
|
||||
when: ansible_facts.distribution in ['Debian', 'Ubuntu'] or ansible_facts.os_family == 'RedHat'
|
||||
# temp. disabled - https://github.com/dev-sec/ansible-collection-hardening/issues/690
|
||||
# - name: include PAM tests
|
||||
# include_tasks: verify_tasks/pam.yml
|
||||
# when: ansible_facts.distribution in ['Debian', 'Ubuntu'] or ansible_facts.os_family == 'RedHat'
|
||||
|
||||
- name: include YUM tests
|
||||
include_tasks: verify_tasks/yum.yml
|
||||
|
||||
@@ -13,6 +13,12 @@
|
||||
set_fact:
|
||||
os_mnt_boot_enabled: false
|
||||
when: ansible_facts.os_family == 'Archlinux'
|
||||
- name: overrides for Fedora image
|
||||
set_fact:
|
||||
os_mnt_tmp_enabled: true
|
||||
os_mnt_tmp_src: "tmpfs"
|
||||
os_mnt_tmp_filesystem: "tmpfs"
|
||||
when: ansible_facts.distribution == 'Fedora'
|
||||
- include_role:
|
||||
name: os_hardening
|
||||
vars:
|
||||
@@ -20,4 +26,5 @@
|
||||
os_auth_lockout_time: 15
|
||||
os_yum_repo_file_whitelist: ['foo.repo']
|
||||
os_mnt_boot_enabled: true
|
||||
os_mnt_home_enabled: true
|
||||
os_mnt_boot_src: "/dev/vda1"
|
||||
@@ -12,7 +12,7 @@ platforms:
|
||||
# since we also need to use different OS users to run the tests because of how molecule operates,
|
||||
# the VM names must be predictable by OS user (to clean up canceled runs)
|
||||
- name: "${USER}"
|
||||
box: "generic/${MOLECULE_DISTRO}"
|
||||
box: "${MOLECULE_DISTRO}"
|
||||
memory: 1024
|
||||
cpus: 2
|
||||
provisioner:
|
||||
|
||||
@@ -51,6 +51,12 @@
|
||||
shell: "rm -f /usr/bin/zzz && ln -s /usr/bin /usr/bin/zzz"
|
||||
changed_when: false
|
||||
|
||||
- name: Unmount EFI partition to get rid of vfat filesystem (qemu has no firmware image that inspec can detect)
|
||||
ansible.posix.mount:
|
||||
path: /boot/efi
|
||||
state: unmounted
|
||||
when: ansible_facts.distribution == 'Fedora'
|
||||
|
||||
- name: include YUM prepare tasks
|
||||
include_tasks: prepare_tasks/yum.yml
|
||||
when: ansible_facts.os_family == 'RedHat'
|
||||
@@ -8,9 +8,10 @@
|
||||
no_proxy: "{{ lookup('env', 'no_proxy') | default(omit) }}"
|
||||
tasks:
|
||||
|
||||
- name: include PAM tests
|
||||
include_tasks: verify_tasks/pam.yml
|
||||
when: ansible_facts.distribution in ['Debian', 'Ubuntu'] or ansible_facts.os_family == 'RedHat'
|
||||
# temp. disabled - https://github.com/dev-sec/ansible-collection-hardening/issues/690
|
||||
# - name: include PAM tests
|
||||
# include_tasks: verify_tasks/pam.yml
|
||||
# when: ansible_facts.distribution in ['Debian', 'Ubuntu'] or ansible_facts.os_family == 'RedHat'
|
||||
|
||||
- name: include YUM tests
|
||||
include_tasks: verify_tasks/yum.yml
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
sshd-45:
|
||||
run: false
|
||||
justification: "PrintLastLog is broken on FreeBSD. see: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209441"
|
||||
@@ -0,0 +1,3 @@
|
||||
sshd-45:
|
||||
run: false
|
||||
justification: "PrintLastLog is broken on FreeBSD. see: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209441"
|
||||
@@ -20,11 +20,6 @@
|
||||
- path: "/etc/ssh/auth_principals/root"
|
||||
principals:
|
||||
- "root"
|
||||
owner: "{{ ssh_owner }}"
|
||||
group: "{{ ssh_group }}"
|
||||
directoryowner: "{{ ssh_owner }}"
|
||||
directorygroup: "{{ ssh_group }}"
|
||||
directorymode: "0700"
|
||||
network_ipv6_enable: true
|
||||
ssh_allow_tcp_forwarding: 'yes'
|
||||
ssh_gateway_ports: true
|
||||
@@ -43,7 +38,7 @@
|
||||
ssh_authorized_keys_file: '/etc/ssh/authorized_keys/%u'
|
||||
ssh_max_auth_retries: 10
|
||||
ssh_permit_root_login: "without-password"
|
||||
ssh_permit_tunnel: true
|
||||
ssh_permit_tunnel: 'yes'
|
||||
ssh_print_motd: true
|
||||
ssh_print_last_log: true
|
||||
ssh_banner: true
|
||||
|
||||
+111
-54
@@ -1,6 +1,6 @@
|
||||
# devsec.mysql_hardening
|
||||
|
||||

|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/mysql_hardening.yml)
|
||||
|
||||
## Description
|
||||
|
||||
@@ -12,74 +12,131 @@ It configures:
|
||||
- Removes anonymous users, users without a password or authentication_string and test databases
|
||||
- various hardening options inside MySQL
|
||||
|
||||
Changes of options `log_error` or `datadir` in `mysql_hardening_options` will not be checked for correct permissions. Please change/set `log_error` or `datadir` with the installation role of MySQL before running this role, or you can run this role twice.
|
||||
|
||||
Further information is available at [Deutsche Telekom (German)](http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si) and [Symantec](http://www.symantec.com/connect/articles/securing-mysql-step-step)
|
||||
|
||||
## Requirements
|
||||
|
||||
- Ansible 2.9.0
|
||||
- An existing MySQL installation
|
||||
- An existing installation of MySQL or MariaDB.
|
||||
- python-jmespath on the ansible host
|
||||
|
||||
### Example playbook
|
||||
<!-- BEGIN_ANSIBLE_DOCS -->
|
||||
|
||||
```yml
|
||||
- hosts: localhost
|
||||
collections:
|
||||
- devsec.hardening
|
||||
roles:
|
||||
- mysql_hardening
|
||||
```
|
||||
## Supported Operating Systems
|
||||
|
||||
This role expects an existing installation of MySQL or MariaDB. Changes of options `log_error` or `datadir` in `mysql_hardening_options` will not be checked for correct permissions. Please change/set `log_error` or `datadir` with the installation role of MySQL before running this role, or you can run this role twice.
|
||||
Please ensure that the following variables are set accordingly:
|
||||
|
||||
- `mysql_hardening_enabled: yes` role is enabled by default and can be disabled without removing it from a playbook. You can use conditional variable, for example: `mysql_hardening_enabled: "{{ true if mysql_enabled else false }}"`
|
||||
- `mysql_hardening_user: 'mysql'` The user that mysql runs as.
|
||||
- `mysql_hardening_mysql_hardening_conf_file: '/etc/mysql/conf.d/hardening.cnf'` The path to the configuration file where the hardening will be performed
|
||||
- _deprecated: `mysql_datadir: '/var/lib/mysql'` The MySQL data directory_
|
||||
- `mysql_datadir` is no longer necessary, as MySQL data directory is automatically taken from `mysql_info`. But it can still be defined and will also be checked for correct permissions.
|
||||
- EL
|
||||
- 7, 8, 9
|
||||
- Ubuntu
|
||||
- bionic, focal, jammy
|
||||
- Debian
|
||||
- bullseye, buster
|
||||
- Amazon
|
||||
- opensuse
|
||||
|
||||
## Role Variables
|
||||
|
||||
- `mysql_daemon_enabled`
|
||||
- Default: `true`
|
||||
- Description: Whether to enable the MySQL-service so it starts on boot
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `mysql_hardening_chroot`
|
||||
- Default: ""
|
||||
- Default: ``
|
||||
- Description: [chroot](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_chroot)
|
||||
- `mysql_hardening_options.safe-user-create`
|
||||
- Default: 1
|
||||
- Description: [safe-user-create](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_safe-user-create)
|
||||
- `mysql_hardening_options.secure-auth`
|
||||
- Default: 1
|
||||
- Description: [secure-auth](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_secure-auth)
|
||||
- `mysql_hardening_options.skip-symbolic-links`
|
||||
- Default: 1
|
||||
- Description: [skip-symbolic-links](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_symbolic-links)
|
||||
- `mysql_hardening_skip_grant_tables:`
|
||||
- Default: false
|
||||
- Description: [skip-grant-tables](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-grant-tables)
|
||||
- `mysql_hardening_skip_show_database`
|
||||
- Default: 1
|
||||
- Description: [skip-show-database](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-show-database)
|
||||
- `mysql_hardening_options.local-infile`
|
||||
- Default: 0
|
||||
- Description: [local-infile](http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_local_infile)
|
||||
- `mysql_hardening_options.allow-suspicious-udfs`
|
||||
- Default: 0
|
||||
- Description: [allow-suspicious-udfs](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_allow-suspicious-udfs)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `mysql_hardening_chroot.automatic-sp-privileges`
|
||||
- Default: 0
|
||||
- Default: `0`
|
||||
- Description: [automatic_sp_privileges](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_automatic_sp_privileges)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `mysql_hardening_enabled`
|
||||
- Default: `true`
|
||||
- Description: Whether to run the hardening
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `mysql_hardening_options.allow-suspicious-udfs`
|
||||
- Default: `0`
|
||||
- Description: [allow-suspicious-udfs](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_allow-suspicious-udfs)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `mysql_hardening_options.local-infile`
|
||||
- Default: `0`
|
||||
- Description: [local-infile](http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_local_infile)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `mysql_hardening_options.safe-user-create`
|
||||
- Default: `1`
|
||||
- Description: [safe-user-create](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_safe-user-create)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `mysql_hardening_options.secure-auth`
|
||||
- Default: `1`
|
||||
- Description: [secure-auth](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_secure-auth)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `mysql_hardening_options.secure-file-priv`
|
||||
- Default: /tmp
|
||||
- Default: `/tmp`
|
||||
- Description: [secure-file-priv](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_secure-file-priv)
|
||||
- `mysql_allow_remote_root`
|
||||
- Default: false
|
||||
- Description: delete remote root users
|
||||
- `mysql_remove_anonymous_users`
|
||||
- Default: true
|
||||
- Description: remove users without authentication
|
||||
- `mysql_remove_test_database`
|
||||
- Default: true
|
||||
- Description: remove test database
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `mysql_hardening_options.skip-symbolic-links`
|
||||
- Default: `1`
|
||||
- Description: [skip-symbolic-links](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_symbolic-links)
|
||||
- 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`
|
||||
- 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
|
||||
- `mysql_hardening_skip_show_database`
|
||||
- Default: `1`
|
||||
- Description: [skip-show-database](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-show-database)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `mysql_remove_anonymous_users`
|
||||
- Default: `true`
|
||||
- Description: Set to `false` to keep users without authentication
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `mysql_remove_remote_root`
|
||||
- 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`
|
||||
- Description: Set to `false` to keep the test database
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `mysql_root_password`
|
||||
- Default: `-----====>SetR00tPa$$wordH3r3!!!<====-----`
|
||||
- Description: The default password. Please change or overwrite it
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `mysql_user_home`
|
||||
- Default: `{{ ansible_env.HOME }}`
|
||||
- Description: The path where the `.my.cnf` will be stored
|
||||
- Type: str
|
||||
- Required: no
|
||||
|
||||
Further information is available at [Deutsche Telekom (German)](http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si) and [Symantec](http://www.symantec.com/connect/articles/securing-mysql-step-step)
|
||||
## Dependencies
|
||||
|
||||
None.
|
||||
|
||||
## Example Playbook
|
||||
|
||||
```
|
||||
- hosts: all
|
||||
roles:
|
||||
- name: devsec.hardening.mysql_hardening
|
||||
```
|
||||
|
||||
<!-- END_ANSIBLE_DOCS -->
|
||||
@@ -6,8 +6,6 @@ mysql_daemon_enabled: true
|
||||
|
||||
mysql_hardening_restart_mysql: true
|
||||
|
||||
# general configuration
|
||||
mysql_hardening_mysql_hardening_conf_file: "{{ mysql_hardening_mysql_confd_dir }}/hardening.cnf"
|
||||
# You have to change this to your own strong enough mysql root password
|
||||
mysql_root_password: "-----====>SetR00tPa$$wordH3r3!!!<====-----"
|
||||
# There .my.cnf with mysql root credentials will be installed
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
argument_specs:
|
||||
main:
|
||||
short_description: The main entry point for the mysql hardening role.
|
||||
version_added: 8.8.0
|
||||
options:
|
||||
mysql_hardening_chroot:
|
||||
default: ''
|
||||
type: str
|
||||
description: '[chroot](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_chroot)'
|
||||
mysql_hardening_options.safe-user-create:
|
||||
default: 1
|
||||
type: int
|
||||
description: '[safe-user-create](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_safe-user-create)'
|
||||
mysql_hardening_options.secure-auth:
|
||||
default: 1
|
||||
type: int
|
||||
description: '[secure-auth](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_secure-auth)'
|
||||
mysql_hardening_options.skip-symbolic-links:
|
||||
default: 1
|
||||
type: int
|
||||
description: '[skip-symbolic-links](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_symbolic-links)'
|
||||
'mysql_hardening_skip_grant_tables:':
|
||||
default: false
|
||||
type: bool
|
||||
description: '[skip-grant-tables](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-grant-tables)'
|
||||
mysql_hardening_skip_show_database:
|
||||
default: 1
|
||||
type: int
|
||||
description: '[skip-show-database](http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-show-database)'
|
||||
mysql_hardening_options.local-infile:
|
||||
default: 0
|
||||
type: int
|
||||
description: '[local-infile](http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_local_infile)'
|
||||
mysql_hardening_options.allow-suspicious-udfs:
|
||||
default: 0
|
||||
type: int
|
||||
description: '[allow-suspicious-udfs](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_allow-suspicious-udfs)'
|
||||
mysql_hardening_chroot.automatic-sp-privileges:
|
||||
default: 0
|
||||
type: int
|
||||
description: '[automatic_sp_privileges](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_automatic_sp_privileges)'
|
||||
mysql_hardening_options.secure-file-priv:
|
||||
default: /tmp
|
||||
type: str
|
||||
description: '[secure-file-priv](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_secure-file-priv)'
|
||||
mysql_remove_anonymous_users:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to keep users without authentication
|
||||
mysql_remove_test_database:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to keep the test database
|
||||
mysql_hardening_restart_mysql:
|
||||
default: true
|
||||
type: bool
|
||||
description: Restart mysql after running this role
|
||||
mysql_hardening_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Whether to run the hardening
|
||||
mysql_daemon_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Whether to enable the MySQL-service so it starts on boot
|
||||
mysql_root_password:
|
||||
default: '-----====>SetR00tPa$$wordH3r3!!!<====-----'
|
||||
type: str
|
||||
description: The default password. Please change or overwrite it
|
||||
mysql_user_home:
|
||||
default: '{{ ansible_env.HOME }}'
|
||||
type: str
|
||||
description: The path where the `.my.cnf` will be stored
|
||||
mysql_remove_remote_root:
|
||||
default: true
|
||||
type: bool
|
||||
description: If `true`, root can only connect from localhost. Set to `false`
|
||||
to not remove remote root users.
|
||||
@@ -56,7 +56,7 @@
|
||||
- name: Apply hardening configuration
|
||||
ansible.builtin.template:
|
||||
src: hardening.cnf.j2
|
||||
dest: "{{ mysql_hardening_mysql_hardening_conf_file }}"
|
||||
dest: "{{ mysql_hardening_mysql_confd_dir + '/hardening.cnf' }}"
|
||||
owner: "{{ mysql_cnf_owner }}"
|
||||
group: "{{ mysql_cnf_group }}"
|
||||
mode: "0640"
|
||||
|
||||
@@ -46,6 +46,16 @@
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
when: mysql_remove_remote_root
|
||||
|
||||
- name: Detect role support on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0
|
||||
community.mysql.mysql_query:
|
||||
query: >
|
||||
SELECT 1 FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user'
|
||||
AND COLUMN_NAME = 'is_role';
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
register: mysql_role_support
|
||||
check_mode: false
|
||||
|
||||
- name: Get all users that have no authentication_string on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0
|
||||
community.mysql.mysql_query:
|
||||
query: >
|
||||
@@ -55,7 +65,8 @@
|
||||
OR authentication_string="")
|
||||
AND USER NOT IN ('mysql.sys',
|
||||
'mysqlxsys',
|
||||
'mariadb.sys');
|
||||
'mariadb.sys')
|
||||
{{ 'AND CONVERT(is_role USING utf8) = "N"' if mysql_role_support.rowcount[0] > 0 }};
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
register: mysql_users_wo_passwords_or_auth_string
|
||||
check_mode: false
|
||||
@@ -75,7 +86,8 @@
|
||||
OR authentication_string="")
|
||||
AND USER NOT IN ('mysql.sys',
|
||||
'mysqlxsys',
|
||||
'mariadb.sys');
|
||||
'mariadb.sys')
|
||||
{{ 'AND is_role = "N"' if mysql_role_support.rowcount[0] > 0 }};
|
||||
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
|
||||
register: mysql_users_wo_passwords
|
||||
check_mode: false
|
||||
|
||||
+121
-89
@@ -1,6 +1,6 @@
|
||||
# devsec.nginx_hardening
|
||||
|
||||

|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/nginx_hardening.yml)
|
||||
|
||||
## Description
|
||||
|
||||
@@ -8,110 +8,142 @@ This role provides secure nginx configuration. It is intended to be compliant wi
|
||||
|
||||
It works with the following nginx-roles, including, but not limited to:
|
||||
|
||||
- [geerlingguy.nginx](https://galaxy.ansible.com/geerlingguy/nginx/)
|
||||
- [nginxinc.nginx](https://galaxy.ansible.com/nginxinc/nginx)
|
||||
- [jdauphant.nginx](https://galaxy.ansible.com/jdauphant/nginx/)
|
||||
- [franklinkim.nginx](https://galaxy.ansible.com/franklinkim/nginx/)
|
||||
- [nginxinc.nginx](https://galaxy.ansible.com/ui/standalone/roles/nginxinc/nginx/)
|
||||
- [geerlinggux.nginx](https://galaxy.ansible.com/ui/standalone/roles/geerlingguy/nginx/)
|
||||
- [jdauphant.nginx](https://galaxy.ansible.com/ui/standalone/roles/jdauphant/nginx/)
|
||||
|
||||
**NOTE: This role does not work with nginx 1.0.15 or older! Please use the latest version from the official nginx repositories!**
|
||||
|
||||
## Requirements
|
||||
<!-- BEGIN_ANSIBLE_DOCS -->
|
||||
|
||||
- Ansible >= 2.9
|
||||
## Supported Operating Systems
|
||||
|
||||
- EL
|
||||
- 7, 8, 9
|
||||
- Ubuntu
|
||||
- bionic, focal, jammy
|
||||
- Debian
|
||||
- buster, bullseye
|
||||
- Amazon
|
||||
|
||||
## Role Variables
|
||||
|
||||
- [nginx_client_body_buffer_size][]
|
||||
- `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'\\\""]`
|
||||
- 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
|
||||
- Required: no
|
||||
- `nginx_client_body_buffer_size`
|
||||
- Default: `1k`
|
||||
- Description: Sets buffer size for reading client request body. In case the request body is larger than the buffer, the whole body or only its part is written to a temporary file.
|
||||
- nginx_remove_default_site
|
||||
- Description: Sets buffer size for reading client request body. In case the request body is larger than the buffer, the whole body or only its part is written to a temporary file. See [nginx_client_body_buffer_size](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_client_body_timeout`
|
||||
- Default: `10`
|
||||
- Description: Defines a timeout for reading client request body. See [nginx_client_body_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `nginx_client_header_buffer_size`
|
||||
- Default: `1k`
|
||||
- Description: Sets buffer size for reading client request header. For most requests, a buffer of 1K bytes is enough. See [nginx_client_header_buffer_size](http://nginx.org/en/docs/http/ngx_http_core_module.html#client
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_client_header_timeout`
|
||||
- Default: `10`
|
||||
- Description: Defines a timeout for reading client request header. See [nginx_client_header_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_header_timeout)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `nginx_client_max_body_size`
|
||||
- Default: `1k`
|
||||
- Description: Sets the maximum allowed size of the client request body, specified in the "Content-Length" request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. See [nginx_client_max_body_size](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_configuration_dir`
|
||||
- Default: `/etc/nginx`
|
||||
- Description: The main location for all nginx configuration files
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_configuration_hardening_dir`
|
||||
- Default: `/etc/nginx`
|
||||
- Description: The location for the nginx hardening configuration file (Could be different e.g. when used in jails)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_dh_size`
|
||||
- Default: `2048`
|
||||
- Description: Specifies the length of DH parameters for EDH ciphers. See [nginx_dh_size](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_dhparam)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `nginx_keepalive_timeout`
|
||||
- Default: `5 5`
|
||||
- Description: The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections. The optional second parameter sets a value in the "Keep-Alive timeout=time" response header field. See [nginx_keepalive_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_large_client_header_buffers`
|
||||
- Default: `2 1k`
|
||||
- Description: Sets the maximum number and size of buffers used for reading large client request header. See [nginx_large_client_header_buffers](http://nginx.org/en/docs/http/ngx_http_core_module.html#large_client_header_buffers)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_limit_conn`
|
||||
- Default: `default 5`
|
||||
- Description: Sets the shared memory zone and the maximum allowed number of connections for a given key value. See [nginx_limit_conn](http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_limit_conn_zone`
|
||||
- Default: `$binary_remote_addr zone=default:10m`
|
||||
- Description: Sets parameters for a shared memory zone that will keep states for various keys. See [nginx_limit_conn_zone](http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn_zone)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_owner_group`
|
||||
- Default: `root`
|
||||
- Description: The owner group of the nginx configuration files
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_owner_user`
|
||||
- Default: `root`
|
||||
- Description: The owner user of the nginx configuration files
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_remove_default_site`
|
||||
- Default: `true`
|
||||
- Description: Disables the default site. Set to false to enable the default site in nginx.
|
||||
- [nginx_client_max_body_size][]
|
||||
- Default: `1k`
|
||||
- Description: Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 41
|
||||
3 (Request Entity Too Large) error is returned to the client.
|
||||
- [nginx_keepalive_timeout][]
|
||||
- Default: `5 5`
|
||||
- Description: The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections. The op
|
||||
tional second parameter sets a value in the “Keep-Alive: timeout=time” response header field.
|
||||
- [nginx_server_tokens][]
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `nginx_send_timeout`
|
||||
- Default: `10`
|
||||
- Description: Sets a timeout for transmitting a response to the client. See [nginx_send_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#send_timeout)
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `nginx_server_tokens`
|
||||
- Default: `off`
|
||||
- Description: Disables emitting nginx version in error messages and in the "Server" response header field. Set to on to enable the nginx version in error messages and "Server" response head
|
||||
er.
|
||||
- [nginx_client_header_buffer_size][]
|
||||
- Default: `1k`
|
||||
- Description: Sets buffer size for reading client request header. For most requests, a buffer of 1K bytes is enough.
|
||||
- [nginx_large_client_header_buffers][]
|
||||
- Default: `2 1k`
|
||||
- Description: Sets the maximum number and size of buffers used for reading large client request header.
|
||||
- [nginx_client_body_timeout][]
|
||||
- Default: `10`
|
||||
- Description: Defines a timeout for reading client request body.
|
||||
- [nginx_client_header_timeout][]
|
||||
- Default: `10`
|
||||
- Description: Defines a timeout for reading client request header.
|
||||
- [nginx_send_timeout][]
|
||||
- Default: `10`
|
||||
- Description: Sets a timeout for transmitting a response to the client.
|
||||
- [nginx_limit_conn_zone][]
|
||||
- Default: `$binary_remote_addr zone=default:10m`
|
||||
- Description: Sets parameters for a shared memory zone that will keep states for various keys.
|
||||
- [nginx_limit_conn][]
|
||||
- Default: `default 5`
|
||||
- Description: Sets the shared memory zone and the maximum allowed number of connections for a given key value.
|
||||
- [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'\" ]`
|
||||
- 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.
|
||||
- [nginx_ssl_protocols][]
|
||||
- Default: `TLSv1.2`
|
||||
- Description: Specifies the SSL protocol which should be used.
|
||||
- [nginx_ssl_ciphers][]
|
||||
- Default: _see defaults.yml_
|
||||
- Description: Specifies the TLS ciphers which should be used.
|
||||
- [nginx_ssl_prefer_server_ciphers][]
|
||||
- Description: Disables emitting nginx version in error messages and in the "Server" response header field. Set to on to enable the nginx version in error messages and "Server" response header. See [nginx_server_tokens](http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_ssl_ciphers`
|
||||
- Default: `ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256`
|
||||
- Description: Specifies the TLS ciphers which should be used. See [nginx_ssl_ciphers](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_ssl_prefer_server_ciphers`
|
||||
- Default: `on`
|
||||
- Description: Specifies that server ciphers should be preferred over client ciphers when using the TLS protocols. Set to false to disable it.
|
||||
- [nginx_dh_size][]
|
||||
- Default: `2048`
|
||||
- Description: Specifies the length of DH parameters for EDH ciphers.
|
||||
- [nginx_configuration_dir][]
|
||||
- default: "/etc/nginx"
|
||||
- Description: The main location for all nginx configuration files
|
||||
- [nginx_configuration_hardening_dir][]
|
||||
- default: "/etc/nginx"
|
||||
- Description: The location for the nginx hardening configuration file (Could be different e.g. when used in jails)
|
||||
- [nginx_owner_user][]
|
||||
- default: "root"
|
||||
- Description: The owner user of the nginx configuration files
|
||||
- [nginx_owner_group][]
|
||||
- default: "root"
|
||||
- Description: The owner group of the nginx configuration files
|
||||
- Description: Specifies that server ciphers should be preferred over client ciphers when using the TLS protocols. Set to false to disable it. See [nginx_ssl_prefer_server_ciphers](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_prefer_server_ciphers)
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `nginx_ssl_protocols`
|
||||
- Default: `TLSv1.2`
|
||||
- Description: Specifies the SSL protocol which should be used. See [nginx_ssl_protocols](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols)
|
||||
- Type: str
|
||||
- Required: no
|
||||
|
||||
## Dependencies
|
||||
|
||||
None.
|
||||
|
||||
## Example Playbook
|
||||
|
||||
```
|
||||
- hosts: localhost
|
||||
collections:
|
||||
- devsec.hardening
|
||||
- hosts: all
|
||||
roles:
|
||||
- nginx_hardening
|
||||
- name: devsec.hardening.nginx_hardening
|
||||
```
|
||||
|
||||
[nginx_client_body_buffer_size]: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size
|
||||
[nginx_client_max_body_size]: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
|
||||
[nginx_keepalive_timeout]: http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
|
||||
[nginx_server_tokens]: http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens
|
||||
[nginx_more_clear_headers]: http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
|
||||
[nginx_client_header_buffer_size]: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_header_buffer_size
|
||||
[nginx_large_client_header_buffers]: http://nginx.org/en/docs/http/ngx_http_core_module.html#large_client_header_buffers
|
||||
[nginx_client_body_timeout]: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout
|
||||
[nginx_client_header_timeout]: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_header_timeout
|
||||
[nginx_send_timeout]: http://nginx.org/en/docs/http/ngx_http_core_module.html#send_timeout
|
||||
[nginx_limit_conn_zone]: http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn_zone
|
||||
[nginx_limit_conn]: http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn
|
||||
[nginx_add_header]: http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
|
||||
[nginx_ssl_protocols]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols
|
||||
[nginx_ssl_ciphers]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers
|
||||
[nginx_ssl_prefer_server_ciphers]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_prefer_server_ciphers
|
||||
[nginx_dh_size]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_dhparam
|
||||
<!-- END_ANSIBLE_DOCS -->
|
||||
@@ -25,7 +25,6 @@ nginx_add_header:
|
||||
- Strict-Transport-Security max-age=15768000
|
||||
- Content-Security-Policy "script-src 'self'; object-src 'self'"
|
||||
|
||||
nginx_set_cookie_flag: "* HttpOnly secure"
|
||||
nginx_ssl_prefer_server_ciphers: "on"
|
||||
nginx_ssl_protocols: TLSv1.2 TLSv1.3
|
||||
# yamllint disable-line rule:line-length
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
---
|
||||
argument_specs:
|
||||
main:
|
||||
short_description: The main entry point for the nginx hardening role.
|
||||
version_added: 8.8.0
|
||||
options:
|
||||
nginx_client_body_buffer_size:
|
||||
default: 1k
|
||||
type: str
|
||||
description: Sets buffer size for reading client request body. In case the
|
||||
request body is larger than the buffer, the whole body or only its part
|
||||
is written to a temporary file. See [nginx_client_body_buffer_size](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size)
|
||||
nginx_remove_default_site:
|
||||
default: true
|
||||
type: bool
|
||||
description: Disables the default site. Set to false to enable the default
|
||||
site in nginx.
|
||||
nginx_client_max_body_size:
|
||||
default: 1k
|
||||
type: str
|
||||
description: Sets the maximum allowed size of the client request body, specified
|
||||
in the "Content-Length" request header field. If the size in a request exceeds
|
||||
the configured value, the 413 (Request Entity Too Large) error is returned
|
||||
to the client. See [nginx_client_max_body_size](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size)
|
||||
nginx_keepalive_timeout:
|
||||
default: 5 5
|
||||
type: str
|
||||
description: The first parameter sets a timeout during which a keep-alive
|
||||
client connection will stay open on the server side. The zero value disables
|
||||
keep-alive client connections. The optional second parameter sets a value
|
||||
in the "Keep-Alive timeout=time" response header field. See [nginx_keepalive_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout) # noqa yaml[line-length]
|
||||
nginx_server_tokens:
|
||||
default: 'off'
|
||||
type: str
|
||||
description: Disables emitting nginx version in error messages and in the
|
||||
"Server" response header field. Set to on to enable the nginx version in
|
||||
error messages and "Server" response header. See [nginx_server_tokens](http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens)
|
||||
nginx_client_header_buffer_size:
|
||||
default: 1k
|
||||
type: str
|
||||
description: Sets buffer size for reading client request header. For most
|
||||
requests, a buffer of 1K bytes is enough. See [nginx_client_header_buffer_size](http://nginx.org/en/docs/http/ngx_http_core_module.html#client
|
||||
nginx_large_client_header_buffers:
|
||||
default: 2 1k
|
||||
type: str
|
||||
description: Sets the maximum number and size of buffers used for reading
|
||||
large client request header. See [nginx_large_client_header_buffers](http://nginx.org/en/docs/http/ngx_http_core_module.html#large_client_header_buffers) # noqa yaml[line-length]
|
||||
nginx_client_body_timeout:
|
||||
default: 10
|
||||
type: int
|
||||
description: Defines a timeout for reading client request body. See [nginx_client_body_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout) # noqa yaml[line-length]
|
||||
nginx_client_header_timeout:
|
||||
default: 10
|
||||
type: int
|
||||
description: Defines a timeout for reading client request header. See [nginx_client_header_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_header_timeout) # noqa yaml[line-length]
|
||||
nginx_send_timeout:
|
||||
default: 10
|
||||
type: int
|
||||
description: Sets a timeout for transmitting a response to the client. See
|
||||
[nginx_send_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#send_timeout)
|
||||
nginx_limit_conn_zone:
|
||||
default: $binary_remote_addr zone=default:10m
|
||||
type: str
|
||||
description: Sets parameters for a shared memory zone that will keep states
|
||||
for various keys. See [nginx_limit_conn_zone](http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn_zone)
|
||||
nginx_limit_conn:
|
||||
default: default 5
|
||||
type: str
|
||||
description: Sets the shared memory zone and the maximum allowed number of
|
||||
connections for a given key value. See [nginx_limit_conn](http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn)
|
||||
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'\"]
|
||||
type: list
|
||||
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)
|
||||
nginx_ssl_protocols:
|
||||
default: TLSv1.2
|
||||
type: str
|
||||
description: Specifies the SSL protocol which should be used. See [nginx_ssl_protocols](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols) # noqa yaml[line-length]
|
||||
nginx_ssl_ciphers:
|
||||
default: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 # noqa yaml[line-length]
|
||||
type: str
|
||||
description: Specifies the TLS ciphers which should be used. See [nginx_ssl_ciphers](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers)
|
||||
nginx_ssl_prefer_server_ciphers:
|
||||
default: 'on'
|
||||
type: str
|
||||
description: Specifies that server ciphers should be preferred over client
|
||||
ciphers when using the TLS protocols. Set to false to disable it. See [nginx_ssl_prefer_server_ciphers](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_prefer_server_ciphers) # noqa yaml[line-length]
|
||||
nginx_dh_size:
|
||||
default: 2048
|
||||
type: int
|
||||
description: Specifies the length of DH parameters for EDH ciphers. See [nginx_dh_size](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_dhparam) # noqa yaml[line-length]
|
||||
nginx_configuration_dir:
|
||||
default: /etc/nginx
|
||||
type: str
|
||||
description: The main location for all nginx configuration files
|
||||
nginx_configuration_hardening_dir:
|
||||
default: /etc/nginx
|
||||
type: str
|
||||
description: The location for the nginx hardening configuration file (Could
|
||||
be different e.g. when used in jails)
|
||||
nginx_owner_user:
|
||||
default: root
|
||||
type: str
|
||||
description: The owner user of the nginx configuration files
|
||||
nginx_owner_group:
|
||||
default: root
|
||||
type: str
|
||||
description: The owner group of the nginx configuration files
|
||||
+897
-527
File diff suppressed because it is too large.
Load diff
@@ -1,5 +1,6 @@
|
||||
---
|
||||
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
|
||||
os_auth_pw_min_age: 7 # Discourage password cycling
|
||||
@@ -306,7 +307,7 @@ sysctl_config:
|
||||
|
||||
# Do not delete the following line or otherwise the playbook will fail
|
||||
# at task 'create a combined sysctl-dict if overwrites are defined'
|
||||
sysctl_overwrite:
|
||||
sysctl_overwrite: {}
|
||||
# Disable unused filesystems
|
||||
os_unused_filesystems:
|
||||
- cramfs
|
||||
@@ -356,7 +357,7 @@ os_selinux_state: enforcing
|
||||
os_selinux_policy: targeted
|
||||
|
||||
# Mount options for proc in /etc/fstab.
|
||||
proc_mnt_options: rw,nosuid,nodev,noexec,relatime,hidepid={{ hidepid_option }}
|
||||
proc_mnt_options: rw,nosuid,nodev,noexec,relatime
|
||||
|
||||
# Set to false to disable installing and configuring cron.
|
||||
os_cron_enabled: true
|
||||
|
||||
@@ -0,0 +1,847 @@
|
||||
---
|
||||
argument_specs:
|
||||
main:
|
||||
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
|
||||
description: Specify paths that should be checked for binaries where access will be minimized
|
||||
os_env_extra_user_paths:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: Specify additional paths that should be checked for binaries where access will be minimized
|
||||
os_auth_pw_max_age:
|
||||
default: 60
|
||||
type: int
|
||||
description: maximum password age (set to `99999` to effectively disable it).
|
||||
os_auth_pw_min_age:
|
||||
default: 7
|
||||
type: int
|
||||
description: minimum password age (before allowing any other password change).
|
||||
os_auth_pw_warn_age:
|
||||
default: 7
|
||||
type: int
|
||||
description: number of days of warning before password expires.
|
||||
os_auth_pw_remember:
|
||||
default: 5
|
||||
type: int
|
||||
description: how many used passwords are record.
|
||||
os_auth_retries:
|
||||
default: 5
|
||||
type: int
|
||||
description: the maximum number of authentication attempts, before the account
|
||||
is locked for some time.
|
||||
os_auth_lockout_time:
|
||||
default: 600
|
||||
type: int
|
||||
description: time in seconds that needs to pass, if the account was locked
|
||||
due to too many failed authentication attempts.
|
||||
os_auth_timeout:
|
||||
default: 60
|
||||
type: int
|
||||
description: authentication timeout in seconds, so login will exit if this
|
||||
time passes.
|
||||
os_auth_allow_homeless:
|
||||
default: false
|
||||
type: bool
|
||||
description: true if to allow users without home to login.
|
||||
os_auth_pam_passwdqc_enable:
|
||||
default: true
|
||||
type: bool
|
||||
description: true if you want to use strong password checking in PAM using
|
||||
passwdqc.
|
||||
os_auth_pam_passwdqc_options:
|
||||
default: min=disabled,disabled,16,12,8
|
||||
type: str
|
||||
description: set to any option line (as a string) that you want to pass to
|
||||
passwdqc.
|
||||
os_auth_pam_oddjob_mkhomedir:
|
||||
default: false
|
||||
type: bool
|
||||
description: Enables automatic homedir e.g. in FreeIPA environments
|
||||
os_auth_pam_pwquality_options:
|
||||
default: try_first_pass retry=3 authtok_type=
|
||||
type: str
|
||||
description: Options to pass to the PAM module pwquality
|
||||
os_security_users_allow:
|
||||
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
|
||||
description: kernel is crashing or otherwise misbehaving and a kernel core
|
||||
dump is created.
|
||||
os_security_suid_sgid_enforce:
|
||||
default: true
|
||||
type: bool
|
||||
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.
|
||||
os_security_suid_sgid_blacklist:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: a list of paths which should have their SUID/SGID bits removed.
|
||||
os_security_suid_sgid_whitelist:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: a list of paths which should not have their SUID/SGID bits altered.
|
||||
os_security_suid_sgid_remove_from_unknown:
|
||||
default: false
|
||||
type: bool
|
||||
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`.
|
||||
os_auth_uid_min:
|
||||
default: 1000
|
||||
type: int
|
||||
description: minimum number for automatic uid selection in useradd.
|
||||
os_auth_uid_max:
|
||||
default: 60000
|
||||
type: int
|
||||
description: maximum number for automatic uid selection in useradd.
|
||||
os_auth_gid_min:
|
||||
default: 1000
|
||||
type: int
|
||||
description: minimum number for automatic gid selection in groupadd.
|
||||
os_auth_gid_max:
|
||||
default: 60000
|
||||
type: int
|
||||
description: maximum number for automatic gid selection in groupadd.
|
||||
os_auth_sub_uid_count:
|
||||
default: 65536
|
||||
type: int
|
||||
description: If /etc/subuid exists, the commands useradd and newusers (unless
|
||||
the user already have subordinate user IDs) allocate SUB_UID_COUNT unused
|
||||
user IDs from the range SUB_UID_MIN to SUB_UID_MAX for each new user. See
|
||||
also `os_auth_sub_uid_min` and `os_auth_sub_uid_max`.
|
||||
os_auth_sub_uid_min:
|
||||
default: 100000
|
||||
type: int
|
||||
description: minimum number for automatic subordinate uid selection in useradd
|
||||
and newusers.
|
||||
os_auth_sub_uid_max:
|
||||
default: 600100000
|
||||
type: int
|
||||
description: maximum number for automatic subordinate uid selection in useradd
|
||||
and newusers.
|
||||
os_auth_sub_gid_count:
|
||||
default: 65536
|
||||
type: int
|
||||
description: If /etc/subuid exists, the commands useradd and newusers (unless
|
||||
the user already have subordinate group IDs) allocate SUB_GID_COUNT unused
|
||||
group IDs from the range SUB_GID_MIN to SUB_GID_MAX for each new user. See
|
||||
also `os_auth_sub_gid_min` and `os_auth_sub_gid_max`.
|
||||
os_auth_sub_gid_min:
|
||||
default: 100000
|
||||
type: int
|
||||
description: minimum number for automatic subordinate gid selection in useradd
|
||||
and newusers.
|
||||
os_auth_sub_gid_max:
|
||||
default: 600100000
|
||||
type: int
|
||||
description: maximum number for automatic subordinate gid selection in useradd
|
||||
and newusers.
|
||||
os_security_packages_clean:
|
||||
default: true
|
||||
type: bool
|
||||
description: removes packages with known issues. See section packages.
|
||||
os_selinux_state:
|
||||
default: enforcing
|
||||
type: str
|
||||
description: Set the SELinux state, can be either disabled, permissive, or
|
||||
enforcing.
|
||||
os_selinux_policy:
|
||||
default: targeted
|
||||
type: str
|
||||
description: Set the SELinux polixy.
|
||||
ufw_manage_defaults:
|
||||
default: true
|
||||
type: bool
|
||||
description: true means apply all settings with `ufw_` prefix.
|
||||
ufw_ipt_sysctl:
|
||||
default: "''"
|
||||
type: str
|
||||
description: by default it disables IPT_SYSCTL in /etc/default/ufw. If you
|
||||
want to overwrite /etc/sysctl.conf values using ufw - set it to your sysctl
|
||||
dictionary, for example `/etc/ufw/sysctl.conf`.
|
||||
ufw_default_input_policy:
|
||||
default: DROP
|
||||
type: str
|
||||
description: set default input policy of ufw to `DROP`.
|
||||
ufw_default_output_policy:
|
||||
default: ACCEPT
|
||||
type: str
|
||||
description: set default output policy of ufw to `ACCEPT`.
|
||||
ufw_default_forward_policy:
|
||||
default: DROP
|
||||
type: str
|
||||
description: set default forward policy of ufw to `DROP`.
|
||||
ufw_enable_ipv6:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `true` to apply rules to support IPv6 (no means only IPv6
|
||||
on loopback accepted).
|
||||
os_auditd_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring auditd.
|
||||
os_auditd_log_format:
|
||||
default: RAW
|
||||
type: str
|
||||
description: Describes how the information should be stored on disk. There
|
||||
are 2 options - raw and enriched.
|
||||
os_auditd_max_log_file_action:
|
||||
default: keep_logs
|
||||
type: str
|
||||
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`.
|
||||
os_auditd_max_log_file:
|
||||
default: 6
|
||||
type: int
|
||||
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_num_logs:
|
||||
default: 5
|
||||
type: int
|
||||
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.
|
||||
os_auditd_flush:
|
||||
default: INCREMENTAL
|
||||
type: str
|
||||
description: Valid values are none, incremental, incremental_async, data,
|
||||
and sync.
|
||||
os_auditd_admin_space_left:
|
||||
default: 50
|
||||
type: int
|
||||
description: This is a numeric value in megabytes that tells the audit daemon
|
||||
when to perform a configurable action because the system is running low
|
||||
on disk space.
|
||||
os_auditd_admin_space_left_action:
|
||||
default: SUSPEND
|
||||
type: str
|
||||
description: This parameter tells the system what action to take when the
|
||||
system has detected that it is low on disk space. Valid values are ignore,
|
||||
syslog, rotate, email, exec, suspend, single, and halt.
|
||||
os_auditd_space_left:
|
||||
default: 75
|
||||
type: int
|
||||
description: If the free space in the filesystem containing log_file drops
|
||||
below this value, the audit daemon takes the action specified by space_left_action.
|
||||
os_auditd_space_left_action:
|
||||
default: SYSLOG
|
||||
type: str
|
||||
description: This parameter tells the system what action to take when the
|
||||
system has detected that it is starting to get low on disk space. Valid
|
||||
values are ignore, syslog, rotate, email, exec, suspend, single, and halt.
|
||||
os_auditd_action_mail_acct:
|
||||
default: root
|
||||
type: str
|
||||
description: If `space_left_action` or `admin_space_left_action` are set to
|
||||
`email`, uses the address or alias to send the email using `/usr/lib/sendmail`.
|
||||
of events created on one system but reported/analyzed on another system.
|
||||
os_auditd_disk_error_action:
|
||||
default: SUSPEND
|
||||
type: str
|
||||
description: This parameter tells the system what action to take whenever
|
||||
there is an error detected when writing audit events to disk or rotating
|
||||
logs. Valid values are ignore, syslog, exec, suspend, single, and halt.
|
||||
os_auditd_disk_full_action:
|
||||
default: SUSPEND
|
||||
type: str
|
||||
description: This parameter tells the system what action to take when the
|
||||
system has detected that the partition to which log files are written has
|
||||
become full. Valid values are ignore, syslog, rotate, exec, suspend, single,
|
||||
and halt.
|
||||
os_auditd_log_group:
|
||||
default: root
|
||||
type: str
|
||||
description: specifies the group that is applied to the log file's permissions.
|
||||
The group name can be either numeric or spelled out.
|
||||
proc_mnt_options:
|
||||
default: rw,nosuid,nodev,noexec,relatime
|
||||
type: str
|
||||
description: Mount proc with hardenized options. Note that the hidepid option
|
||||
is set separately in vars/.
|
||||
os_ignore_users:
|
||||
default: [vagrant, kitchen]
|
||||
type: list
|
||||
description: Specify system accounts whose login should not be disabled and
|
||||
password not changed
|
||||
os_chmod_home_folders:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to disable "chmod 700" of home folders for regular
|
||||
users
|
||||
os_ignore_home_folder_users:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: Specify user accounts, whose home folders shouldn't be chmodded
|
||||
to 700 when "os_chmod_home_folders" is enabled.
|
||||
os_chmod_rootuser_home_folder:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to disable "chmod 700" of root's home folder
|
||||
os_rootuser_pw_ageing:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to enforce password age settings for root user(s)
|
||||
os_remove_additional_root_users:
|
||||
default: false
|
||||
type: bool
|
||||
description: When enabled and there are multiple users with UID=0, only "root"
|
||||
will be kept. Others will be deleted.
|
||||
os_user_pw_ageing:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable password age enforcement on existing
|
||||
users
|
||||
os_users_without_password_ageing:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: List of users, where password ageing should not be enforced even
|
||||
if "os_user_pw_ageing" is enabled
|
||||
os_cron_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring cron.
|
||||
os_ctrlaltdel_disabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to disable ctrl-alt-delete key combination.
|
||||
os_limits_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring limits.
|
||||
os_login_defs_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring login_defs
|
||||
for newly created users.
|
||||
os_minimize_access_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring minimize_access.
|
||||
os_pam_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring pam.
|
||||
os_modprobe_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring modprobe.
|
||||
os_profile_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring profile.
|
||||
os_security_auto_logout:
|
||||
default: 0
|
||||
type: int
|
||||
description: Set timeout in seconds for logout users automatically after time.
|
||||
Setting this to `0` disables the timeout.
|
||||
os_securetty_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring securetty.
|
||||
os_sysctl_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring sysctl.
|
||||
os_user_accounts_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring user_accounts.
|
||||
os_rhosts_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring rhosts.
|
||||
os_yum_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring yum.
|
||||
os_yum_repo_file_whitelist:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: List of yum repository files under /etc/yum.repos.d/ which should
|
||||
not be altered.
|
||||
os_apt_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring apt.
|
||||
os_selinux_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to disable installing and configuring selinux.
|
||||
os_sha_crypt_min_rounds:
|
||||
default: 640000
|
||||
type: int
|
||||
description: Define the number of minimum SHA rounds. With a lot of rounds
|
||||
brute forcing the password is more difficult. But note also that it more
|
||||
CPU resources will be needed to authenticate users. The values must be inside
|
||||
the 1000-999999999 range.
|
||||
os_sha_crypt_max_rounds:
|
||||
default: 640000
|
||||
type: int
|
||||
description: Define the number of maximum SHA rounds. With a lot of rounds
|
||||
brute forcing the password is more difficult. But note also that it more
|
||||
CPU resources will be needed to authenticate users. The values must be inside
|
||||
the 1000-999999999 range.
|
||||
os_mnt_boot_dir_mode:
|
||||
default: '0700'
|
||||
type: str
|
||||
description: Set default perimissions for /boot
|
||||
os_mnt_boot_enabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to configure /boot mountpoint
|
||||
os_mnt_boot_src:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Set mount source for /boot
|
||||
os_mnt_boot_options:
|
||||
default: rw,nosuid,nodev,noexec
|
||||
description: Configure mount options for /boot
|
||||
os_mnt_boot_filesystem:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Configure file system for fstab entry /boot. If empty, the current
|
||||
file system type will be used.
|
||||
os_mnt_boot_dump:
|
||||
default: ext3 + ext4 = 1 / other = 0
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_boot_passno:
|
||||
default: ext3 + ext4 = 2 / other = 0
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_dev_dir_mode:
|
||||
default: '0755'
|
||||
type: str
|
||||
description: Set default perimissions for /dev
|
||||
os_mnt_dev_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to ignore /dev mountpoint
|
||||
os_mnt_dev_src:
|
||||
default: devtmpfs
|
||||
type: str
|
||||
description: Set mount source for /dev
|
||||
os_mnt_dev_options:
|
||||
default: rw,nosuid,noexec
|
||||
type: str
|
||||
description: Configure mount options for /dev
|
||||
os_mnt_dev_filesystem:
|
||||
default: devtmpfs
|
||||
type: str
|
||||
description: Configure file system for fstab entry /dev
|
||||
os_mnt_dev_dump:
|
||||
default: '0'
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp.
|
||||
os_mnt_dev_passno:
|
||||
default: '0'
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp.
|
||||
os_mnt_dev_shm_dir_mode:
|
||||
default: '1777'
|
||||
type: str
|
||||
description: Set default perimissions for /dev/shm
|
||||
os_mnt_dev_shm_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to ignore /dev/shm mountpoint
|
||||
os_mnt_dev_shm_src:
|
||||
default: tmpfs
|
||||
type: str
|
||||
description: Set mount source for /dev/shm
|
||||
os_mnt_dev_shm_options:
|
||||
default: rw,nosuid,nodev,noexec
|
||||
type: str
|
||||
description: Configure mount options for /dev/shm
|
||||
os_mnt_dev_shm_filesystem:
|
||||
default: tmpfs
|
||||
type: str
|
||||
description: Configure file system for fstab entry /dev/shm
|
||||
os_mnt_dev_shm_dump:
|
||||
default: '0'
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp.
|
||||
os_mnt_dev_shm_passno:
|
||||
default: '0'
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp.
|
||||
os_mnt_home_dir_mode:
|
||||
default: '0755'
|
||||
type: str
|
||||
description: Set default perimissions for /home
|
||||
os_mnt_home_enabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to configure /home mountpoint
|
||||
os_mnt_home_src:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Set mount source for /home. If empty, the current file system
|
||||
source device will be used.
|
||||
os_mnt_home_options:
|
||||
default: rw,nosuid,nodev
|
||||
type: str
|
||||
description: Configure mount options for /home
|
||||
os_mnt_home_filesystem:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Configure file system for fstab entry /home. If empty, the current
|
||||
file system type will be used.
|
||||
os_mnt_home_dump:
|
||||
default: ext3/4 = 1, others = 0
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_home_passno:
|
||||
default: ext3/4 = 2, others = 0
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_run_dir_mode:
|
||||
default: '0755'
|
||||
type: str
|
||||
description: Set default perimissions for /run
|
||||
os_mnt_run_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to false to ignore /run mountpoint
|
||||
os_mnt_run_src:
|
||||
default: tmpfs
|
||||
type: str
|
||||
description: Set mount source for /run
|
||||
os_mnt_run_options:
|
||||
default: rw,nosuid,nodev
|
||||
type: str
|
||||
description: Configure mount options for /run
|
||||
os_mnt_run_filesystem:
|
||||
default: tmpfs
|
||||
type: str
|
||||
description: Configure file system for fstab entry /run
|
||||
os_mnt_run_dump:
|
||||
default: '0'
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp.
|
||||
os_mnt_run_passno:
|
||||
default: '0'
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp.
|
||||
os_mnt_tmp_dir_mode:
|
||||
default: '1777'
|
||||
type: str
|
||||
description: Set default perimissions for /tmp
|
||||
os_mnt_tmp_enabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to configure /tmp mountpoint
|
||||
os_mnt_tmp_src:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Set mount source for /tmp. If empty, the current file system
|
||||
source device will be used.
|
||||
os_mnt_tmp_options:
|
||||
default: rw,nosuid,nodev,noexec
|
||||
type: str
|
||||
description: Configure mount options for /tmp
|
||||
os_mnt_tmp_filesystem:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Configure file system for fstab entry /tmp. If empty, the current
|
||||
file system type will be used.
|
||||
os_mnt_tmp_dump:
|
||||
default: ext3/4 = 1, others = 0
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_tmp_passno:
|
||||
default: ext3/4 = 2, others = 0
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_dir_mode:
|
||||
default: '0755'
|
||||
type: str
|
||||
description: Set default perimissions for /var
|
||||
os_mnt_var_enabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to configure /var mountpoint
|
||||
os_mnt_var_src:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Set mount source for /var. If empty, the current file system
|
||||
source device will be used.
|
||||
os_mnt_var_options:
|
||||
default: rw,nosuid,nodev
|
||||
type: str
|
||||
description: Configure mount options for /var
|
||||
os_mnt_var_filesystem:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Configure file system for fstab entry /var. If empty, the current
|
||||
file system type will be used.
|
||||
os_mnt_var_dump:
|
||||
default: ext3/4 = 1, others = 0
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_passno:
|
||||
default: ext3/4 = 2, others = 0
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_log_dir_mode:
|
||||
default: '0755'
|
||||
type: str
|
||||
description: Set default perimissions for /var/log
|
||||
os_mnt_var_log_enabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to configure /var/log mountpoint
|
||||
os_mnt_var_log_src:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Set mount source for /var/log. If empty, the current file system
|
||||
source device will be used.
|
||||
os_mnt_var_log_options:
|
||||
default: rw,nosuid,nodev,noexec
|
||||
type: str
|
||||
description: Configure mount options for /var/log
|
||||
os_mnt_var_log_filesystem:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Configure file system for fstab entry /var/log. If empty, the
|
||||
current file system type will be used.
|
||||
os_mnt_var_log_dump:
|
||||
default: ext3/4 = 1, others = 0
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_log_passno:
|
||||
default: ext3/4 = 2, others = 0
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_log_audit_dir_mode:
|
||||
default: '0640'
|
||||
type: str
|
||||
description: Set default perimissions for /var/log/audit
|
||||
os_mnt_var_log_audit_enabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to configure /var/log/audit mountpoint
|
||||
os_mnt_var_log_audit_src:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Set mount source for /var/log/audit. If empty, the current file
|
||||
system source device will be used.
|
||||
os_mnt_var_log_audit_options:
|
||||
default: rw,nosuid,nodev,noexec
|
||||
type: str
|
||||
description: Configure mount options for /var/log/audit
|
||||
os_mnt_var_log_audit_filesystem:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Configure file system for fstab entry /var/log/audit. If empty,
|
||||
the current file system type will be used.
|
||||
os_mnt_var_log_audit_dump:
|
||||
default: ext3/4 = 1, others = 0
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_log_audit_passno:
|
||||
default: ext3/4 = 2, others = 0
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_tmp_dir_mode:
|
||||
default: '1777'
|
||||
type: str
|
||||
description: Set default perimissions for /var/tmp
|
||||
os_mnt_var_tmp_enabled:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to true to configure /var/tmp mountpoint
|
||||
os_mnt_var_tmp_src:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Set mount source for /var/tmp. If empty, the current file system
|
||||
source device will be used.
|
||||
os_mnt_var_tmp_options:
|
||||
default: rw,nosuid,nodev,noexec
|
||||
type: str
|
||||
description: Configure mount options for /var/tmp
|
||||
os_mnt_var_tmp_filesystem:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Configure file system for fstab entry /var/tmp. If empty, the
|
||||
current file system type will be used.
|
||||
os_mnt_var_tmp_dump:
|
||||
default: ext3/4 = 1, others = 0
|
||||
type: str
|
||||
description: Configure dump for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_mnt_var_tmp_passno:
|
||||
default: ext3/4 = 2, others = 0
|
||||
type: str
|
||||
description: Configure passno for fstab entry /var/tmp. If empty, the default
|
||||
depends on fstype.
|
||||
os_netrc_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Configure filesystem for existence of .netrc file in homedir
|
||||
os_netrc_whitelist_user:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: Add list of user to allow creation of .netrc in users homedir
|
||||
sysctl_overwrite:
|
||||
default: '{}'
|
||||
type: dict
|
||||
description: To overwrite options in the `sysctl_config`-dict, overwrite them
|
||||
here.
|
||||
sysctl_config:
|
||||
type: dict
|
||||
description: various sysctl-settings
|
||||
default:
|
||||
fs.protected_hardlinks: 1
|
||||
fs.protected_symlinks: 1
|
||||
fs.protected_fifos: 1
|
||||
fs.protected_regular: 2
|
||||
fs.suid_dumpable: 0
|
||||
kernel.core_uses_pid: 1
|
||||
kernel.kptr_restrict: 2
|
||||
kernel.kexec_load_disabled: 1
|
||||
kernel.sysrq: 0
|
||||
kernel.randomize_va_space: 2
|
||||
kernel.yama.ptrace_scope: 1
|
||||
net.ipv4.ip_forward: 0
|
||||
net.ipv6.conf.all.forwarding: 0
|
||||
net.ipv4.conf.all.rp_filter: 1
|
||||
net.ipv4.conf.default.rp_filter: 1
|
||||
net.ipv4.icmp_echo_ignore_broadcasts: 1
|
||||
net.ipv4.icmp_ignore_bogus_error_responses: 1
|
||||
net.ipv4.icmp_ratelimit: 100
|
||||
net.ipv4.icmp_ratemask: 88089
|
||||
net.ipv4.tcp_timestamps: 0
|
||||
net.ipv4.conf.all.arp_ignore: 1
|
||||
net.ipv4.conf.all.arp_announce: 2
|
||||
net.ipv4.tcp_rfc1337: 1
|
||||
net.ipv4.tcp_syncookies: 1
|
||||
net.ipv4.conf.all.shared_media: 1
|
||||
net.ipv4.conf.default.shared_media: 1
|
||||
net.ipv4.conf.all.accept_source_route: 0
|
||||
net.ipv4.conf.default.accept_source_route: 0
|
||||
net.ipv6.conf.all.accept_source_route: 0
|
||||
net.ipv6.conf.default.accept_source_route: 0
|
||||
net.ipv4.conf.all.send_redirects: 0
|
||||
net.ipv4.conf.default.send_redirects: 0
|
||||
net.ipv4.conf.all.log_martians: 1
|
||||
net.ipv4.conf.default.log_martians: 1
|
||||
net.ipv4.conf.default.accept_redirects: 0
|
||||
net.ipv4.conf.all.accept_redirects: 0
|
||||
net.ipv4.conf.all.secure_redirects: 0
|
||||
net.ipv4.conf.default.secure_redirects: 0
|
||||
net.ipv6.conf.default.accept_redirects: 0
|
||||
net.ipv6.conf.all.accept_redirects: 0
|
||||
net.ipv6.conf.all.accept_ra: 0
|
||||
net.ipv6.conf.default.accept_ra: 0
|
||||
net.ipv6.conf.default.router_solicitations: 0
|
||||
net.ipv6.conf.all.router_solicitations: 0
|
||||
net.ipv6.conf.default.accept_ra_rtr_pref: 0
|
||||
net.ipv6.conf.default.accept_ra_pinfo: 0
|
||||
net.ipv6.conf.default.accept_ra_defrtr: 0
|
||||
net.ipv6.conf.default.autoconf: 0
|
||||
net.ipv6.conf.all.autoconf: 0
|
||||
net.ipv6.conf.default.dad_transmits: 0
|
||||
net.ipv6.conf.default.max_addresses: 1
|
||||
vm.mmap_min_addr: 65536
|
||||
vm.mmap_rnd_bits: 32
|
||||
vm.mmap_rnd_compat_bits: 16
|
||||
os_unused_filesystems:
|
||||
default:
|
||||
- cramfs
|
||||
- freevxfs
|
||||
- jffs2
|
||||
- hfs
|
||||
- hfsplus
|
||||
- squashfs
|
||||
- udf
|
||||
- vfat
|
||||
- dccp
|
||||
- rds
|
||||
- sctp
|
||||
- tipc
|
||||
type: list
|
||||
description: Disable this list of unused filesystems
|
||||
os_filesystem_whitelist:
|
||||
default: '[]'
|
||||
type: list
|
||||
description: A list of filesystems that should not be disabled
|
||||
os_hardening_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Whether to run the hardening
|
||||
os_auth_root_ttys:
|
||||
default: [console, tty1, tty2, tty3, tty4, tty5, tty6]
|
||||
type: list
|
||||
description: A list of TTYs, from which root can log in, see `man securetty`
|
||||
for reference
|
||||
os_chfn_restrict:
|
||||
default: "''"
|
||||
type: str
|
||||
description: Indicate which fields are changeable by chfn.
|
||||
os_security_init_prompt:
|
||||
default: true
|
||||
type: bool
|
||||
description: The PROMPT option provides console users the ability to interactively
|
||||
boot the system and select which services to start on boot.
|
||||
os_security_init_single:
|
||||
default: false
|
||||
type: bool
|
||||
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
|
||||
os_security_packages_list:
|
||||
default: [xinetd, inetd, ypserv, telnet-server, rsh-server, prelink]
|
||||
type: list
|
||||
description: List of deprecated or insecure packages to remove
|
||||
ufw_default_application_policy:
|
||||
default: SKIP
|
||||
type: str
|
||||
description: The default application policy is skip, which means that the
|
||||
update --add-new command will do nothing
|
||||
ufw_ipt_modules:
|
||||
default: nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns
|
||||
type: str
|
||||
description: Define which netfilter modules to load
|
||||
ufw_manage_builtins:
|
||||
default: 'no'
|
||||
type: str
|
||||
description: If this variable is set to 'yes', on stop and reload the built-in
|
||||
chains are flushed. If it is set to 'no', on stop and reload the ufw secondary
|
||||
chains are removed and the ufw primary chains are flushed
|
||||
@@ -1,4 +1,10 @@
|
||||
---
|
||||
- name: Gather facts, if not present
|
||||
ansible.builtin.setup:
|
||||
when: not ansible_facts
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Fetch OS dependent variables
|
||||
ansible.builtin.include_vars:
|
||||
file: "{{ item }}"
|
||||
|
||||
@@ -7,12 +7,7 @@
|
||||
- name: Find files with write-permissions for group # noqa command-instead-of-shell
|
||||
ansible.builtin.shell: find -L {{ item }} -perm /go+w -type f
|
||||
with_community.general.flattened:
|
||||
- /usr/local/sbin
|
||||
- /usr/local/bin
|
||||
- /usr/sbin
|
||||
- /usr/bin
|
||||
- /sbin
|
||||
- /bin
|
||||
- "{{ os_env_user_paths }}"
|
||||
- "{{ os_env_extra_user_paths }}"
|
||||
register: minimize_access_directories
|
||||
ignore_errors: true
|
||||
@@ -73,12 +68,23 @@
|
||||
mode: "0750"
|
||||
when: '"change_user" not in os_security_users_allow'
|
||||
|
||||
# we have to define this combined variable here, because when defining it
|
||||
# in the defaults like this:
|
||||
# proc_mnt_options: rw,nosuid,nodev,noexec,relatime,hidepid={{ hidepid_option }}
|
||||
# the role argument validator complains about the missing hidepid_option-variable.
|
||||
# If we define the hidepid_option-variable in the defaults, we cannot
|
||||
# overwrite it anymore in the vars (for some reason).
|
||||
|
||||
- name: Define proc_mnt_options including hidepid_option
|
||||
ansible.builtin.set_fact:
|
||||
_proc_mnt_options: "{{ proc_mnt_options }},hidepid={{ hidepid_option }}"
|
||||
|
||||
- name: Set option hidepid for proc filesystem
|
||||
ansible.posix.mount:
|
||||
path: /proc
|
||||
src: proc
|
||||
fstype: proc
|
||||
opts: "{{ proc_mnt_options }}"
|
||||
opts: "{{ _proc_mnt_options }}"
|
||||
state: mounted
|
||||
|
||||
- name: Generate list of current available mounted filesystems on the system
|
||||
@@ -87,7 +93,7 @@
|
||||
|
||||
- name: Append special devices list to valid mountpoint list
|
||||
ansible.builtin.set_fact:
|
||||
mountpoints_list: "{{ mountpoints_list + ['/dev', '/dev/shm', '/run'] }}"
|
||||
mountpoints_list: "{{ mountpoints_list + ['/dev', '/dev/shm', '/run', '/tmp'] }}"
|
||||
|
||||
- name: Minimize access for filesystems
|
||||
ansible.builtin.include_tasks: minimize_access_fs.yml
|
||||
|
||||
@@ -189,7 +189,7 @@ SHA_CRYPT_MAX_ROUNDS {{ os_sha_crypt_max_rounds }}
|
||||
|
||||
# Obsoleted by PAM
|
||||
# ================
|
||||
# These options are now handled by PAM. Please edit the appropriate file in `/etc/pam.d/` to enable the equivelants of them.
|
||||
# These options are now handled by PAM. Please edit the appropriate file in `/etc/pam.d/` to enable their equivalents.
|
||||
#MOTD_FILE
|
||||
#DIALUPS_CHECK_ENAB
|
||||
#LASTLOG_ENAB
|
||||
|
||||
+380
-187
@@ -1,6 +1,8 @@
|
||||
# dev-sec.ssh_hardening
|
||||
|
||||

|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_bsd.yml)
|
||||
[](https://github.com/dev-sec/ansible-collection-hardening/actions/workflows/ssh_hardening_custom_tests.yml)
|
||||
|
||||
## Description
|
||||
|
||||
@@ -8,250 +10,441 @@ This role provides secure ssh-client and ssh-server configurations. It is intend
|
||||
|
||||
Warning: This role disables root-login on the target server! Please make sure you have another user with su or sudo permissions that can login into the server.
|
||||
|
||||
## Requirements
|
||||
<!-- BEGIN_ANSIBLE_DOCS -->
|
||||
|
||||
- Ansible >= 2.9
|
||||
- root-privileges on the target system
|
||||
## Supported Operating Systems
|
||||
|
||||
As this role requires root-privileges, we added `become: true` to all tasks. So please make sure you run the role as root or as a user with become-privileges.
|
||||
- EL
|
||||
- 7, 8, 9
|
||||
- Ubuntu
|
||||
- bionic, focal, jammy
|
||||
- Debian
|
||||
- buster, bullseye
|
||||
- Amazon
|
||||
- Fedora
|
||||
- ArchLinux
|
||||
- SmartOS
|
||||
- FreeBSD
|
||||
- 12.2
|
||||
- OpenBSD
|
||||
- 7.0
|
||||
|
||||
## Role Variables
|
||||
|
||||
- `network_ipv6_enable`
|
||||
- Default: `true`
|
||||
- Description: false if IPv6 is not needed. `ssh_listen_to` must also be set to listen to IPv6 addresses (for example `[::]`).
|
||||
- `ssh_client_config_file`
|
||||
- Default: `'/etc/ssh/ssh_config'`
|
||||
- Description: path of the ssh client configuration file, e.g. `/etc/ssh/ssh_config.d/custom.conf`.
|
||||
- `ssh_server_config_file`
|
||||
- Default: `'/etc/ssh/sshd_config'`
|
||||
- Description: path of the ssh server configuration file, e.g. `/etc/ssh/sshd_config.d/custom.conf`.
|
||||
- `ssh_server_ports`
|
||||
- Default: `['22']`
|
||||
- Description: ports on which ssh-server should listen.
|
||||
- `ssh_client_port`
|
||||
- Default: `'22'`
|
||||
- Description: Specifies the port number to connect on the remote host.
|
||||
- `ssh_listen_to`
|
||||
- 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!
|
||||
- `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.
|
||||
- `ssh_host_rsa_key_size`
|
||||
- Default: `4096`
|
||||
- Description: Specifies the number of bits in the private host RSA key to create.
|
||||
- `ssh_host_key_algorithms`
|
||||
- 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!
|
||||
- `ssh_client_host_key_algorithms`
|
||||
- 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!.
|
||||
- `ssh_client_alive_interval`
|
||||
- Default: `600`
|
||||
- Description: specifies an interval for sending keepalive messages.
|
||||
- `ssh_client_alive_count`
|
||||
- Default: `3`
|
||||
- Description: Defines the number of acceptable unanswered client alive messages before disconnecting clients.
|
||||
- `ssh_permit_tunnel`
|
||||
- Default: `false`
|
||||
- Description: true if SSH Port Tunneling is required.
|
||||
- `ssh_remote_hosts`
|
||||
- Default: `[]`
|
||||
- Description: one or more hosts and their custom options for the ssh-client. Default is empty. See examples in `defaults/main.yml`.
|
||||
- `ssh_permit_root_login`
|
||||
- Default: `no`
|
||||
- Description: Disable root-login. Set to `'without-password'` or `'yes'` to enable root-login - The quotes are required!
|
||||
- `ssh_allow_tcp_forwarding`
|
||||
- Default: `no`
|
||||
- Description: `'no'` or `False` to disable TCP Forwarding. Set to `'yes'` or `True` to allow TCP Forwarding. If you are using OpenSSH >= 6.2 version, you can specify `'yes'`, `'no'`, `'all'`, `'local'`or`'remote'`.
|
||||
- `ssh_gateway_ports`
|
||||
- Default: `false`
|
||||
- Description: `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.
|
||||
- `ssh_allow_agent_forwarding`
|
||||
- Default: `false`
|
||||
- Description: false to disable Agent Forwarding. Set to true to allow Agent Forwarding.
|
||||
- `ssh_x11_forwarding`
|
||||
- Default: `false`
|
||||
- Description: false to disable X11 Forwarding. Set to true to allow X11 Forwarding.
|
||||
- `ssh_pam_support`
|
||||
- Default: `true`
|
||||
- Description: true if SSH has PAM support.
|
||||
- `ssh_use_pam`
|
||||
- Default: `true`
|
||||
- Description: false to disable pam authentication.
|
||||
- `ssh_gssapi_support`
|
||||
- Default: `false`
|
||||
- Description: Set to true to enable GSSAPI authentication (both client and server).
|
||||
- `ssh_gssapi_delegation`
|
||||
- Default: `false`
|
||||
- Description: Set to true to enable GSSAPI credential forwarding.
|
||||
- `ssh_kerberos_support`
|
||||
- Default: `true`
|
||||
- Description: true if SSH has Kerberos support.
|
||||
- `ssh_deny_users`
|
||||
- Default: `''`
|
||||
- Description: if specified, login is disallowed for user names that match one of the patterns.
|
||||
- `ssh_allow_users`
|
||||
- Default: `''`
|
||||
- Description: if specified, login is allowed only for user names that match one of the patterns.
|
||||
- `ssh_deny_groups`
|
||||
- Default: `''`
|
||||
- Description: if specified, login is disallowed for users whose primary group or supplementary group list matches one of the patterns.
|
||||
- `ssh_allow_groups`
|
||||
- Default: `''`
|
||||
- Description: if specified, login is allowed only for users whose primary group or supplementary group list matches one of the patterns.
|
||||
- `ssh_authorized_keys_file`
|
||||
- Default: `''`
|
||||
- Description: change default file that contains the public keys that can be used for user authentication.
|
||||
- `ssh_trusted_user_ca_keys_file`
|
||||
- Default: `''`
|
||||
- Description: specifies the file containing trusted certificate authorities public keys used to sign user certificates.
|
||||
- `ssh_trusted_user_ca_keys`
|
||||
- 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.
|
||||
- `ssh_authorized_principals_file`
|
||||
- Default: `''`
|
||||
- Description: specifies the file containing principals that are allowed. Only used if `ssh_trusted_user_ca_keys_file` is set.
|
||||
- `ssh_authorized_principals`
|
||||
- Default: `[]`
|
||||
- Description: list of hashes containing file paths and authorized principals, see `default_custom.yml` for all options. Only used if `ssh_authorized_principals_file` is set.
|
||||
- `ssh_print_motd`
|
||||
- Default: `false`
|
||||
- Description: false to disable printing of the MOTD.
|
||||
- `ssh_print_pam_motd`
|
||||
- Default: `false`
|
||||
- Description: false to disable printing of the MOTD via pam (Debian and Ubuntu).
|
||||
- `ssh_print_last_log`
|
||||
- Default: `false`
|
||||
- Description: false to disable display of last login information.
|
||||
- `sftp_enabled`
|
||||
- Default: `true`
|
||||
- Description: false to disable sftp configuration.
|
||||
- `sftp_umask`
|
||||
- Default: `'0027'`
|
||||
- Description: Specifies the umask for sftp.
|
||||
- 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`
|
||||
- Description: false to disable chroot for sftp.
|
||||
- Description: Set to `false` to disable chroot for sftp.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `sftp_chroot_dir`
|
||||
- Default: `/home/%u`
|
||||
- Description: change default sftp chroot location.
|
||||
- `ssh_client_roaming`
|
||||
- Description: change default stp chroot location
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `sftp_enabled`
|
||||
- Default: `true`
|
||||
- Description: Set to `false` to disable sftp configuration.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `sftp_umask`
|
||||
- Default: `0027`
|
||||
- Description: Specifies the umask for sftp.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_allow_agent_forwarding`
|
||||
- Default: `false`
|
||||
- Description: enable experimental client roaming.
|
||||
- `sshd_moduli_file`
|
||||
- Default: `'/etc/ssh/moduli'`
|
||||
- Description: path to the SSH moduli file.
|
||||
- `sshd_moduli_minimum`
|
||||
- Default: `2048`
|
||||
- Description: remove Diffie-Hellman parameters smaller than the defined size to mitigate logjam.
|
||||
- Description: Set to `false` to disable Agent Forwarding. Set to `true` to allow Agent Forwarding.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_allow_groups`
|
||||
- Default: ``
|
||||
- Description: if specified, login is allowed only for users whose primary group or supplementary group list matches one of the patterns.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_allow_tcp_forwarding`
|
||||
- Default: `no`
|
||||
- Description: Set to `'no'` or `false` to disable TCP Forwarding. Set to `'yes'` or`True` to allow TCP Forwarding. If you are using OpenSSH >= 6.2 version, you can specify `'yes'`, `'no'`, `'all'`, `'local'`or`'remote'`.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_allow_users`
|
||||
- Default: ``
|
||||
- Description: if specified, login is allowed only for user names that match one of the patterns.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_authorized_keys_file`
|
||||
- Default: ``
|
||||
- Description: change default file that contains the public keys that can be used for user authentication
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_authorized_principals`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_authorized_principals_file`
|
||||
- Default: ``
|
||||
- Description: specifies the file containing principals that are allowed. Only used if `ssh_trusted_user_ca_keys_file` is set.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_banner`
|
||||
- Default: `false`
|
||||
- Description: Set to `true` to print a banner on login.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_banner_path`
|
||||
- Default: `/etc/sshd/banner.txt`
|
||||
- Description: path to the SSH banner file.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_challengeresponseauthentication`
|
||||
- Default: `false`
|
||||
- Description: Specifies whether challenge-response authentication is allowed (e.g. via PAM).
|
||||
- `ssh_client_password_login`
|
||||
- Default: `false`
|
||||
- Description: `true` to allow password-based authentication with the ssh client.
|
||||
- `ssh_server_password_login`
|
||||
- Default: `false`
|
||||
- Description: `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`.
|
||||
- `ssh_banner`
|
||||
- Default: `false`
|
||||
- Description: `true` to print a banner on login.
|
||||
- `ssh_banner_path`
|
||||
- Default: `'/etc/sshd/banner.txt'`
|
||||
- Description: path to the SSH banner file.
|
||||
- `ssh_client_hardening`
|
||||
- Default: `true`
|
||||
- Description: `false` to stop harden the client.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_ciphers`
|
||||
- Default: ``
|
||||
- Description: Change this list to overwrite ciphers. Defaults found in `defaults/main.yml`
|
||||
- Type: list
|
||||
- Required: no
|
||||
- `ssh_client_alive_count`
|
||||
- Default: `3`
|
||||
- Description: Defines the number of acceptable unanswered client alive messages before disconnecting clients.
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `ssh_client_alive_interval`
|
||||
- Default: `300`
|
||||
- Description: specifies an interval for sending keepalive messages.
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `ssh_client_compression`
|
||||
- Default: `false`
|
||||
- Description: Specifies whether the client requests compression.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_client_config_file`
|
||||
- Default: `/etc/ssh/ssh_config`
|
||||
- Description: path of the ssh client configuration file, e.g. `/etc/ssh/ssh_config.d/custom.conf`.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_client_hardening`
|
||||
- Default: `true`
|
||||
- Description: Set to `false` to stop harden the client.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_client_host_key_algorithms`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_client_password_login`
|
||||
- Default: `false`
|
||||
- Description: Set to `true` to allow password-based authentication with the ssh client.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_client_port`
|
||||
- Default: `22`
|
||||
- Description: Specifies the port number to connect on the remote host.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_client_roaming`
|
||||
- Default: `false`
|
||||
- Description: enable experimental client roaming.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_compression`
|
||||
- Default: `false`
|
||||
- Description: Specifies whether server-side compression is enabled after the user has authenticated successfully.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_custom_options`
|
||||
- Default: ``
|
||||
- Description: Custom lines for SSH client configuration.
|
||||
- Type: list
|
||||
- Required: no
|
||||
- `ssh_custom_selinux_dir`
|
||||
- Default: `/etc/selinux/local-policies`
|
||||
- Description: directory where to store the ssh_password policy
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_deny_groups`
|
||||
- Default: ``
|
||||
- Description: if specified, login is disallowed for users whose primary group or supplementary group list matches one of the patterns.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_deny_users`
|
||||
- Default: ``
|
||||
- Description: if specified, login is disallowed for user names that match one of the patterns.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_gateway_ports`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_gssapi_delegation`
|
||||
- Default: `false`
|
||||
- Description: Set to `true` to enable GSSAPI credential forwarding.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_gssapi_support`
|
||||
- Default: `false`
|
||||
- Description: Set to `true` to enable GSSAPI authentication (both client and server).
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_hardening_enabled`
|
||||
- Default: `true`
|
||||
- Description: Whether to run the hardening
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_host_certificates`
|
||||
- Default: ``
|
||||
- Description: Host certificates to look for when starting sshd
|
||||
- Type: list
|
||||
- Required: no
|
||||
- `ssh_host_key_algorithms`
|
||||
- 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
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_host_rsa_key_size`
|
||||
- Default: `4096`
|
||||
- Description: Specifies the number of bits in the private host RSA key to create.
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `ssh_kerberos_support`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_listen_to`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_login_grace_time`
|
||||
- Default: `30s`
|
||||
- Description: specifies the time allowed for successful authentication to the SSH server.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_macs`
|
||||
- Default: ``
|
||||
- Description: Change this list to overwrite macs. Defaults found in `defaults/main.yml`
|
||||
- Type: list
|
||||
- Required: no
|
||||
- `ssh_max_auth_retries`
|
||||
- Default: `2`
|
||||
- Description: Specifies the maximum number of authentication attempts permitted per connection.
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `ssh_max_sessions`
|
||||
- Default: `10`
|
||||
- Description: Specifies the maximum number of open sessions permitted from a given connection.
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `ssh_max_startups`
|
||||
- Default: `10:30:60`
|
||||
- Description: Specifies the maximum number of concurrent unauthenticated connections to the SSH daemon.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_pam_support`
|
||||
- Default: `true`
|
||||
- Description: Set to `true` if SSH has PAM support.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_permit_root_login`
|
||||
- Default: `no`
|
||||
- Description: Disable root-login. Set to `'without-password'` or `'yes'` to enable root-login - The quotes are required!
|
||||
- Type: str
|
||||
- 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.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- Choices:
|
||||
- no
|
||||
- yes
|
||||
- point-to-point
|
||||
- ethernet
|
||||
- `ssh_print_debian_banner`
|
||||
- Default: `false`
|
||||
- Description: `true` to print debian specific banner.
|
||||
- Description: Set to `true` to print debian specific banner.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_print_last_log`
|
||||
- Default: `false`
|
||||
- Description: Set to `false` to disable display of last login information.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_print_motd`
|
||||
- Default: `false`
|
||||
- Description: Set to `false` to disable printing of the MOTD.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_print_pam_motd`
|
||||
- Default: `false`
|
||||
- Description: Set to `false` to disable printing of the MOTD via pam (Debian and Ubuntu).
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_ps59`
|
||||
- Default: `sandbox`
|
||||
- Description: Specifies whether sshd separates privileges by creating an unprivileged child process to deal with incoming network traffic.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_remote_hosts`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_server_accept_env_vars`
|
||||
- Default: ``
|
||||
- Description: Specifies what environment variables sent by the client will be copied into the session's environment, multiple environment variables may be separated by whitespace.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_server_config_file`
|
||||
- Default: `/etc/ssh/sshd_config`
|
||||
- Description: path of the ssh server configuration file, e.g. `/etc/ssh/sshd_config.d/custom.conf`.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_server_enabled`
|
||||
- Default: `true`
|
||||
- Description: `false` to disable the opensshd server.
|
||||
- Description: Set to `false` to disable the opensshd server.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_server_hardening`
|
||||
- Default: `true`
|
||||
- Description: `false` to stop harden the server.
|
||||
- Description: Set to `false` to stop harden the server.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_server_match_address`
|
||||
- Default: `''`
|
||||
- Default: ``
|
||||
- Description: Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords on the following lines override those set in the global section of the config file, until either another Match line or the end of the file.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_server_match_group`
|
||||
- Default: `''`
|
||||
- Description: Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords on the following lines override those set in the global section of the config file, until either another Match line or the end of the file.
|
||||
- `ssh_server_match_user`
|
||||
- Default: `''`
|
||||
- Default: ``
|
||||
- Description: Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords on the following lines override those set in the global section of the config file, until either another Match line or the end of the file.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_server_match_local_port`
|
||||
- Default: `''`
|
||||
- Default: ``
|
||||
- Description: Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords on the following lines override those set in the global section of the config file, until either another Match line or the end of the file.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_server_match_user`
|
||||
- Default: ``
|
||||
- Description: Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords on the following lines override those set in the global section of the config file, until either another Match line or the end of the file.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_server_password_login`
|
||||
- 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
|
||||
- `ssh_server_permit_environment_vars`
|
||||
- Default: `no`
|
||||
- Description: `yes` to specify that ~/.ssh/environment and environment= options in ~/.ssh/authorized_keys are processed by sshd. With openssh version 7.8 it is possible to specify a whitelist of environment variable names in addition to global "yes" or "no" settings.
|
||||
- `ssh_server_accept_env_vars`
|
||||
- Default: `''`
|
||||
- Description: Specifies what environment variables sent by the client will be copied into the session's environment, multiple environment variables may be separated by whitespace.
|
||||
- Description: `yes` to specify that ~/.ssh/environment and environment= options in ~/.ssh/authorized_keys are processed by sshd. With openssh version 7.8 it is possible to specify a whitelist of environment variable names in addition to global 'yes' or 'no' settings.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_server_ports`
|
||||
- Default: `["22"]`
|
||||
- Description: ports on which ssh-server should listen.
|
||||
- Type: list
|
||||
- Required: no
|
||||
- `ssh_server_revoked_keys`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_trusted_user_ca_keys`
|
||||
- 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
|
||||
- Required: no
|
||||
- `ssh_trusted_user_ca_keys_file`
|
||||
- Default: ``
|
||||
- Description: specifies the file containing trusted certificate authorities public keys used to sign user certificates.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `ssh_use_dns`
|
||||
- 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.
|
||||
- `ssh_server_revoked_keys`
|
||||
- Default: `[]`
|
||||
- Description: a list of revoked public keys that the ssh server will always reject, useful to revoke known weak or compromised keys.
|
||||
- `ssh_max_startups`
|
||||
- Default: `'10:30:60'`
|
||||
- Description: Specifies the maximum number of concurrent unauthenticated connections to the SSH daemon.
|
||||
- `ssh_macs`
|
||||
- Default: `[]`
|
||||
- Description: Change this list to overwrite macs. Defaults found in `defaults/main.yml`.
|
||||
- `ssh_kex`
|
||||
- Default: `[]`
|
||||
- Description: Change this list to overwrite kexs. Defaults found in `defaults/main.yml`.
|
||||
- `ssh_ciphers`
|
||||
- Default: `[]`
|
||||
- Description: Change this list to overwrite ciphers. Defaults found in `defaults/main.yml`.
|
||||
- `ssh_custom_options`
|
||||
- Default: `[]`
|
||||
- Description: Custom lines for SSH client configuration.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_use_pam`
|
||||
- Default: `true`
|
||||
- Description: Set to `false` to disable pam authentication.
|
||||
- Type: bool
|
||||
- Required: no
|
||||
- `ssh_x11_forwarding`
|
||||
- Default: `false`
|
||||
- Description: Set to `false` to disable X11 Forwarding. Set to `true` to allow X11 Forwarding.
|
||||
- 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.
|
||||
- `sshd_syslog_facility`
|
||||
- Default: `'AUTH'`
|
||||
- Description: The facility code that is used when logging messages from sshd.
|
||||
- Type: list
|
||||
- Required: no
|
||||
- `sshd_log_level`
|
||||
- Default: `'VERBOSE'`
|
||||
- Default: `VERBOSE`
|
||||
- Description: the verbosity level that is used when logging messages from sshd.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `sshd_moduli_file`
|
||||
- Default: `/etc/ssh/moduli`
|
||||
- Description: path to the SSH moduli file.
|
||||
- Type: str
|
||||
- Required: no
|
||||
- `sshd_moduli_minimum`
|
||||
- Default: `2048`
|
||||
- Description: remove Diffie-Hellman parameters smaller than the defined size to mitigate logjam.
|
||||
- Type: int
|
||||
- Required: no
|
||||
- `sshd_strict_modes`
|
||||
- Default: `true`
|
||||
- Description: Check file modes and ownership of the user's files and home directory before accepting login.
|
||||
- `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: bool
|
||||
- Required: no
|
||||
- `sshd_syslog_facility`
|
||||
- Default: `AUTH`
|
||||
- Description: The facility code that is used when logging messages from sshd.
|
||||
- Type: str
|
||||
- Required: no
|
||||
|
||||
## Dependencies
|
||||
|
||||
None.
|
||||
|
||||
## Example Playbook
|
||||
|
||||
```yml
|
||||
- hosts: localhost
|
||||
collections:
|
||||
- devsec.hardening
|
||||
roles:
|
||||
- ssh_hardening
|
||||
```
|
||||
- hosts: all
|
||||
roles:
|
||||
- name: devsec.hardening.ssh_hardening
|
||||
```
|
||||
|
||||
<!-- END_ANSIBLE_DOCS -->
|
||||
|
||||
## Configuring settings not listed in role-variables
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ ssh_client_alive_interval: 300 # sshd
|
||||
ssh_client_alive_count: 3 # sshd
|
||||
|
||||
# Allow SSH Tunnels
|
||||
ssh_permit_tunnel: false
|
||||
ssh_permit_tunnel: "no"
|
||||
|
||||
# Hosts with custom options. # ssh
|
||||
# Example:
|
||||
|
||||
@@ -0,0 +1,367 @@
|
||||
---
|
||||
argument_specs:
|
||||
main:
|
||||
short_description: The main entry point for the ssh hardening role.
|
||||
version_added: 8.8.0
|
||||
options:
|
||||
network_ipv6_enable:
|
||||
default: true
|
||||
type: bool
|
||||
description: '`false` if IPv6 is not needed. `ssh_listen_to` must also be
|
||||
set to listen to IPv6 addresses (for example `[::]`).'
|
||||
ssh_client_config_file:
|
||||
default: /etc/ssh/ssh_config
|
||||
description: path of the ssh client configuration file, e.g. `/etc/ssh/ssh_config.d/custom.conf`.
|
||||
ssh_server_config_file:
|
||||
default: /etc/ssh/sshd_config
|
||||
description: path of the ssh server configuration file, e.g. `/etc/ssh/sshd_config.d/custom.conf`.
|
||||
ssh_server_ports:
|
||||
default: ['22']
|
||||
type: list
|
||||
description: ports on which ssh-server should listen.
|
||||
ssh_client_port:
|
||||
default: '22'
|
||||
description: Specifies the port number to connect on the remote host.
|
||||
ssh_listen_to:
|
||||
default: [0.0.0.0]
|
||||
type: list
|
||||
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
|
||||
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
|
||||
installed sshd version.
|
||||
ssh_host_rsa_key_size:
|
||||
default: 4096
|
||||
type: int
|
||||
description: Specifies the number of bits in the private host RSA key to create.
|
||||
ssh_host_key_algorithms:
|
||||
default: []
|
||||
type: list
|
||||
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
|
||||
ssh_client_host_key_algorithms:
|
||||
default: []
|
||||
type: list
|
||||
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!
|
||||
ssh_client_alive_interval:
|
||||
default: 300
|
||||
description: specifies an interval for sending keepalive messages.
|
||||
type: int
|
||||
ssh_client_alive_count:
|
||||
default: 3
|
||||
description: Defines the number of acceptable unanswered client alive messages
|
||||
before disconnecting clients.
|
||||
type: int
|
||||
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.
|
||||
choices:
|
||||
- 'no'
|
||||
- 'yes'
|
||||
- point-to-point
|
||||
- ethernet
|
||||
ssh_remote_hosts:
|
||||
default: []
|
||||
type: list
|
||||
description: one or more hosts and their custom options for the ssh-client.
|
||||
Default is empty. See examples in `defaults/main.yml`
|
||||
ssh_permit_root_login:
|
||||
default: 'no'
|
||||
description: Disable root-login. Set to `'without-password'` or `'yes'` to
|
||||
enable root-login - The quotes are required!
|
||||
ssh_allow_tcp_forwarding:
|
||||
default: 'no'
|
||||
description: Set to `'no'` or `false` to disable TCP Forwarding. Set to `'yes'`
|
||||
or`True` to allow TCP Forwarding. If you are using OpenSSH >= 6.2 version,
|
||||
you can specify `'yes'`, `'no'`, `'all'`, `'local'`or`'remote'`.
|
||||
ssh_gateway_ports:
|
||||
default: false
|
||||
type: bool
|
||||
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.
|
||||
ssh_allow_agent_forwarding:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `false` to disable Agent Forwarding. Set to `true` to
|
||||
allow Agent Forwarding.
|
||||
ssh_x11_forwarding:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `false` to disable X11 Forwarding. Set to `true` to allow
|
||||
X11 Forwarding.
|
||||
ssh_pam_support:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `true` if SSH has PAM support.
|
||||
ssh_use_pam:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to disable pam authentication.
|
||||
ssh_gssapi_support:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `true` to enable GSSAPI authentication (both client and
|
||||
server).
|
||||
ssh_gssapi_delegation:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `true` to enable GSSAPI credential forwarding.
|
||||
ssh_kerberos_support:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `true` if SSH has Kerberos support.
|
||||
ssh_deny_users:
|
||||
default: ''
|
||||
description: if specified, login is disallowed for user names that match one
|
||||
of the patterns.
|
||||
ssh_allow_users:
|
||||
default: ''
|
||||
description: if specified, login is allowed only for user names that match
|
||||
one of the patterns.
|
||||
ssh_deny_groups:
|
||||
default: ''
|
||||
description: if specified, login is disallowed for users whose primary group
|
||||
or supplementary group list matches one of the patterns.
|
||||
ssh_allow_groups:
|
||||
default: ''
|
||||
description: if specified, login is allowed only for users whose primary group
|
||||
or supplementary group list matches one of the patterns.
|
||||
ssh_authorized_keys_file:
|
||||
default: ''
|
||||
description: change default file that contains the public keys that can be
|
||||
used for user authentication
|
||||
ssh_trusted_user_ca_keys_file:
|
||||
default: ''
|
||||
description: specifies the file containing trusted certificate authorities
|
||||
public keys used to sign user certificates.
|
||||
ssh_trusted_user_ca_keys:
|
||||
default: []
|
||||
type: list
|
||||
description: set the trusted certificate authorities public keys used to sign
|
||||
user certificates. Only used if `ssh_trusted_user_ca_keys_file` is set.
|
||||
ssh_authorized_principals_file:
|
||||
default: ''
|
||||
description: specifies the file containing principals that are allowed. Only
|
||||
used if `ssh_trusted_user_ca_keys_file` is set.
|
||||
ssh_authorized_principals:
|
||||
default: []
|
||||
type: list
|
||||
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
|
||||
ssh_print_motd:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `false` to disable printing of the MOTD.
|
||||
ssh_print_pam_motd:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `false` to disable printing of the MOTD via pam (Debian
|
||||
and Ubuntu).
|
||||
ssh_print_last_log:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `false` to disable display of last login information.
|
||||
sftp_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to disable sftp configuration.
|
||||
sftp_umask:
|
||||
default: '0027'
|
||||
description: Specifies the umask for sftp.
|
||||
sftp_chroot:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to disable chroot for sftp.
|
||||
sftp_chroot_dir:
|
||||
default: /home/%u
|
||||
description: change default stp chroot location
|
||||
ssh_client_roaming:
|
||||
default: false
|
||||
type: bool
|
||||
description: enable experimental client roaming.
|
||||
sshd_moduli_file:
|
||||
default: /etc/ssh/moduli
|
||||
description: path to the SSH moduli file.
|
||||
sshd_moduli_minimum:
|
||||
default: 2048
|
||||
description: remove Diffie-Hellman parameters smaller than the defined size
|
||||
to mitigate logjam.
|
||||
type: int
|
||||
ssh_challengeresponseauthentication:
|
||||
default: false
|
||||
type: bool
|
||||
description: Specifies whether challenge-response authentication is allowed
|
||||
(e.g. via PAM).
|
||||
ssh_client_password_login:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `true` to allow password-based authentication with the
|
||||
ssh client.
|
||||
ssh_server_password_login:
|
||||
default: false
|
||||
type: bool
|
||||
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`.'
|
||||
ssh_banner:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `true` to print a banner on login.
|
||||
ssh_banner_path:
|
||||
default: /etc/sshd/banner.txt
|
||||
description: path to the SSH banner file.
|
||||
ssh_client_hardening:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to stop harden the client.
|
||||
ssh_client_compression:
|
||||
default: false
|
||||
type: bool
|
||||
description: Specifies whether the client requests compression.
|
||||
ssh_compression:
|
||||
default: false
|
||||
type: bool
|
||||
description: Specifies whether server-side compression is enabled after the
|
||||
user has authenticated successfully.
|
||||
ssh_login_grace_time:
|
||||
default: 30s
|
||||
description: specifies the time allowed for successful authentication to the
|
||||
SSH server.
|
||||
ssh_max_auth_retries:
|
||||
default: 2
|
||||
description: Specifies the maximum number of authentication attempts permitted
|
||||
per connection.
|
||||
type: int
|
||||
ssh_max_sessions:
|
||||
default: 10
|
||||
description: Specifies the maximum number of open sessions permitted from
|
||||
a given connection.
|
||||
type: int
|
||||
ssh_print_debian_banner:
|
||||
default: false
|
||||
type: bool
|
||||
description: Set to `true` to print debian specific banner.
|
||||
ssh_server_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to disable the opensshd server.
|
||||
ssh_server_hardening:
|
||||
default: true
|
||||
type: bool
|
||||
description: Set to `false` to stop harden the server.
|
||||
ssh_server_match_address:
|
||||
default: ''
|
||||
description: Introduces a conditional block. If all of the criteria on the
|
||||
Match line are satisfied, the keywords on the following lines override those
|
||||
set in the global section of the config file, until either another Match
|
||||
line or the end of the file.
|
||||
ssh_server_match_group:
|
||||
default: ''
|
||||
description: Introduces a conditional block. If all of the criteria on the
|
||||
Match line are satisfied, the keywords on the following lines override those
|
||||
set in the global section of the config file, until either another Match
|
||||
line or the end of the file.
|
||||
ssh_server_match_user:
|
||||
default: ''
|
||||
description: Introduces a conditional block. If all of the criteria on the
|
||||
Match line are satisfied, the keywords on the following lines override those
|
||||
set in the global section of the config file, until either another Match
|
||||
line or the end of the file.
|
||||
ssh_server_match_local_port:
|
||||
default: ''
|
||||
description: Introduces a conditional block. If all of the criteria on the
|
||||
Match line are satisfied, the keywords on the following lines override those
|
||||
set in the global section of the config file, until either another Match
|
||||
line or the end of the file.
|
||||
ssh_server_permit_environment_vars:
|
||||
default: 'no'
|
||||
description: "`yes` to specify that ~/.ssh/environment and environment= options\
|
||||
\ in ~/.ssh/authorized_keys are processed by sshd. With openssh version\
|
||||
\ 7.8 it is possible to specify a whitelist of environment variable names\
|
||||
\ in addition to global 'yes' or 'no' settings."
|
||||
ssh_server_accept_env_vars:
|
||||
default: ''
|
||||
description: Specifies what environment variables sent by the client will
|
||||
be copied into the session's environment, multiple environment variables
|
||||
may be separated by whitespace.
|
||||
ssh_use_dns:
|
||||
default: false
|
||||
type: bool
|
||||
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.
|
||||
ssh_server_revoked_keys:
|
||||
default: []
|
||||
type: list
|
||||
description: a list of revoked public keys that the ssh server will always
|
||||
reject, useful to revoke known weak or compromised keys.
|
||||
ssh_max_startups:
|
||||
default: 10:30:60
|
||||
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:
|
||||
default: []
|
||||
type: list
|
||||
description: Custom lines for SSH client configuration.
|
||||
sshd_custom_options:
|
||||
default: []
|
||||
type: list
|
||||
description: Custom lines for SSH daemon configuration.
|
||||
sshd_syslog_facility:
|
||||
default: AUTH
|
||||
description: The facility code that is used when logging messages from sshd.
|
||||
type: str
|
||||
sshd_log_level:
|
||||
default: VERBOSE
|
||||
description: the verbosity level that is used when logging messages from sshd.
|
||||
sshd_strict_modes:
|
||||
default: true
|
||||
type: bool
|
||||
description: Check file modes and ownership of the user's files and home directory
|
||||
before accepting login.
|
||||
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`
|
||||
ssh_custom_selinux_dir:
|
||||
default: /etc/selinux/local-policies
|
||||
description: directory where to store the ssh_password policy
|
||||
ssh_hardening_enabled:
|
||||
default: true
|
||||
type: bool
|
||||
description: Whether to run the hardening
|
||||
ssh_host_certificates:
|
||||
default: []
|
||||
type: list
|
||||
description: Host certificates to look for when starting sshd
|
||||
ssh_ps59:
|
||||
default: sandbox
|
||||
description: Specifies whether sshd separates privileges by creating an unprivileged
|
||||
child process to deal with incoming network traffic.
|
||||
@@ -27,6 +27,8 @@ galaxy_info:
|
||||
- name: FreeBSD
|
||||
versions:
|
||||
- "12.2"
|
||||
- "13.2"
|
||||
- "14.0"
|
||||
- name: OpenBSD
|
||||
versions:
|
||||
- "7.0"
|
||||
|
||||
@@ -192,7 +192,7 @@ ClientAliveInterval {{ ssh_client_alive_interval }}
|
||||
ClientAliveCountMax {{ ssh_client_alive_count }}
|
||||
|
||||
# Disable tunneling
|
||||
PermitTunnel {{ 'yes' if (ssh_permit_tunnel|bool) else 'no' }}
|
||||
PermitTunnel {{ ssh_permit_tunnel }}
|
||||
|
||||
# Disable forwarding tcp connections.
|
||||
# no real advantage without denied shell access
|
||||
|
||||
Reference in new issue
Block a user