发布于2025年12月5日12月5日 高级软件包工具(APT) 是在Kali 和其他基于Debian 的衍生产品上安装和管理程序、库、文档甚至内核本身的方式。 APT 通常工作得非常好,以至于许多用户除了搜索和安装程序以及(希望)定期更新系统之外,并没有特别关注它。 对于大多数标准用户来说,以这种方式使用APT 是完全正常的,但我们认为使用Kali Linux 的人不是标准用户(以一种好的方式),因此我们在这篇文章中致力于告诉您如何更好地使用APT 以及如何利用可用的广泛的软件包生态系统,同时保持您的Kali 系统稳定和快乐。 许多人会告诉您,您根本不应该依赖包管理器,相反,您应该从头开始编译所有内容,因为这样您会学到更多东西。虽然你确实会学到很多东西,尤其是在刚开始的时候,但当你可以花时间黑客攻击或学习新东西(最好两者兼而有之)时,手工构建所有东西很快就会变得乏味。 在这篇文章中,我们将向您展示如何安全地将额外的软件包存储库添加到Kali 安装中,如何升级和降级它们,以及如何确保所有这些存储库和谐相处。 APT 非常强大,在制定解决方案时会将所有来源的可用软件包作为一个整体进行评估。 向 Kali Linux 添加软件包源 如果你想让未来的自己幸福,你不应该直接编辑/etc/apt/sources.list。对于添加到系统中的每个新软件包存储库,请在/etc/apt/sources.list.d/下创建一个具有描述性名称(如debian-unstable.list)的新文件。通过保持原始的sources.list文件不变,如果Kali需要更新它,它不会在更新过程中打断你,询问你保留哪个版本的文件。 在这篇文章中,我们将添加Kali Bleeding-Edge 存储库以及Debian Unstable 和Experimental 存储库。 kali-bleeding-edge 存储库 kali-bleeding-edge 存储库包含许多非常流行且变化非常频繁(甚至每天)的工具。手动创建和测试更新的包是不切实际且耗时的,因此只要上游源发生更改,就会自动生成此存储库中的包。从积极的方面来看,这意味着您永远不会落后于上游项目超过24 小时,但从消极的方面来说,这些包没有经过测试,因此您需要意识到此存储库中的包可能会不时损坏。 您可以添加存储库并更新可用软件包的列表,如下所示: echo 'deb http://http.kali.org/kali kali-bleeding-edge main contrib non-free' /etc/apt/sources.list.d/bleeding-edge.list 易于更新 要从kali-bleeding-edge 安装软件包,您需要将存储库名称附加到软件包名称: 易于安装dnsrecon/kali-bleeding-edge 幸运的是,APT 可以随时轻松降级回特定软件包的kali-rolling 版本,因此无需担心kali-bleeding-edge 存储库中的软件包。如果您发现kali-bleeding-edge 中的某个包被破坏,您可以以相同的方式恢复到kali-rolling 版本: apt 安装dnsrecon/kali-rolling Debian 不稳定和实验存储库 Kali Linux 是Debian Testing 的衍生版本,它比Debian Stable 拥有更多最新的软件。对于更新的软件,可以使用Debian Unstable 发行版,它是Debian 的滚动开发版本,包含最新的软件包。当您在Debian 软件包中遇到错误时,Debian Unstable 存储库中可能有一个修复版本,因此最好将其添加到您的Kali 系统中。与kali-bleeding-edge 一样,Unstable 中的软件包有时可能会损坏。 Debian Experimental 是另一个包含正在开发的软件包的存储库。此存储库中的软件包非常最新,但也可能存在很多错误,比kali-bleeding-edge 或Debian Unstable 更严重。如果您明确请求,APT 只会安装此存储库中的软件包,并且如果出现问题,您可以随时降级: echo 'deb http://ftp.debian.org/debian stable main contrib non-free' /etc/apt/sources.list.d/debian.list echo 'deb http://deb.debian.org/debian 实验主' /etc/apt/sources.list.d/debian.list 易于更新 与kali-bleeding-edge 软件包一样,如果您想安装不稳定或实验性的软件包,请将存储库名称附加到软件包名称的末尾,如下所示: root@kali:~# apt install socat/实验性netperf/不稳定 正在阅读包裹清单.完成 构建依赖树 读取状态信息.完成 为“socat”选择版本“2.0.0~beta9-1”(Debian:experimental [amd64]) 为“netperf”选择版本“2.6.0-2.1”(kali-rolling、Debian:unstable [amd64]) 将安装以下新软件包: 网络性能 以下软件包将被升级: 索卡特 1 已升级,1 已新安装,0 已删除,0 未升级。 需要获取909 kB 的档案。 此操作后,将使用1,127 kB 的额外磁盘空间。 Get:1 http://kali.mirror.globo.tech/kali kali-rolling/非自由amd64 netperf amd64 2.6.0-2.1 [544 kB] Get:2 http://deb.debian.org/debianexperimental/main amd64 socat amd64 2.0.0~beta9-1 [365 kB] 1 秒内获取909 kB (555 kB/s) 阅读变更日志.完成 apt-listchanges: 为kali 发送root: apt-listchanges: 新闻 选择之前未选择的包netperf。 (正在读取数据库.当前安装的287650 个文件和目录。) 准备解压./netperf_2.6.0-2.1_amd64.deb . 解压netperf (2.6.0-2.1) . 准备解压./socat_2.0.0~beta9-1_amd64.deb . 在(1.7.3.2-1) 上解压socat (2.0.0~beta9-1) . 设置socat (2.0.0~beta9-1) . 处理systemd 的触发器(234-3) . 处理man-db 的触发器(2.7.6.1-2) . 设置netperf (2.6.0-2.1) . update-rc.d: 我们没有netperf 初始化脚本的说明。 update-rc.d: 看起来像是一个网络服务,我们禁用它。 处理systemd 的触发器(234-3) . 确定包优先级 为了确定安装哪些软件包,APT 为所有软件包源分配了优先级,优先级最高的数字优先。优先级为0 的软件包永远不会被安装,而优先级超过1000 的软件包将始终被安装,即使这意味着降级该软件包。 这对于APT 来说一切都很好,但是作为用户,您如何才能看到给定包的优先级是什么?输入鲜为人知的“apt-cache”命令及其“policy”选项,它会显示所有配置的存储库及其优先级: root@kali:~# apt-cache 策略 包文件: 100 /var/lib/dpkg/状态 释放a=现在 1 http://deb.debian.org/debianexperimental/main amd64 软件包 发行版o=Debian,a=实验性,n=实验性,l=Debian,c=main,b=amd64 起源deb.debian.org 500 http://ftp.debian.org/debian 不稳定/非免费amd64 软件包 发行版o=Debian,a=不稳定,n=sid,l=Debian,c=非自由,b=amd64 来源ftp.debian.org 500 http://ftp.debian.org/debian stable/contrib amd64 软件包 发行版o=Debian,a=不稳定,n=sid,l=Debian,c=contrib,b=amd64 来源ftp.debian.org 500 http://ftp.debian.org/debian stable/main amd64 软件包 发行版o=Debian,a=不稳定,n=sid,l=Debian,c=main,b=amd64 来源ftp.debian.org 100 http://http.kali.org/kali kali-bleeding-edge/main amd64 软件包 释放o=Kali,n=kali-bleeding-edge,c=main,b=amd64 来源http.kali.org 990 http://http.kali.org/kali kali-rolling/contrib amd64 软件包 发布o=Kali,a=kali-rolling,n=kali-rolling,c=contrib,b=amd64 来源http.kali.org 990 http://http.kali.org/kali kali-rolling/非免费amd64 软件包 发布o=Kali,a=kali-rolling,n=kali-rolling,c=non-free,b=amd64 来源http.kali.org 990 http://http.kali.org/kali kali-rolling/main amd64 软件包 发布o=Kali,a=kali-rolling,n=kali-rolling,c=main,b=amd64 来源http.kali.org 固定包: 您会注意到,作为默认发行版,kali-rolling 的优先级最高,为990,这意味着它的软件包优先于所有其他软件包(这正是您作为Kali 用户所希望的),其次是Debian stable,为500,kali-bleeding-edge 为100,最后是实验性的,优先级较低为1。要了解这些优先级如何应用于给定软件包,请查看sqlmap: root@kali:~# apt-cache 策略sqlmap sqlmap: 已安装: 1.1.9-1 候选人: 1.1.9-1 版本表: 1.1.9+0~git1505273832.7de63a-1 100 100 http://http.kali.org/kali kali-bleeding-edge/main amd64 软件包 ***1.1.9-1 990 990 http://http.kali.org/kali kali-rolling/main amd64 软件包 500 http://ftp.debian.org/debian stable/main amd64 软件包 100 /var/lib/dpkg/状态 即使kali-bleeding-edge中的sqlmap版本较新,它也不会被安装,因为它的优先级只有100,而已安装的版本的优先级为990。正是因为这个原因,当你想从不同的包存储库安装包时,需要明确地请求: root@kali:~# apt install sqlmap/kali-bleeding-edge 正在阅读包裹清单.完成 构建依赖树 读取状态信息.完成 为“sqlmap”选择版本“1.1.9+0~git1505273832.7de63a-1”(http.kali.org [all]) 以下软件包将被升级: sqlmap 1 已升级,0 已新安装,0 已删除,0 未升级。 需要获取6,789 kB 的档案。 此操作后,将使用2,048 B 的额外磁盘空间。 Get:1 http://kali.mirror.globo.tech/kali kali-bleeding-edge/main amd64 sqlmap 全部1.1.9+0~git1505273832.7de63a-1 [6,789 kB] 5 秒内获取6,789 kB (1,192 kB/s) 阅读变更日志.完成 (正在读取数据库.当前安装的287587 个文件和目录。) 准备解压./sqlmap_1.1.9+0~git1505273832.7de63a-1_all.deb . 解压sqlmap (1.1.9+0~git1505273832.7de63a-1) over (1.1.9-1) . 设置sqlmap (1.1.9+0~git1505273832.7de63a-1) . 处理man-db 的触发器(2.7.6.1-2) . APT 配置 设置默认分布 现在您已经在系统中添加了一些额外的存储库,您将需要开始探索和安装新软件包,但在此之前,最好告诉APT 您的默认发行版是什么,对于Kali Linux 用户来说,这是“kali-rolling”。这样,未经您的同意,您的系统不会升级到其他发行版。通过添加“APT:Default-Release “kali-rolling”;”来配置您的默认发行版到/etc/apt/apt.conf.d/local: root@kali:~# cat /etc/apt/apt.conf.d/local APT:默认发布“kali-rolling”; 配置好默认发行版后,任何时候运行“apt full-upgrade”,它都会将升级应用到kali-rolling,从而帮助保持系统稳定。 减少升级提示 如果您长时间使用任何Debian 衍生版本,您在运行“apt update”时会遇到提示,询问您有关配置文件的信息以及是否要保留本地版本、使用新版本或比较它们。通常,您会发现自己接受默认设置,从而使这些中断变得浪费。 您可以通过使用‘DPkg:options { “–force-confdef”; 更新/etc/apt/apt.conf.d/local 文件来避免这些提示。 “--强制合并”; }’如下所示。此行告诉APT 如果文件没有更改,则尝试自行选择(–force-confdef),如果文件不同,则保留现有版本(–force-confold): root@kali:~# cat /etc/apt/apt.conf.d/local DPkg:options { '--force-confdef'; '--强制合并'; } APT:默认发布“kali-rolling”; 固定包版本 有时,您会发现某些应用程序需要特定软件包的特定版本,并且无法与任何其他应用程序一起使用。其他时候,对一个软件包的更新可能会对其他工具产生不利影响。最近,由于devscripts 软件包的更新,我们就发生了这种情况,这阻止了我们构建Kali 软件包。 幸运的是,APT 允许您通过在/etc/apt/preferences 中将包的优先级设置为1001 来将包固定到特定版本。例如,要告诉APT 保留版本2.16.x 的devscripts 包,您可以添加以下内容: Package: 开发脚本 Pin: 版本2.16.* 引脚优先: 1001 其他资源 在这篇文章中,我们仅触及了如何将APT 扩展到默认Kali 或Debian 生态系统之外的皮毛。求解器算法非常有效,并且很少遇到问题,因此您不必担心探索其他存储库。要了解有关APT 以及如何使其符合您的意愿的更多信息,我们鼓励您参考Kali Linux Revealed 和Debian 管理员手册,这两本书都包含大量信息、提示和技巧。
创建帐户或登录后发表意见