Skip to content

Commit 2d4d342

Browse files
thewismitclaude
andcommitted
Fix server_hardening role for Docker-based Molecule testing
Add /run/sshd directory creation before sshd_config deploy, add hardening_ntp_enabled toggle, disable NTP and unattended-upgrades in Molecule config, and skip verify assertions for disabled features. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 4218948 commit 2d4d342

5 files changed

Lines changed: 29 additions & 3 deletions

File tree

‎roles/server_hardening/defaults/main.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ hardening_sysctl_params:
8989
fs.protected_symlinks: 1
9090

9191
# ── NTP ──────────────────────────────────────────────────────────────────────
92+
hardening_ntp_enabled: true
9293
hardening_ntp_service: "systemd-timesyncd" # or "chrony"
9394

9495
# ── Systemd ──────────────────────────────────────────────────────────────────

‎roles/server_hardening/molecule/default/molecule.yml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ provisioner:
2727
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAITestKeyForMolecule molecule@test"
2828
hardening_ufw_enabled: false # UFW needs kernel modules unavailable in Docker
2929
hardening_fail2ban_enabled: false # No systemd journal backend in container
30+
hardening_ntp_enabled: false # No timesyncd/chrony in Docker
31+
hardening_unattended_upgrades_enabled: false # No systemd services in Docker
3032

3133
verifier:
3234
name: ansible

‎roles/server_hardening/molecule/default/verify.yml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,25 @@
8989
ansible.builtin.stat:
9090
path: /etc/apt/apt.conf.d/50unattended-upgrades
9191
register: uu_file
92+
when: hardening_unattended_upgrades_enabled | default(true)
9293

9394
- name: VERIFY | Assert unattended upgrades
9495
ansible.builtin.assert:
9596
that:
9697
- uu_file.stat.exists
98+
when: hardening_unattended_upgrades_enabled | default(true)
9799

98100
- name: VERIFY | Auto-upgrades configured
99101
ansible.builtin.stat:
100102
path: /etc/apt/apt.conf.d/20auto-upgrades
101103
register: au_file
104+
when: hardening_unattended_upgrades_enabled | default(true)
102105

103106
- name: VERIFY | Assert auto-upgrades
104107
ansible.builtin.assert:
105108
that:
106109
- au_file.stat.exists
110+
when: hardening_unattended_upgrades_enabled | default(true)
107111

108112
- name: VERIFY | Journal size configured
109113
ansible.builtin.command: grep -c "SystemMaxUse=500M" /etc/systemd/journald.conf

‎roles/server_hardening/tasks/ntp.yml‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,23 @@
44
name: systemd-timesyncd
55
enabled: true
66
state: started
7-
when: hardening_ntp_service == "systemd-timesyncd"
7+
when:
8+
- hardening_ntp_enabled
9+
- hardening_ntp_service == "systemd-timesyncd"
810

911
- name: NTP | Install chrony
1012
ansible.builtin.apt:
1113
name: chrony
1214
state: present
13-
when: hardening_ntp_service == "chrony"
15+
when:
16+
- hardening_ntp_enabled
17+
- hardening_ntp_service == "chrony"
1418

1519
- name: NTP | Enable chrony
1620
ansible.builtin.systemd:
1721
name: chrony
1822
enabled: true
1923
state: started
20-
when: hardening_ntp_service == "chrony"
24+
when:
25+
- hardening_ntp_enabled
26+
- hardening_ntp_service == "chrony"

‎roles/server_hardening/tasks/ssh.yml‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
11
---
2+
- name: SSH | Ensure openssh-server is installed
3+
ansible.builtin.apt:
4+
name: openssh-server
5+
state: present
6+
7+
- name: SSH | Ensure privilege separation directory exists
8+
ansible.builtin.file:
9+
path: /run/sshd
10+
state: directory
11+
owner: root
12+
group: root
13+
mode: "0755"
14+
215
- name: SSH | Deploy hardened sshd_config
316
ansible.builtin.template:
417
src: sshd_config.j2

0 commit comments

Comments
 (0)