对于未永久连接到互联网的计算机,Ubuntu 似乎有一个持久的安全升级盲点。这些天肯定有很多,主要是笔记本电脑。
理论上解决方案是unattended-upgrades
。在 Ubuntu 上,它默认使用每日systemd
计时器或 cron 作业运行。使用 cron,anacron
默认情况下也作为保护运行,并执行cron
因计算机关闭而错过的任何作业。到目前为止如此明智。
但!
默认
unattended-upgrades
配置(/etc/apt/apt.conf.d/50unattended-upgrades
或类似配置)需要设置以下内容,否则在漫游笔记本电脑上可能会跳过升级:Unattended-Upgrade::OnlyOnACPower "false"; Unattended-Upgrade::Skip-Updates-On-Metered-Connections "false";
更糟糕的是,
anacron
无论cron
是否有 Internet 连接,都可以运行作业!这显然是非服务器 Ubuntu 的一个主要设计错误,因为个人计算机并不总是永久连接。
TLDR:使用默认配置,在漫游的笔记本电脑上,unattended-upgrades
大部分时间都不会工作。
(也许需要有一个单独的cron
作业类或systemd
计时器类,它等待网络连接直到执行。或者失败的cron.daily
作业可以切换到cron.hourly
它们成功执行。也许已经有一个。)
一种实用的解决方案是在网络上线后作为用户脚本systemd
执行的单元文件。unattended-upgrades
但每次启动它只会运行一次。
最佳解决方案是什么?有谁知道是否有计划通过新软件包或配置改进来解决这个问题?
如果使用 Ubuntu 上的当前默认值连接到互联网
network-manager
,则创建一个调度程序脚本以在连接到网络后启动unattended-upgrade
(是一个符号链接,也可以):unattended-upgrades
在
20-myconnectionscript
:编辑。结果
unattended-upgrades
不会触发更新包列表。因此,如果unattended-upgrades
一直失败,那么很有可能apt update
也失败了,在这种情况下,升级将继续不会发生!因此添加了对脚本的手动更新。令人失望的是,确保安全升级必须如此复杂。编辑 2。如果您想绝对确定您的笔记本电脑是最新的,这就是您在非交互式脚本中所需要的。可以确认它工作可靠。用它替换上面的 2 行。
它是完整的
dist-upgrade
,而不仅仅是安全升级。如果有人对仅安全版本有建议,该版本在非交互式运行时始终有效,并且不会涉及过多的 repo 配置,请提出建议。再一次:
unattended-upgrades
不能指望在间歇性连接的计算机上工作。Ubuntu 安全团队确实需要解决这种情况。