Linux에서 프로그램에 의한 파일 시스템 수정 사항 추적, 저장 및 되돌리기


9

설치 프로그램과 같은 프로그램이 실행될 때 파일 시스템의 수정 사항 목록을 추적하여 나중에 되돌릴 수 있기를 원합니다.

편집 : 이것은 패키지되지 않은 프로그램과 관련이 있습니다. 가능한 한 apt-get을 사용합니다.

이상적으로 나는 다음과 같은 것을 할 수 있기를 원합니다.

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

그리고:

(sudo) revert-modifs fsmodifs.patch

편리한 방법이 있습니까?

답변:


1

이 작업을 수행하는 가장 쉬운 방법은 "영구적 인 데이터 파티션"으로 LiveUSB를 부팅하는 것입니다. 또는 chroot jail에서 효과를 직접 복제하려면 ro 레이어 위에 rw 레이어를 마운트하십시오. rw 파일 시스템의 스냅 샷을 새로 부팅 한 후 매우 얇아 야합니다. 그런 다음 설치 관리자를 실행하십시오. 파일이 변경되거나 생성되는 모든 파일은 rw "영구 데이터"오버레이 파티션에 있습니다. 제거 된 파일도 "마법의 도트 파일"로 나타납니다.


복잡해 보입니다 ... 새 파티션을 생성하고 기존 RO를 마운트 한 다음 RW의 새 RO를 마운트 할 수 없습니까?
Ywen

예, 단일 사용자 모드에서도 가능합니다. (가)에서 살펴 보자 unionfs기본적으로 RW 파일 시스템이 모든 쓰기를 허용하지만, RO 파일 시스템은 여전히 그 아래에 볼 수 있습니다 -. 파일이 변경되면 RW fs로 "이주"합니다. 삭제 된 경우 실제로 RW fs에“마스크”할“마법의 도트 파일”이 있습니다. 설정 unionfs이 약간 어려울 수 있으므로 LiveUSB를 제안한 이유입니다 (해당 부분을 수행하고 시작하기 위해 "깨끗한"시스템 이미지가 있음)
BRPocock

2

tripwire를 보시겠습니까? Tripwire는 실제 예제보다 수동적이지만 여전히 효과가 있습니다.

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

Tripwire는 침입 탐지 시스템 (IDS)으로, 지속적으로 자동으로 중요한 시스템 파일과 보고서가 크래커 (또는 실수)에 의해 파괴되거나 수정 된 경우 제어 상태를 유지합니다. 시스템 관리자는 손상된 내용을 즉시 파악하고 수정할 수 있습니다.


1

"CheckInstall"을 의미합니까? makefile이 없을 때 작동합니까? 필자의 경우 (Eclim) jar 설치 프로그램을 통해 설치했습니다.

아니요, CheckInstall의 일부인 Installwatch를 의미합니다.
qerub

"Installwatch는 동적으로 링크 된 모든 ELF 프로그램과 함께 작동하여 파일 시스템 변경을 유발하는 시스템 호출을 무시합니다. 이러한 시스템 호출 중 일부는 open (2) 및 unlink (2)입니다." JVM에서 제대로 작동합니다.
qerub

예. 그러나 Installwatch 만으로는 더 이상 오랫동안 유지되지 않았습니다. 또한 InstallWatch 로그를 되돌릴 수 있으려면 CheckInstall이 필요합니다. 나는 아직도 봐야한다. 감사.

1

라이브러리 기능 LD_PRELOAD을 가로 채고 open파일 이름을 열기 전에 경로 이름을 변경하고 출력을 기록하며 백업을 수행 하는 라이브러리를로드하는 데 사용 합니다.

의 소스 코드를 살펴보십시오 strace.


예, 그러나 누군가가 말했듯이 프로그램이 정적으로 링크되면 어떻게됩니까?
Ywen

0

설치 프로그램이 일부 패키징 기능 (예 : .debDebian / Ubuntu / ... .rpm용 패키지, RedHat / CentOS / ... 용 패키지)을 사용하는 경우 패키지 설치 프로그램은 설치 및 제거시 수행 할 작업을 알아야합니다. 그리고 나는 당신이 기존의 포장 시스템 을 사용해야한다고 생각합니다 . (일반적으로 Linux에는 Windows와 같은 설치 프로그램이 없습니다).

일부 프로세스에서 수행 한 파일 변경 사항을 실제로 따르려면을 사용 strace하거나 ltrace시스템 호출을 잡을 수 있습니다 . 당신은 또한 inotify 및 관련 시설을 할 수 있습니다.

그러나 나는 catch-modifs&를 모른다revert-modifs 당신이 원하는 .

난 당신의 응용 프로그램에 대한 설치를하지 것이 아니라, 따라서 제공하는 패키지 관리자를 사용하는 것이 좋습니다 않습니다 .deb(및 / 또는 .rpm응용 프로그램에 대한) 패키지를. 이들은 자신의 설치 관리자보다 종속성 문제를 더 잘 처리합니다.


예, 항상 apt-get을 사용합니다. 나는 내 자신의 응용 프로그램이 아니라 패키지되지 않은 응용 프로그램에 대해 이야기했습니다. 항상 .deb가있는 것은 아닙니다.

언급 한 패키지화되지 않은 응용 프로그램은 사용하는 파일과 설치 방법을 문서화해야합니다.

^^ 그렇지 않으면 어떻게 되나요? 직접 포장 할 수 있다는 것을 알았지 만 간단 하지는 않습니다 . 또한 이러한 명령은 일부 시스템 스크립트를보다 안전하게 테스트하는 데 유용 할 수 있습니다.

나는 당신의 소원이 흥미 롭다는 것을 동의하지만, 그것이 쉽게 구현 될 수 있는지 확실하지 않습니다 ....

0

원하는 것을 쉽게 달성 할 수있는 방법 : 새로운 가상 머신 인스턴스 (VMWare 워크 스테이션, Oracle VirtualBox 등)에 "신뢰할 수없는"애플리케이션을 설치하십시오.

더 이상 애플리케이션을 원하지 않으면 가상 머신을 삭제하십시오.

파일 액세스 시스템 콜을 잡는 다른 대안은 오류가 발생하기 쉽고 불완전 할 수 있습니다. Installwatch처럼 작동하려면 동적 연결이 필요한 솔루션에 특히주의하십시오. 설치 관리자는 합법적으로 직접 시스템 호출을 수행하거나 정적으로 링크 될 수 있습니다.


와우, 가상 머신은 확실히 과잉입니다 ... 단지 편리한 방식으로 일부 구성 파일을 저장하고 백업하면됩니다.
Ywen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.