Çatal bomba nasıl durdurulur ve tespit edilir


14
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

Bu bir çatal bomba kodu.

Üniversitemizde telnet yani istemci sunum protokolü üzerinden bağlanıyoruz. 100'e yakın sistem sunucuya bağlıdır. Aniden sunucunun yavaşladığını gördük ve bir süre sonra çöktü. Birisinin çatal bomba kullandığını öğrendim.

Çatal bombanın hangi sistemde uygulandığını nasıl tespit edebiliriz? Ve bunu nasıl durdurabiliriz?

Bir yöntem, tek bir kullanıcının sahip olabileceği maksimum işlem sayısını sınırlamaktır. Durdurmak ve hangi sistemden uygulandığını bilmek için herhangi bir yöntem var mı?


19
Telnet? Ciddi anlamda? Gerçekten SSH kullanmalısınız ...
ThiefMaster



iyi SO biçiminde göç oldu ama bir cevap çekirdek düzeyinde olabilir. bazı yamalar geçici olarak yapılmıştır, ancak hiçbiri kabul görmemektedir. Demek istediğim: nasıl algılanır: herhangi bir kullanıcı artık sistemi kullanamayacağını bilir, bu yüzden algılama noktası belki de kilit nokta değildir. Nasıl kurtarılır? Şu anki yanıt yeniden başlatılıyor, şunu söyleyebilirim: çekirdeğe sadece bir işlemi çalıştırmasını söylemenin bir yolu (karışıklığı temizlemek istediğiniz) ve diğerlerini ne olursa olsun durdurun. Bu, yalnızca sistem konsolundan erişilebilen bir özellik olabilir.
philippe lhardy

Yanıtlar:


16

Bunun bir yolu, bir kullanıcının çalıştırabileceği işlem sayısını sınırlamaktır.

Kullanıcı olarak eklemek ve sınırlarını yapılandırmak için root olarak giriş yapın ve bu dosyayı düzenleyin.

# vi /etc/security/limits.conf

Bu satırı dosyaya ekle

john hard nproc 10

Artık john kullanıcısı sadece 10 işlem oluşturabilir.


Yeni ayarların /etc/security/limits.confgeçerli olması için yeniden başlatmanız gerektiğini düşünüyorum .
Dan

2
Hayır. Ancak PAM tarafından uygulanırlar, bu yüzden sadece yeni girişler için geçerlidirler.
ThiefMaster

14

Çalışan bir çatal bombayı durdurmak için killall <name>, bombanın tüm süreçlerini öldürmek için kullanabilirsiniz . Bununla birlikte, bir çatal bomba genellikle sistemde inanılmaz derecede yüksek bir yük ile sonuçlandığından, içine SSH yapamayabilir veya çalıştıramayabilirsiniz. Bu nedenle, yeniden başlatma gerekli olabilir veya en azından çok daha hızlı olabilir.

Her kullanıcının sistemde kendi hesabı varsa, herkesin ana dizinini kontrol edebilir ve yürütülebilir dosyayı arayabilirsiniz. Muhtemelen kaynak kodunu yükledi, bu yüzden bulmak çok zor olmamalı. Tüm öğrenciler için paylaşılan bir hesap olsaydı, şansınız kalmaz. Özellikle kullanıcının telnet veya ssh oturumu sonlandırıldıktan sonra kimin başlattığını öğrenme şansınız yoktur.

Ancak, çatal bombasını patlatan kullanıcıyı cezalandırmak yerine, çatal bombalarını devreden çıkarmak için sistemin yapılandırmasını düzeltmeyi tercih etmelisiniz. Kullanıcının başına işlem sınırlarını kullanarak /etc/security/limits.confçatal bombasının kontrolden çıkmasını engelleyebilirsiniz - örneğin sadece 50 işlemle çatal bomba çok fazla zarar vermez.


hangi sistemden geldiğini tespit etmek imkansız mı?
Rajesh M

@ user1670364: Ne istediğini belli değil. "Gelmesi" ile ne demek istiyorsun? Hangi kullanıcının sürece sahip olduğunu söyleyebilir, başka ne bilmek istersiniz?
David Schwartz

@DavidSchwartz, hangi sistemin uygulandığını gösteren çatal bombayı tespit etmek mümkün mü?
Rajesh M

@ user1670364: Aslında çatal bombasını çalıştıran sistemi kastediyorsanız, yavaş olan sistemdir. Sorumlu olan kullanıcıyı kastediyorsanız, çatallanan işlemlerin sahibi olan kullanıcıdır.
David Schwartz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.