web-dev-qa-db-fra.com

Debian: Liste de tous les paquets installés par l'utilisateur?

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?

6
Thorne Garvin

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.

7
Jamil Said

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
5
Benny Hill

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
3
tomasz

Tous les forfaits

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

Installé manuellement

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

1

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. 

0
Wil Selwood

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
0
Hamza Jabbour

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.

0
Laurent Lyaudet