HP-UX 11.31 でrootユーザのパスワードを間違えすぎてロックされている状態になっているサーバで、ロックを解除するためにシングルユーザモードで起動して対処する手順。
シリアルコンソール接続の場合については見かけるけど、キーボード/ディスプレイが接続されている状態でどうなるのかがうまいこと探せなかったので、ここに明記しておく。
(1) EFI Boot Managerで停める
キーボード/ディスプレイが認識している状態でHP-UXサーバの電源を入れると、しばらく黒い画面のままだが、「EFI Boot Manager」という青い画面が表示される。
しばらく放置すると「HP-UX Primary Boot: ~」が選択してOSが自動起動するが、シングルユーザモードで起動する場合は「EFI Shell [ Built-in]」を選択する。
(2) EFI Shellでコマンドを入力
「Shell>」というプロンプトのEFI Shellが表示される。
EFI Shell UEFI version x.xx [xx.xx]
Device mapping table
fs0 : Acpi(~)
fs1 : Acpi(~)
blk0 : Acpi(~)
<略>
startup.nsh> echo -off
setting hpux path(\EFI\HPUX)...
type 'fs[x]:' where x is your bootdisk (0, 1, 2...)
type 'hpux' to start hpux bootloader
Shell>
通常は”fs0:”というデバイスにシステムが入っているはずなので「fs0:」と実行する。
Shell> fs0:
fs0:\>
そうすると「fs0:\>」というプロンプトに移行する。
今度は「hpux」を実行すると、「Press Any key to interrupt Auto boot ~ Seconds left till autoboot」というカウントダウン中にキー入力し、「HPUX>」というプロンプトを表示する。
(“hpux -is”と実行し、boot -isは実行しないで起動させる、という資料もあったけど、それで動くのか確証がなかったので実施していない)
fs0:\> hpux
<略>
Press Any Key to interrupt Autoboot
\efi\hpux\AUTO ==> boot vmunix
Seconds left till autoboot - 8
Type 'help' for help
HPUX>
(3) シングルユーザモードで起動する
「HPUX>」というプロンプトで「boot -is」と入力し、シングルユーザモードでの起動を開始する。
HPUX> boot -is
> System Memory = xxxx MB
loading section 0
.........(complete)
loading section 1
.........(complete)
loading symbol table
loading System Directory (boot.sys) to MFS
.....
loading MFSFILES directory (bootfs) to MFS
.....
<略>
しばらく待つと「INIT: SINGLE USER MODE」と表示されて「#」というプロンプトで停止する。
INIT: Overriding default level with level 's'
INIT: SINGLE USER MODE
INIT: Running /sbin/sh
#
(4) パーテーションをマウントする
HP-UX 11.31でロックを解除する場合に必要なコマンドは/usrパーテーションにあるため、最低でも/usrパーテーションをマウントします。
なお、dfコマンドも/usrパーテーションにあるため、シングルユーザモードで起動した直後はdfコマンドも実行できません。
# mount /usr
vxfs mount: V-3-21268: /dev/vg00/lvol7 is corrupted. need checking
#
上記のように「is corrupted. need checking」と表示された場合は、ファイルシステムチェックが必要になるのでfsckコマンドを実行します
# fsck /dev/vg00/lvol7
log replay in progress
replay complete - marking super-block as CLEAN
#
この後、再度「mount /usr」を実行して/usrパーテーションをマウントします。
# mount /usr
#
資料を探すと「/usr パーテーションだけマウントすれば大丈夫」というものと「/usr, /var, /tmpをマウントする」というものとあるけど、どちらが適切なのかよく分からないので、「mount -a」で全部マウントしておきます。
# mount -a
<略>
#
マウントできない場合は適宜、表示されるデバイスに対してfsckコマンドを実行してから再度マウントを試みましょう。
(5) rootユーザのロック解除
まず、rootユーザのロック状態を確認するため「/usr/lbin/getprpw -l root」を実行します。
# /usr/lbin/getprpw -l root
uid=0, bootpw=YES, audid=0, audflg=1, mintm=-1, maxpwln=-1, exptm=-1, lftm=-1, <略> sloginy=-1, culogin=27, uloginy=-1, umaxlntr=-1, alock=NO, lockout=0001000
#
最後の「lockout=0001000」の、数字がアカウント状態を表しており、左から4つめの数字が1ならロックされている状態となります。
ロック解除は「/usr/lbin/modprpw -k root」を実行します。
# /usr/lbin/modprpw -k root
# /usr/lbin/getprpw -l root
uid=0, bootpw=YES, audid=0, audflg=1, mintm=-1, maxpwln=-1, exptm=-1, lftm=-1, <略> sloginy=-1, culogin=27, uloginy=-1, umaxlntr=-1, alock=NO, lockout=0000000
#
lockout=0000000 と 左から4つめの数字が0に変わっており、ロックが解除されています。
(6) rootパスワードを変更する[オプション]
rootパスワードがわからないので、再設定したい、という場合は、この操作を行う必要があるようです。
(自分では未実施)
# passwd root
Changing password for root
Old password:
Last successful password change for root: ~
Last unsuccessful password change for root: ~
Do you want (choose one letter only):
pronounceable passwords generated for you (g)
a string of letters generated (l) ?
to pick your passwords: (p) ?
Enter choice here:
…なんか聞かれました。
どうやらTrusted Systemになっているとこうなるようです。
まず、Trusted Systemになっているかを「/usr/lbin/getprdef -r」を実行して確認します。
# /usr/lbin/getprdef -r
NO, 0, 8, 0, 0, -1, 0, YES, YES, NO, NO, NO, YES, 3, 10, 2, 0
#
Trusted Systemだと上記のように何か表示されます。
Trustedではない場合はエラーになるようです
Trusted Systemを解除する場合は「/usr/lbin/tsconvert -r」を実行します。
その後に「passwd root」でパスワードを再設定し、
「/usr/lbin/tsconvert」で再度 Trusted Systemに戻す、という作業をするようです。
(7) 再起動
再起動して、正常に起動し、ログインが行えるか確認します。
おまけ
シングルユーザモードでBackspaceとか、Ctrl+Cが有効になっていなかった件への対応はおそらく下記を設定すればいけるのではないかとおもわれる(ネタ元:/* とりあえず */ Alive and Well「HP-UX/stty – CTRL-Cで中止を明示的に定義」)
Backspaceの有効化
$ stty erase "^H"
Ctrl+Cの有効化
$ stty intr ^c
その他、2021年現在のLinux環境でよくある設定をまとめて実施したい場合
$ stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" hupcl ixon ixoff tostop cs8 -istrip