
最近、GRUBを編集して起動する前に追加すると、rw init=/bin/bash
ルートシェルが作成されることがわかりました。
全部知りたい状態なのになぜこんなことが起きるのか知りたい。私は、これはバグですか?これが特徴ですか?コンピュータに物理的にアクセスできる場合にのみ機能するため、管理者が問題を解決するのに役立ちますか?
GRUBまたは実際のカーネルで提供されていますか?
答え1
これはシステムメンテナンスのための機能です。これにより、システム管理者は、混乱した初期化ファイルからシステムを回復したり、忘れたパスワードを変更したりできます。
Red Hatメーリングリストのこの記事いくつか説明しました。
Unixファミリーシステムでは、initは最初に実行されるプロセスであり、実行中のすべてのプロセスの究極の祖先です。すべての初期化スクリプトの実行を担当します。
Linuxカーネルに、システム初期化ではなく/ bin / bashをinitとして実行するように指示します。 [...]
したがって、何も活用せずに単に標準カーネル機能を使用しているのです。
また、説明で述べたように、このrw
フラグは独立しており、init=
システムにルートファイルシステムを読み書きでマウントするように指示します(したがって、誤って設定されたファイルを編集したりパスワードを変更したりする可能性があります)。
答え2
システムには実行およびデバッグメカニズム(初期化パラメータなど)があり、不要なユーザーがそれを悪用するのを防ぐセキュリティメカニズムがあります。これはバグではなく機能です。
ブートローダはオペレーティングシステムの起動を担当します。現時点では、オペレーティングシステムのセキュリティは適用されません。別のカーネル、initrd、ルートfsをロードしたり、他のオプション(initパスなど)を設定したりできます。ユーザーがこれを行わないようにするには、ブートローダで実行する必要があります。
お使いのシステム(おそらくPC、つまりBIOS)がブートローダをロードするため、当然ブートローダセキュリティは適用されません。ユーザーがUSBなどからBIOSを起動しないようにするには、このレベルで行う必要があります。
あなたのシステムはおそらく机のどこかにあります。ユーザーが自分のコンピュータを開き、ハードドライブを自分のハードドライブに切り替えたり、ドライブを取り外してコンピュータにインストールしたりするのを防ぐには、物理レベルでこれを行う必要があります。しかし、だからといって、彼らがテーブル全体を拾い、逃走車に乗るのを止めることはできません…。
セキュリティはまさにそれです。象は最後まで降りてきました。
答え3
これがカーネルの設計方法です。持っていなければならない何コンピュータの起動時に実行されます。デフォルト値があってもカーネルコマンドラインを使用すると、そのデフォルト値を変更できます。
/bin/init
通常、これは通常、またはで見つけることができる「init」というプログラムを実行します/sbin/init
。このプログラムは、すべてのシステムの起動と利用可能な環境の作成を担当します。
init=/bin/bash
カーネル/bin/bash
(シェル)を実行することを指定します。rw
読み取り専用モードではなく、読み取り/書き込みモードでハードディスクを起動するようにカーネルに指示するように指定します。従来、カーネルは読み取り専用モードでディスクを起動し、読み取り/書き込みモードに切り替える前にディスクの整合性を確認します。
答え4
init=
服用可能どの実行可能ファイル
init=
以下を含むすべての実行可能ファイルが許可されます。シェルスクリプト。根本原因である可能性が最も高いです。exec
syscallはELF実行可能ファイルとshebangを直接処理できます。。
たとえば、ここではランダムに最小限のCコンパイラを作成する方法を示しますinit
。1つのプログラムだけを実行し、他のプログラムは実行しないカスタムLinuxディストリビューションを作成する方法は?
では、なぜこのようなことが起こるのでしょうか?いいえAccept /bin/bash
、最も重要なのは単に一般的な実行ファイルであるだけです。実際に役に立ちますか? :-)
init
次に、systemdやBusyboxなどの一般的なシステムとの長所と短所が何であるかを理解しようとする必要があります。
デフォルトでは、rawを使用すると/bin/bash
次のことができます。
- パスワードで制御されたログインを使用できる機能が失われました。ただし、これはシステムシミュレーションを実行するのと同じように望ましい場合があります。Buildroot BusyBox initにrootユーザー名またはパスワードを入力せずに自動的にログインする方法は?
- ジョブ制御の喪失 (Ctrl+C が機能しないなど)
- Ctrl+C を押すとシェルが終了し、カーネルが
init
パニック状態になります。
-
次のヘッダーを使用して、Busyboxのinitおよび他の同様のinitからジョブ制御を復元できますinittab
。
tty3::respawn:-/bin/sh
inittab
ログインを使用してCtrl + Dを実行したときに生成されたシェルを維持するより一般的な項目は次のとおりです。
::respawn:/sbin/getty -L ttyS0 0 vt100
実行可能ファイルを使用しgetty
ますが、TODO:Busyboxなしでは直接作成することはできませんinit
。コマンドラインからgettyを起動しますか?
あなたはそれを使用することができますこの設定試してみて、上記のような結論を下してください。