Lacak, simpan, dan kembalikan modifikasi sistem file yang dibuat oleh sebuah program di Linux

9

Saya ingin dapat, ketika sebuah program seperti installer dijalankan, melacak daftar modifikasi yang dibuat untuk sistem file saya sehingga saya dapat mengembalikannya setelah itu.

EDIT: Ini menyangkut program yang tidak dikemas . Saya menggunakan apt-get sejauh yang saya bisa.

Idealnya saya ingin dapat melakukan sesuatu seperti:

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

Lalu:

(sudo) revert-modifs fsmodifs.patch

Apakah ada cara mudah untuk melakukan itu?

Ywen
sumber

Jawaban:

1

Mungkin cara termudah (?) Untuk melakukan ini adalah dengan mem-boot LiveUSB dengan "partisi data persisten." (Atau, untuk mereplikasi efeknya sendiri, di chroot jail: pasang layer rw di atas layer ro.) Ambil snapshot sistem file rw - yang seharusnya sangat tipis setelah boot baru - kemudian jalankan installer Anda. Setiap file yang diubah atau dibuat akan berada di partisi overlay "persistent data". Bahkan file yang dihapus akan muncul sebagai "dotfil ajaib."

BRPocock
sumber
Ini terlihat rumit ... Bukankah mungkin hanya untuk membuat partisi baru, me-mount RO yang lama dan me-mount yang baru di RW?
Ywen
Ya, Anda bisa melakukannya juga, dari mode single-user, mungkin. Lihatlah unionfs- pada dasarnya, sistem berkas RW menerima semua penulisan, tetapi sistem berkas RO masih terlihat di bawahnya. Jika file berubah, itu "bermigrasi" ke RW fs; jika itu dihapus, sebenarnya ada "magic dotfile" pada RW fs untuk "menutupi" itu. Menyiapkan unionfsbisa menjadi sedikit sensitif, itulah sebabnya saya menyarankan LiveUSB (itu bagian untuk Anda, dan Anda memiliki gambar sistem "bersih" untuk memulai)
BRPocock
2

Mungkin lihat tripwire? Tripwire lebih pasif dari pada contoh aktif Anda, tetapi tetap bisa bekerja untuk Anda.

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

Tripwire adalah sistem deteksi intrusi (IDS), yang, secara konstan dan otomatis, mengendalikan file dan laporan sistem penting Anda jika telah dihancurkan atau dimodifikasi oleh cracker (atau karena kesalahan). Ini memungkinkan administrator sistem untuk segera mengetahui apa yang dikompromikan dan memperbaikinya.

Corith Malin
sumber
1

Lihatlah Installwatch:

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

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

qerub
sumber
Maksud Anda "CheckInstall"? Apakah itu berfungsi ketika saya tidak memiliki makefiles? Dalam kasus saya (Eclim) instalasi dilakukan melalui installer jar.
Tidak, maksud saya Installwatch yang merupakan bagian dari CheckInstall.
qerub
"Installwatch bekerja dengan setiap program ELF yang terhubung secara dinamis, mengabaikan panggilan sistem yang menyebabkan perubahan sistem file. Beberapa panggilan sistem seperti itu terbuka (2) dan membatalkan tautan (2)." Harus bekerja dengan baik dengan JVM.
qerub
Ya tapi ternyata Installwatch saja sudah tidak dipelihara untuk waktu yang lama. Plus Anda perlu CheckInstall untuk dapat mengembalikan log InstallWatch. Aku masih harus melihatnya. Terima kasih.
1

Gunakan LD_PRELOADuntuk memuat pustaka yang memotong openfungsi pustaka dan mengubah pathname / mencatat output / membuat cadangan sebelum membuka file.

Lihatlah kode sumber untuk strace.

Ben Voigt
sumber
Ya, tetapi seperti kata seseorang, bagaimana jika program itu terhubung secara statis?
Ywen
0

Jika pemasang menggunakan beberapa fasilitas pengemasan (yaitu untuk .debpaket untuk Debian / Ubuntu / ..., .rpmpaket untuk RedHat / CentOS / ... dll) maka pemasang paket harus tahu apa yang harus dilakukan pada instalasi dan penghapusan. Dan saya percaya Anda harus menggunakan sistem pengemasan yang ada , bukan menciptakan sistem pengemasan Anda sendiri. (Linux secara konvensional tidak memiliki installer seperti halnya Windows).

Jika Anda benar-benar ingin mengikuti perubahan file yang dibuat oleh beberapa proses, Anda bisa menggunakan strace, atau ltraceuntuk menangkap panggilan sistem. Anda juga dapat memberitahukan dan fasilitas terkait.

Tapi saya tidak tahu tentang catch-modifs& revert-modifsseperti yang Anda inginkan.

Saya menyarankan untuk tidak membuat installer untuk aplikasi Anda, tetapi untuk menggunakan manajer paket, maka untuk menyediakan .deb(dan / atau .rpm) paket untuk aplikasi Anda. Mereka akan menangani masalah ketergantungan lebih baik daripada installer Anda sendiri.

Basile Starynkevitch
sumber
Ya, saya menggunakan apt-get sepanjang waktu. Saya tidak berbicara tentang aplikasi saya sendiri, tetapi tentang aplikasi yang tidak dikemas. Saya tidak selalu punya. Deb di tangan.
Aplikasi tanpa paket yang Anda sebutkan harus mendokumentasikan file apa yang mereka gunakan dan bagaimana mereka harus diinstal.
^^ Bagaimana jika mereka tidak melakukannya? Saya tahu saya bisa mengemasnya sendiri, tetapi tidak langsung . Ditambah perintah seperti itu dapat berguna untuk menguji dengan cara yang lebih aman beberapa skrip sistem yang Anda buat.
Saya setuju bahwa keinginan Anda menarik, tetapi saya tidak yakin apakah itu mudah dilaksanakan ....
0

Cara mudah untuk mencapai apa yang Anda inginkan: instal aplikasi "tidak tepercaya" dalam mesin virtual virtual baru (workstation VMWare, Oracle VirtualBox, dll.).

Ketika Anda memutuskan tidak lagi menginginkan aplikasi tersebut, hapus mesin virtualnya.

Alternatif Anda yang lain - menangkap syscalls akses file - cenderung rentan kesalahan dan tidak lengkap. Berhati-hatilah terhadap solusi apa pun yang membutuhkan penautan dinamis agar dapat berfungsi (seperti yang dilakukan Installwatch). Pemasang dapat secara sah menjalankan panggilan sistem langsung, atau dihubungkan secara statis.


sumber
Wow, mesin virtual pasti berlebihan ... Saya hanya perlu menyimpan dan membuat cadangan beberapa file konfigurasi dengan cara yang mudah.
Ywen