Dpkg può verificare i file da un pacchetto installato?


31

Con rpm -qV openssh-serverriceverò un elenco di file che sono stati modificati rispetto ai valori predefiniti.

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

dpkgSu Ubuntu può fare lo stesso?

Risposte:


21

Non credo, in Ubuntu i checksum md5 sono memorizzati solo per alcuni file. Per ciascun pacchetto è disponibile l'elenco di file con checksum

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

per esempio

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

Questi generalmente non contengono un elenco completo dei file che sono stati installati da un pacchetto, ad esempio 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

Puoi usare il comando debsums (sudo apt-get install debsums) per controllare i file che hanno firme 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

Gli md5sums omettono i file di configurazione (quelli in / etc) perché ci si aspetta che li modifichi.
psusi,

Sì, il file / etc / ssh / sshd_config, ad esempio, è generato da uno script. In CentOS sebbene i file di configurazione predefiniti abbiano md5sums.
user9517 supporta GoFundMonica il

5
I checksum md5 per i file di configurazione sono memorizzati in / var / lib / dpkg / status . "dpkg -V" verificherà i checksum di tutti i file sul sistema inclusi i file conf.
bain

25

Come in dpkg / 1.17.2, implementa l' --verifyopzione, secondo questo rapporto sui bug debian .

Nota che si tratta di una modifica relativamente nuova a dpkg. Date: Thu, 05 Dec 2013 04:56:31 +0100la riga nel pacchetto dpkg v1.17.2 mostra questo.

Ecco una breve descrizione --verifydell'azione citata dalla pagina man di 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.

Quindi puoi semplicemente usare una sintassi simile a quella in yumper eseguire le verifiche e ottenere risultati in formato rpm . Per esempio:

dpkg --verify openssh-server

oppure utilizza semplicemente dpkg --verifyper verificare ogni singolo pacchetto installato sul tuo sistema.


PS

Correre, diciamo dpkg --verify bash, sulla mia macchina mi ha dato qualcosa del genere. (Sto eseguendo dpkg / 1.17.5)

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

Sembra che i pacchetti .deb contengano solo metadati md5sums per la verifica.


cosa significano queste righe? ??5?????? c...
rubo77,

@ rubo77 Vedi ftp.rpm.org/max-rpm/s1-rpm-verify-output.html per il formato criptico.
pallxk,

OK, quindi ??5??????significa: MD5 Checksum era diverso e c = "è un file di configurazione"
rubo77

Se vuoi solo avvisi di pacchetti modificati, (non file di configurazione modificati) usasudo dpkg -V | grep -v '??5?????? c'
rubo77

4

Ci sono detriti di strumenti che puoi controllare.

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

2

Normalmente ho un elenco di file che voglio verificare.
Quindi ecco una semplice funzione bash che fa più o meno quello che vuoi:

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
}

Usa così:

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

Uscita sul mio ambiente:

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

Ovviamente, dovrebbe essere abbastanza semplice scrivere un alias / script simile per controllare i file da un pacchetto specifico.



2

Uso questo comando per controllare tutti i pacchetti:
dpkg -l | awk {'print $2'} | xargs | debsums | grep -v 'OK'

Dovresti aver bisogno di installare i pacchetti debsumbs, gawk e findutils.


Aggiungo alcuni errori (anche se come 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.