Dpkg có thể xác minh các tập tin từ một gói được cài đặt không?


30

Với rpm -qV openssh-servertôi sẽ nhận được một danh sách các tập tin đã thay đổi so với mặc định.

~$ rpm -qV openssh-server
S.?....T.  c /etc/ssh/sshd_config
~$ 

dpkgUbuntu có thể làm như vậy không?

Câu trả lời:


21

Tôi không nghĩ vậy, trong tổng kiểm tra md5 của Ubuntu chỉ được lưu trữ cho một số tệp nhất định. Đối với bất kỳ gói nào, danh sách các tệp có tổng kiểm tra có thể được tìm thấy trong

/var/lib/dpkg/info/<package>.md5sums

ví dụ

/var/lib/dpkg/info/openssh-server.md5sums

Chúng thường không chứa một danh sách đầy đủ các tệp đã được cài đặt bởi một gói, ví dụ: openssh-server.md5sums

bb5096cf79a43b479a179c770eae86d8  usr/lib/openssh/sftp-server
42da5b1c2de18ec8ef4f20079a601f28  usr/sbin/sshd
8c5592e0d522fa0f8f55f3c104479ef5  usr/share/lintian/overrides/openssh-server
cfcb67f58bcd1edcaa5a770863e49304  usr/share/man/man5/sshd_config.5.gz
71a51cbb514da3044b277e05a3ceaf0b  usr/share/man/man8/sshd.8.gz
222d4da61fcb3c65b4e6e83944752f20  usr/share/man/man8/sftp-server.8.gz

Bạn có thể sử dụng lệnh debsums (sudo apt-get install debsums) để kiểm tra các tệp có chữ ký md5

debsums openssh-server
/usr/lib/openssh/sftp-server                                                  OK
/usr/sbin/sshd                                                                OK
/usr/share/lintian/overrides/openssh-server                                   OK
/usr/share/man/man5/sshd_config.5.gz                                          OK
/usr/share/man/man8/sshd.8.gz                                                 OK
/usr/share/man/man8/sftp-server.8.gz                                          OK

Md5sums bỏ qua các tệp cấu hình (những tệp trong / etc) vì bạn sẽ thay đổi chúng.
psusi

Có, ví dụ: tập tin / etc / ssh / sshd_config được tạo bởi một tập lệnh. Trong CentOS mặc dù các tệp cấu hình mặc định không có md5sums.
user9517 hỗ trợ GoFundMonica

5
Tổng kiểm tra md5 cho các tệp cấu hình được lưu trữ trong / var / lib / dpkg / status . "Dpkg -V" sẽ xác minh tổng kiểm tra của tất cả các tệp trên hệ thống bao gồm các tệp conf.
Bain

25

Như trong dpkg / 1.17.2, nó thực hiện --verifytùy chọn, theo báo cáo lỗi debian này .

Lưu ý đây là một thay đổi tương đối mới đối với dpkg. Date: Thu, 05 Dec 2013 04:56:31 +0100dòng trong gói dpkg v1.17.2 cho thấy điều này.

Dưới đây là một mô tả ngắn gọn về --verifyhành động được trích dẫn từ trang man của dpkg.

   -V, --verify [package-name...]
          Verifies  the integrity of package-name or all packages if omit‐
          ted, by comparing information from the installed paths with  the
          database metadata.

          The output format is selectable with the --verify-format option,
          which by default uses the rpm format, but that might  change  in
          the  future,  and  as  such programs parsing this command output
          should be explicit about the format they expect.

Vì vậy, bạn có thể chỉ cần sử dụng cú pháp tương tự như yumđể thực hiện xác minh và nhận kết quả ở định dạng vòng / phút . Ví dụ:

dpkg --verify openssh-server

hoặc chỉ sử dụng dpkg --verifyđể xác minh mọi gói đơn được cài đặt trên hệ thống của bạn.


PS

Chạy, nói dpkg --verify bash, trên máy của tôi đã cho tôi một cái gì đó như thế này. (Tôi đang chạy dpkg / 1.17.5)

??5?????? c /etc/bash.bashrc
??5?????? c /etc/skel/.bashrc

Có vẻ như các gói .deb chỉ chứa siêu dữ liệu md5sums để xác minh.


những dòng này có nghĩa là gì? ??5?????? c...
rubo77

@ rubo77 Xem ftp.rpm.org/max-rpm/s1-rpm-verify-output.html để biết định dạng mật mã.
pallxk

OK, ??5??????có nghĩa là: MD5 Checksum khác và c = "đó là tệp cấu hình"
rubo77

Nếu bạn chỉ muốn cảnh báo về các gói đã sửa đổi, (không phải tệp cấu hình đã sửa đổi) hãy sử dụngsudo dpkg -V | grep -v '??5?????? c'
rubo77

4

Có công cụ gỡ lỗi bạn có thể kiểm tra.

# apt-cache search debsums
debsums - tool for verification of installed package files against MD5 checksums

2

Thông thường tôi có một danh sách các tập tin mà tôi muốn xác minh.
Vì vậy, đây là một hàm bash đơn giản thực hiện nhiều hơn hoặc ít hơn những gì bạn muốn:

dpkg-verify() {
    exitcode=0
    for file in $*; do
        pkg=`dpkg -S "$file" | cut -d: -f 1`
        hashfile="/var/lib/dpkg/info/$pkg.md5sums"
        if [ -s "$hashfile" ]; then
            rfile=`echo "$file" | cut -d/ -f 2-`
            phash=`grep -E "$rfile\$" "$hashfile" | cut -d\  -f 1`
            hash=`md5sum "$file" | cut -d\  -f 1`
            if [ "$hash" = "$phash" ]; then
                echo "$file: ok"
            else
                echo "$file: CHANGED"
                exitcode=1
            fi
        else
            echo "$file: UNKNOWN"
            exitcode=1
        fi
    done
    return $exitcode
}

Sử dụng như thế này:

dpkg-verify /bin/ls /usr/bin/ld

Đầu ra trên môi trường của tôi:

/bin/ls: ok
/usr/bin/ld: UNKNOWN

Tất nhiên, khá đơn giản để viết một bí danh / tập lệnh tương tự để kiểm tra các tệp từ một gói cụ thể.



2

Tôi sử dụng lệnh này để kiểm tra tất cả các gói:
dpkg -l | awk {'print $2'} | xargs | debsums | grep -v 'OK'

Bạn nên cài đặt các gói debsumbs, gawk và findutils.


Tôi thêm một số lỗi (mặc dù là root):debsums: can't open fwupd file /var/lib/polkit-1/localauthority/10-vendor.d/fwupd.pkla (Permission denied) debsums: can't open geoclue-2.0 file /var/lib/polkit-1/localauthority/10-vendor.d/geoclue-2.0.pkla (Permission denied)
rubo77
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.