Skip to content

Commit 27cff44

Browse files
committed
Fix Ansible remediation for sshd rules
This changes namely rules using the `sshd_lineinfile` template. The problem was that the `ansible.builtin.file` Ansible module accepts only directories as `paths`, it doesn't accept regular files, therefore, the `/etc/ssh/sshd_config` file wasn't checked by this module. Addressing: ``` "/etc/ssh/sshd_config": "'/etc/ssh/sshd_config' is not a directory" ``` Fixes: #14654
1 parent 633e4bd commit 27cff44

1 file changed

Lines changed: 22 additions & 8 deletions

File tree

shared/macros/10-ansible.jinja

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,31 +163,45 @@ value: :code:`Setting={{ varname1 }}`
163163
{{%- set dir_parameter = var_dir + "_has_parameter" -%}}
164164
{{%- set line_regex = prefix_regex + "{{ \"" + parameter + "\"| regex_escape }}" + separator_regex -%}}
165165
{{%- set find_when = dir_exists + ".stat.isdir is defined and " + dir_exists + ".stat.isdir" -%}}
166-
{{%- set lineinfile_items = "{{ " + dir_parameter + ".files }}" -%}}
166+
{{%- set lineinfile_items = "{{ " + dir_parameter + ".files | default([]) }}" -%}}
167167
{{%- set lineinfile_when = dir_parameter + ".matched > 0" -%}}
168168
{{%- set new_line = parameter + separator + value -%}}
169-
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured
169+
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured in {{{ config_file }}}
170+
ansible.builtin.lineinfile:
171+
path: {{{ config_file }}}
172+
regexp: {{{ line_regex }}}
173+
state: absent
174+
check_mode: true
175+
changed_when: false
176+
register: _config_file_has_parameter
177+
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured in {{{ config_dir }}}
170178
ansible.builtin.find:
171179
paths:
172-
- {{{ config_file }}}
173180
- {{{ config_dir }}}
174181
contains: {{{ line_regex }}}
175-
register: _sshd_config_has_parameter
176-
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured correctly
182+
register: _config_dir_has_parameter
183+
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured correctly in {{{ config_file }}}
184+
ansible.builtin.lineinfile:
185+
path: {{{ config_file }}}
186+
regexp: {{{ line_regex ~ value ~ "$" }}}
187+
state: absent
188+
check_mode: true
189+
changed_when: false
190+
register: _config_file_correctly
191+
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured correctly in {{{ config_dir }}}
177192
ansible.builtin.find:
178193
paths:
179-
- {{{ config_file }}}
180194
- {{{ config_dir }}}
181195
contains: {{{ line_regex ~ value ~ "$" }}}
182-
register: _sshd_config_correctly
196+
register: _config_dir_correctly
183197
- name: '{{{ msg or rule_title }}}'
184198
block:
185199
{{{ ansible_lineinfile("Deduplicate values from " + config_file, config_file, regex=line_regex, insensitive=insensitive, create='no', state='absent')|indent }}}
186200
{{{ ansible_stat("Check if " + config_dir + " exists", path=config_dir, register=dir_exists)|indent }}}
187201
{{{ ansible_find("Check if the parameter " + parameter + " is present in " + config_dir, paths=config_dir, contains=line_regex, register=dir_parameter, when=find_when)|indent }}}
188202
{{{ ansible_lineinfile("Remove parameter from files in " + config_dir, path="{{ item.path }}", regex=line_regex, insensitive=insensitive, state="absent", with_items=lineinfile_items, when=lineinfile_when)|indent }}}
189203
{{{ ansible_lineinfile("Insert correct line to " + set_file, set_file, regex=line_regex, insensitive=insensitive, new_line=new_line, create=create, state='present', validate=validate, insert_after=insert_after, insert_before=insert_before)|indent }}}
190-
when: _sshd_config_correctly.matched == 0 or _sshd_config_has_parameter.matched != 1
204+
when: (_config_file_correctly.found == 0 and _config_dir_correctly.matched == 0) or ((_config_file_has_parameter.found | int) + (_config_dir_has_parameter.matched | int)) != 1
191205
{{%- endmacro %}}
192206

193207

0 commit comments

Comments
 (0)