【问题标题】:Ansible Unable to set password for GRUB bootloader in RedhatAnsible 无法为 Redhat 中的 GRUB 引导加载程序设置密码
【发布时间】:2020-04-30 20:25:45
【问题描述】:

作为 Salam-o-Alikum, 我已经编写了一个 Ansible 剧本,用于在 RedHat 和 Ubuntu 上设置 GRUB 引导加载程序密码,没有错误,我可以在两个位置看到 Grub2.cfg 的变化。 奇怪的是,当我重新启动两台机器时,Ubuntu 机器会询问用户名和密码,但 Redhat 机器不会。 我已经看到 50 多个教程过程是相同的,而且非常简单,但我不明白它为什么会这样。任何帮助将不胜感激。

这是我尝试过的。

Hardening.yml

   ---
   - hosts: localhost
     become: yes
     gather_facts: true
     vars:
         grub_password_v1_passwd: puffersoft
         grub_password_v2_passwd: grub.pbkdf2.sha512.10000.A4DE89CBFB84A34253A71D5DD4939BED709AB2F24E909062A902D4751E91E3E82403D9D216BD506091CAA5E92AB958FBEF4B4B4B7CB0352F8191D47A9C93239F.0B07DD3D5AD46BF0F640136D448F2CFB84A6E05B76974C51B031C8B31D6F9B556802A28E95A5E65EC1F95983E24618EE2E9B21A0233AAA8D264781FE57DCE837
         grub_user: cloud_user
     tasks:
    - stat: path=/sys/firmware/efi/efivars/
      register: grub_efi
    - debug: vars=grub_efi
      when: ansible_distribution == 'Redhat'
      tags: grub-password

    - name: "Installing Template on Redhat Systems"
      template:
            src: grub-redhat.j2
            dest: /etc/grub.d/01_users
            owner: root
            group: root
            mode: '0700'
            notify:
                    - grub2-mkconfig EFI
                    - grub2-mkconfig MBR
      when: ansible_distribution == 'Redhat'
      tags: grub-password

    - name: "Installing Template on Ubuntu Systems"
      template:
            src: grub-ubuntu.j2
            dest: /etc/grub.d/40_custom
            owner: root
            group: root
            mode: '0700'
            notify:
                    - grub2-mkconfig EFI
                    - grub2-mkconfig MBR
      when: ansible_distribution == 'Ubuntu'
      tags: grub-password

    - name: "Grub 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: 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: grub_efi.stat.exists == False

    - 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

grub-redhat.j2

#!/bin/sh -e
cat << EOF
if [ -f \${prefix}/user.cfg ]; then
  source \${prefix}/user.cfg
  if [ -n "\${GRUB2_PASSWORD}" ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root \${GRUB2_PASSWORD}
  fi
fi
set supperusers="{{ grub_user  }}"
password_pbkdf2 {{ grub_user }} {{ grub_password_v2_passwd  }}
EOF

grub-ubuntu.j2

#!/bin/sh
tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
set superusers="{{grub_user}}"
password_pbkdf2 {{grub_user}} {{grub_password_v2_passwd}}

Ansible 分发

Red Hat 7.7 Maipo 和 Ubuntu 18.04 仿生

【问题讨论】:

    标签: ansible yaml redhat bootloader grub2


    【解决方案1】:

    grub-redhat.j2 有一些拼写错误。

    第 11 行:set supperusers="{{ grub_user }}"

    更改为:set superusers="{{ grub_user }}"

    第 12 行:password_pbkdf2 {{ grub_user }} {{ grub_password_v2_passwd }}

    改为:password_pbkdf2 {{ grub_user }} {{ grub_password_v2_passwd }}

    如果您要在多台机器上使用相同的 grub 密码,您可能需要考虑使用 ansible-vault encrypt_string 来加密原始密码,然后创建一个运行 grub2-mkpasswd-pbkdf2 的附加任务(grub2- tools-minimal) 使用命令模块并将其传递给 vaulted 变量。注册该任务的输出(例如,作为 grub_password_v2_passwd)将导致您运行 playbook 的每个目标都接收到唯一的哈希,即使底层密码相同。 expect module 非常适合这个:

    expect:
      command: grub2-mkpasswd-pbkdf2
      responses:
        Enter password: '{{ vaulted_raw_password }}'
        Reenter password: '{{ vaulted_raw_password }}'
    no_log: true
    

    【讨论】:

    • 哦,谢谢你指出,现在工作正常,还有一件事,通过在任务中使用这个(grub2-mkpasswd-pbkdf2)作为命令模块,我如何传递将被散列的密码?表示此命令需要输入密码:确认密码:如何在此类命令中传递此类参数?
    • 您认为grub-redhat.j2 文件还需要其他条件吗?我认为在某些情况下它会有重复的set supperusers 行。
    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2014-10-13
    • 2016-10-25
    • 1970-01-01
    • 2021-09-22
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多