たとえば、「chsh」を使用してrootユーザーのシェルを不正なファイルパスに変更するなど、愚かなことをしたとしましょう。ルートアカウントへの今後のログインは、/ bin / whateverが見つからないことを引用して突然失敗し、ログイン画面に戻ります。/ etc / passwdを編集するためにリカバリモードを禁止するか、LiveCDを挿入する場合、システムを元に戻すためのオプションは何ですか?また、(楽しみのために)wheelに他のユーザーはいないと仮定しましょう。考え?
たとえば、「chsh」を使用してrootユーザーのシェルを不正なファイルパスに変更するなど、愚かなことをしたとしましょう。ルートアカウントへの今後のログインは、/ bin / whateverが見つからないことを引用して突然失敗し、ログイン画面に戻ります。/ etc / passwdを編集するためにリカバリモードを禁止するか、LiveCDを挿入する場合、システムを元に戻すためのオプションは何ですか?また、(楽しみのために)wheelに他のユーザーはいないと仮定しましょう。考え?
回答:
起動時init=/bin/bash
に、起動オプションに追加(または他の機能的なシェルへのパス)-シングルユーザーシェルに直接ドロップされます。その環境のエントリをmount -o remount,rw /
変更する前に行う必要がある場合があり/etc/passwd
ます。その後、再起動するか、実行しますexec /sbin/init 3
。入力したり、Ctrl + Dを押したりしないでくださいexit
。カーネルパニック*が発生します。
2段階モード(initrdイメージを使用)でロードされた一部のシステムでは、この方法の1つの追加バリエーションが必要になる場合があります。ブートオプションにinit=
とが含まれていることに気付いた場合、最も重要なのはreal_init=
、配置する場所/bin/bash
が後者のパラメータ(つまりreal_init=/bin/bash
)であることです。
*これは、その環境では、シェルがカーネルからinitプログラム(カーネルが知っている唯一のプロセス)として認識されるためです。シェルは、カーネルの目に見える実行中のシステムを表します。システムをシャットダウンするようにカーネルに通知せずに、そのプロセスを突然終了すると、カーネルパニックが発生する必要があります。(あなたの周りのすべてが突然暗くなって静かになったらパニックになりませんか?)
exec
、事前にマウントポイントを使いすぎないようにした方が良いと思います。
/etc/passwd
)を変更できません。
/
initを実行する前に(以外の)マウントされていた可能性のあるすべてのもののアンマウントを処理すると言っていました。
/bin/bash
はその時点で正確に/sbin/init
実行され、通常のブート時に実行されることに注意してください。そのため、その時点でシステムが実行できるアクションはありません。
su
実行するシェルを使用して指定することができます(他のユーザーがにいないというメモでこれが不可能であることを暗示しようとしているのかどうかわかりませんwheel
)。
su -c /bin/bash
それ以外の場合、sshデーモンがrootへのログインを許可している場合、同様のことを行うことができます。
ssh root@localhost /bin/bash
たとえば、ブートローダーでシェルをinitとして設定することもできますinit=/bin/ksh
。
ブートローダがカーネルパラメータのライブ編集を許可するように設定されている場合、解決策は再起動し、initプロセスとしてシェルを使用することinit=/bin/bash
です。次に、手動でマウントする必要があるものをすべてマウントし、編集します/etc/passwd
。sync
そしていつものようにもう一度起動しますinit
。
あなたの質問の要点が、あなたがルートになるためのすべての方法を締め出したということであるなら、定義によってあなたはルートになることができません。
UNIXシステムでrootになるための3つの方法を許可するのが一般的です。
root
ログインプロンプトで入力し、rootパスワードを入力して、root としてログインします。これにより、ルートのシェルが実行されます。su
してrootパスワードを入力してrootになります。一部のシステムでは、これには特定のグループ(多くの場合wheel
)と呼ばれることが必要です。他のシステムでは、rootパスワードを知っている人はだれでもrootになることができます。認証にPAMを使用pam_wheel
するシステムは、ホイールグループがある場合はそれを管理するために使用します。でコマンドを指定するとsu -c
、ルートのシェルを介して実行されます。sudo
、自分のパスワードを実行して入力して、rootになります。ユーザーアカウントには、管理者によってsudo権限が付与されている必要があります。sudoers
ファイルで制限されていない限り、ルートのシェルに関係なく、任意のコマンドを実行できます。ルートのシェルが使用できないようにする従来の方法は、UID 0と別のシェル(toor
従来の名前)で別のアカウントを定義することです。たとえば、ルートのシェルが動的にリンクされた実行可能ファイル(メモリを節約するための良いアイデア)であり、ライブラリのアップグレードが失敗した場合、ルートのシェルは使用できない可能性があります。代替ルートアカウントには、静的にリンクされた実行可能ファイルがあり、おそらくBusyBoxなどの一般的なユーティリティが組み込まれています。
上記の答えは素晴らしく、私はそれらを読んで学んだ。これらのアプローチの詳細を覚えておらず、再起動を気にしない場合は、いつでもライブCDディストリビューションを使用してシステムを起動し、/パーティションをマウントしてから/ etc / passwdを編集して再起動できます。上記のソリューションほどエレガントではありませんが、覚えやすいです。
/etc/passwd
ファイルの手動編集に関連するリスクを指摘する必要があります。これ以外の良い点-私はちょうど私の提案に同じ提案を加えたかった。