GNU/Linux >> Belajar Linux >  >> Linux

Forkbomb yang tidak disengaja:Bagaimana skrip * nix menjadi buruk

Salah satu pekerjaan industri pertama yang saya miliki adalah di ISP regional kecil. Pada saat itu, 56k modem masih mengkilap dan baru. Kami memiliki beberapa lusin PoP (titik kehadiran) tempat kami memasang bank modem dan memasukkan data kembali ke kantor utama kami melalui serangkaian jalur T1 penuh dan pecahan.

Kami menyediakan banyak layanan—email, berita bersih, dan akses internet umum. Tentu saja, untuk menyediakan layanan ini, kami membutuhkan server kami sendiri. Solusinya adalah menyiapkan kluster sistem SCO Unix. Ya, *itu* SCO. Sudah cukup lama, tetapi pengaturan cluster seperti ini sulit untuk dilupakan. Server diatur sedemikian rupa sehingga mereka memiliki ketergantungan satu sama lain. Jika salah satu gagal, itu tidak menyebabkan semuanya menjadi rusak, tetapi untuk membuat satu server itu kembali biasanya diperlukan restart semuanya.

Pengaturan umum adalah bahwa NFS server dipasang satu sama lain saat startup. Hal ini tentu saja menyebabkan kondisi balapan saat startup. Para insinyur telah menulis dokumen rinci yang menjelaskan langkah-langkah yang diperlukan untuk membawa seluruh cluster setelah kegagalan. Seluruh proses biasanya memakan waktu 30-45 menit.

Pada saat itu, saya adalah anggota rendahan dukungan teknis, menghabiskan sebagian besar waktu saya memegang pelanggan baru melalui proses menginstal perangkat lunak yang diperlukan untuk online. Saya relatif baru di dunia Unix dan jaringan berkecepatan tinggi dan menyerap sebanyak mungkin pengetahuan.

[ Anda mungkin juga menyukai: Sorotan terminal Linux:Melampaui cowsay ]

Salah satu orang yang bekerja dengan saya, Brett, mengajari saya banyak hal. Dia menulis sistem pemantauan jaringan yang kami gunakan dan membagi waktunya antara itu dan menjaga jaringan tetap berjalan. Dia juga kadang-kadang sedikit iseng.

Pada akhir suatu hari yang cukup khas, saya kebetulan berada di kluster Unix. Tiba-tiba, koneksi saya gagal, dan saya di-boot kembali ke OS lokal saya. Ini agak aneh, tetapi kadang-kadang terjadi, jadi saya masuk kembali. Dalam beberapa detik, saya keluar lagi.

Saya mulai melakukan sedikit debugging, mencoba mencari tahu apa yang sedang terjadi. Saya tidak ingat semua yang saya lakukan, tetapi saya ingat menyusun beberapa skrip cepat untuk masuk, memeriksa berbagai proses, dan mencoba mencari tahu apa yang terjadi. Pada titik tertentu, saya memutuskan bahwa saya sedang di-boot dari sistem oleh pengguna lain—Brett.

Setelah saya tahu apa yang sedang terjadi, saya harus melawan. Jadi saya mulai bermain-main dengan skrip shell, mencoba mencari cara untuk mengidentifikasi PID shell-nya sehingga saya bisa mem-boot-nya secara offline. Ini bolak-balik sebentar, masing-masing dari kami meningkatkan serangan. Kami mulai menggunakan layanan lain untuk mendapatkan kembali akses, meluncurkan serangan, dll.

Akhirnya, saya meluncurkan apa yang saya pikir akan menjadi serangan ULTIMATE. Saya menulis skrip shell kecil yang mencari loginnya, mengidentifikasi shell, dan kemudian mematikan aksesnya. Cukup sederhana, tapi saya menambahkan sentuhan akhir. Setelah skrip berjalan, skrip itu menjalankan salinannya sendiri. LEDAKAN. Tidak mungkin dia bisa kembali sekarang.

Dan itu berhasil! Brett kehilangan aksesnya dan tidak bisa mendapatkan pijakan selama lima menit berikutnya atau lebih. Dan, tentu saja, saya telah membuat latar belakang tugas tersebut sehingga saya dapat berinteraksi dengan konsol dan memverifikasi bahwa dia telah dikalahkan. saya telah menang. Saya telah membuktikan bahwa saya bisa mengalahkan insinyur yang berpengalaman, dan sialnya, saya merasa senang dengan hal itu.

Sampai...

ksh:fork:Sumber daya tidak tersedia untuk sementara

Awal dari akhir

Saya belum pernah melihat kesalahan seperti itu sebelumnya. Apa ini? Mengapa sistem melakukan ini? Dan mengapa itu mengalir di seluruh konsol saya, membuat saya tidak mungkin melakukan apa pun?

[ Lembar contekan gratis:kiat wawancara kerja TI ] 

Butuh beberapa saat, tetapi Brett juga memperhatikan masalahnya. Dia keluar untuk melihat apa yang terjadi. Saya menjelaskan strategi brilian saya, dan dia hanya menghela nafas, tersenyum, dan mengatakan kepada saya bahwa saya harus menangani reboot dan sinkronisasi ulang server. Dan kemudian dia meluangkan waktu untuk menjelaskan kepada saya apa yang telah saya lakukan salah. Pada hari itulah saya belajar tentang "exec" dan betapa pentingnya itu.

Sayangnya, Brett meninggal sekitar satu dekade setelah ini. Dia adalah teman yang baik, mentor yang hebat, dan saya merindukannya.


Linux
  1. Karier Sysadmin:korelasi antara mentor dan kesuksesan

  2. Cara memutar ulang sesi terminal yang direkam dengan perintah skrip Linux

  3. Bagaimana Cara Mendapatkan Alamat Ip Sendiri Dan Menyimpannya Ke Variabel Dalam Script Shell?

  1. Bagaimana Cara Membaca Seluruh Script Shell Sebelum Mengeksekusinya?

  2. Bagaimana saya tahu nama file skrip dalam skrip Bash?

  3. Bagaimana cara mem-pipe atau mengarahkan output dari curl -v?

  1. Bagaimana Cara Mendapatkan Alamat Ip Eksternal Dalam Script Shell?

  2. Bagaimana Cara Mengenkripsi Atau Membuat Skrip Shell Tidak Dapat Dibaca?

  3. Bagaimana cara menyalin output terminal?