grubで/etc/passwdファイルを編集する

grubで/etc/passwdファイルを編集する

Ubuntu(14.04)にzshをインストールしようとしています。 zshに切り替えると、スーパーユーザーモードに入ることはできません。

suを実行するとpasswdの入力を求められ、正しいパスワードを入力すると次のように表示されます。

Cannot execute which zsh: No such file or directory

ただし、間違ったパスワードを入力してEnterを4〜5回押すと、何も表示されません。

私のファイルを確認すると、次のように/etc/passwd表示されます。

root:x:0:0:root:/root:which zsh

ファイルを編集して保存しようとしています。

Unable to save /etc/passwd

grubを介してランレベルを1に変更しようとしましたが、エラーが発生しました。

APCI PCC probe failed

VirtualBoxでUbuntuを実行しています。

答え1

パスワードファイルからその単語を削除する必要がありますwhich。次のようにする必要があります。

root:x:0:0:root:/root:/bin/zsh

ここで、/bin/zsh は Z シェルバイナリのパスです。
現在の構成では、ログインプロセスは実行を試みますwhich zshが、コマンドは失敗します。

また、そのファイルはsudo vim /etc/passwdルートのみ書き込むことができるファイルなので、ルートとして編集してください。

そうでない場合は、リカバリモードで起動します(GRUBブートローダでUbuntuの詳細オプションを選択し、Ubuntu ...を選択し、ルート/ルートシェルプロンプトでドロップを選択します)sudosuその後、/ファイルシステムを読み取り/書き込み(mount -o remount,rw /)で再マウントすると、ファイルの内容を編集できます/etc/passwd。 Ubuntu 16.04でテストされました。

答え2

Grubプロンプトではファイルを編集できません(Grubは書き込みサポートなしでファイルを読み取ることができます)。 Linuxを起動する必要があります。

正常にログインできない場合は、通常の起動プロセスを完全に省略し、カーネルとシェルのみを起動できます。 Grubプロンプトで、[e起動順序の編集]をクリックしinit=/bin/bashて行の末尾に追加し、[ linux=…+Ctrl開始X]をクリックします。ルートシェルだけが入手でき、他に何もありません。走る

mount -t proc proc /proc
mount -o remount,rw /

今すぐ実行してchsh -s /bin/zsh rootユーザーデータベースを回復します。

次にAlt++を使用SysRqして再起動し、U++Altを使用して起動するSysRqか、B次のコマンドを使用して正常に起動します。

mount -o remount,ro /
umount /proc
exec /sbin/init

ヒント:chsh実行する必要はありません。ユーザー議論。このようにしてシェルを認証します。

ヒント:一部の設定を変更する場合は、必ずシェルを開いて設定をテストしてください。間違った場合でも、コマンドラインを使用して修正できます。

ヒント:次のことができます。toorアカウントを作成するUID 0(まだまだルートである)を使用し、ルートと同じパスワードを使用すると、/bin/sh問題が発生した場合にログインできる他の方法を維持するためにシェルがそのまま残ります。より良い方法は、静的にリンクされたシェル(busybox-staticまたはzsh-static)をインストールしてtoorのログインシェルとして使用することです。

¹または以下を使用できます。ゲストホストがLinuxの場合。

答え3

ルートパスワードを知っている場合は、以下を実行してsu -s /bin/bashルートbashシェルを取得できます。

sudo -s /bin/bashそれも機能しなければならず、設定方法によってはsudoパスワードだけを知っているか、パスワードが必要ない場合があります。

chsh -s /bin/bashその後、を使用してルートのシェルをbashに戻すことができます。

ところで、UNIXシステムでルートシェルを変更するのは一般的に悪い考えです。多くのcronジョブなどは、ルートシェルをそのオペレーティングシステムのデフォルトルートシェルとして使用します。〜する交換すると割れます。

答え4

sudo vi /etc/passwdを試して、現在ログインしているユーザーのパスワードを入力してください。

/etc/shellでシェルの正しいパスを見つけることもできます。

現在のシェルを確認するには、echo $ SHELLを試してください。

関連情報