CentOS 7 root 비밀번호 변경 및 분실 시 재설정 방법

안녕하세요. 비전 IDC 기술팀입니다.

root 계정 비밀번호는 서버 전체 권한과 직결되므로 주기적으로 변경하는 것이 좋고, 담당자 교체나 비밀번호 노출이 의심될 때는 즉시 바꿔야 합니다. 반대로 비밀번호를 잊어버려 root로 로그인할 수 없게 되면 서버 콘솔에서 부팅 과정에 개입해 비밀번호를 다시 설정해야 합니다.

이 문서에서는 CentOS 7을 기준으로 로그인한 상태에서 passwd 명령으로 root 비밀번호를 변경하는 방법과, 비밀번호를 분실했을 때 GRUB2 부팅 메뉴에서 rd.break 옵션을 사용해 재설정하는 방법을 설명합니다. 아직 운영 중인 CentOS 6 서버를 위한 싱글 유저 모드 재설정 방법도 함께 정리했습니다.

적용 환경

  • 운영체제: CentOS Linux 7 (부트로더 GRUB2), CentOS Linux 6 (GRUB Legacy)
  • 사용 명령: passwd, mount, chroot
  • 비밀번호 분실 시 필요 조건: VPS는 VNC 또는 웹 콘솔 접속, 단독서버는 KVM/IPMI 등 원격 콘솔 접속
  • SSH 접속만으로는 분실한 root 비밀번호를 재설정할 수 없습니다.

1. 로그인한 상태에서 root 비밀번호 변경

root 계정으로 로그인한 경우

현재 root로 로그인되어 있다면 인자 없이 passwd를 실행합니다. 인자를 생략하면 현재 로그인한 계정의 비밀번호를 변경합니다.

whoami
passwd

새 비밀번호를 두 번 입력하라는 프롬프트가 차례로 표시됩니다. 입력하는 동안 화면에는 아무것도 표시되지 않습니다. 두 값이 일치하고 정책을 만족하면 다음과 같이 성공 메시지가 출력됩니다.

Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

sudo 권한이 있는 일반 계정으로 로그인한 경우

root로 직접 로그인하지 않고 wheel 그룹 등 sudo 권한이 있는 계정을 사용한다면 다음과 같이 root 비밀번호를 변경할 수 있습니다. 이때 처음 묻는 비밀번호는 root가 아니라 현재 계정의 비밀번호입니다.

sudo passwd root

다른 사용자 계정의 비밀번호 변경

root 권한으로는 다른 계정의 비밀번호도 기존 비밀번호 없이 변경할 수 있습니다. username은 실제 계정 이름으로 바꿔 입력합니다.

passwd username

변경 결과 확인

계정의 비밀번호 상태와 마지막 변경일은 다음 명령으로 확인할 수 있습니다.

passwd -S root
chage -l root

2. 비밀번호 분실 시 사전 확인 사항

root 비밀번호를 잊어버렸다면 먼저 다른 방법으로 root 권한을 얻을 수 있는지 확인합니다. sudo 권한이 있는 일반 계정으로 로그인할 수 있거나, root 계정에 SSH 키 인증이 설정되어 있다면 부팅 과정에 개입할 필요 없이 1장의 방법으로 비밀번호를 바로 변경할 수 있습니다.

이런 방법이 없다면 서버를 재부팅해 부트로더 단계에서 작업해야 합니다. 이 과정은 SSH 연결이 끊긴 상태에서 진행되므로 반드시 화면과 키보드를 직접 조작할 수 있는 콘솔이 필요합니다.

  • VPS: 서비스에서 제공하는 VNC 콘솔 또는 웹 콘솔로 접속합니다.
  • 단독서버: KVM/IPMI 등 원격 콘솔을 사용합니다. 원격 콘솔을 사용할 수 없는 환경이라면 비전 IDC 기술지원에 요청해 주십시오.

3. CentOS 7에서 분실한 root 비밀번호 재설정 (rd.break)

CentOS 7에서는 부팅 초기 단계(initramfs)에서 멈추도록 하는 rd.break 커널 옵션을 사용합니다. 이 단계에서는 실제 루트 파일시스템이 /sysroot에 읽기 전용으로 마운트되어 있으며, 이를 쓰기 가능하게 바꾼 뒤 비밀번호를 변경합니다.

1단계: GRUB2 메뉴에서 부팅 옵션 편집

  1. 콘솔 화면을 열어 둔 상태에서 서버를 재부팅합니다.
  2. GRUB2 부팅 메뉴가 표시되면 방향키를 눌러 자동 부팅 카운트다운을 멈춥니다. 메뉴가 너무 빨리 지나간다면 재부팅 직후 방향키를 여러 번 눌러 둡니다.
  3. 평소 부팅하는 커널 항목(보통 맨 위 항목)을 선택하고 e 키를 누릅니다.
  4. 편집 화면에서 linux16으로 시작하는 줄을 찾습니다. UEFI로 부팅하는 서버에서는 linuxefi로 표시됩니다.
  5. 해당 줄의 맨 끝으로 이동해 한 칸 띄우고 rd.break를 추가합니다. 줄이 길어 화면에서 여러 줄로 보일 수 있으니 End 키나 Ctrl+E로 줄 끝으로 이동하면 편리합니다.
  6. Ctrl+X를 눌러 수정한 옵션으로 부팅합니다.

편집 후 해당 줄의 끝부분은 대략 다음과 같은 형태가 됩니다. 커널 버전과 UUID 등 앞부분은 서버마다 다르므로 그대로 두고 끝에만 추가합니다.

linux16 /vmlinuz-3.10.0-...x86_64 root=... ro crashkernel=auto rhgb quiet LANG=en_US.UTF-8 rd.break

2단계: 루트 파일시스템을 쓰기 가능하게 다시 마운트

잠시 후 switch_root:/# 프롬프트가 표시됩니다. 실제 시스템 디스크는 /sysroot에 읽기 전용으로 마운트되어 있으므로 쓰기 가능하도록 다시 마운트합니다.

mount -o remount,rw /sysroot

3단계: chroot로 실제 시스템 환경 진입

chroot /sysroot

프롬프트가 sh-4.2#과 같은 형태로 바뀌면 실제 설치된 시스템을 기준으로 명령을 실행할 수 있는 상태입니다.

4단계: root 비밀번호 변경

passwd

새 비밀번호를 두 번 입력합니다. 원격 콘솔은 키보드 배열 문제로 특수문자가 다르게 입력되는 경우가 있으므로, 이 단계에서는 영문과 숫자 위주로 설정해 로그인을 확인한 뒤 SSH로 접속해 최종 비밀번호로 다시 변경하는 방법도 안전합니다.

5단계: SELinux 레이블 재지정 예약

touch /.autorelabel

이 단계에서는 SELinux 정책이 로드되지 않은 상태로 /etc/shadow 파일이 수정되기 때문에 파일의 SELinux 보안 컨텍스트가 올바르지 않을 수 있습니다. /.autorelabel 파일을 만들어 두면 다음 부팅 시 파일시스템 전체의 레이블이 다시 지정됩니다. 이 과정을 생략하면 SELinux가 Enforcing인 서버에서 새 비밀번호로도 로그인하지 못할 수 있습니다.

6단계: 종료 후 정상 부팅

exit
exit

첫 번째 exit는 chroot 환경을 빠져나오고, 두 번째 exit는 initramfs 셸을 종료해 부팅을 계속 진행합니다. SELinux 레이블 재지정이 진행되며, 완료 후 서버가 자동으로 한 번 더 재부팅될 수 있습니다.

7단계: 로그인 확인

부팅이 끝나면 콘솔에서 root와 새 비밀번호로 로그인되는지 확인합니다. 이후 SSH 접속도 확인합니다.

whoami
getenforce

4. CentOS 6에서 싱글 유저 모드로 재설정

CentOS 6은 GRUB Legacy 부트로더를 사용하므로 절차가 다릅니다. 부팅 시 커널 옵션에 싱글 유저 모드를 지정하면 비밀번호 입력 없이 root 셸로 진입하는 기본 구성을 이용합니다.

  1. 콘솔을 연 상태에서 서버를 재부팅합니다.
  2. 부팅 카운트다운 화면이 표시되면 아무 키나 눌러 GRUB 메뉴로 진입합니다.
  3. 부팅할 커널 항목을 선택하고 e 키를 누릅니다.
  4. 표시되는 항목 중 kernel로 시작하는 줄을 선택하고 다시 e 키를 누릅니다.
  5. 줄 끝에 한 칸 띄우고 single 또는 1을 입력한 뒤 Enter를 누릅니다.
  6. 항목 목록 화면으로 돌아오면 b 키를 눌러 부팅합니다.

root 셸 프롬프트가 표시되면 비밀번호를 변경합니다.

passwd

Authentication token manipulation error가 표시된다면 루트 파일시스템이 읽기 전용으로 마운트된 경우일 수 있습니다. 이때는 다시 마운트한 뒤 passwd를 실행합니다.

mount -o remount,rw /
passwd

변경을 마쳤다면 재부팅해 정상 모드로 시작하고, 새 비밀번호로 로그인되는지 확인합니다.

reboot

5. 자주 발생하는 문제와 확인 방법

root 비밀번호 변경·재설정 문제 점검
증상 가능한 원인 확인 및 해결 방향
GRUB 메뉴가 표시되지 않고 바로 부팅됨 메뉴 대기 시간이 짧거나 콘솔 연결이 늦음 콘솔을 먼저 열어 둔 뒤 재부팅하고, 부팅 직후부터 방향키를 반복해서 누릅니다.
passwd 실행 시 Authentication token manipulation error 파일시스템이 읽기 전용 상태 CentOS 7은 mount -o remount,rw /sysrootchroot /sysroot를 했는지, CentOS 6은 mount -o remount,rw /를 실행했는지 확인합니다.
재설정 후에도 새 비밀번호로 로그인 불가 /.autorelabel 누락으로 SELinux 컨텍스트 불일치 다시 rd.break로 진입해 touch /.autorelabel까지 수행한 뒤 재부팅합니다.
콘솔 로그인은 되지만 SSH root 로그인 실패 PermitRootLogin 설정 또는 무차별 대입 차단 도구 grep -i PermitRootLogin /etc/ssh/sshd_config로 설정을 확인하고, 일반 계정으로 접속한 뒤 su -를 사용합니다.
특수문자가 포함된 비밀번호가 맞지 않음 원격 콘솔의 키보드 배열 차이 콘솔에서는 영문·숫자로 임시 설정한 뒤 SSH 접속 후 최종 비밀번호로 변경합니다.
Ctrl+X를 눌러도 switch_root 프롬프트가 나타나지 않음 rd.break를 잘못된 줄에 추가했거나 오타 linux16 또는 linuxefi 줄 끝에 정확히 입력했는지 확인합니다.

로그인 실패 원인을 확인하려면 콘솔로 로그인한 뒤 인증 로그를 확인합니다.

tail -n 50 /var/log/secure

해결되지 않으면 비전 IDC 1:1 문의(https://visionidc.com/submitticket.php) 또는 텔레그램 VISIONIDC24로 문의해 주시기 바랍니다.

6. 관련 기술자료와 공식 참고자료

관련 비전 IDC 기술자료

공식 참고자료

7. 자주 묻는 질문

SSH로 접속한 상태에서 분실한 root 비밀번호를 재설정할 수 있나요?

root 권한을 얻을 수 있는 다른 수단(sudo 권한 계정, root 키 인증 등)이 있다면 가능합니다. 이런 수단이 전혀 없다면 부팅 과정에 개입해야 하므로 VNC·웹 콘솔이나 KVM/IPMI 같은 콘솔 접속이 필요합니다.

touch /.autorelabel은 꼭 실행해야 하나요?

SELinux가 비활성화(disabled)된 서버라면 영향이 없지만, 현재 설정을 확신할 수 없다면 실행하는 것이 안전합니다. 다음 부팅 시간이 조금 길어지는 것 외에는 부작용이 거의 없습니다.

비밀번호를 바꾸면 실행 중인 서비스에 영향이 있나요?

root 비밀번호 변경 자체는 웹 서버나 데이터베이스 같은 서비스 동작에 영향을 주지 않습니다. 다만 비밀번호로 서버에 접속하는 백업 스크립트나 외부 관리 도구가 있다면 새 비밀번호로 함께 수정해야 합니다. MySQL 등 데이터베이스의 root 계정은 운영체제 root와 별개입니다.

CentOS 7에서도 single 옵션을 사용할 수 있나요?

CentOS 7은 systemd를 사용하며, 기본 구성에서 복구 대상으로 부팅하면 root 비밀번호를 요구합니다. 비밀번호를 모르는 상황에서는 이 문서의 rd.break 방법을 사용하십시오.

마무리

이번 문서에서는 CentOS 7에서 passwd로 root 비밀번호를 변경하는 방법과, 비밀번호를 분실했을 때 rd.break로 initramfs 단계에 진입해 재설정하는 방법, 그리고 CentOS 6의 싱글 유저 모드 재설정 절차를 살펴봤습니다. CentOS 7 절차에서는 touch /.autorelabel을 빠뜨리지 않는 것이 가장 중요합니다.

콘솔 접근 권한이 있다면 누구나 같은 방법으로 root 비밀번호를 바꿀 수 있으므로 콘솔 계정 정보도 서버 비밀번호만큼 안전하게 관리하시기 바랍니다. 또한 지원이 종료된 CentOS 서버는 보안 업데이트가 제공되지 않으므로 운영체제 이전 계획을 함께 검토하시기 바랍니다.

  • 0 사용자에게 유용한 정보 제공
이 답변이 도움이 되었나요?
« Back