在Ubuntu上设置自动安全更新(无人值守升级)

本教程将向您展示如何在Ubuntu上设置自动安全更新,也称为无人值守升级。 如果您不住在山洞下,那么您可能知道大量的Equifax数据泄露。 2017年5月至7月之间,1.43亿Equifax客户的信息被盗,包括姓名,社会安全号码,出生日期,驾照,20万张信用卡号。

2017年3月,在Apache Structs中发现了一个严重漏洞,当Apache基金会宣布存在该漏洞时,Apache基金会针对该漏洞发布了修复程序。 但是,Equifax两个月没有修补此漏洞,导致大量数据泄露。 运行复杂应用程序的公司可能需要在安装更新之前进行广泛的测试,但是如果您拥有供个人使用的简单Linux服务器,则可以启用自动安全更新以尽快修补漏洞。

在Ubuntu服务器上配置自动安全更新(无人值守升级)

首先,安装 unattended-upgrades 包。

sudo apt update

sudo apt install unattended-upgrades

您需要安装 update-notifier-common 软件包以设置自动重启。

sudo apt install update-notifier-common

然后编辑 50unattended-upgrades 文件。

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

在此文件中,您可以配置应自动更新哪些软件包。 默认情况下,仅安全更新会自动安装,如以下几行所示。 因此,无需更改此部分。

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

  • 第一次起源 "${distro_id}:${distro_codename}" 这是必要的,因为安全更新可能会从非安全来源获取新的依赖关系。 此来源不提供软件更新。
  • 第二个来源是用于定期安全更新。
  • 第三个和第四个来源(ESMApps和ESM)用于扩展安全性维护,即用于那些运行已达到使用寿命的Ubuntu版本的人。 您可以保持原样。

电子邮件通知

有时Ubuntu可能无法安装安全更新,因此需要手动更新。 如果您希望在每次安全更新后接收电子邮件通知,请查找以下行并取消注释。 (删除开头的双斜杠。)

Ubuntu 18.04

//Unattended-Upgrade::Mail "root";

Ubuntu 20.04

//Unattended-Upgrade::Mail "";

您可以指定一个电子邮件地址来接收如下所示的通知。

Unattended-Upgrade::Mail "[email protected]";

如果您希望仅在安全更新期间出现错误时才接收电子邮件通知,请取消注释以下行。

Ubuntu 18.04

//Unattended-Upgrade::MailOnlyOnError "true";

在Ubuntu 20.04上,您需要找到以下行

//Unattended-Upgrade::MailReport "on-change";

取消注释并更改为

Unattended-Upgrade::MailReport "only-on-error";

自动删除未使用的依赖项

您可能需要做 sudo apt autoremove 每次更新后,请查找以下行:

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

取消注释此行并更改 falsetrue

Unattended-Upgrade::Remove-Unused-Dependencies "true";

自动重启

安装Linux内核的安全更新后,需要重新启动Ubuntu服务器才能应用内核更新。 如果该服务器仅由您或几个人使用,则启用自动重新引导会很方便。 找到以下行。

//Unattended-Upgrade::Automatic-Reboot "false";

取消注释并更改 falsetrue 启用自动重启

Unattended-Upgrade::Automatic-Reboot "true";

您还可以指定重新启动的时间。 默认情况下,重启是在安装内核更新后立即完成的。 我将其设置为在凌晨4点重新启动。 确保为服务器设置了正确的时区。

Unattended-Upgrade::Automatic-Reboot-Time "04:00";

保存并关闭文件。

如果服务器被许多用户使用或需要较长的正常运行时间(例如此博客),则不应启用自动重启。 相反,您可以使用Canonical livepatch修补Linux内核,而无需重新启动。

  • Canonical LivePatch Service:无需重新启动即可在Ubuntu上修补Linux内核

启用自动安全更新

现在已经配置了自动安全更新,我们需要通过创建自动更新来启用它 20auto-upgrades 文件。

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

将以下两行复制并粘贴到文件中。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

ubuntu 18.04自动安全更新

  • 第一行 apt 做“apt-get update每天自动”。 如果将其设置为2,则每隔一天。 (0 =禁用)
  • 第二行 apt 自动安装安全更新。 (1 =启用,0 =禁用)

保存并关闭文件。

设置SMTP中继

为了在每次安全更新后接收电子邮件通知,您的服务器需要能够发送电子邮件。 如果这是您的电子邮件服务器,那么剩下要做的就是安装 bsd-mailx 包。

sudo apt install bsd-mailx

如果这不是电子邮件服务器,则需要设置SMTP中继。 我们可以安装Postfix SMTP服务器,然后通过Gmail或其他电子邮件服务提供商中继电子邮件。

在Ubuntu服务器上安装Postfix。

sudo apt install postfix

当您看到以下消息时,请按Tab键,然后按Enter。

无人值守升级电子邮件通知

然后选择第二个选项: Internet Site

手动运行无人值守的升级

接下来,设置系统邮件名称。 您可以使用服务器的完整主机名。

无人值守升级::允许起源

安装Postfix后,打开配置文件。

sudo nano /etc/postfix/main.cf

找到以下行。

relayhost =

默认情况下,未设置其值。 我们对其进行了更改,以便通过Gmail服务器转发电子邮件。

relayhost = smtp.gmail.com:587

如果您自己的电子邮件服务器在另一个框中运行,则使用邮件服务器的主机名作为中继主机。

relayhost = mail.yourdomain.com:587

接下来,将以下行添加到该文件的末尾。

# outbound relay configurations
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
header_size_limit = 4096000

请注意,不建议将您的Gmail凭据直接放入 /etc/postfix/main.cf 文件,因为服务器上的每个用户都可以使用 postconf -n 命令将Postfix配置转储到屏幕。

默认情况下,Postfix被配置为接受传入邮件。 您可以将Postfix配置为仅发送电子邮件,但不接受传入电子邮件。 在下面找到以下行 /etc/postfix/main.cf 文件。

inet_interfaces = all

将其更改为以下文本,以便Postfix仅在localhost上侦听。

inet_interfaces = loopback-only

保存并关闭文件。 然后创建 /etc/postfix/sasl_passwd 文件。

sudo nano /etc/postfix/sasl_passwd

在文件中输入以下行。

smtp.gmail.com:587  [email protected]:YourGmailPassword

注意

  • 用户名和密码之间有一个冒号。
  • 如果您为Gmail帐户启用了两步验证,则需要使用应用专用密码代替常规密码。)

如果您使用自己的电子邮件服务器作为中继,请添加以下行。

mail.yourdomain.com:587   [email protected]:password

保存并关闭文件。 然后使用以下命令创建相应的哈希数据库文件 postmap

sudo postmap /etc/postfix/sasl_passwd

现在您应该有一个文件 /etc/postfix/sasl_passwd.db。 重新启动Postfix,以使更改生效。

sudo systemctl restart postfix

默认, sasl_passwdsasl_passwd.db 文件可以由服务器上的任何用户读取。 将权限更改为600,以便只有root可以读写这两个文件。

sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

电子邮件通知与 mailx 命令,由 bsd-mailx 包。

sudo apt install bsd-mailx

现在,您可以运行以下命令来测试SMTP配置。

echo "this is a test email." | mailx -r from-address -s hello to-address

如果SMTP配置正确,您将收到来自Gmail帐户的电子邮件。

电子邮件未发送?

如果将中继主机用括号括起来 /etc/postfix/main.cf 文件。

relayhost = [smtp.gmail.com]:587

然后,您还需要将主机名包装在 /etc/postfix/sasl_passwd 文件。

[smtp.gmail.com]:587  [email protected]:YourGmailPassword

记住要重新生成哈希数据库文件。

sudo postmap /etc/postfix/sasl_passwd

重新启动Postfix,以使更改生效。

sudo systemctl restart postfix

电邮报告

无人参与的升级发送了3封电子邮件:

  • 返回无人参与的升级:True。 这意味着软件包已成功安装。
  • 返回无人参与的升级:False。 这意味着在安装更新时发生了一些错误。 通常需要人工干预。 如果您收到此电子邮件,则需要手动运行 sudo apt upgrade
  • 返回无人参与的升级:无。 有可用的更新,但是系统拒绝安装它们。

日志

日志可以在 /var/log/unattended-upgrades/ 目录。

检查重启

checkrestart 命令可以帮助您确定升级后需要重新启动哪些进程。 它可以从 debian-goodies 包。

sudo apt install debian-goodies

sudo checkrestart

包起来

我希望本教程可以帮助您在Ubuntu服务器上设置无人值守的升级。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯以获取更多提示和技巧trick

Sidebar