Apa efeknya pada server ketika Anda membunuh semua proses root?

9

Ada dev lainnya yang login sebagai root yang ingin saya keluarkan.

Jadi saya menerbitkan

pkill -KILL -u root

Kemudian saya menyadari bahwa saya mungkin membunuh semua jenis proses root.

Apakah saya merusak sistem saya? Saya tidak bisa mencapainya melalui SSH sekarang.

PEMBARUAN: Server web masih berjalan. Tapi saya tidak bisa terhubung dengan SSH sekarang. Saya tidak tahu apa yang telah saya lakukan.

Butkus Buttle
sumber
1
Anda hampir pasti perlu me-reboot-nya. Jika Anda bisa, kirimkan sinyal shutdown ACPI alih-alih hanya menarik steker.
Skyhawk
1
Iain, IME itu tidak sepenuhnya benar. Mereka harus memulai sebagai root, untuk mengikat ke port yang diistimewakan, tetapi kemudian memutar sejumlah besar proses yang dimiliki oleh apa pun yang dikonfigurasikan oleh pengguna non-privat, untuk pemisahan privilege. Namun, dalam kasus apache, biasanya masih ada satu proses yang dimiliki root duduk di kepala semuanya. Tapi saya setuju dengan Anda bahwa semua proses melakukan penyajian web yang sebenarnya tidak dimiliki root.
MadHatter
5
Membuat kesalahan adalah cara terbaik untuk belajar . Tolong jangan downvote hanya karena seseorang melakukan kesalahan buruk. Pertanyaan ini kontroversial tetapi tidak boleh ditutup. Sebaliknya saya menantang Anda untuk membaca lebih dalam pemikiran di balik pertanyaan dan menjelaskan: Apa yang terjadi ketika saya membunuh semua proses root? Mengapa tuan rumah masih hidup? Mengapa SSHD tidak bisa melayani permintaan tetapi server web bisa? Bagaimana mungkin server web masih hidup? Kami tidak melihat mereka memiliki jawaban kanonik yang baik untuk pertanyaan-pertanyaan semacam ini. Jawabannya dapat memberikan penjelasan berharga tentang cara kerja Unix.
Stefan Lasiewski
2
Terima kasih Stefan, untuk menggunakan kepala dan hatimu dan tidak secara kompulsif mengklik tombol downvote seperti yang banyak orang lain lakukan. Jika tidak ada yang pernah memposting pertanyaan tentang kesalahan mereka di situs stackexchange, karena takut akan diturunkan, maka TIDAK seorang pun akan belajar dari mereka. Saya membantu orang dengan pertanyaan saya, dan tidak boleh dihukum karenanya.
Buttle Butkus
1
Saya menjawab pertanyaan itu karena itu baik untuk tertawa, jangan tersinggung. Ini seperti menonton video seseorang yang jatuh ke dalam lubang saat mengirim pesan.
UncaAlby

Jawaban:

15

Jawaban cepatnya adalah Anda membunuh sshd (dan Tuhan tahu apa lagi) dan tidak akan bisa masuk kembali ke sistem menggunakan SSH. Kecuali jika Anda memiliki beberapa metode lain untuk mendapatkan akses ke sistem (seperti konsol jarak jauh, IPMI, dll), Anda perlu me-reboot sistem yang akan mengembalikan layanan SSH dan layanan lainnya.

Semoga Anda memiliki akses fisik ke kotak, dalam hal ini Anda mungkin hanya perlu menekan tombol power. Sadarilah bahwa Anda telah membunuh banyak proses dan bersiaplah untuk sejumlah korupsi. Linux dirancang untuk pulih dari kerusakan sistem, dan pada dasarnya Anda memicu kerusakan 'manual'. Sebagian besar hal akan pulih dengan baik setelah reboot. Anda mungkin memiliki semua jenis pesan kesalahan yang menarik di file log.


Jawaban panjang:

Ini adalah eksperimen pemikiran yang bagus dan pertanyaan wawancara kerja yang bagus. "Apa yang terjadi jika kamu melakukan X ..." Ini adalah hal yang menyenangkan untuk dicoba di mesin virtual pribadi Anda sendiri, tetapi tidak boleh dilakukan pada kotak nyata. Setiap orang membuat kesalahan. Ingat dan pelajari dari kesalahan Anda. Membuat kesalahan adalah cara terbaik untuk belajar. Membuat kesalahan pada produksi adalah pelajaran menyakitkan yang akan terjadi sesekali dalam karir Anda.

pkill -KILL -u root

Perintah ini akan mengirim 'SIGKILL' (mis kill -9. KILL adalah alias untuk SIGKILL) ke semua proses yang dimiliki oleh root. Ini adalah hal yang sangat buruk untuk dilakukan pada suatu sistem. kill -9harus dihindari kecuali sebagai upaya terakhir.

Perintah Anda secara agresif membunuh semua proses yang dimiliki oleh root, proses-proses tersebut segera dibunuh dan tidak diberi kesempatan untuk membersihkan. Untuk memahami apa yang Anda bunuh, masuk ke kotak Linux yang sehat dan daftarkan proses yang dimiliki oleh root, menggunakan perintah seperti ini. Anda biasanya tidak perlu menjadi root untuk menjalankan perintah ini:

$ pgrep -u root -l
$ ps aux | grep root

Anda mungkin telah membunuh Init (PID # 1) yang memunculkan proses baru. Sistem Anda mungkin tidak dapat membuat proses baru. Jadi, itu mungkin terus berfungsi untuk saat ini tetapi sakit dan perlu diperbaiki sesegera mungkin. Seiring berjalannya waktu, sistem akan semakin sakit. Semakin lama Anda menunggu, semakin buruk hasilnya.

PEMBARUAN: Server web masih berjalan. Tapi saya tidak bisa terhubung dengan SSH sekarang. Saya tidak tahu apa yang telah saya lakukan.

Saya menduga Anda menggunakan Apache. Tampaknya bahwa anak proses dari webserver masih berjalan karena mereka tidak dimiliki oleh pengguna 'root'. Namun, proses webserver induk biasanya dimiliki oleh root dan Anda membunuhnya. Akibatnya, proses anak baru tidak akan muncul. Ini akan baik-baik saja untuk sementara waktu, karena Anda mungkin memiliki cukup proses anak untuk melayani permintaan, dan biasanya proses anak tersebut akan bertahan sampai mereka terbunuh atau terhenti. Sekali lagi, perbaikan tercepat adalah me-reboot mesin.

Stefan Lasiewski
sumber
Saya tidak memiliki akses fisik tetapi saya akan memikirkan sesuatu. Saya terkejut melihat bahwa Apache masih berfungsi. Jadi mesin baik-baik saja tanpa root. NB jika Anda menurunkan pertanyaan, saya telah meningkatkan judulnya.
Buttle Butkus
1
@ButtleButkus Saya tidak menjawab pertanyaan itu. Saya mulai menjawab pertanyaan itu, dan kemudian mulai tertarik mengapa hal-hal berjalan seperti itu.
Stefan Lasiewski
1
Stefan, terima kasih atas jawabannya. Ini adalah satu jawaban yang saya angkat sejak awal, karena itu masuk akal. Saya membuat sistem reboot dalam waktu sekitar 10 menit dan semuanya tampaknya bekerja dengan baik sejak saat itu.
Buttle Butkus
4

Anda kemungkinan besar harus me-restart sistem Anda karena Anda telah membunuh hampir semua layanan penting di dalamnya. Bagaimana Anda melakukannya tergantung pada alat apa yang Anda miliki atau transportasi apa yang Anda miliki untuk sampai ke pusat data.

user9517
sumber
Sepertinya saya tidak membunuh semua proses kritis, sebenarnya. Kalau tidak, mengapa server web masih melayani halaman web yang sempurna?
Buttle Butkus
@ButtleButkus: Server web Anda tidak akan berjalan sebagai root.
user9517
@lain Jika bahkan satu layanan "kritis" terbunuh, maka saya pikir itu akan membuat seluruh server turun. Sepertinya perintah itu sebenarnya tidak membunuh satu pun layanan kritis. Itu memang mematikan layanan yang nyaman, sshd.
Buttle Butkus
2
Hanya karena layanan kritis terbunuh, bukan berarti mesin akan segera mati. Saya misalnya akan mempertimbangkan daemon kontrol kipas saya penting - ketika penggunaan CPU meningkat, saya ingin kipas berputar lebih banyak. Saya dapat mematikan layanan dan menggunakan cpu rendah selama berhari-hari, lalu tiba-tiba 1000 orang mengakses situs saya dan cpu saya terbakar. Dan ada banyak cara yang tidak terlalu mencolok untuk melakukan kerusakan ...
akal
3

Sistem berjalan karena kernel sedang berjalan. Anda tidak dapat mengakses sshd karena Anda telah membunuh daemon. Mungkin init telah dihentikan juga, artinya Anda tidak dapat membuat proses baru. Jadi, koneksi apache baru mungkin tidak terbentuk (parameter konfigurasi diterapkan;)).

Anda tidak dapat mengirim sinyal ke utas kernel, itu sebabnya sistem berjalan tetapi layanan yang dimiliki root telah dihentikan dan untuk kebangkitan normal, Anda harus mem-boot ulangnya.

Soham Chakraborty
sumber
Terima kasih atas detailnya yang menarik. Saya memberi Anda upvote, tapi saya memberi Stefan tanda centang.
Buttle Butkus