chroot("/home/hibari")

備忘録とかに使えそうなノート

Ubuntu18.04でパスワード設定を間違えてログインできない時

 

ことの発端

 

 

要は,情弱すぎて非常に情けない話である.

しかし"single user mode"という単語をただ知っているだけで,それを実際に見たことも使ったこともなかったため,これは実際に試すいい機会ということで修復を試みる実験を行った.

 

タイトルの通り,ディストリビューションはUbuntu18.04と書いているが,その他でも普通にできるかと.

 

実験の準備

まずはテストユーザー(test)を作成する.そしてこの時のパスワードは,とてもとてもめちゃくちゃにタイピングしたものをコピペして作成した,非常にランダム性が高くて長いパスワードとし,そのままコピペメモを消去した.この行動に深い意味はない.

 

f:id:lcstmarck:20190820210616j:plain

 

そして案の定なことが発生します.全然入れる気がしません.

 

ここから復興のために動き始めます.

rescue.target と emergency.target について,以下の参考文献が非常にわかりやすかった.

www.linuxtechi.com

 

rescue.targetとemergency.targetとの違いは,環境の規模の違いのようである.

rescue.targetの場合は,できるだけローカルファイルシステムをマウントしてネットワーク含むいくつかの重要なサービスを起動しようとしてくれる.(try toと書かれている)

emergency.targetread onlyrootファイルシステムのみをマウントし,ネットワーク等のサービスは起動しない.まさに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へ.

 

f:id:lcstmarck:20190820212839j:plain

 

無事に再設定したパスワードを使用して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は簡単にできる上に便利であるとわかった.