Frage Kann dpkg Dateien von einem installierten Paket verifizieren?


Mit rpm -qV openssh-server Ich werde eine Liste von Dateien erhalten, die sich im Vergleich zum Standard geändert haben.

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

Können dpkg auf Ubuntu das gleiche tun?


25
2017-10-18 11:48


Ursprung




Antworten:


Ich denke nicht, in Ubuntu werden md5 Prüfsummen nur für bestimmte Dateien gespeichert. Für jedes gegebene Paket kann die Liste der Dateien mit Prüfsummen in gefunden werden

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

z.B

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

Diese enthalten im Allgemeinen keine vollständige Liste der Dateien, die von einem Paket z.B. 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

Sie können den Befehl debsums (sudo apt-get install debsums) verwenden, um die Dateien mit MD5-Signaturen zu überprüfen

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

20
2017-10-18 13:17



Die md5sums lassen keine Konfigurationsdateien (Einsen in / etc) übrig, da erwartet wird, dass sie geändert werden. - psusi
Ja, die Datei / etc / ssh / sshd_config zum Beispiel wird von einem Skript generiert. Unter CentOS haben die Standardkonfigurationsdateien jedoch md5sums. - Iain
Die MD5-Prüfsummen für Konfigurationsdateien sind in gespeichert / var / lib / dpkg / status. "dpkg -V" überprüft die Prüfsummen aller Dateien auf dem System, einschließlich der conf-Dateien. - bain


Wie in dpkg / 1.17.2 implementiert es --verify Option, entsprechend Debian-Fehlerbericht.

Beachten Sie, dass dies eine relativ neue Änderung von dpkg ist. Date: Thu, 05 Dec 2013 04:56:31 +0100 Zeile im Paket dpkg v1.17.2 zeigt dies an.

Hier ist eine kurze Beschreibung von --verify Aktion zitiert von der Manpage von 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.

Sie können also eine ähnliche Syntax wie in verwenden yum um Überprüfungen durchzuführen und Ergebnisse zu erzielen RPM-Format. Zum Beispiel:

dpkg --verify openssh-server

oder einfach benutzen dpkg --verify um jedes einzelne auf Ihrem System installierte Paket zu überprüfen.


P.S.

Laufen, sag dpkg --verify bash, auf meiner Maschine hat mir so etwas gegeben. (Ich führe dpkg / 1.17.5)

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

Es scheint, dass .deb-Pakete nur md5sums-Metadaten zur Verifizierung enthalten.


21
2017-09-10 01:30





Es gibt Tool Debsums, die Sie auschecken können.

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

4
2017-10-18 13:41





Normalerweise habe ich eine Liste von Dateien, die ich überprüfen möchte.
Also hier ist eine einfache Bash-Funktion, die mehr oder weniger was Sie wollen:

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
}

Verwenden Sie so:

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

Ausgabe in meiner Umgebung:

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

Natürlich sollte es ziemlich einfach sein, ein ähnliches Alias ​​/ Skript zu schreiben, um die Dateien von einem bestimmten Paket zu überprüfen.


2
2018-04-08 16:15



Offen für Verbesserungen bei https://gist.github.com/Magentron/e9a85ffebd07bdf29047218fc68e31f6 - Magentron


Ich benutze diesen Befehl, um alle Pakete zu überprüfen:
dpkg -l | awk {'print $2'} | xargs | debsums | grep -v 'OK'

Sie sollten die Pakete debsmuls, gawk und findutils installieren.


1
2018-01-29 09:46