Pour un concours de cyber-sécurité auquel je participe, on me donne une machine virtuelle Debian avec de nombreux paquets installés et invitée à nettoyer les paquets superflus ou malveillants.
Dans le passé, j’utilisais dpkg -l | grep [searchterm]
et une liste de packages courants pour effectuer cette tâche. Cependant, cela est extrêmement inefficace et prend du temps.
Pour accélérer ma tâche, existe-t-il un moyen de parcourir la liste des packages installés sur un système pour lesquels des processus ont été installés par un utilisateur et ne sont pas des packages "par défaut" du système?
Cette commande peut raccourcir votre travail:
apt-mark showmanual
Il est censé montrer quels paquets ont été installés "manuellement". Cependant, il n’est pas fiable à 100%, car de nombreux packages installés automatiquement sont signalés comme installés manuellement (pour des raisons trop longues à décrire ici).
Vous pouvez également (si cela est autorisé) exécuter des outils de sécurité tels que clamav
et/ou rkhunter
pour analyser votre ordinateur à la recherche de programmes malveillants.
Vous trouverez ci-dessous une ligne d'un script "santé" que je lance tous les soirs sur mon bureau. Outre la collecte d'informations à partir de capteurs, d'utilisation du réseau, de la température du disque dur, etc., la liste de tous les logiciels que j'ai installés manuellement est également affichée à partir de la ligne de commande.
J'utilise actuellement Kubuntu 14.04.5 (Trusty) et je ne connais pas le détail des différences entre Ubuntu et la gestion des paquets de Debian, mais j'espère que cela fonctionnera pour vous aussi bien que pour moi.
( 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
Cela prend également en compte les paquets installés avec aptitude
(pas seulement apt install
ou apt-get install
, comme la réponse de Benny Hill sur laquelle je me suis fondé):
( ( 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
Exemple de sortie (la dernière ligne provient des journaux d'aptitude):
apt-get install nodejs
apt install tidy
mc:AMD64
La plupart des codes que j'ai trouvés pour cette question utilisaient une recherche dans l'historique:
$ cat /var/log/apt/history.log | grep 'apt-get install '
ou répertorié tous les paquets Debian installés sur la machine:
$ dpkg --get-selections
J'ai trouvé que les réponses ci-dessus étaient inadéquates car mon journal d'historique était incomplet et que je ne voulais pas faire le travail pour séparer les paquets intégrés avec ceux installés manuellement. Cependant, cette solution a fait l’astuce d’afficher uniquement les packages installés par manuellement. Celui-ci utilise le log: /var/log/dpkg.log
, et il devrait être exécuté en tant que script bash.
#!/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")
J'ai trouvé le code ici: https://Gist.github.com/UniIsland/8878469
Une question plus ancienne, mais une solution que j'ai trouvée après avoir trouvé ceci et quelques autres questions pour une tâche légèrement différente. Essayer de garder à jour une liste des paquetages installés pour la reconstruction du système. J'ai trouvé les œuvres suivantes plutôt bien:
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)
Ceci prend la liste de tous les packages installés et se compare à l'historique des packages en cours d'installation.
Je suppose que les paquetages ne sont pas installés par des acteurs maléfiques qui cherchent à cacher leurs traces. Également une commande légèrement désagréable dans un script, mais cela semble fonctionner pour le moment.
Je ne sais pas s'il est possible de distinguer entre l'installation de l'utilisateur et l'installation du paquet par défaut, car la seule façon d'installer le paquet est d'avoir ROOT
privillages. mais vous obtenez tous les paquets installés et leur statut dans un fichier en exécutant cette commande
dpkg --get-selections > installed_packages.txt
Vous pouvez également consulter le fichier/var/lib/apt/extended_states.
cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'
Ceci est utile si vous voulez savoir ce qui a été installé sur une ancienne partition.