팁/리눅스

[Arch] rEFInd 부트로더 + shim-signed로 시큐어부트 구성하기

현월이 2025. 4. 30. 16:46

아치 리눅스는 기본으로 시큐어부트를 지원하지 않습니다. 사실 리눅스 배포판 중 시큐어부트를 지원하는 물건이 우분투, 페도라, 리눅스 민트, 데비안 뿐이긴 하지만요.

 

그래서 시큐어 부트를 사용하려면 삽질을 해야 하는데요, GRUB는 시큐어 부트 설정 시 오류가 있어서 rEFInd로 부트로더를 갈아탔습니다.


준비하기

$ sudo pacman -Rnn grub
$ sudo rm -rf /boot/efi/*
$ yay -S shim-signed refind

 

먼저, 기존에 설치된 GRUB를 먼저 삭제하시고 shim-signed를 설치해줍니다. 이 패키지는 우분투, 페도라 등에서 추출한 패키지이며, 마이크로소프트가 시큐어 부트 인증서를 또 건드는 짓을 하지 않는 한 잘 호환될 겁니다.

 

다만, Chaotic-AUR 저장소를 미리 활성화하셨다면 아치 리눅스 설치 과정에서 이걸 하셔도 됩니다. 명령어는 yay를 pacman으로 바꿔주시면 됩니다.

$ mkrlconf
$ refind-install --usedefault /dev/nvme0n1p1 --shim /usr/share/shim-signed/shimx64.efi --localkeys

 

패키지를 설치하셨다면 sudo su를 입력하신 후 이 명령어로 rEFInd를 설치해주세요.

 

rEFInd를 설치하셨다면 /boot/linux_boot.conf 를 설정해줘야 부팅이 됩니다.

$ sbsign --key /etc/refind.d/keys/refind_local.key --cert /etc/refind.d/keys/refind_local.crt --output /boot/vmlinuz-linux-zen /boot/vmlinuz-linux-zen

 

이제 리눅스 커널을 서명할 차례입니다.

 

sbsign을 이용하여 커널을 서명해줍니다. 다만, 커널의 종류에 따라 아치 리눅스 기본 저장소에서 설치 가능한 커널 기준 /boot/vmlinuz-linux-zen 을 /boot/vmlinuz-linux 또는 /boot/vmlinuz-linux-hardened 을 입력해줘야 합니다.

 

$ cp /usr/share/shim-signed/mmx64.efi /boot/efi/EFI/BOOT/

 

커널을 서명했다면 MOK Manager에서 키를 인식시켜줘야 하는데 MOK Manager가 로딩이 안 될 때를 대비하여 mmx64.efi를 부트로더 경로에 복사시켜줘야 합니다.

 


커널 업데이트 시 커널 서명 자동화하기

아치 리눅스는 롤링 릴리즈 형태의 배포판이라 커널 업데이트가 자주 이루어지죠. 하지만, 시큐어 부트를 기본으로 지원하지 않기 때문에 커널을 자동으로 서명하게끔 설정해줘야 합니다.

 

mkdir /etc/pacman.d/hooks
mkdir -p /usr/local/share/libalpm/scripts

 

먼저, pacman 설정파일과 libalpm의 스크립트 경로를 추가해줘야 합니다.

 

cp /usr/share/libalpm/hooks/90-mkinitcpio-install.hook /etc/pacman.d/hooks/90-mkinitcpio-install.hook
cp /usr/share/libalpm/scripts/mkinitcpio /usr/local/share/libalpm/scripts/mkinitcpio

 

기존 스크립트를 방금 만든 경로에 복사해줍니다.

 

사실 기존 스크립트를 수정해도 되지만, 시스템 업데이트 시 먹통이 될 수 있으므로 추가 파일을 복사해주는 거죠.

 

/etc/pacman.d/hooks/90-mkinitcpio-install.hook 파일의 경우, Exec = /usr/share/libalpm/scripts/mkinitcpio-install을 찾아서 Exec = /usr/local/share/libalpm/scripts/mkinitcpio-install 로 대체해줍니다.

 

또한, /usr/local/share/libalpm/scripts/mkinitcpio 파일에서는 마지막 줄 mkinitcpio "${args[@]}" 밑에 sbsign을 이용하여 커널을 서명하는 명령어를 추가해줍니다.

$ sbsign --key /etc/refind.d/keys/refind_local.key --cert /etc/refind.d/keys/refind_local.crt --output /boot/vmlinuz-linux-zen /boot/vmlinuz-linux-zen

이 글에서 설명한 방법은 GitHub를 일부 참고하였습니다.

 

참고자료 - https://github.com/anotherchu/secure-boot-guide

728x90