GRUB 포스팅 부터는 CentOS8 리눅스 배포판 버전으로 실습을 진행합니다.
목차
GRUB 부트로더가 필요한 경우
상황을 하나 가정해보자.
당신은 리눅스 작업을 해야하는데, root 사용자의 비밀번호를 잊어먹었다. 그러면 로그인이 불가능해서 작업이 불가능할 것이다.
당신이 그냥 ‘학습’을 목적으로 리눅스를 깔았으면 그냥 재설치하면 그만이겠지만 중요한 파일이 들어있다거나, 현업에서 작업을 하는 상황이라면? 생각만 해도 아찔한 상황이다.
이런 상황에서 쓸 수 있는 방법이 GRUB 부트로더를 사용해 비밀번호를 새로이 설정하는 것이다.
[실습]
전술 했듯 당신이 root사용자 비밀번호를 분실해서 로그인이 안 되는 상황이라고 가정한다.
리눅스를 부팅했을 때, 다음의 기본 선택 화면이 나왔다.

이 화면이 나오면 E 키를 누른다.

키보드 방향키로 ‘linux ($root)/boot/vmlinuz-3.10.0-123.el7~~’행 커서를 놓고 행 맨 끝으로 이동하고 ‘rhgb quiet(밑줄 친 부분)’라는 문구를 삭제한다.

그리고 제일 뒤에 ‘init=/bin/sh‘를 입력한다.
Ctrl + X 를 눌러 부팅한다.
그러면 별도의 로그인 절차를 거치지 않고 ‘sh4-4#’이라는 프롬프트가 나올 것이다.

whoami 명령을 입력해 현재 로그인된 사용자가 root인지 확인한다.
원래 ‘sh4-4#’가 바로 나와야 되는데 나는 그냥 없는 상태에서 whoami를 쳤는데 root가 나왔다. 먼저 ENTER를 입력해야 sh-4-4#이 나오는 거였나 보다… 그게 아니면 그냥 단순한 버그인 듯 하다. 어쩄든 root가 정상적으로 나왔다.
root비밀 번호를 변경하기 위해 passwd를 입력하고 새로운 비밀번호를 8자 이상으로 설정한다.

권한에러 발생
그런데 비밀번호를 변경 입력했는데 에러가 발생했다.
에러 창을 읽어보니 ‘Authentication token manipulation error’라고 나온다.
이 문구를 해석해 보자면, ‘인증 토큰 조작 오류‘이다.
이 오류가 나는 이유는 /(root) 파티션이 읽기 전용(Read-Only)으로 마운트 되어있기 때문이다. 쓰기(Write) 권한이 없기 때문에 인증 오류가 뜨는 것이다.

마운트된 파티션을 읽기/쓰기로 변경해야한다.
mount 명령어를 입력하고 맨 아래줄을 보면 /파티션이 ro(Read-Only)로 마운트 되어있는 것을 확인할 수 있을 것이다.
명령을 입력해 파티션을 읽기/쓰기 모드로 마운트 시킨다.
mount -o remount,rw /

그리고 mount 명령을 입력하면 읽기/쓰기 모드로 변경된 것을 볼 수 있다.

passwd 명령을 다시 입력해 root 비밀번호를 변경하자. 성공적으로(successfully) 변경되었다.
그런데, 여기서 큰 의문점이 든다. 이 방법만 안다면 누구든 root의 권한을 얻어서 시스템에 접근할 수 있지 않은가?
이러면 보안상 심각한 취약점이 되는 것 아닌가?
그래서 다음 실습으로 GRUB에 비밀번호를 설정해 root사용자의 권한을 아무나 얻는 것을 막아볼 것이다.
GRUB 부트로더로 비밀번호 복구 실습
Centos를 처음 실행했을 때 처음 나오는 선택화면이다.

우선 리눅스에 root계정으로(반드시 !!) 접속한다.
vi 에디터로 부팅시간을 20초로 변경한다.
GRUB_TIMEOUT=20

그리고 파일내용을 적용하기 위해 명령을 입력한다.
grub2-mkconfig -o /boot/grub2/grub.cfg
그리고 reboot 를 입력해 재접속 한다.
부팅 시간을 20초로 바꿨기에 grub화면이 처음 보이면 당신이 키를 입력하지 않는 한 20초간 대기하게 될 것이다.
/etc/grub.d/00_header 파일을 열어 제일 아래에 다음 4행을 추가하고 저장 후 닫는다(:wq).
vi /etc/grub.d/00_header
cat << EOF
set superusers="thisislinux" ->thisislinux 새로운 GRUB 사용자 이르
password thisislinux 1234 -> GRUB 사용자의 새 비밀번호
EOF

변경 내용을 저장하자.
grub2-mkconfig -o /boot/grub2/grub.cfg
그리고 reboot 명령으로 또 시스템을 재부팅한다.
GRUB 화면이 나오면 E키를 누르면 이젠 사용자 명과 비밀번호를 입력하라고 나온다.
이제 이것들을 입력해야만 편집모드로 이동 가능하다.

당연한 이야기지만, 나는 지금 리눅스를 ‘공부‘하고 내가 공부한 것을 공유하기 위해 ID와 비밀번호를 설정하는 것이다.
만약 실무에서 비밀번호를 설정한다면 절대로 1234 이런 식으로 비밀번호를 설정해서는 절대 안 된다.
이렇게 하면 보안적으로 매우 취약해지기 때문에 실무에서 이러면 야단 난다. 실무에서는 반드시 보안성이 갖춰지도록 충분히 복잡한 패스워드를 설정해야 한다.
Reference