이제 싱글 유저 모드로 부팅을 완료했다. 보통 시디롬을 이용한 싱글모드 부팅의 이유라 하면 루트 파티션을 수정해야 할 일이 있는 것이다. 여기서는 루트 패스워드를 잊어버렸다고 가정하고, 루트패스워드를 복원하는 방법에 대해 설명한다.
# pwd 1)
/tmp/root
# df -k 1)
# ls -al /a 2)
# mount -Fufs /dev/dsk/c0d0s0 /a 3)
# vi /a/etc/shadow 4)5)
root:abcdefghijklm:6445:::::: 에서 root::6445:::::: 으로 abcdefghijklm 부분을 지운다.
# reboot # 작업이 끝나면 재시작 해준다.
이후 정상적으로(하드 디스크로) 부팅한 후 루트 패스워드를 입력하지 않고 엔터만 치면 로그인 될 것이다. 접속후 passwd(1)를 사용해 패스워드를 변경하는 것을 잊지 말자.
1) 현재 디렉토리가 /tmp/root이며, df(8)명령을 사용해 보면 /devices, /cdrom, /fd, /tmp 등이 마운트 되어있다. 2) 특정 슬라이스를 마운트 하려면 빈 디렉토리가 필요한데, 싱글모드에서는 디렉토리를 생성할 곳이 없다. 그래서 /a 디렉토리를 만들어 놓은 것이다. 솔라리스 10의 경우 3번 단계에서 마운트할 것인가를 물어오는데, 이때 마운트 했다면 기존의 루트 디렉토리의 내용이 보일 것이다. 만약 아무것도 없으면 아래의 내용대로 마운트해야한다. 만약 솔라리스 10 이고 부팅시 나오는 루트 파티션을 /a에 마운트 하겠냐는 질문에 y로 대답했다면, 이미 마운트되어있을 것이다. 3) ZFS라면 부팅시 자동으로 마운트 되지만, UFS 의 경우 수동으로 마운트 해야 한다. 이 경우 자신의 파일 시스템의 슬라이스 번호와 마운트 지점은 미리 메모해 놓는 것이 좋다. 루트 파일 시스템은 보통 슬라이스 0번이긴 하지만 설치할 때 또는 이후 유지보수중 어쩔 수 없는 상황으로 인해 변경하기도 하기 때문이다. 평시에 간단히 df명령을 이용해 자신의 마운트 지점과 디바이스/슬라이스 번호를 알 수 있다.
4) 루트 패스워드를 저장한 파일을 열어 첫번째 라인의 패스워드 컬럼을 지운다. shadow 파일은 : 으로 컬럼을 구분하며 패스워드 컬럼은 2번째 컬럼이다. root:abcdefghijklm:6445::::::되어있다면 root::6445:::::: 으로 abcdefghijklm 부분을 지우면 된다. 5) vi 에디터가 올바르게 동작하지 않으면(커서가 움직이지 않거나, 터미널 모드를 알 수 없다는 오류가 발생하면) TERM환경 변수를 sun 이나 sun-color 로 변경한다.
# vi /a/etc/shadow
I don't know what kind of terminal you are on - all I have is 'unknown'
[Using open mode]
"/a/etc/shadow" [Read only] ...
:q
# TERM=sun
# export TERM
예제: 루트 패스워드 변경하기(솔라리스 11.4)
Shell 모드로 진입한 후 아래와 같이 작업할 수 있다.
# zpool import -f rpool
# mkdir /a
# beadm mount solaris /a 1)
# vi /a/etc/shadow
# bootadm update-archive /R /a
# beadm umount solaris
1) 여기서 solaris는 BE 의 이름이다. beadm list를 실행해보면 BE 이름을 알아낼 수 있다.