Mengapa Linux mengizinkan 'init = / bin / bash'?

51

Saya baru-baru menemukan bahwa jika saya mengedit GRUB sebelum boot dan saya menambahkan rw init=/bin/bashsaya berakhir dengan shell root.

Berada dalam kondisi yang saya ingin mengerti semua yang saya ingin tahu mengapa ini terjadi. Maksud saya apakah ini bug? apakah ini fitur? apakah ada di sana untuk membantu admin memperbaiki berbagai hal karena hanya berfungsi jika Anda memiliki akses fisik ke komputer?

Apakah ini disediakan oleh GRUB atau kernel sebenarnya?

strugee
sumber
12
Jika Anda ingin "memperbaiki" ini, kunci GRUB dan BIOS Anda dengan kata sandi dan masukkan hard disk Anda terlebih dahulu dalam urutan boot. Jika orang lain memiliki akses fisik dan dapat menempatkan hard disk (non-terenkripsi) ke komputer lain, Anda tetap akan kehilangan
jofel

Jawaban:

44

Ini adalah fitur, dan digunakan untuk pemeliharaan sistem: ini memungkinkan sysadmin untuk memulihkan sistem dari file inisialisasi yang kacau atau mengubah kata sandi yang terlupakan.

Posting ini di milis Red Hat menjelaskan beberapa hal:

Dalam sistem mirip Unix, init adalah proses pertama yang harus dijalankan, dan leluhur utama dari semua proses yang pernah dijalankan. Ini bertanggung jawab untuk menjalankan semua skrip init.

Anda memberi tahu kernel Linux untuk menjalankan / bin / bash sebagai init, daripada init sistem. [...]

Jadi, Anda tidak mengeksploitasi apa pun, Anda hanya menggunakan fitur kernel standar.

Selain itu, seperti disebutkan dalam komentar, rwflag terpisah dari init=, hanya memberitahu sistem untuk me-mount sistem file root sebagai baca-tulis (sehingga Anda dapat misalnya mengedit file yang salah konfigurasi atau mengubah kata sandi).

Renan
sumber
2
Juga, rwsepenuhnya terpisah dari init=. Yang pertama hanya memberitahu kernel untuk me-mount sistem file root baca-tulis.
Alexios
19

Sistem Anda memiliki mekanisme untuk menjalankan dan debugging (seperti parameter init) dan mungkin memiliki mekanisme keamanan untuk menghentikan pengguna yang tidak diinginkan dari mengambil keuntungan dari mereka. Ini adalah fitur, bukan bug.

Bootloader bertanggung jawab untuk memulai OS. Keamanan OS jelas tidak berlaku pada saat itu. Anda bisa memuat kernel, initrd, root fs yang berbeda, atau mengatur opsi yang berbeda (seperti path init). Jika Anda ingin menghentikan pengguna melakukan itu, itu harus dilakukan di bootloader.

Sistem Anda (mungkin PC, jadi BIOS) memuat bootloader dan karenanya, keamanan bootloader tidak berlaku untuk itu. Jika Anda ingin menghentikan pengguna untuk membuat boot BIOS dari USB atau semacamnya, Anda perlu melakukannya pada level itu.

Sistem Anda mungkin ada di meja di suatu tempat. Jika Anda ingin menghentikan pengguna membuka coputer dan menukar hdd untuk salah satu dari mereka sendiri atau melepas drive untuk memasangnya di mesin mereka, Anda harus melakukannya pada tingkat fisik. Dan itu tidak akan menghentikan mereka dari mengambil seluruh meja dan pergi dengan van liburan mereka ...

Begitulah keamanan. Gajah terus turun.

XTL
sumber
Ringkasan yang bagus. Mungkin ingin menambahkan enkripsi hdd untuk itu, sebagai kemungkinan jawaban terhadap van.
MvG
11

Ketika komputer mulai, ia menjalankan program yang disebut "init", biasanya ditemukan di /bin/initatau /sbin/init. Program ini bertanggung jawab untuk semua startup sistem dan menciptakan lingkungan yang dapat digunakan.

Menentukan init=/bin/bashmemberitahu kernel untuk menjalankan /bin/bashsebagai gantinya (yang merupakan shell). Menentukan rwmemberitahu kernel untuk boot dengan hard disk dalam mode baca-tulis alih-alih mode baca-saja. Secara tradisional kernel dimulai dengan disk dalam mode read-only dan suatu proses kemudian memeriksa integritas disk sebelum beralih ke read-write.

tylerl
sumber
6

Disatukan dari 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
Philip Durbin
sumber
1

Ini adalah fitur dari kernel: ini memungkinkan "penelepon" nya, yaitu boot loader, sangat fleksibel. Grub memberi Anda sarana untuk memanfaatkan fleksibilitas ini saat booting, tetapi Grub juga memberi Anda sarana untuk membatasi gangguan semacam ini . Ini masuk akal khususnya dalam kasus-kasus di mana pengguna yang tidak sah dapat memperoleh proses boot, tetapi sebaliknya ditolak akses ke hard drive itu sendiri.

MvG
sumber
1

init=dapat mengambil eksekusi apa pun

init=dapat mengambil semua yang dapat dieksekusi, termasuk skrip shell .

Di sini, misalnya, saya mendemonstrasikan cara membuat minimal C yang dikompilasi secara sewenang-wenang init: Bagaimana cara membuat distro Linux khusus yang hanya menjalankan satu program dan tidak ada yang lain?

Jadi mengapa itu tidak menerima /bin/bash, dari semua hal, yang hanya dapat dieksekusi, dan sebenarnya dapat bermanfaat? :-)

Selanjutnya, Anda juga harus mencoba memahami apa yang akan terjadi dengan inittimbal balik Anda seperti biasa seperti systemd atau Busybox '

Pada dasarnya, dengan mentah /bin/bash, Anda:

Kontrol pekerjaan dapat dipulihkan di init Busybox 'dan init serupa lainnya dengan yang terdepan -di inittab:

tty3::respawn:-/bin/sh

inittabEntri yang lebih normal , yang menggunakan login dan menjaga shell pemijahan jika Anda melakukan Ctrl + D adalah:

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

yang menggunakan gettyexecutable, tetapi TODO: Saya belum bisa menelurkannya sendiri tanpa Busybox init: getty start dari command line?

Anda dapat menggunakan pengaturan ini untuk bermain-main dengannya dan mencapai kesimpulan di atas.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber