Herkes kök süreci spawn izlemek için basit bir yol biliyor mu


13

Yeni bir kök işlemi ortaya çıktığında bir komut dosyası yürütmek istiyorum. (Linux'ta) Bunu nasıl yapabilirim?

Teşekkürler


Bu ilginç bir soru, ama bunun için pratik bir uygulama var mı? Beynimi sarıyorum ve boş bir resim çiziyorum ...
Steven Pazartesi

Yanıtlar:


9

Bu denetim için mükemmel bir iş gibi geliyor. Modern RedHat tabanlı sistemlerde varsayılan bir hizmet olan denetleme çalıştıktan sonra, çalıştırarak tam olarak ne istediğinizi yapacak bir kural oluşturabilirsiniz

auditctl -a task,always -F uid=0

Bu komut kuralını bozarak, man sayfasını aşırı kullanarak şunları buluyoruz:

   -a list,action
          task       Add  a  rule to the per task list. This rule list is used
                     only at the time a task is created -- when fork() or
                     clone() are called by the parent task. When using this
                     list, you should only use fields that are known at task
                     creation time, such as the uid, gid, etc.
          always     Allocate an audit context, always fill it in at syscall 
                     entry time, and always write out a record at syscall exit
                     time.

Bu nedenle, bir çatal veya klon sistemi çağrısı her çıktığında bu işlem için her zaman bir kayıt yazın.

Son seçenek bir filtre dizesi olarak düşünülebilir, kullanımımızda -F uid=0bizi sadece süreç sahibinin uid'inin 0 olduğu durumlarda kısıtlar.

Bu kuralın, denetimin doğru şekilde yapılandırıldığından emin olarak ve kuralı
-a task,always -F uid=0
dağıtımınız için ilgili dosyaya ekleyerek büyük olasılıkla çalışma zamanında yürütülebilir./etc/audit/audit.rules

Bunun oldukça dang gürültülü olacağını ve günlük yorumlarınızı kimin yaptığını bunun için hazırlaması gerektiğini unutmayın.


Aslında, şimdi bunu yazdığım için, aniden soruya soruyu değil, başlıktaki soruyu cevapladığımı fark ettim. Umarım hala faydalıdır.
Scott Pack

Neden bazen pid = 0 ve bazen uid = 0 kullanıyorsunuz
Dakusan

@dakusan Çoğunlukla bir editöre ihtiyacım olduğu için. Şimdi düzeltildi.
Scott Pack

2

Çekirdeğinizi CONFIG_PROC_EVENTS ve / veya CONFIG_KPROBES ile yeniden derlemeden bunu yapmanın temiz bir yolu olduğunu düşünmüyorum (bunu yapmanın bir yolu olup olmadığını bilmek isterim, bu yüzden sorunuzu iptal ettim).

İçinde / proc içinde dizin oluşturma için iwatch / inotify kullanma hakkında bir fikrim var ama işe yaramadı, ne audctl. Kirli olmasına rağmen, en iyi seçiminiz, ps'den bir betikteki değişiklik için sürekli olarak ayrıştırmak gibi görünüyor. Aşağıdaki Perl kodu bunu yapardı, ancak bazılarını özlemeye eğilimli ve göz ardı edilebilir ps(aksi takdirde kendini tetikleyeceği gibi):

perl -e 'my %pids; while(1) { my @pids = `ps -U root -u root`; foreach (@pids) { next if /ps$/; ($pid) = /^\s*(\d+)\D/; if (!$pids{$pid}) { $pids{$pid}++; print "Process $pid created (" . `cat /proc/$pid/cmdline` . ")\n"; } } }

Kodunuzun sonunda tek bir alıntı eksik. SO'nun değiştirilmesi için en az 6 karakter gerektirdiği için düzenlenemiyor. Ayrıca, tüm kullanıcılar için "-U root -u root" yerine "-ax" kullanın
Dakusan

1

Düşünebileceğim en iyi yol snoopy kütüphanesini oluşturmak olabilir . snoopy, sistem çağrılarına /etc/ld.so.preloadbağlanan ve etrafına saran çok küçük bir paylaşılan kütüphanedir execve(). Hepsini exec()veya yalnızca kökten gelenleri günlüğe kaydetmek için yapılandırılabilir . Mevcut enkarnasyonunda, snoopy eşleşen bir olay (sistem çağrısı execve()) her gerçekleştiğinde syslog günlüğüne kaydeder . Yine de büyük bir program değil (en fazla birkaç yüz satır kod) ve etkinliği günlüğe kaydetmek (veya buna ek olarak) yerine bir komut dosyasını yürütmek için bu kadar zorlanmadan değiştirilebilir. Snoopy C harfiyle yazılmıştır.

Unutulmaması gereken birkaç nokta:

  • Bir kök işlem her ortaya çıktığında bir komut dosyası çalıştırırsanız, komut dosyanız bir komut dosyası yeniden oluşturması gereken bir kök işlem olacaktır, bu da başka bir kök işlem vb. Olacaktır. Orada.
  • Tipik bir Linux kutusunda, kök olarak çalıştırılan ve düzenli olarak ortaya çıkan birçok süreç vardır. Örneğin, cron sistem cronjobs'unu her dakika veya birkaç dakikada kök olarak üretebilir. Bir kullanıcı root olarak oturum açtığında bunun olmasını istiyorsanız, daha fazla iş olacaktır.
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.