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?
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.
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
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
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
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.
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
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.