Katakanlah saya sudah pergi dan melakukan hal yang konyol, seperti menggunakan 'chsh' untuk mengubah shell pengguna root ke jalur file yang buruk. Login mendatang ke akun root akan tiba-tiba gagal, mengutip / bin / apa pun yang tidak ditemukan, dan mem-boot Anda kembali ke layar login. Membatasi mode pemulihan atau memasukkan LiveCD untuk mengedit / etc / passwd, apa saja pilihan saya untuk mendapatkan kembali sistem saya? Mari kita asumsikan (untuk bersenang-senang?) Bahwa tidak ada pengguna lain di roda. Pikiran?
23
Jawaban:
Saat boot, tambahkan
init=/bin/bash
(atau path ke shell fungsional lain) ke opsi boot Anda - Anda akan langsung jatuh ke shell pengguna tunggal. Anda mungkin perlu melakukannyamount -o remount,rw /
sebelum memodifikasi/etc/passwd
entri di lingkungan itu. Setelah itu, cukup reboot atau lakukanexec /sbin/init 3
. Hanya tidak ketikexit
atau tekan Ctrl + D, karena ini akan menghasilkan kernel panik *.Satu variasi tambahan dari metode ini mungkin diperlukan pada beberapa sistem yang dimuat dalam mode dua tahap (dengan gambar initrd). Jika Anda memperhatikan bahwa opsi-opsi boot berisi
init=
dan, yang paling pentingreal_init=
,, maka tempat untuk meletakkan/bin/bash
harus menjadi parameter yang terakhir (yaitureal_init=/bin/bash
).* Ini karena dalam lingkungan itu, shell dilihat oleh kernel sebagai program init - yang merupakan satu-satunya proses yang diketahui oleh kernel - itu mewakili sistem yang berjalan di bawahnya ke mata kernel. Tiba-tiba mengakhiri proses itu, tanpa memberitahu kernel untuk mematikan sistem, harus mengakibatkan panik kernel. (Bukankah kamu akan panik jika tiba-tiba semua yang ada di sekitarmu menjadi hitam dan sunyi?)
sumber
exec
, tapi saya kira lebih baik tidak mengacaukan terlalu banyak dengan poin mount sebelumnya./etc/passwd
)./
) sebelum menjalankan init./bin/bash
dijalankan tepat pada titik tersebut, maka/sbin/init
akan dieksekusi pada boot normal. Jadi tidak mungkin ada tindakan yang dilakukan oleh sistem pada saat itu.Anda dapat menggunakan
su
dan menentukan shell yang akan dieksekusi (saya tidak yakin jika Anda mencoba menyiratkan ini tidak mungkin dengan catatan Anda tentang tidak ada pengguna lain yang ada di dalamnyawheel
):Kalau tidak, Anda bisa melakukan sesuatu yang serupa jika daemon ssh Anda memungkinkan login untuk melakukan root:
Anda juga dapat mengatur shell sebagai init Anda di bootloader Anda, misalnya,
init=/bin/ksh
atau serupa.sumber
Jika bootloader Anda dikonfigurasi untuk memungkinkan pengeditan langsung parameter kernel, solusinya adalah me-reboot dan menggunakan shell sebagai proses init, misalnya
init=/bin/bash
. Kemudian, pasang apa pun yang perlu dipasang dengan tangan, dan edit/etc/passwd
.sync
dan boot lagi dengan yang biasainit
.sumber
Jika inti dari pertanyaan Anda adalah bahwa Anda telah mengunci semua cara untuk menjadi root, maka menurut definisi Anda tidak dapat menjadi root.
Adalah umum untuk mengizinkan tiga cara untuk menjadi root pada sistem unix:
root
prompt login dan mengetik kata sandi root. Ini menjalankan shell root.su
dan mengetik kata sandi root. Pada beberapa sistem, ini mengharuskan berada dalam kelompok tertentu (sering disebutwheel
); pada sistem lain, siapa pun yang mengetahui kata sandi root dapat menjadi root. Sistem yang menggunakan PAM untuk otentikasi digunakanpam_wheel
untuk mengelola grup roda jika mereka memilikinya. Jika Anda menentukan perintah dengansu -c
, itu dieksekusi melalui shell root.sudo
dan mengetik kata sandi Anda sendiri. Akun pengguna harus diberikan kekuatan sudo oleh administrator. Kecuali dibatasi dalamsudoers
file, Anda dapat menjalankan perintah apa pun, terlepas dari shell root.Cara tradisional untuk melindungi terhadap shell root yang tidak tersedia adalah dengan mendefinisikan akun lain dengan UID 0 dan shell yang berbeda (
toor
adalah nama tradisional). Sebagai contoh, jika shell root adalah executable terkait secara dinamis (ide yang baik untuk menghemat memori) dan pemutakhiran pustaka salah, shell root mungkin tidak dapat digunakan. Akun root alternatif akan memiliki executable yang terhubung secara statis, mungkin yang dengan utilitas umum built-in seperti BusyBox .sumber
Jawaban di atas sangat bagus dan saya belajar dari membacanya. Jika Anda tidak ingat detail dari pendekatan ini dan tidak keberatan me-reboot, Anda selalu dapat mem-boot sistem Anda menggunakan distro CD langsung, pasang partisi / lalu edit / etc / passwd dan reboot. Tidak seanggun solusi di atas, tetapi lebih mudah diingat.
sumber
/etc/passwd
file secara manual . Selain ini, poin bagus - Saya hanya ingin menambahkan saran yang sama untuk jawaban saya.