
리눅스를 사용하며 root 비밀번호를 잃어버리거나 인스턴스(VM)이 정상적으로 부팅이 되지 않을 때가 있습니다. 저 역시 최근 PAM 정책 설정을 Ansible로 진행하다가 Script 오타로 인해 SSH 접근이 막혀 곤란했던 경험이 있습니다.
이런 곤란한 경험을 조금이라도 줄여주는 Single User Mode 부팅 방법을 설명드리겠습니다.
Single User Mode?
사용 사례?
간단하게 부트로더 및 서버 부팅 흐름에 대해 설명하겠습니다
(알면 좋음)

위에서 보이는 그림 중 Boot Loader에 대해 알아보고 가겠습니다~!
위의 내용들을 잘 생각 하면서, Single Mode로 부팅하는 방법을 알아보겠습니다.
진입하는 방법은 OS에 따라 다르지만
ctrl + X, ESC, Shift 키 등 다양합니다.
전원을 넣은 즉시 연속적으로 클릭하여 GRUB에 진입합니다.

부팅 할 OS 선택 후 E 키를 눌러 커널 진입

화면을 내리다 보면 해당 파라메터들이 보입니다.

ro 부분을 rw init=/bin/bash로 변경 이후 Ctrl + X를 눌러 재부팅을 진행해 줍니다.

재부팅이 된다면 아래와 같이 Single Mode에서 패스워드 재시작 및 파일시스템 재마운트를 진행해주시면 됩니다.





앞서 말씀드린 방법을 사용하여 AWS, GCP 등 CSP 계정을 탈취 당하였을때 서버 내부의 정보들이 해킹당할 위험이 있을텐데요 이 위험을 방지하기 위해 GRUB에 암호를 설정하여
비인가 사용자의 접근이나 커널 매개변수 조작을 방지할 수 있습니다.
sudo grub-mkpasswd-pbkdf2

패스워드 입력 후 결과 값을 복사해둡니다.
sudo vi /etc/grub.d/40_custom
set superusers="admin"
password_pbkdf2 admin [비밀번호_해시]

sudo update-grub

앞서 말씀드린대로 다시 재부팅을 실행하고 GRUB에 진입하려고 할 때 아래와 같이 username과 password를 입력하는 창이 나오게 됩니다.

만약 위의 설정처럼 적용하게 된다면 서버가 오류로 인해 재부팅이 될 경우 GRUB 화면에서 멈춰 Kernel을 로드하지 못해 서버가 정상적으로 재부팅 되지 않을 것입니;다.
실무에서는 부팅 메뉴 편집 제한을 통해 GRUB 보안을 강화합니다.
설정 파일 수정
sudo vi /etc/grub.d/10_linux
# 수정 전
CLASS="--class gnu-linux ..."
# 수정 후
CLASS="--class gnu-linux --class gnu --class os --unrestricted"

설정 업데이트 및 적용
sudo update-grub
해당 설정을 적용하게 된다면, GRUB 수정을 진행하려고 할 때 아까와 같이 super user의 ID와 PW를 요구하게 됩니다.
지금 매우 필요한 상황인데 감사합니다!!