如何在Debian / Ubuntu的命令行中获取安全更新列表


26

在GUI工具中,您可以获得带有安全更新的列表包。可以在Debian或Ubuntu中的命令行上完成吗?

通常,我可能会使用“ apt-get upgrade”(apt-get升级),它会向我显示正在升级的内容,但是我想知道哪些是安全更新。


仅适用于Ubuntu 14.04、16.04
Angel

Answers:


5

使用无人值守升级应用程序。

sudo unattended-upgrade

这使您只能自动安装安全更新,但是如果需要,可以手动调用它。


我喜欢这个答案,因为您实际上已经在考虑我可能要尝试做的事情,而无人值守升级是我今天安装的要尝试的东西。
斯蒂芬·保罗格

13
它实际上并没有回答问题。
reinierpost

4
如果这是答案,那么这个问题是错误的。至少它得到了发展,应该对其进行相应的编辑和/或标记为askubuntu.com/questions/194/…
mc0e

39
apt-get upgrade -s | grep -i security

...是Nagios check-apt插件用来计算待处理的安全更新的方法,与您正在寻找的相似。


但是它找不到shellshock的bash安全更新吗?
linjunhalida 2014年

3
这给名称为“ security”的软件包(例如“ xml-security-c-utils”,“ debian-security-support”,“ modsecurity-crs”,“ node-security”等
误报。– Shnatsel

2
@Shnatsel用于命令行检查,这非常容易...您可以轻松查看它是否为误报。另外,如果您知道操作系统的当前名称,则可以编写grep -i xenial-security,它将误报减少到几乎为零。
Alexis Wilke

1
@Shnatsel,这样grep Debian-Security会更好吗?
Pablo A

这对于获取regular;security可用的更新数量很有用。-p列出可用于更新的软件包名称的选项不能区分常规更新和安全更新(至少在16.04上)...因此,据我所知,这不是获取可用安全更新列表的可行方法。
mattpr

10

在ubuntu上,您应该可以使用apt-check,它是使用可用的安全更新数量填充motd的工具。


2
我在debian或ubuntu上看不到它。
斯蒂芬·保罗

5
apt-check位于/ usr / lib / update-notifier /中。尝试/ usr / lib / update-notifier / apt-check --human-read以获得简单的消息。
u2702 2014年

2
我不认为这显示出任何有用的信息。要获取该列表,您需要添加--package-names-p),但似乎没有区别常规更新和安全更新。
Auspex

5

您可以使用以下命令获取列表:

sudo unattended-upgrade --dry-run -d 2> /dev/null | grep 'Checking' | awk '{ print $2 }'

2
您将所有输出发送到了,/dev/null这样您就不会再抓东西了!
Auspex

这似乎不可靠。它显示所有需要更新的软件包。
可怕的分号

我猜它会向您显示无人值守升级将要执行的操作,如果您将其配置为仅进行安全更新,则此方法可能会起作用。尽管答案充其量是很不完整的。
mc0e 17-4-17

今天,我解决了修改一些apt-check的需求。检查此要点:gist.github.com/thesp0nge/94f9d336a081a3fefba6ca61d787a28b
Paolo Perego

3

我有一个修改后的版本update-notifier,需要额外的开关:--security-package-names它仅输出与安全性相关的软件包名称。我将其作为要点(直到在启动板的相关项目中创建合并请求)。在此之前,它可以按以下方式运行:

curl -s https://gist.githubusercontent.com/ahmadnazir/c2444d6b09fd7bb4963a13bc577d92a3/raw/0231b94a4e46abe0a5959de5f84feda76ad2eb9d/apt-check.py \
  | python /dev/stdin --security-package-names \
  | column -t -s , \
  | sort

输出量

这将给出以下格式的输出:软件包名称安装版本候选版本

...
thunderbird                          1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-gnome-support            1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-locale-en                1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-locale-en-us             1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
...

3

基于上面的Fabrizio Regini的答案。

对于12.04 /精确度:

sudo unattended-upgrade --dry-run -d 2>&1 /dev/null | grep 'Checking' | grep security | awk '{ print $2 }'

对于14.04 / Trusty:

sudo unattended-upgrade --dry-run -d | grep 'Checking' | grep security | awk '{ print $2 }'

1

在阅读了其他回复后,一个变体就崩溃了-我相信这是为了解决误报问题,并且相当轻巧。

sudo unattended-upgrade --dry-run -d 2>/dev/null  | awk '/Checking/ && /archive:..*-security. / {print $2}'

0

我相信回答OP提出的问题是如何查看软件包列表,而不是仅安装安全软件包。建立在@topdog的回答,您应该使用: /usr/lib/update-notifier/apt-check -p -p国旗代表包


1
其中列出了所有软件包,而不仅列出了安全更新
confiq,2015年

apt-check在Debian Jessie中似乎不可用。它仍然保留在更新的Wheezy系统上,但是全新安装不再具有update-notifier-common。你知道替代品吗?
2016年

@jan它仍然存在,作为update-notifier-common
Auspex

@Auspex该包在Jessie中不再存在。只有update-notifier一个是的过时过渡包gnome-packagekit。看这里
2016年1

1
@jan抱歉,我接受了debian的话。我搜索了文件packages.debian.org/…,它告诉我You have searched for files named apt-check in suite jessie, all sections, and all architectures. Found 1 results.,但是当您实际单击该结果的链接时,它告诉您Package not available in this suite.
Auspex

0

这两个命令将吐出列表。用管道输送到wc -l看看后面有多少。;-)

grep security /etc/apt/sources.list > /tmp/security.list
sudo apt-get upgrade -oDir::Etc::Sourcelist=/tmp/security.list -s

对于较旧的发行版或已关闭更新存储库仍然有效,但是安全性为:

sudo apt-get upgrade -s| grep ^Inst |grep Security 

小心。如果您以root身份运行时以这种方式生成/tmp/security.list,则您很容易受到基于符号链接的攻击。
mc0e 17-4-23

我在Ubuntu 14.04上无法获得这种方法(第一个代码块)。该-oDir::Etc::Sourcelist选项似乎并未禁用标准存储库集。
mc0e 17-4-23

0

我认为@smin的答案基本上是一种好方法,但是正则表达式有点松散,如@Shnatsel所指出的。

这个怎么样:

apt-get upgrade -q --dry-run \
| perl -ne 'm/^Inst (\S+) \S+ \(([^\)]+) Debian-Security:8/ && print "$1-$2\n"'

这列出了软件包名称以及您要安装的版本。-$2如果您不想在此处打印版本,可以退出打印声明。

[通过使用awk代替perl,可以使它的重量更轻一些]


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.