Linuxで「init = / bin / bash」が許可されるのはなぜですか?


51

最近、ブートする前にGRUBを編集して追加rw init=/bin/bashすると、ルートシェルになってしまうことがわかりました。

私はすべてを理解したいという状態にあるので、これがなぜ起こるのか知りたいです。バグですか?機能ですか?コンピューターに物理的にアクセスできる場合にのみ機能するので、管理者が問題を修正するのに役立ちますか?

GRUBまたは実際のカーネルによって提供されますか?


12
これを「修正」したい場合は、GRUBとBIOSをパスワードでロックし、ハードディスクをブート順で最初に置いてください。他の誰かが物理的なアクセス権を持ち、(暗号化されていない)ハードディスクを別のコンピューターに入れることができる場合は、とにかく失われました
jofel

回答:


44

これは機能であり、システムのメンテナンスに使用されます。システム管理者は、混乱した初期化ファイルからシステムを回復したり、忘れたパスワードを変更したりできます。

Red Hatメーリングリストのこの投稿では、いくつかのことを説明しています。

Unixライクなシステムでは、initは最初に実行されるプロセスであり、実行されるすべてのプロセスの究極の祖先です。すべてのinitスクリプトを実行します。

Linuxカーネルに、システムの初期化ではなく、/ bin / bashを初期化として実行するように指示しています。[...]

したがって、あなたは何も活用しておらず、単に標準のカーネル機能を使用しています。

また、コメントに記載されているように、rwフラグはから独立してinit=おり、ルートファイルシステムを読み書き可能としてマウントするようにシステムに指示します(たとえば、誤って設定されたファイルを編集したり、パスワードを変更したりできます)。


2
また、rwとは完全に分離されていinit=ます。前者は、カーネルにルートファイルシステムを読み書き可能にマウントするように指示するだけです。
-Alexios

19

システムには、実行およびデバッグのメカニズム(initパラメーターなど)があり、おそらく不要なユーザーがそれらを利用しないようにするセキュリティメカニズムがあります。これらは機能であり、バグではありません。

ブートローダーは、OSの起動を担当します。OSセキュリティは明らかにその時点では適用されません。別のカーネル、initrd、root fsをロードするか、別のオプション(initパスなど)を設定することができます。ユーザーがそれを行わないようにするには、ブートローダーで実行する必要があります。

システム(おそらくPCなのでBIOS)がブートローダーをロードするため、明らかにブートローダーのセキュリティは適用されません。ユーザーがUSBなどからBIOSを起動させないようにするには、そのレベルでそれを行う必要があります。

システムはどこかの机の上にある可能性があります。ユーザーがコンピューターを開いて自分のhddを切り替えたり、ドライブを取り外してコンピューターにマウントしたりするのを停止するには、物理​​レベルで実行する必要があります。そして、彼らが机全体を拾い上げて、彼らの逃走車で運転するのを止めません...

それがセキュリティです。象はずっと下に。


いい要約。バンに対する可能な答えとして、それにhdd暗号化を追加したい場合があります。
MvG

11

コンピュータが起動すると、通常は/bin/initまたはにある「init」というプログラムが実行され/sbin/initます。このプログラムは、すべてのシステムの起動と使用可能な環境の作成を担当します。

指定するinit=/bin/bashと、/bin/bash代わりに実行するようカーネルに指示します(これはシェルです)。指定するrwと、カーネルは読み取り専用モードではなく読み取り/書き込みモードでハードディスクを使用して起動します。従来、カーネルはディスクを読み取り専用モードで開始し、後でプロセスが読み取り/書き込みに切り替える前にディスクの整合性をチェックします。


6

kernel.orgから集めたもの:

KNL     Is a kernel start-up parameter.

init=   [KNL]
        Format: <full_path>
        Run specified binary instead of /sbin/init as init
        process.

rw      [KNL] Mount root device read-write on boot

1

これはカーネルの機能です。つまり、その「呼び出し元」、つまりブートローダーが非常に柔軟になります。Grubは起動時にこの柔軟性を利用する手段を提供しますが、この種の改ざんを制限する手段も提供します。これは、権限のないユーザーがブートプロセスを保持する可能性があるが、それ以外の場合はハードドライブ自体へのアクセスを拒否される場合に特に意味があります。


1

init=任意の実行可能ファイルを取ることができます

init=シェルスクリプトを含む任意の実行可能ファイルを使用できます。

ここで例えば私は、コンパイル済みの任意の最小限のC作成する方法を示しinitただ一つのプログラムと他には何を実行するカスタムLinuxディストリビューションを作成する方法を?

では、なぜ、通常の実行可能ファイルであり、実際に役立つ可能性があるすべてのものを受け入れないのでしょう/bin/bashか?:-)

次に、initsystemdやBusyboxなどのレギュラーとのトレードオフを理解しようとする必要もあります。

基本的に、生の/bin/bash場合、あなたは:

ジョブ制御が有力とBusyboxの「initと他の類似のINITに復元することができます-inittab

tty3::respawn:-/bin/sh

inittabCtrl + Dを実行すると、ログインを使用してシェルを生成し続ける通常のエントリは次のとおりです。

::respawn:/sbin/getty -L ttyS0 0 vt100

getty実行可能ファイルを使用しますが、TODO:Busyboxなしでそれらを自分で生成することができませんでしたinitコマンドラインからgetty start?

このセットアップを使用して、それをいじって上記の結論に達することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.