最近、ブートする前にGRUBを編集して追加rw init=/bin/bash
すると、ルートシェルになってしまうことがわかりました。
私はすべてを理解したいという状態にあるので、これがなぜ起こるのか知りたいです。バグですか?機能ですか?コンピューターに物理的にアクセスできる場合にのみ機能するので、管理者が問題を修正するのに役立ちますか?
GRUBまたは実際のカーネルによって提供されますか?
最近、ブートする前にGRUBを編集して追加rw init=/bin/bash
すると、ルートシェルになってしまうことがわかりました。
私はすべてを理解したいという状態にあるので、これがなぜ起こるのか知りたいです。バグですか?機能ですか?コンピューターに物理的にアクセスできる場合にのみ機能するので、管理者が問題を修正するのに役立ちますか?
GRUBまたは実際のカーネルによって提供されますか?
回答:
これは機能であり、システムのメンテナンスに使用されます。システム管理者は、混乱した初期化ファイルからシステムを回復したり、忘れたパスワードを変更したりできます。
Red Hatメーリングリストのこの投稿では、いくつかのことを説明しています。
Unixライクなシステムでは、initは最初に実行されるプロセスであり、実行されるすべてのプロセスの究極の祖先です。すべてのinitスクリプトを実行します。
Linuxカーネルに、システムの初期化ではなく、/ bin / bashを初期化として実行するように指示しています。[...]
したがって、あなたは何も活用しておらず、単に標準のカーネル機能を使用しています。
また、コメントに記載されているように、rw
フラグはから独立してinit=
おり、ルートファイルシステムを読み書き可能としてマウントするようにシステムに指示します(たとえば、誤って設定されたファイルを編集したり、パスワードを変更したりできます)。
rw
とは完全に分離されていinit=
ます。前者は、カーネルにルートファイルシステムを読み書き可能にマウントするように指示するだけです。
システムには、実行およびデバッグのメカニズム(initパラメーターなど)があり、おそらく不要なユーザーがそれらを利用しないようにするセキュリティメカニズムがあります。これらは機能であり、バグではありません。
ブートローダーは、OSの起動を担当します。OSセキュリティは明らかにその時点では適用されません。別のカーネル、initrd、root fsをロードするか、別のオプション(initパスなど)を設定することができます。ユーザーがそれを行わないようにするには、ブートローダーで実行する必要があります。
システム(おそらくPCなのでBIOS)がブートローダーをロードするため、明らかにブートローダーのセキュリティは適用されません。ユーザーがUSBなどからBIOSを起動させないようにするには、そのレベルでそれを行う必要があります。
システムはどこかの机の上にある可能性があります。ユーザーがコンピューターを開いて自分のhddを切り替えたり、ドライブを取り外してコンピューターにマウントしたりするのを停止するには、物理レベルで実行する必要があります。そして、彼らが机全体を拾い上げて、彼らの逃走車で運転するのを止めません...
それがセキュリティです。象はずっと下に。
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
これはカーネルの機能です。つまり、その「呼び出し元」、つまりブートローダーが非常に柔軟になります。Grubは起動時にこの柔軟性を利用する手段を提供しますが、この種の改ざんを制限する手段も提供します。これは、権限のないユーザーがブートプロセスを保持する可能性があるが、それ以外の場合はハードドライブ自体へのアクセスを拒否される場合に特に意味があります。
init=
任意の実行可能ファイルを取ることができます
init=
シェルスクリプトを含む任意の実行可能ファイルを使用できます。
ここで例えば私は、コンパイル済みの任意の最小限のC作成する方法を示しinit
:ただ一つのプログラムと他には何を実行するカスタムLinuxディストリビューションを作成する方法を?
では、なぜ、通常の実行可能ファイルであり、実際に役立つ可能性があるすべてのものを受け入れないのでしょう/bin/bash
か?:-)
次に、init
systemdやBusyboxなどのレギュラーとのトレードオフを理解しようとする必要もあります。
基本的に、生の/bin/bash
場合、あなたは:
init
存在してからパニックになりますジョブ制御が有力とBusyboxの「initと他の類似のINITに復元することができます-
でinittab
。
tty3::respawn:-/bin/sh
inittab
Ctrl + Dを実行すると、ログインを使用してシェルを生成し続ける通常のエントリは次のとおりです。
::respawn:/sbin/getty -L ttyS0 0 vt100
getty
実行可能ファイルを使用しますが、TODO:Busyboxなしでそれらを自分で生成することができませんでしたinit
:コマンドラインからgetty start?
このセットアップを使用して、それをいじって上記の結論に達することができます。