Saya baru-baru menemukan bahwa jika saya mengedit GRUB sebelum boot dan saya menambahkan rw init=/bin/bash
saya 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?
Jawaban:
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:
Jadi, Anda tidak mengeksploitasi apa pun, Anda hanya menggunakan fitur kernel standar.
Selain itu, seperti disebutkan dalam komentar,
rw
flag terpisah dariinit=
, 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).sumber
rw
sepenuhnya terpisah dariinit=
. Yang pertama hanya memberitahu kernel untuk me-mount sistem file root baca-tulis.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.
sumber
Ketika komputer mulai, ia menjalankan program yang disebut "init", biasanya ditemukan di
/bin/init
atau/sbin/init
. Program ini bertanggung jawab untuk semua startup sistem dan menciptakan lingkungan yang dapat digunakan.Menentukan
init=/bin/bash
memberitahu kernel untuk menjalankan/bin/bash
sebagai gantinya (yang merupakan shell). Menentukanrw
memberitahu 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.sumber
Disatukan dari kernel.org :
sumber
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.
sumber
init=
dapat mengambil eksekusi apa puninit=
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
init
timbal balik Anda seperti biasa seperti systemd atau Busybox 'Pada dasarnya, dengan mentah
/bin/bash
, Anda:init
adaKontrol pekerjaan dapat dipulihkan di init Busybox 'dan init serupa lainnya dengan yang terdepan
-
diinittab
:inittab
Entri yang lebih normal , yang menggunakan login dan menjaga shell pemijahan jika Anda melakukan Ctrl + D adalah:yang menggunakan
getty
executable, tetapi TODO: Saya belum bisa menelurkannya sendiri tanpa Busyboxinit
: getty start dari command line?Anda dapat menggunakan pengaturan ini untuk bermain-main dengannya dan mencapai kesimpulan di atas.
sumber