如何从命令行安装安全更新?

sudo apt-get upgrade安装所有更新,而不仅仅是安全更新。 我知道我可以使用Update Manager仅选择重要的安全更新,但有没有办法从命令行执行此操作?

无人值守软件包升级提供了自动安装安全更新的function。

你可以使用它,但不是配置自动部分,你可以手动调用它。 对于这种情况,以下应该安静地执行:

 sudo unattended-upgrade 

或更详细的版本,用于控制它的运行方式

 sudo unattended-upgrade -d 

注意:当您调用无人值守升级时,请将“s”保留在最后。

这假设默认安装包,它可能是。 如果没有,只需:

 sudo apt-get install unattended-upgrades 

另请参见/usr/share/doc/unattended-upgrades/README.md

关于如何管理更新的一些提示

这适用于Debian和Ubuntu,但更具体的Ubuntu说明如下。

  • 仅显示安全更新:

     apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 

    要么

     sudo unattended-upgrade --dry-run -d 

    要么

     /usr/lib/update-notifier/apt-check -p 
  • 显示所有可升级的包

     apt-get -s dist-upgrade | grep "^Inst" 
  • 仅安装安全更新

     apt-get -s dist-upgrade | grep "^Inst" | grep -i securi | awk -F " " {'print $2'} | xargs apt-get install 

笔记:

  • 有时,Ubuntu会显示安全更新,就像它们来自$ release-updates存储库一样。 我被告知,这是如此,因为Ubuntu开发人员将安全更新推送到$ release-updates存储库以加快其可用性。

    如果是这种情况,您可以执行以下操作仅显示安全更新:

     sudo sh -c 'grep ^deb /etc/apt/sources.list | grep security > /etc/apt/sources.security.only.list' 

     apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null | grep "^Inst" | awk -F " " {'print $2'} 
  • 检查软件包升级后需要重新启动的服务。 找出您要预先升级的软件包并安排重新启动/重新启动。 这里的问题是,除非你重新启动一个服务,否则它仍然可能正在使用一个旧版本的库(最常见的原因),它在你安装修复安全漏洞的新软件包之前已经加载到内存中。

     checkrestart -v 

    但是,请记住checkrestart可能会列出不一定要重新启动的进程。 例如,PostgreSQL服务可能会将其内存引用保留在已删除的xlog文件中,这不是重新启动服务的正当理由。

    因此,使用标准工具来检查这个的另一个更可靠的方法是我从https://locallost.net/?p=233无耻地窃取的以下小bash脚本

    它通过保留活动内存中的那些库的副本来检查系统上正在运行的进程是否仍在使用已删除的库。

     ps xh -o pid | while read PROCID; do grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null if [ $? -eq 0 ]; then CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline) echo -e "\tPID $PROCID $CMDLINE\n" fi done 

用以下内容替换/etc/apt/preferences

 Package: * Pin: release a=lucid-security Pin-Priority: 500 Package: * Pin: release o=Ubuntu Pin-Priority: 50 

现在,简单的apt-get upgrade只会升级所有安全更新。

为什么(以及如何)这样做:首选项文件将所有软件包从Ubuntu发行版固定为优先级50,这将使它们不如已安装的软件包更令人满意。 源自安全性存储库的文件被赋予默认(500)优先级,因此它们被考虑进行安装。 这意味着只有被认为比当前安装的更合适的软件包才是安全更新。 有关在apt_preferences联机帮助页中固定的更多信息。

您可以使用适用于apt-getaptitude (至少)的--target-release选项暂时促销某个更新分发,这将允许您固定某些版本,以便它们有资格升级。

如果您希望仅将此用于脚本,而不是将其作为系统的默认值,则可以将规则放在其他位置并使用此代码:

 apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade 

这将使得从非默认位置查找首选项文件。

作为示例给出的首选项文件不适用于第三方存储库,如果您希望固定那些,您可以使用apt-cache policy轻松确定所需的固定密钥。

以下是在Ubuntu 14.04 LTS中确认的。

使用unattended-upgrade包。

查看文件/etc/apt/apt.conf.d/50unattended-upgrades 。 顶部应该有一个部分:

 // Automatically upgrade packages from these (origin:archive) pairs Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; // "${distro_id}:${distro_codename}-updates"; // "${distro_id}:${distro_codename}-proposed"; // "${distro_id}:${distro_codename}-backports"; }; 

请注意,默认情况下,它如何配置为仅允许安全程序包的无人参与升级。

修改文件/etc/apt/apt.conf.d/10periodic类似于:

 APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::AutocleanInterval "7"; APT::Periodic::Unattended-Upgrade "1"; 

这将每天运行一次自动无人值守安全升级。

现在,手动运行: sudo unattended-upgrade

测试是干运行,没有做任何事情: sudo unattended-upgrade --dry-run

资料来源: https : //help.ubuntu.com/14.04/serverguide/automatic-updates.html

虽然它非常难看,但您可以禁用除安全存储库之外的所有存储库,然后执行以下操作:

 sudo apt-get update && sudo apt-get upgrade 

我没有对它进行过测试,但理论上它只会在安全仓库中找到更新并应用它们……

  • apt-get update :只需读取存储库中的条目 – 根据现有列表。 需要检查什么是新的。
  • apt-get upgrade :没有内核模块的已安装软件包的所有更新。 没有发布更新。
  • apt-get dist-upgrade :安装包的所有更新,也包含内核模块。 没有发布更新。
  • apt-get with parameter -s :test only,不执行任何更改。

我无法在apt-get或aptitude中找到一个选项,但有人在SuperUser上有相同的问题 。 唯一的回应是:

检查并调整/etc/apt/apt.conf.d/50unattended-upgrade。 你用你的Ubuntu的代号取代’karmic’了吗?

但是没有回答是否有效。