Ubuntu18.04でパスワード設定を間違えてログインできない時
ことの発端
OSインストール時に、おそらく設定したパスワードが奇跡的に二回連続同じtypoしてしまったせいでログイン出来ない
— ひばり (@lcst_topevx) August 16, 2019
インストールし直さなければならない、つらい
single user mode もとい https://t.co/F9Sa3teJsm or https://t.co/NiAnNZZrEs ちゃんとつかえ
— まちカドおるみん (@kotatsu_mi) August 16, 2019
要は,情弱すぎて非常に情けない話である.
しかし"single user mode"という単語をただ知っているだけで,それを実際に見たことも使ったこともなかったため,これは実際に試すいい機会ということで修復を試みる実験を行った.
タイトルの通り,ディストリビューションはUbuntu18.04と書いているが,その他でも普通にできるかと.
実験の準備
まずはテストユーザー(test)を作成する.そしてこの時のパスワードは,とてもとてもめちゃくちゃにタイピングしたものをコピペして作成した,非常にランダム性が高くて長いパスワードとし,そのままコピペメモを消去した.この行動に深い意味はない.
そして案の定なことが発生します.全然入れる気がしません.
ここから復興のために動き始めます.
rescue.target と emergency.target について,以下の参考文献が非常にわかりやすかった.
rescue.targetとemergency.targetとの違いは,環境の規模の違いのようである.
rescue.targetの場合は,できるだけローカルファイルシステムをマウントしてネットワーク含むいくつかの重要なサービスを起動しようとしてくれる.(try toと書かれている)
emergency.targetはread onlyなrootファイルシステムのみをマウントし,ネットワーク等のサービスは起動しない.まさにemergencyな感じ.
そのためemergency.targetでログインする際には,以下のコマンドでread-writeにすることもあるそう.
# mount -o remount.rw /
実際に救い出してみる
というわけで,この参考文献に則って,single user mode(rescue.target)でログインしてみる.
GRUBの選択画面で"Ubuntu"を選択中に"e"を押すと,ブートの設定ができるエディタ編集画面が出てくる.ここで/boot/grub/grub.cfgの該当部分の設定を一時的に変えることができる.
下部にあるlinuxの行の末尾にある"$vt_handoff"を消去し,以下を追記する.
systemd.unit=rescue.target
記入が終わったらCtrl-xしてブートさせる.
すると,Enterを押したあとrootでログインした状態になった.
そのままtestユーザーのパスワードを変更する.
# pwconv
# passwd test
今度はしっかりとゆっくりと確実に着実に1文字1文字丁寧にタイピングしてパスワードを再設定.そしてrebootへ.
無事に再設定したパスワードを使用してtestユーザーログイン成功です.
インストールしたばかりだし再インストールすれば良いかと思っていたけれど,きちんとsingle user mode使った方がよっぽど手間が少なかった.反省してます.
どうでもいい寄り道
ネットワーク
rescue.targetでログインしてすぐにip aを打ってみるとIPアドレスが割り振られていなかったため,どうやらnetwork-managerが起動してなかったようである.当然pingも通らない.
というわけで,ものは試しでこれを起動させてみる.
# systemctl start network-manager
IPアドレスが割り振られ,pingをしてみると無事に通ったのでrescue.targetでログインしてもネットワークを使用すること自体は可能なようである.
となれば,ネットワークが繋がるならばsshも可能ではなかろうかということで,
# systemctl start sshd
したら,sshログインも成功した.single user modeなので,当然rootでしかログインできない.
ユーザーでsshログインしようとすると,
"System is booting up. See pam_nologin(8)"
Connection closed by 192.168.1.120 port 22
と突っぱねられる.
emergency.target
rescue.targetでログインしたならばemergency.targetもやってみようではないか.
やり方は先ほどのGRUBの設定でrescue.targeと同様以下を追記するだけである.
systemd.unit=emergency.target
起動すると,rescue.targetの場合と大差ない感覚であったが,network-managerは当然立ち上がってなかったので立ち上げようとしてみたところ,Ubuntu起動画面に切り替わって一切の応答がなくなった.
参考文献には,
it does not enable any network or other services.
と書かれているので,自明ではあるけれど...面白くなってついやってみたかったの...
今回の知見としてはパスワード二回同じtypoしてもなんとかできるし,single user modeは簡単にできる上に便利であるとわかった.