After an upgrade from RedHat the template for the password is changed and uses a variable that OpenScap doesn't read. This makes that our test fails. On top of that the test checks for the use of common administrator account names like root, admin or administrator. This update solves the issue and from now we use a user instead of root for Grub2.
Today I had to update and verify that we have an entry password for Grub on all machines. We needed to do this to comply with the Certified Cloud Service Provider's OpenScap benchmark.
This only prevents a person with physical access to boot in single user mode! The machine can still be booted without the need of a password.
RHEL6 machines all use legacy boot where on RHEL7 we also make a difference between EFI and non-EFI machines.
First generate the hashes (on a RHEL6 and on a RHEL7 node)
RHEL6
grub-crypt --sha-512
RHEL7
grub2-mkpasswd-pbkdf2
And to finish... Here are the Ansible lines:
playbook lines:
#GRUB
- name: "grub v1 | add password"
lineinfile: dest=/etc/grub.conf regexp='^password ' state=present line='password --encrypted {{ grub_password_v1_passwd }}' insertafter='^timeout'
when: rhel6
tags: grub-password
- stat: path=/sys/firmware/efi/efivars/
register: grub_efi
when: rhel7
tags: grub-password
- name: remove unwanted grub.cfg on EFI systems
file:
state: absent
path: /boot/grub2/grub.cfg
when: rhel7 and grub_efi.stat.exists == True
tags: grub-password
- name: Install user template to make sure grub2-mkconfig doesn't mess up the config
template:
src: 01_users.j2
dest: /etc/grub.d/01_users
owner: root
group: root
mode: '0700'
notify:
- grub2-mkconfig EFI
- grub2-mkconfig MBR
when: rhel7
tags: grub-password
- name: "grub v2 EFI | add password"
lineinfile: dest=/etc/grub2-efi.cfg regexp="^password_pbkdf2 {{ grub_user }} " state=present insertafter=EOF line='password_pbkdf2 {{ grub_user }} {{ grub_password_v2_passwd }}'
when: rhel7 and grub_efi.stat.exists == True
tags: grub-password
- name: "grub v2 MBR | add password"
lineinfile: dest=/etc/grub2.cfg regexp="^password_pbkdf2 {{ grub_user }} " state=present insertafter=EOF line='password_pbkdf2 {{ grub_user }} {{ grub_password_v2_passwd }}'
when: rhel7 and grub_efi.stat.exists == False
vars:
grub_password_v1_passwd: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
grub_password_v2_passwd: grub.pbkdf2.sha512.10000.xxxxxxxxxxxxxxxxxxx
grub_user: loginuser
Handlers:
- name: grub2-mkconfig EFI
command: grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
when: grub_efi.stat.exists == True
- name: grub2-mkconfig MBR
command: grub2-mkconfig -o /boot/grub2/grub.cfg
when: grub_efi.stat.exists == False
01_users.j2:
#!/bin/sh -e
cat << "EOF"
set superusers="{{ grub_user }}"
export superusers
password_pbkdf2 {{ grub_user }} {{ grub_password_v2_passwd }}
EOF