Cannot boot with secure boot after reinstall grub (using sbctl)

Hello,
today I had to reinstall grub with grub-install command. Everything went great until i wanted use secure boot (need it because dual boot with Windows). I dont know why but previously I didnt use -s flag so I dont have sbctl list-files output. I signed everything that in my opinion is needed to successfully secure boot, but grub is booting only to rescue mode with prompt: “prohibited by secure boot policy”. Probably there is somewhere file that isn’t signed, but I cant figure which one. There is list with signed files that I did after grub reinstall:

sudo sbctl list-files                                                                                                      ✔ 
/boot/memtest86+/memtest.efi
Signed:         ✓ Signed

/boot/vmlinuz-6.12-x86_64
Signed:         ✓ Signed

/usr/lib/systemd/boot/efi/systemd-bootx64.efi
Signed:         ✓ Signed

/boot/efi/EFI/GRUB/grubx64.efi
Signed:         ✓ Signed

/boot/efi/EFI/Manjaro/grubx64.efi
Signed:         ✓ Signed

/boot/efi/EFI/boot/bootx64.efi
Signed:         ✓ Signed

/boot/grub/x86_64-efi/core.efi
Signed:         ✓ Signed

/boot/grub/x86_64-efi/grub.efi
Signed:         ✓ Signed

Could someone please help me?

That vmlinuz is unified image i hope? With microcode and initramfs?
What does sbctl status and sbctl verify say?
Did you check the wiki once more?

Another good tutorial with slightly different approach is here

I dont really know, but I guest it is. On previous configuration I had that vmlinuz and everything works perfect. Dont have other to sign:

ls /boot
amd-ucode.img  grub                                initramfs-6.12-x86_64.img  linux612-x86_64.kver  memtest86+
efi            initramfs-6.12-x86_64-fallback.img  intel-ucode.img            lost+found            vmlinuz-6.12-x86_64

There are outputs:

sbctl status
Installed:      ✓ sbctl is installed
Owner GUID:     12345678-1234-1234-1234-123456789012
Setup Mode:     ✓ Disabled
Secure Boot:    ✗ Disabled
Vendor Keys:    microsoft
Firmware:       ‼ Your firmware has known quirks
                - FQ0001: Defaults to executing on Secure Boot policy violation (CRITICAL)
                  https://github.com/Foxboron/sbctl/wiki/FQ0001

sbctl verify
Verifying file database and EFI images in /boot/efi...
✓ /boot/grub/x86_64-efi/core.efi is signed
✓ /boot/grub/x86_64-efi/grub.efi is signed
✓ /boot/memtest86+/memtest.efi is signed
✓ /boot/vmlinuz-6.12-x86_64 is signed
✓ /usr/lib/systemd/boot/efi/systemd-bootx64.efi is signed
✓ /boot/efi/EFI/GRUB/grubx64.efi is signed
✓ /boot/efi/EFI/Manjaro/grubx64.efi is signed
✓ /boot/efi/EFI/boot/bootx64.efi is signed

Yes, i followed it but nothing works.

I will check it, but previously i didnt have to use any script/gits and everything was perfect

Mandatory Disclaimer

Secure Boot is not supported in Manjaro, regardless of the fact that several people here have managed to get it to work — the Arch Wiki has detailed information about the subject.

Just so you know. :wink:

I would rephrase that - Secure Boot is not supported OOB - but given that tools exist in the official repo, and relevant instructions exist - one could say it is supported - but it is a manual operation that requires an experienced user.

Please see → [root tip] [How To] Manjaro and Windows - Secure Boot - using repo only

I followed your guide, boot from main.efi went straight to LUKS password. After password I get this error:

ERROR: Root device mounted successfully, but /sbin/init doest not exists.
Bailing out, you are on your own. Good luck.

sh: can't access tty; job control turned off

Switched back to GRUB boot, tried to bruteforce sign every single file in /boot and /boot/efi. Even with that secure boot isnt working. Without it everything works perfect.

That is expected

I have no idea - it is not normal…

I have done this on several occasions - it works every time…

I tired it one more time, step by step reading every single letter in every line. Same output. Only one different thing is that i dont have loader file in the /boot/efi:

ls /boot/efi
 EFI   main.efi  'System Volume Information'

I can also give You my /boot/efi/EFI:

ls /boot/efi/EFI
boot  GRUB  Manjaro

I dont know why before grub reinstall it simply works. After that it cant. Every single file in the /boot is signed (if it can be).

I will specify more details, maybe someone could help me:
I have two SSDs, one with Windows and second one with Manjaro. I need secure boot because second user is playing games on Windows that require secure boot. I need GRUB menu to simply choose which OS should be boot. Manjaro have 3 partitions : /boot, /boot/efi and LUKS (need to have /boot and /boot/efi to make GRUB menu appear before LUKS password, otherwise second user cant have to know my password before choosing Windows in menu).

lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme1n1                                       259:0    0 953,9G  0 disk  
├─nvme1n1p1                                   259:1    0   300M  0 part  /boot/efi
├─nvme1n1p2                                   259:2    0   700M  0 part  /boot
└─nvme1n1p3                                   259:3    0 952,9G  0 part  
  └─luks-f3b1a7c9-2e4f-4d8a-b6e2-91c5f7d2a1b3 254:0    0 952,9G  0 crypt /home
                                                                         /var/log
                                                                         /var/cache
                                                                         /
nvme0n1                                       259:4    0 953,9G  0 disk  
├─nvme0n1p1                                   259:5    0   100M  0 part  
├─nvme0n1p2                                   259:6    0    16M  0 part  
├─nvme0n1p3                                   259:7    0 389,8G  0 part  
├─nvme0n1p4                                   259:8    0   751M  0 part  
└─nvme0n1p5                                   259:9    0 563,2G  0 part 

I am using sbctl and everything was great until after one update i had to reinstall grub. Now i cant do anything with secure boot, because grub is in rescue mode with error “prohibited by secure boot policy”.

What are most necessary file for grub? Maybe i should check them out and sign them. Already tried bruteforce sign everything in /boot and /boot/efi.

I dont know what to do

I am clueless at that point, to be honest.

The partition layout looks like a bios/gpt layout… specifically the 16M partition caught my attention.

Using full disk encryption with the installer results in the grub menu being inside the the container.

This will generate a situation where you cannot boot windows without unlocking your Manjaro installation.

Just realised I somehow missed this point - you actually did created an unencrypted boot partition

In such situation - the most convenient switch between OS is to use the system firmware boot override e.g. F7 or F12 - look at your system manual.

You can use limine boot loader - but that is outside my knowledge.

Another option is rEFInd to boot either your custom EFI-stub or Windows

I will have to look deeper into what could have changed and what I may need to update in the guide.

I have digged a bit - I think your issue is caused by booting in compatibility mode…

//EDIT 2025-08-16T13:26:00Z

I want to blame myself for not spotting this - I know why it fails - the guide assumes there is a root= directive in /etc/default/grub because the default Manjaro installation used when writing the guide contained such directive.

Your Manjaro installation is encrypted - you will have to amend for your specific use case.

My laptops with fully encrypted root has no bootloader but boot the main.efi directly.

In the link provided in this comment you can find the script I use to setup a laptop with luks2 and argon2id which is much faster than LUKS1 which must be used when grub is used to unlock the container.

Because your system is encrypted you will likely need to define a /etc/crypttab.initramfs pointing to the LUKS container - this is an example from the above mentioned script

system /dev/disk/by-partlabel/cryptsystem none timeout=120

You will need to amend your kernel cmdline by pulling the active cmdline

Example

 $ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-linux616 root=UUID=<uuid> rw quiet splash apparmor=1 security=apparmor udev.log_priority=3

Then amend the kernel cmdline used by sbctl and insert root= directive to read

Example

root=/dev/disk/by-uuid/<uuid> rw quiet splash apparmor=1 security=apparmor udev.log_priority=3

Or

root=UUID=<uuid> rw quiet splash apparmor=1 security=apparmor udev.log_priority=3

Save the file and recreate the bundle

My point — which is the official position of the Manjaro Team — is that we don’t offer support for it, and that the responsibility is therefore on the hands of the user. :wink:

The presence of the tools for enabling and maintaining Secure Boot in the Manjaro repositories is only a consequence of the fact that, with the exception of the Manjaro-specific tools and our custom packages — e.g. our kernels — everything in our repositories comes straight from the Arch repositories.

:man_shrugging:

@KernelPanic

As I understand your challenge

  • dual boot Manjaro Linux and Windows
  • Encrypted Manjaro Linux
  • Secure Boot enabled
  • A loader allowing to select Windows or Manjaro

I have done the following out of curiosity - could it be done - at all?

The goal was to identify what need to be changed to be able to achieve what you are trying to do.

I have created a system configuration similar to your setup using a laptop with two disks.

I installed a Windows 10 on first disk - then proceeded to create an encrypted Manjaro installation on the second disk using Calamares - selecting btrfs and swap to file.

While I do have some experience in doing this from scratch I have never tried to convert a Manjaro Linux encrypted setup - but I did - and it works ..

I made notes on the changes - I can share them if there is interest ..

Thanks a lot. As soon as I will come back to home I will try your solution.

To be honest it can be done with only sbctl - no changing files or anything. Before that disaster with grub reinstall it worked perfect - with secure boot, GRUB selection and no need to uncrypt LUKS ( while selected windows it was booting straight to windows). I cant figure out how I made it (spent probably 5h+ to debug everything), but it worked. There was probably something more sign or there was some little change in one of the config files, that i cant remember. But i will try your guide as soon as possible. Thanks a lot!

BTW, is secure boot necessary on Linux, or is it perhaps overkill? Are there really attacks on/from the bootloader, or is it just academic mumbo jumbo?

I read about one PoC, no spreading in the wild. And it needed running the malicious executable/script manually with root.

Yes - the unencrypted boot partition make that possible.

I see a full disk encryption with LUKS as a serious attempt to protect data.

Whether Secure Boot is necessary - that depends on your threat assessment.

Linux is as vulnerable to boot chain attacks as Windows - but it requires physical access or a very sophisticated targeted fishing campaign.

Linux is less vulnerable to malware - but it can be done - again it may require physical access or an ignorant user.

Depending on the actual malware - in case of a real root infection - there is only one way - replace the solid state disk or in case of spinning disk repeated overwrites with random patterns.

Secure Boot is not secure — it has already been compromised several times — but it is the marketing name for an anti-competitive Microsoft strategy introduced into the design of the UEFI specification — Microsoft is on the UEFI Committee — when Microsoft was under the leadership of Steve Ballmer.

The intent was to hijack the x86-64 and aarch64 architectures and completely bind them under Microsoft’s control, given that Microsoft — unlike its old rival Apple — did not offer any hardware of their own.

They called it Secure Boot — and likewise, Microsoft is also involved with the TPM Committee — but the Free Software Foundation more appropriately calls it Restrictive Boot, because that’s exactly what it is.

A few GNU/Linux distributions have adopted Secure Boot — e.g. RedHat (and its various derivatives), (open)SUSE and Ubuntu — and some of RedHat’s developers were even attempting to include it in the upstream kernel, which instantly prompted Linus Torvalds to post another one of his (in)famous rants on the kernel mailing list.

Long story short, Secure Boot is as much a requirement for GNU/Linux as that a parachute would be a requirement for operating a lawnmower. :wink:

I can - to a degree - agree with that statement - the rest is FUD (Fear Uncertainty Doubt) - please abstain from spreading conspiracy theories.

You can dislike the concept - but don’t spread that kind of nonsense.

Apparently someone flagged this..

Secure Boot is not secure as in unbreakable - nothing is..

Please provide credible, reliable documentation that proves without a doubt that

  1. linux is not vulnerable to malware or boot chain attacks
  2. that microsoft’s intention with secure boot was to monopolize the x86 platform

No, it is documented fact. :point_down:

Look who’s talking! :roll_eyes: