2011. 8. 6. 05:46

♧ 시스템에 설치되어 있지만 정상적으로 동작하지 않거나 실행조차 되지 않는

바이너리 파일이나 패키지를 만나는 경우. 불안정한 네트워크나 전력 환경 등의

여러 가지 원인으로 인해 패키지가 훼손될 수 있다.

또는 악의적인 의도로 조작한 버전으로 피해를 입힐 목적으로 교체하려고 노력할 때

패키지 속에 포함된 정보와 실제 파일시스템에 존재하는 파일들을 검사해볼 필요가 있다.

 

debsums 프로그램은 /var/lib/dpkg/info 디렉토리에 있는 md5sum 파일을 바탕으로

모든 설치된 패키지의 MD5 검사를 수행할 수 잇는 데비안 기반의 시스템 유틸리티이다.

 

▷ 설치 : $ sudo aptitude install debsums

 

▶ debsums의 일반적 옵션

debsums 명령

내 용

debsums -a

모든 파일들을 검사한다(기본적인 설정파일들을 포함)

debsums -e

패키지 설정 파일들만 검사.

debsums -c

변경된 파일 목록만 표준출력을 통해 보여준다.

debsums -l

md5sum 정보를 가지고 있지 않은 파일들을 보여준다.

debsums -s

에러가 발생한 목록만 보여준다.

debsums <package names>

주어진 패키지에 대한 검사를 수행.

 

 

▷ 별다른 옵션 없이 debsums 명령어만 실행할 경우. (시스템에 있는 모든 파일 검사)

$ debsums

/usr/bin/acpi

/usr/share/man/man1/acpi.1.gz

/usr/share/doc/acpi/AUTHORS

…[중략]…

debsums: no md5sums for bsdutils

debsums: no md5sums for bzip2

debsums: no md5sums for cdrecord

…[중략]…

/usr/share/locale-langpack/en_AU/LC_MESSAGES/adduser.mo

/usr/share/locale-langpack/en_AU/LC_MESSAGES/alsa-utils.mo

…[중략]…

 

OK

OK

OK

 

 

 

 

 

REPLACED

OK

☞ 성공하면 오른쪽에 OK 상태 표시.

md5sum 정보가 일치하지 않을 경우 : FAILED 상태 표시.

다른 패키지 파일에 대체 되었을 경우: REPLACE 상태 표시.

 

-a옵션 : 각각의 패키지에서 배포한 설정파일이 변경되었는지 여부 검사

$ debsums -a

/usr/bin/acpi

/usr/share/man/man1/acpi.1.gz

/usr/share/doc/acpi/AUTHORS

…[중략]…

 

OK

OK

OK

 

-e옵션 : 다른 것은 모두 무시하고 오직 설정파일만 검사

$ debsums -e

…[중략]…

/etc/X11/Xresources/x11-common

/etc/X11/Xsession

/etc/X11/rgb.txt

…[중략]…

 

 

OK

FAILED

OK

☞ 의도하지 않았거나 부주의하게 수정된 설정파일은 없는지 검사할 수 있는 좋은 방법.

 

-c옵션 : 시스템에서 변경된 파일만 표준 출력을 통해 보여줌

$ debsums -c

debsums: no md5sums for at

debsums: no md5sums for base-files

debsums: no md5sums for bc

…[중략]…

☞ 위의 명령 실행결과에서 파일들에 대한 md5sum 정보가 없다는 것을 알 수 있다.

 

-l옵션 : md5sum 정보가 없는 파일 목록을 확인

$ debsums -l

binutils

e2fslibs

g++

gcc-4.5-base

…[중략]…

 

-s옵션 : 에러가 발생할 경우에만 출력

$ debsums -s

debsums: no md5sums for at

debsums: no md5sums for base-files

debsums: no md5sums for bc

…[중략]…

☞ 에러가 발생하지 않는다면 별다른 출력 없이 조용히 실행.

 

▷ 해당 패키지에 한해서 검사

$ debsums coreutils

/bin/cat

/bin/chgrp

/bin/chmod

…[중략]…

 

OK

OK

OK

☞ 해당 패키지가 가진 md5sum 파일에 기술된 파일 목록에 대해서만 검사를 수행.

이 파일은 /var/lib/dpkg/info 디렉토리에서 찾을 수 있다.

☞ 만약 패키지가 md5sum 파일을 가지고 있지 않다면 에러 발생.

$ debsums binutils

debsums: no md5sums for binutils

 

 

[ binutils 패키지에서 누락된 md5sum 데이터들을 생성&체크 ]

md5sum 데이터들을 생성(dpkg, md5sum과 약간의 쉘 프로그래밍 조합 활용)

$ for file in `dpkg -L binutils | grep ^/`; do

> test -f "$file" && md5sum "$file";

> done > binutils.md5sums

추후 md5sum 검사가 필요할 때에 md5sum -c 옵션과 해당 데이터베이스 파일명을 지정.

$ md5sum -c ./binutils.md5sums

/usr/share/man/man1/ar.1.gz: 성공

/usr/share/man/man1/as.1.gz: 성공

/usr/share/man/man1/elfedit.1.gz: 성공

…[중략]…

 

debsums에서 binutils.md5sums 파일을 사용하기 위해서는 문제가 발생할 수 있는 부분 즉,

아래와 같이 '/' 문자로 시작되는 파일명부분을, sed를 이용하여 삭제 할 수 있다.

f5fe354fe982a10cf584d5cc175b0a29 /usr/share/man/man1/ar.1.gz

sed를 사용하여 문제가 되는 '/' 부분을 제거후 확인.

$ sed -e 's# /# #g' binutils.md5sums > binutils.debsums

$ cat binutils.debsums

f5fe354fe982a10cf584d5cc175b0a29 usr/share/man/man1/ar.1.gz

이렇게 적절히 수정된 파일을 /var/lib/dpkg/info 디렉토리에 복사해주면, debsums 명령어를 사용하게 됨.

$ sudo mv binutils.debsums /var/lib/dpkg/info/binutils.md5sums

$ debsums binutils

/usr/share/man/man1/ar.1.gz

/usr/share/man/man1/as.1.gz

/usr/share/man/man1/elfedit.1.gz

…[중략]…

 

 

OK

OK

OK

 

Posted by devanix