it-swarm.com.de

Debian: Alle vom Benutzer installierten Pakete auflisten?

Für einen Cybersicherheitswettbewerb, an dem ich teilnehme, bekomme ich eine virtuelle Debian-Maschine mit vielen installierten Paketen und werde gebeten, fremde oder bösartige Pakete zu bereinigen.

In der Vergangenheit habe ich dpkg -l | grep [searchterm] und eine Liste gängiger Pakete verwendet, um diese Aufgabe auszuführen. Dies ist jedoch äußerst ineffizient und zeitaufwendig.

Gibt es eine Möglichkeit, die Liste der auf einem System installierten Pakete zu durchsuchen, für die Prozesse von einem Benutzer installiert wurden und die keine "Standard" -Pakete des Systems sind, um meine Aufgabe zu beschleunigen?

6
Thorne Garvin

Dieser Befehl kann Ihre Arbeit verkürzen:

apt-mark showmanual

Es soll zeigen, welche Pakete "manuell" installiert wurden. Es ist jedoch nicht 100% zuverlässig, da viele automatisch installierte Pakete als manuell installiert gekennzeichnet sind (aus Gründen, die hier nicht beschrieben werden können).

Sie können auch (sofern zulässig) Sicherheitstools wie clamav und/oder rkhunter ausführen, um Ihren Computer auf schädliche Programme zu überprüfen.

7
Jamil Said

Unten finden Sie eine Zeile aus einem "Health" -Skript, das ich jeden Abend auf meinem Desktop ausführe. Neben dem Sammeln von Informationen über Sensoren, Netzwerknutzung, Festplattentemperatur usw. wird auch eine Liste der von mir manuell installierten Software über die Befehlszeile angezeigt.

Ich arbeite derzeit mit Kubuntu 14.04.5 (Trusty) und kenne die Details der Unterschiede zwischen Ubuntu und Debians Paketverwaltung nicht, aber hoffentlich funktioniert dies für Sie genauso gut wie für mich.

( zcat $( ls -tr /var/log/apt/history.log*.gz ) ; cat /var/log/apt/history.log ) | egrep '^(Start-Date:|Commandline:)' | grep -v aptdaemon | egrep '^Commandline:' | egrep 'install' 1>>installed_packages.txt
5
Benny Hill

Dies berücksichtigt auch Pakete, die mit aptitude installiert wurden (nicht nur apt install oder apt-get install, wie die Antwort von Benny Hill, auf der ich basiert habe):

( ( zcat $( ls -tr /var/log/apt/history.log*.gz ) ; cat /var/log/apt/history.log ) | egrep '^(Start-Date:|Commandline:)' | grep -v aptdaemon ; ( zcat $( ls -tr /var/log/aptitude.*.gz ) ; cat /var/log/aptitude ) ) | egrep '^Commandline:.*install|^\[INSTALL\]' | sed 's#Commandline: ##' | awk '/INSTALL/ { print $2 }; !/INSTALL/ { print $0 }; ' 1>installed_packages.txt

Beispielausgabe (die letzte Zeile stammt aus Aptitude-Protokollen):

apt-get install nodejs
apt install tidy
mc:AMD64
3
tomasz

Alle Pakete

Fast der gesamte Code, den ich für diese Frage gefunden habe, verwendete eine Suche aus dem Verlaufsprotokoll:

$ cat /var/log/apt/history.log | grep 'apt-get install '

oder listete alle auf dem Computer installierten Debian-Pakete auf:

$ dpkg --get-selections

Manuell installiert

Ich fand die obigen Antworten unzureichend , da mein Verlaufsprotokoll unvollständig war und ich nicht die Arbeit machen wollte, integrierte Pakete durch manuell installierte Pakete zu trennen. Diese Lösung hat jedoch den Trick ausgeführt, nur manuell initiierte installierte Pakete anzuzeigen. Dieser verwendet das Protokoll: /var/log/dpkg.log und sollte als Bash-Skript ausgeführt werden.

#!/usr/bin/env bash
parse_dpkg_log() {
  {
    for FN in `ls -1 /var/log/dpkg.log*` ; do
      CMD="cat"
      [ ${FN##*.} == "gz" ] && CMD="zcat" 
      $CMD $FN | egrep "[0-9] install" | awk '{print $4}' \
        | awk -F":" '{print $1}'
    done
  } | sort | uniq
}

list_installed=$(parse_dpkg_log)
list_manual=$(apt-mark showmanual | sort)
comm -12 <(echo "$list_installed") <(echo "$list_manual")

Ich habe den Code hier gefunden: https://Gist.github.com/UniIsland/8878469

Eine ältere Frage, aber eine Lösung, die ich gefunden hatte, nachdem ich diese und einige andere Fragen für eine etwas andere Aufgabe gefunden hatte. Es wird versucht, eine Liste der installierten Pakete für Systemwiederherstellungen auf dem neuesten Stand zu halten. Ich fand die folgenden Arbeiten ziemlich gut:

comm -12 <(apt list --installed 2> /dev/null | cut -d '/' -f 1 | sort) <(history | grep -e "apt\(-get\)\? install" | grep -v -e "grep -e" | grep -v "./" | cut -d ' ' -f10 | sort)

Dies nimmt die Liste aller installierten Pakete und vergleicht sie mit dem Verlauf der installierten Pakete.

Ich gehe davon aus, dass Pakete nicht von bösen Schauspielern installiert werden, die versuchen, ihre Spuren zu verbergen. Auch eine etwas unangenehme Befehlsanpassungsliste in einem Skript, aber es scheint für den Moment zu funktionieren.

0
Wil Selwood

Ich weiß nicht, ob es möglich ist, zwischen Benutzerinstallation und Standardpaketinstallation zu unterscheiden, da die einzige Möglichkeit zum Installieren des Pakets darin besteht, über ROOT-Berechtigungen zu verfügen. Sie können jedoch alle Pakete und ihren Status in einer Datei installieren, indem Sie diesen Befehl ausführen

dpkg --get-selections > installed_packages.txt
0
Hamza Jabbour

Sie können sich auch die Datei/var/lib/apt/extended_states ansehen.

cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'

Dies ist nützlich, wenn Sie wissen möchten, was auf einer alten Partition installiert wurde.

0
Laurent Lyaudet