web-dev-qa-db-ja.com

ルートのシェルを不良ファイルに設定することからの回復

'chsh'を使用してrootユーザーのシェルを不正なファイルパスに変更するなど、ばかげたことを行ったとしましょう。ルートアカウントへの今後のログインは、/ bin/whatever not foundが原因で突然失敗し、ログイン画面に戻ります。リカバリモードを禁止するか、LiveCDを挿入して/ etc/passwdを編集する場合、システムを元に戻すにはどのようなオプションがありますか? (おもしろい?)他のユーザーが運転していないと仮定しましょう。考え?

23
noffle

起動時に、起動オプションにinit=/bin/bash(または他の機能するシェルへのパス)を追加します-シングルユーザーシェルに直接移動します。その環境でmount -o remount,rw /エントリを変更する前に、/etc/passwdを実行する必要がある場合があります。その後、再起動するか、exec /sbin/init 3を実行します。 not type exitを実行するか、Ctrl + Dを押すだけで、カーネルパニックが発生します*。

2ステージモード(initrdイメージを使用)でロードされた一部のシステムでは、この方法の1つの追加のバリエーションが必要になる場合があります。ブートオプションにinit=、最も重要なのはreal_init=が含まれていることに気付いた場合は、/bin/bashは後者のパラメーター(つまりreal_init=/bin/bash)である必要があります。

*これは、その環境では、シェルはinitプログラムとしてカーネルに認識されるためです。これは、カーネルが知っている唯一のプロセスです。これは、カーネルの目の下で実行中のシステム。カーネルにシステムをシャットダウンするように指示せずにそのプロセスを突然終了すると、カーネルパニックが発生するはずです。 (突然あなたの周りのすべてが黒く沈黙した場合、あなたはパニックになりませんか?)

30
rozcietrzewiacz

suを使用して、実行するシェルを指定することができます(wheelに他のユーザーがいないというメモでは、これが不可能であることを示唆しているかどうかはわかりません)。

su -c /bin/bash

それ以外の場合、sshデーモンがrootへのログインを許可している場合は、同様のことを行うことができます。

ssh root@localhost /bin/bash

init=/bin/kshなどのように、ブートローダーのinitとしてシェルを設定することもできます。

10
Chris Down

あなたの質問の要点があなたがルートになるためのすべての方法を締め出したということであるならば、あなたは根本的にルートになることはできません。

UNIXシステムでrootになるための3つの方法を許可するのが一般的です。

  • ログインプロンプトでrootと入力し、ルートパスワードを入力して、ルートとしてログインします。これはルートのシェルを実行します。
  • 通常のユーザーとしてログインし、suを実行してrootパスワードを入力することにより、rootになります。一部のシステムでは、これは特定のグループ(しばしばwheelと呼ばれる)に属している必要があります。他のシステムでは、rootパスワードを知っている人はだれでもrootになることができます。認証にPAMを使用するシステムは、ホイールグループがある場合、pam_wheelを使用してホイールグループを管理します。 su -cでコマンドを指定すると、そのコマンドはルートのシェルを介して実行されます。
  • 通常のユーザーとしてログインし、Sudoを実行して自分のパスワードを入力し、rootになります。ユーザーアカウントには、管理者からSudo権限が付与されている必要があります。 sudoersファイルで制限されていない限り、ルートのシェルに関係なく、任意のコマンドを実行できます。

Rootのシェルが使用できないことを防ぐ従来の方法は、UID 0と別のシェル(toorは従来の名前です)で別のアカウントを定義することです。たとえば、ルートのシェルが動的にリンクされた実行ファイル(メモリを節約するための良いアイデア)であり、ライブラリのアップグレードが失敗した場合、ルートのシェルは使用できない可能性があります。代替のrootアカウントには、静的にリンクされた実行可能ファイルがあり、おそらく BusyBox などの一般的なユーティリティが組み込まれています。

上記の答えは素晴らしく、私はそれらを読むことから学びました。これらのアプローチの詳細を覚えておらず、再起動してもかまわない場合は、いつでもライブCDディストリビューションを使用してシステムを起動し、/パーティションをマウントしてから、/ etc/passwdを編集して再起動できます。上記のソリューションほどエレガントではありませんが、覚えやすくなっています。

5
Joe