it-swarm.cn

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

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

321
Michael Crenshaw

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

你可以使用它,但不是配置自动部分,你可以手动调用它:

Sudo unattended-upgrade -d --dry-run
Sudo unattended-upgrade -d

如果你想安静地运行它:

Sudo unattended-upgrade

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

这假设默认情况下安装了软件包,它可能就是这样。如果没有,只需:

Sudo apt-get install unattended-upgrades

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

300
blueyed

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

这适用于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=2

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

    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
    
113
ILIV

用以下内容替换/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-releaseaptitude(至少)一起使用的apt-get选项暂时促销某个更新分发,这将允许您固定某些版本,以便它们符合升级条件。

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

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

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

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

46
Ressu

以下是在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

11
vcardillo

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

Sudo apt-get update && Sudo apt-get upgrade

我没有测试过,但理论上它只能在安全仓库中找到更新并应用它们......

5
Stephen RC
  • apt-get update:只需读取存储库中的条目 - 根据现有列表。需要检查什么是新的。
  • apt-get upgrade:没有内核模块的已安装软件包的所有更新。没有发布更新。
  • apt-get dist-upgrade:已安装软件包的所有更新以及内核模块。没有发布更新。
  • apt-get带参数-s:仅测试,未执行任何更改。
3
fuser

在Debian上我使用此命令仅执行安全更新:

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
0
keypress

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

Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade. 
Did you replace 'karmic' with the code name of your Ubuntu?

但是没有回答是否有效。

0
Ross