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

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

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

答案1

包裹无人值守升级提供自动安装安全更新的功能。

您可以使用它,但不需要配置自动部分,您可以手动调用它:

sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d # Idem --debug

如果你想安静地运行它:

sudo unattended-upgrade

笔记:当您调用 unattended-upgrade 时,您会将“s”从末尾省略(在较新的版本中,有一个符号链接可以避免这种情况)。

这假设该软件包已默认安装,很可能是这样的。如果没有,只需执行以下操作:

sudo apt install unattended-upgrades

也可以看看/usr/share/doc/unattended-upgrades/README.md

答案2

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

这适用于 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 文件的引用,这不是重新启动服务的正当理由。

    因此,使用标准实用程序检查这一点的另一种更可靠的方法是使用以下小 bash 脚本,这是我厚颜无耻地从https://locallost.net/?p=233

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

    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
    

答案3

替换/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 手册页

您可以使用与之--target-release兼容的选项暂时推广某个发行版的更新apt-get,并且aptitude(至少)这将允许您固定某些版本,以便它们有资格升级。

如果您希望仅将其用于脚本而不将其设为系统默认规则,则可以将规则放到其他位置并改用以下命令:

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

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

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

答案4

如果您只想安装安全更新,则可以使用以下命令。首先,它会列出所有可升级的软件包,仅过滤出来自安全存储库的软件包,在第一个字段处剪切返回的字符串,然后将它们传递给 apt-get install 进行软件包更新。

sudo apt list --upgradable | grep security |cut -d\/ -f1|xargs sudo apt-get install -y

相关内容