对于我参与的网络安全竞赛,我给了一个安装了许多软件包的Debian虚拟机,并要求清理无关或恶意软件包.
在过去,我已经使用dpkg -l | grep [searchterm]了一个常用包列表来执行此任务.然而,这是非常低效和耗时的.
为了加快我的任务,有没有办法搜索系统上安装的软件包列表,这些软件包已经由用户安装了进程,而不是系统"默认"软件包?
Jam*_*aid 10
此命令可能会缩短您的工作时间:
apt-mark showmanual
Run Code Online (Sandbox Code Playgroud)
它应该显示"手动"安装了什么包.它不是100%可靠,因为许多自动安装的软件包被标记为手动安装(因为这里描述的原因太长).
您也可以(如果允许)运行安全工具,例如clamav和/或rkhunter扫描您的计算机以查找恶意程序.
下面是我每晚在桌面上运行的"健康"脚本中的一行.除了从传感器,网络使用,硬盘温度等收集信息之外,它还获得了我从命令行手动安装的所有软件的列表.
我目前正在运行Kubuntu 14.04.5(Trusty),我不知道Ubuntu和Debian的软件包管理之间有什么区别的细节,但希望这对你有用,对我来说也是如此.
( 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
Run Code Online (Sandbox Code Playgroud)
我为这个问题找到的大多数代码都使用了历史日志中的搜索:
$ cat /var/log/apt/history.log | grep 'apt-get install '
Run Code Online (Sandbox Code Playgroud)
或列出机器上安装的所有 Debian 软件包:
$ dpkg --get-selections
Run Code Online (Sandbox Code Playgroud)
我发现上述答案不够充分,因为我的历史日志不完整,而且我不想将内置包与手动安装的包分开。然而,这个解决方案做到了只显示手动启动的安装包的技巧。这个使用 log: /var/log/dpkg.log,它应该作为 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")
Run Code Online (Sandbox Code Playgroud)
我在这里找到了代码:https : //gist.github.com/UniIsland/8878469
| 归档时间: |
|
| 查看次数: |
11701 次 |
| 最近记录: |