2011. 8. 7. 19:42

♧ 소프트웨어 패키지나 CD 또는 DVD 이미지와 같은 파일을 인터넷을 통해 공유 하고자 할 때,

SHA1SUM 또는 MD5SUM 파일이 함께 배포되는 경우가 많다.

이러한 파일은 다운로드 받은 파일이 원본 파일과 정확히 동일한 파일인지 확인하는데

사용되는 파일로써, 체크섬(checksum) 정보가 포함되어 있다.

 

MD5 (128 비트) 체크섬을 확인

SHA1 (160 비트) 체크섬을 확인

 

md5sum [ OPTION ]... [ FILE ]...

sha1sum [ OPTION ]... [ FILE ]...

[ 옵션 ]

-b, --binary

바이너리 모드로 읽기

-c, --check

파일에 (md5, sha1) 합계를 읽고 체크.

-t, --text

텍스트 모드로 읽기 (기본값)

체크섬을 검증 하는 경우의 옵션

--quiet

체크섬 검증이 성공한 메시지는 출력 안함

 

 

▶ md5sum, sha1sum 명령어를 사용해 파일의 체크섬을 생성.

$ touch devanix

$ md5sum devanix

d41d8cd98f00b204e9800998ecf8427e devanix

$ sha1sum devanix

da39a3ee5e6b4b0d3255bfef95601890afd80709 devanix

☞ 파일의 유효성을 검증하기 위해 md5sum 또는 sha1sum 정보 중 무엇을 선택할지는 전적으로 배포자의 결정.

 

Xubuntu 11.04 (Natty Narwhal) 배포판 사이트에서 MD5SUMS 파일 검증.

/* Xubuntu 11.04(Natty Narwhal) 다운 */

$ wget http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/xubuntu-11.04-desktop-i386.iso

--2011-08-07 18:57:05-- http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/xubuntu-11.04-desktop-i386.iso

Resolving cdimage.ubuntu.com... 91.189.92.164

접속 cdimage.ubuntu.com|91.189.92.164|:80... 접속됨.

HTTP request sent, awaiting response... 200 OK

Length: 722745344 (689M) [application/x-iso9660-image]

Saving to: `xubuntu-11.04-desktop-i386.iso'

 

100%[==========================================>] 722,745,344 6.70M/s in 2m 51s

2011-08-07 18:59:57 (4.03 MB/s) - `xubuntu-11.04-desktop-i386.iso' saved [722745344/722745344]

 

/* 해당 사이트 MD5SUMS 파일 다운 */

$ wget http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/MD5SUMS

--2011-08-07 19:03:00-- http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/MD5SUMS

Resolving cdimage.ubuntu.com... 91.189.92.174

접속 cdimage.ubuntu.com|91.189.92.174|:80... 접속됨.

HTTP request sent, awaiting response... 200 OK

Length: 266 [text/plain]

Saving to: `MD5SUMS'

 

100%[==========================================>] 266 --.-K/s in 0s

2011-08-07 19:03:01 (5.88 MB/s) - `MD5SUMS' saved [266/266]

 

/* 체크섬 파일(MD5SUMS) 내용 보기 */

$ cat MD5SUMS

ab4b5b18892afd8d4d3228fbc30061d9 *xubuntu-11.04-alternate-amd64.iso

d5b6d8595c44e9954ebc4f188cb9fb49 *xubuntu-11.04-alternate-i386.iso

f1b224166bea923042e53b0e9d5ff63f *xubuntu-11.04-desktop-amd64.iso

78719bfee11576729a62b4a241d40b19 *xubuntu-11.04-desktop-i386.iso

 

/* MD5SUMS 파일에 기록되어 있는 모든 파일을 한 번에 검증 */

$ md5sum -c MD5SUMS

md5sum: xubuntu-11.04-alternate-amd64.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-alternate-amd64.iso: 열기 또는 읽기 실패

md5sum: xubuntu-11.04-alternate-i386.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-alternate-i386.iso: 열기 또는 읽기 실패

md5sum: xubuntu-11.04-desktop-amd64.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-desktop-amd64.iso: 열기 또는 읽기 실패

xubuntu-11.04-desktop-i386.iso: 성공

md5sum: 경고: 3 중 4 개의 파일들을 읽을 수 없었음

 

/* 체크섬 파일에 있는 파일 목록 중 하나만을 검증 */

$ cat MD5SUMS | grep *desktop-i386* | md5sum -c

xubuntu-11.04-desktop-i386.iso: 성공

MD5SUMS 파일 대신 SHA1SUMS 파일을 가지고 있더라도, sha1sum 명령어와 동일

 

 

[ /etc 디렉토리의 모든 파일에 대한 체크섬 생성 & 검증 ]

♧ find 명령어와 md5sum 명령어를 함께 사용한다면 파일시스템의 어떠한 부분이라도 검증할 수 있다.

 

① /etc 디렉토리의 모든 파일에 대한 md5 체크섬 생성

$ sudo find /etc -type f -exec md5sum {} \; > /tmp/md5.list 2> /dev/null

128비트 체크섬이 기록된 /tmp/md5.list 파일 생성.

 

② 시간이 지난 뒤, 이들 중 어떤 것이 변경 되었는지 확인

$ sudo md5sum --quiet -c /tmp/md5.list

/etc/hosts.allow: 실패

md5sum: *경고*: 1588 중 1개가 서로 일치하지 않는 체크섬으로 계산됨match

☞ 결과에서 볼 수 있듯이, 하나의 파일(hosts.allow)만 변경 되었다.

☞ 필요 하다면 다음 단계로 변경된 파일을 조사하여 의도적인 것인지 살펴본다.

 

 

맨 페이지(manpage) 참조 : md5sum, sha1sum

Posted by devanix
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