web-dev-qa-db-ja.com

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を実行しています。

2
iyerrama29

Grubプロンプトからファイルを編集することはできません(Grubはファイルの読み取りのみが可能で、書き込みはサポートされていません)。 Linux¹を起動する必要があります。

正常にログインできない場合は、通常の起動プロセスを完全にバイパスして、カーネルとシェルだけを起動できます。グラブプロンプトで、を押します 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

ヒント:user引数なしでchshを実行します。このようにして、シェルを検証します。

ヒント:一部の構成を変更する場合は、常にシェルを開いたままにして、構成をテストしてください。間違えた場合でも、修復するためのコマンドラインがあります。

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

¹ または、ホストがLinuxの場合は、 guestfs を使用できます。

パスワードファイルからwhich Wordを削除する必要があります...次のようになります:

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

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

また、ファイルはルートでのみ書き込み可能なファイルであるため、たとえばSudo vim /etc/passwdを使用してファイルをルートとして編集します。

Sudoまたはsuができない場合は、リカバリモードで起動します(GRUBブートローダーでUbuntuの詳細オプションを選択してから、Ubuntu .. .. (リカバリモード)、root/Drop to root Shell Promptを選択します。その後、/ファイルシステムを読み取り/書き込み(mount -o remount,rw /)として再マウントし、/etc/passwdファイルのコンテンツを編集できます。これをUbuntu16.04でテストしました。

1
mazs

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

Sudo -s /bin/bashも機能するはずです。また、Sudoの構成方法に応じて、自分のパスワードのみを知っているか、パスワードを知らない必要があります。

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

ところで、UNIXシステムでrootのシェルを変更するのは一般的に悪い考えです。多くのcronジョブなどは、ルートのシェルがそのOSのデフォルトのルートシェルであることに依存しており、変更すると[〜#〜] will [〜#〜]壊れます。

0
cas