Soru Linux altında bir program tarafından yapılan dosya sistemi değişikliklerini izleyin, kaydedin ve geri alın


Bir yükleyici gibi bir program çalıştırıldığında, dosya sistemime yapılan değişikliklerin listesini takip edebilmek, böylece onları daha sonra geri alabilmek istiyorum.

DÜZENLE: Bu bir endişe olmayan paketlenmiş programı. Apt-get'i olabildiğince uzak kullanırım.

İdeal olarak, şöyle bir şey yapabilmeyi isterdim:

(sudo) catch-modifs some-installer.bin > fsmodifs.patch

Ve sonra:

(sudo) revert-modifs fsmodifs.patch

Bunu yapmak için uygun bir yolu var mı?


9
2017-12-27 11:41


Menşei




Cevaplar:


Bunu yapmanın en kolay (?) Yolu, bir "kalıcı veri bölümü" olan bir LiveUSB'den kurtulmaktır. (Ya da, etkiyi bir chroot hapishanesinde kopyalamak için: bir ro tabakasının üzerine bir rw katmanı monte edin.) Rw dosya sisteminin bir anlık görüntüsünü alın - yeni bir önyüklemeden sonra çok ince olması gerekir - daha sonra yükleyicinizi çalıştırın. Değiştirdiği veya oluşturduğu her dosya, rw "kalıcı veri" kaplama bölmesinde olacaktır. Kaldırılan dosyalar bile "sihirli nokta dosyaları" olarak görünecektir.


1
2017-12-28 04:17



Bu karmaşık görünüyor ... Sadece yeni bir bölüm oluşturmak, eski bir RO'yi monte etmek ve RW'deki yenisini monte etmek mümkün değil mi? - Ywen
Evet, belki de tek kullanıcı modundan bunu yapabilirsiniz. Bir göz atın unionfs - temel olarak, RW dosya sistemi tüm yazıları kabul eder, ancak RO dosya sistemi hala altında görünür. Bir dosya değiştiyse, RW fs'ye “göç eder”; Eğer silinirse, RW fs'de “maskelemek” için aslında bir “sihirli nokta dosyası” vardır. Kurma unionfs Biraz dokunaklı olabilir, bu yüzden LiveUSB'yi önerdim (sizin için o kısmı yapıyor ve baştan başlamak için “temiz” bir sistem görüntüsünüz var) - BRPocock


Belki de tripwire'ye bir göz atabilirsin? Tripwire aktif örneğinizden daha pasif, ama yine de sizin için işe yarayabilir.

http://www.linuxjournal.com/article/8758

Tripwire, sürekli ve bir saldırı tespit sistemi (IDS),   otomatik olarak kritik sistem dosyalarınızı ve raporlarınızı korur   bir kırıcı tarafından yok edildiyse veya değiştirildiyse   hata). Sistem yöneticisinin hemen ne olduğunu bilmesini sağlar.   tehlikeye atıldı ve düzeltildi.


2
2017-12-27 11:52





Installwatch'a bir göz atın:

http://en.wikipedia.org/wiki/Installwatch#Functionality

http://asic-linux.com.mx/~izto/checkinstall/installwatch.html


1
2017-12-27 12:58



"CheckInstall" demek istiyorsun? Makefiles olmadığı zaman işe yarıyor mu? Benim durumumda (Eclim) kurulum bir kavanoz montajcısıyla yapıldı.
Hayır, CheckInstall'ın bir parçası olan Installwatch'u kastediyorum. - qerub
"Installwatch, dinamik olarak bağlanmış her ELF programı ile çalışır, dosya sistemi değişikliklerine neden olan sistem çağrılarını geçersiz kılar. Sistem çağrılarının bazıları açık (2) ve bağlantıyı keser (2)." JVM ile iyi çalışmalı. - qerub
Evet ama görünüşe göre yükleme saati yalnız artık uzun bir süredir korunmuyor. Ayrıca, InstallWatch kayıtlarını geri almak için CheckInstall'a ihtiyacınız var. Hala bir bakmam gerek. Teşekkürler.


kullanım LD_PRELOAD kesişen bir kütüphane yüklemek open kütüphane işlevi ve dosyayı açmadan önce yol adını değiştirir / çıktıları kaydeder / yedekler.

İçin kaynak koduna bakın. strace.


1
2017-12-28 04:20



Evet, ama birisi dediği gibi, eğer program statik olarak bağlantılıysa? - Ywen


Yükleyici bazı ambalajlama tesisini kullanıyorsa (ör. .deb Debian / Ubuntu / ... için paketler, .rpm RedHat / CentOS / ... için paketler) daha sonra, paket yükleyici, yükleme ve kaldırma işlemlerinde ne yapılması gerektiğini bilmelidir. Ve inanıyorum inanıyorum mevcut paketleme sistemlerini kullan, kendi icatını değil. (Linux geleneksel olarak Windows gibi kurulumcuları yoktur).

Bir işlem tarafından yapılan dosya değişikliklerini gerçekten izlemek istiyorsanız, straceveya ltrace sistem çağrılarını yakalamak için Sen de yapabilirsin Inotify ve ilgili tesisler.

Ama ben bir şey bilmiyorum catch-modifs & revert-modifs nasıl istersen.

Uygulamanız için bir yükleyici yapmamanızı öneririz, ancak paket yöneticisini kullanmak .deb (Ve / veya .rpm) uygulamanız için paketler. Bağımlılık sorunlarını kendi yükleyicinizden daha iyi idare edecekler.


0
2017-12-27 11:51



Evet, her zaman apt-get kullanıyorum. Kendi uygulamalarımdan bahsetmiyordum, ama paketlenmemiş olanlar hakkında. Elimde her zaman bir şey yok.
Sözünü ettiğiniz paketlenmemiş uygulamalar hangi dosyaları kullandıklarını ve nasıl yüklenmeleri gerektiğini belgelemelidir.
^^ Ya yapmazlarsa? Onları kendim paketleyebileceğimi biliyordum, ama değil basit. Ayrıca bu tür komutlar, yaptığınız bazı sistem komut dosyalarını daha güvenli bir şekilde test etmek için yararlı olabilir.
Senin dileğin ilginç olduğunu kabul ediyorum, ama kolay uygulanabilir olup olmadığından emin değilim ....


İstediğinizi elde etmenin kolay yolu: "güvenilmeyen" uygulamayı yepyeni bir sanal makine örneğine (VMWare iş istasyonu, Oracle VirtualBox, vb.) Kurun.

Artık uygulamayı istemediğinize karar verdiğinizde, sanal makineyi silin.

Diğer alternatifleriniz - dosya erişim sistemlerini yakalamak - büyük ihtimalle hataya açık ve eksik olacaktır. Çalışmak için dinamik bağlantı gerektiren herhangi bir çözüme özellikle dikkat edin (Installwatch'ın yaptığı gibi). Bir yükleyici, yasal olarak doğrudan sistem çağrılarını kullanabilir veya statik olarak bağlantılı olabilir.


0
2017-12-28 03:34



Vay, sanal makine kesinlikle overkill ... Sadece bazı yapılandırma dosyalarını uygun bir şekilde kaydetmem ve yedeklemem gerekiyor. - Ywen