Verify the UEFI Boot Loader grub.cfg Permissions

Classification:

compliance

Framework:

Control:

Description

File permissions for /boot/efi/EFI/redhat/grub.cfg should be set to 700.

To properly set the permissions of /boot/efi/EFI/redhat/grub.cfg, run the command:

$ sudo chmod 700 /boot/efi/EFI/redhat/grub.cfg

Rationale

Proper permissions ensure that only the root user can modify important boot parameters.

Remediation

Shell script

The following script can be run on the host to remediate the issue.

# Remediation is applicable only in certain platforms
if [ -d /sys/firmware/efi ] && rpm --quiet -q grub2-common && { [ ! -f /.dockerenv ] && [ ! -f /run/.containerenv ]; }; then

chmod u-s,g-xwrs,o-xwrt /boot/efi/EFI/redhat/grub.cfg

else
 >&2 echo 'Remediation is not applicable, nothing was done'
fi

Ansible playbook

The following playbook can be run with Ansible to remediate the issue.

- name: Gather the package facts
 package\_facts:
 manager: auto
 tags:
 - CCE-83431-7
 - NIST-800-171-3.4.5
 - NIST-800-53-AC-6(1)
 - NIST-800-53-CM-6(a)
 - configure\_strategy
 - file\_permissions\_efi\_grub2\_cfg
 - low\_complexity
 - low\_disruption
 - medium\_severity
 - no\_reboot\_needed

- name: Test for existence /boot/efi/EFI/redhat/grub.cfg
 stat:
 path: /boot/efi/EFI/redhat/grub.cfg
 register: file\_exists
 when:
 - '"/boot/efi" in ansible\_mounts | map(attribute="mount") | list'
 - '"grub2-common" in ansible\_facts.packages'
 - ansible\_virtualization\_type not in ["docker", "lxc", "openvz", "podman", "container"]
 tags:
 - CCE-83431-7
 - NIST-800-171-3.4.5
 - NIST-800-53-AC-6(1)
 - NIST-800-53-CM-6(a)
 - configure\_strategy
 - file\_permissions\_efi\_grub2\_cfg
 - low\_complexity
 - low\_disruption
 - medium\_severity
 - no\_reboot\_needed

- name: Ensure permission u-s,g-xwrs,o-xwrt on /boot/efi/EFI/redhat/grub.cfg
 file:
 path: /boot/efi/EFI/redhat/grub.cfg
 mode: u-s,g-xwrs,o-xwrt
 when:
 - '"/boot/efi" in ansible\_mounts | map(attribute="mount") | list'
 - '"grub2-common" in ansible\_facts.packages'
 - ansible\_virtualization\_type not in ["docker", "lxc", "openvz", "podman", "container"]
 - file\_exists.stat is defined and file\_exists.stat.exists
 tags:
 - CCE-83431-7
 - NIST-800-171-3.4.5
 - NIST-800-53-AC-6(1)
 - NIST-800-53-CM-6(a)
 - configure\_strategy
 - file\_permissions\_efi\_grub2\_cfg
 - low\_complexity
 - low\_disruption
 - medium\_severity
 - no\_reboot\_needed