Root shell berubah secara keliru. Bagaimana saya bisa mengubahnya kembali menjadi shell yang valid?

19

Saya salah masuk

chsh -s /usr/bin 

dari pada

chsh -s /bin/bash 

dan sekarang saya tidak bisa masuk ke shell root, bagaimana cara memulai bash shell sebagai root secara manual?

ChiseledAbs
sumber
dalam konteks apa Anda melakukan ini. Di terminal saat ini, untuk shell default pengguna?
jgr208
tidakkah Anda memiliki pengguna dalam grup sudo?
Rui F Ribeiro
3
apakah sudo vipwbekerja?
Rui F Ribeiro
1
@RuiFRibeiro ya itu terima kasih, saya tidak tahu saya bisa mengubah shell root default dalam file itu
ChiseledAbs
1
Tidak perlu dalam kasus ini, tetapi ketika Anda secara tidak sengaja membuat bencana yang melibatkan root, Anda biasanya dapat membawa mesin ke mode pengguna tunggal, memperbaiki masalah, dan kemudian kembali ke mode multi-pengguna.
boardrider

Jawaban:

29

Meskipun root tidak memiliki akses, pengguna dalam grup sudo masih dapat menjalankan perintah istimewa - sepertinya kesalahannya bukan pada sudo, tetapi di tempat lain dalam sudo chshperintah (mis. Kesalahan chsh).

Dengan demikian sudo Anda tampaknya berfungsi.

File passwd dapat diedit dengan:

sudo vipw

Dan shell root berubah secara manual.

(baris pertama /etc/passwdbiasanya)

root:x:0:0:root:/root:/bin/bash

Fom man vipw

Perintah vipw dan vigr masing-masing mengedit file / etc / passwd dan / etc / group. Dengan flag -s, mereka akan mengedit versi shadow dari file-file tersebut, / etc / shadow dan / etc / gshadow. Program akan mengatur kunci yang sesuai untuk mencegah korupsi file.

Rui F Ribeiro
sumber
3
Saya tidak pernah tahu vipwdan vigrterima kasih! Saya selalu menggunakansudo vim /etc/passwd
cat
3
Anda mungkin tertarik pada visudo sudo.ws/man/1.8.15/visudo.man.html juga, @tac
Rui F Ribeiro
3
Atau sudo -e, yang melakukan fitur penguncian-pengeditan untuk pengeditan apa pun.
kojiro
16

Opsi lain, dengan asumsi Anda memiliki akses ke akun lain, adalah secara manual mengganti shell default dengan menggunakan su --shell=/bin/bash:

-s, --shell = SHELL
jalankan SHELL jika / etc / shells mengizinkannya

Keuntungan utama dari ini adalah hanya membutuhkan akses ke akun lain, bukan yang istimewa .

Xiong Chiamiov
sumber
8

Untuk alasan keamanan, login apakah tekstual atau grafis dan utilitas suka sudan sudoyang memungkinkan Anda untuk menjalankan perintah sebagai pengguna yang berbeda semua menjalankan perintah tersebut melalui shell pengguna target. Jika shell pengguna target tidak berfungsi, well, Anda telah melihat hasilnya :-(

Kecuali Anda memiliki root shell yang masih berfungsi berjalan di suatu tempat atau sesuatu seperti biner setuid-root atau sesuatu yang memungkinkan Anda untuk mem-bypass ini, me-reboot dan memperbaiki masalah menggunakan sistem penyelamatan atau gambar langsung mungkin merupakan taruhan terbaik Anda.

Boot sistem penyelamatan, pasang sistem file root sistem nyata Anda di suatu tempat, katakan /mnt/foo,, dan edit /mnt/foo/etc/passwduntuk memperbaiki shell. Simpan, lepas gunung, dan Anda selesai.

Celada
sumber
ingin tahu, apa yang terjadi jika Anda melakukan ini dan file / etc / passwd dalam hash bukan teks biasa?
jgr208
1
/etc/passwdbukan plaintext? Saya belum melihat itu setidaknya, seperti, satu dekade. Apakah itu masih berlaku pada beberapa sistem? Lagi pula, saya kira chroot /mnt/foo chsh -s /bin/bashmungkin melakukan trik dalam kasus itu?
Celada
Saya tidak pernah memiliki masalah yang dijelaskan, namun saya bekerja dengan sistem terkunci yang perlu memiliki / etc / passwd tidak dalam teks biasa untuk menghindari peretas dan kompromi sistem seperti itu bahkan lebih jika mereka mendapatkan akses. Hmm itu mungkin berhasil, katakan saja saya harap saya tidak perlu mencoba dan melihat apakah itu benar-benar berfungsi.
jgr208
Saya dapat mengedit /etc/ passwd dengan sudo dari akun pengguna, saya tidak tahu bahwa shell didefinisikan dalam file ini, terima kasih
ChiseledAbs
@ChiseledAbs oh, Anda? Baik untuk Anda, senang Anda menyelesaikan masalah Anda. Saya tidak berpikir itu akan membiarkan Anda.
Celada
6

Tambahkan init=/bin/bashke baris perintah kernel Anda (jika boot dengan grub, tekan euntuk mengedit entri boot), dan Anda akan memiliki bash shell yang berjalan sebagai root tanpa harus memberikan kata sandi. Root filesystem Anda kemungkinan masih akan di-mount hanya baca, jadi Anda harus melakukan remount terlebih dahulu, kemudian Anda dapat mengganti shellnya kembali chsh.

psusi
sumber
4

sudo usermod -s /bin/bash jdoe

akan mengubah shell jdoe menjadi bash. Anda kemudian sudo egrep jdoe /etc/passwddapat memverifikasi.

pengguna208145
sumber