Skip to content

Commit fb276f9

Browse files
authored
Merge pull request #11279 from Xeicker/sudoers_edge_case
Fix sudo_require_reauthentication remediations edge case
2 parents 684285c + f002fdf commit fb276f9

3 files changed

Lines changed: 32 additions & 12 deletions

File tree

linux_os/guide/system/software/sudo/sudo_require_reauthentication/ansible/shared.yml

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,43 @@
55
# disruption = low
66

77
{{{ ansible_instantiate_variables("var_sudo_timestamp_timeout") }}}
8-
- name: "Find out if /etc/sudoers.d/* files contain 'Defaults timestamp_timeout' to be deduplicated"
9-
find:
8+
9+
- name: "{{{ rule_title }}} - Find /etc/sudoers.d/* files containing 'Defaults timestamp_timeout'"
10+
ansible.builtin.find:
1011
path: "/etc/sudoers.d"
1112
patterns: "*"
1213
contains: '^[\s]*Defaults\s.*\btimestamp_timeout[\s]*=.*'
1314
register: sudoers_d_defaults_timestamp_timeout
1415

15-
- name: "Remove found occurrences of 'Defaults timestamp_timeout' from /etc/sudoers.d/* files"
16-
lineinfile:
16+
- name: "{{{ rule_title }}} - Remove 'Defaults timestamp_timeout' from /etc/sudoers.d/* files"
17+
ansible.builtin.lineinfile:
1718
path: "{{ item.path }}"
1819
regexp: '^[\s]*Defaults\s.*\btimestamp_timeout[\s]*=.*'
1920
state: absent
2021
with_items: "{{ sudoers_d_defaults_timestamp_timeout.files }}"
2122

22-
- name: Ensure timestamp_timeout is enabled with the appropriate value in /etc/sudoers
23-
lineinfile:
23+
- name: "{{{ rule_title }}} - Ensure timestamp_timeout has the appropriate value in /etc/sudoers"
24+
ansible.builtin.lineinfile:
2425
path: /etc/sudoers
2526
regexp: '^[\s]*Defaults\s(.*)\btimestamp_timeout[\s]*=[\s]*[-]?\w+\b(.*)$'
2627
line: 'Defaults \1timestamp_timeout={{ var_sudo_timestamp_timeout }}\2'
2728
validate: /usr/sbin/visudo -cf %s
2829
backrefs: yes
2930
register: edit_sudoers_timestamp_timeout_option
3031

31-
- name: Enable timestamp_timeout option with appropriate value in /etc/sudoers
32-
lineinfile: # noqa 503
32+
- name: "{{{ rule_title }}} - Enable timestamp_timeout option with correct value in /etc/sudoers"
33+
ansible.builtin.lineinfile: # noqa 503
3334
path: /etc/sudoers
3435
line: 'Defaults timestamp_timeout={{ var_sudo_timestamp_timeout }}'
3536
validate: /usr/sbin/visudo -cf %s
36-
when: edit_sudoers_timestamp_timeout_option is defined and not edit_sudoers_timestamp_timeout_option.changed
37+
when: >
38+
edit_sudoers_timestamp_timeout_option is defined and
39+
not edit_sudoers_timestamp_timeout_option.changed
40+
41+
- name: "{{{ rule_title }}} - Remove timestamp_timeout wrong values in /etc/sudoers"
42+
ansible.builtin.lineinfile:
43+
path: /etc/sudoers
44+
regexp: '^[\s]*Defaults\s.*\btimestamp_timeout[\s]*=[\s]*(?!{{
45+
var_sudo_timestamp_timeout }}\b)[-]?\w+\b.*$'
46+
state: absent
47+
validate: /usr/sbin/visudo -cf %s

linux_os/guide/system/software/sudo/sudo_require_reauthentication/bash/shared.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@ if /usr/sbin/visudo -qcf /etc/sudoers; then
1717
# sudoers file doesn't define Option timestamp_timeout
1818
echo "Defaults timestamp_timeout=${var_sudo_timestamp_timeout}" >> /etc/sudoers
1919
else
20-
# sudoers file defines Option timestamp_timeout, remediate if appropriate value is not set
21-
if ! grep -P "^[\s]*Defaults.*timestamp_timeout[\s]*=[\s]*${var_sudo_timestamp_timeout}.*$" /etc/sudoers; then
22-
20+
# sudoers file defines Option timestamp_timeout, remediate wrong values if present
21+
if grep -qP "^[\s]*Defaults\s.*\btimestamp_timeout[\s]*=[\s]*(?!${var_sudo_timestamp_timeout}\b)[-]?\w+\b.*$" /etc/sudoers; then
2322
sed -Ei "s/(^[[:blank:]]*Defaults.*timestamp_timeout[[:blank:]]*=)[[:blank:]]*[-]?\w+(.*$)/\1${var_sudo_timestamp_timeout}\2/" /etc/sudoers
2423
fi
2524
fi
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
# packages = sudo
3+
# variables = var_sudo_timestamp_timeout=0
4+
5+
if grep -q 'timestamp_timeout' /etc/sudoers; then
6+
sed -i 's/.*timestamp_timeout.*/Defaults timestamp_timeout=-1/' /etc/sudoers
7+
else
8+
echo "Defaults timestamp_timeout=-1" >> /etc/sudoers
9+
fi
10+
echo "Defaults timestamp_timeout=0" >> /etc/sudoers

0 commit comments

Comments
 (0)