本教程将向您展示如何在 Ubuntu 上设置自动安全更新,也就是无人值守升级。 如果你不是住在山洞里,那么你可能知道大规模的 Equifax 数据泄露。 2017 年 5 月至 7 月期间,1.43 亿 Equifax 客户的信息被盗,包括姓名、社会安全号码、出生日期、驾照、20 万个信用卡号码。
2017 年 3 月,一个严重的漏洞 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";
取消注释此行并更改 false
到 true
.
Unattended-Upgrade::Remove-Unused-Dependencies "true";
自动重启
安装 Linux 内核的安全更新后,您需要重新启动 Ubuntu 服务器才能应用内核更新。 如果服务器只供您或少数人使用,那么启用自动重启会很方便。 找到以下行。
//Unattended-Upgrade::Automatic-Reboot "false";
取消注释并更改 false
到 true
启用自动重启
Unattended-Upgrade::Automatic-Reboot "true";
您还可以指定执行重启的时间。 默认情况下,在安装内核更新后立即重新启动。 我将其设置为凌晨 4 点重新启动。 确保为服务器设置正确的时区。
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Save 和 close 文件。
如果服务器被很多用户使用或需要很长的正常运行时间(比如这个博客),那么你不应该启用自动重启。 相反,您可以使用 Canonical livepatch 来修补 Linux 内核而无需重新启动。
- Canonical LivePatch 服务:无需重启即可在 Ubuntu 上修补 Linux 内核
启用自动安全更新
现在配置了自动安全更新,我们需要通过创建 20auto-upgrades
文件。
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
将以下两行复制并粘贴到文件中。
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
- 第一行使
apt
做 ”apt-get update
”每天自动。 如果设置为 2,则每隔一天。 (0=禁用) - 第二行使
apt
自动安装安全更新。 (1=启用,0=禁用)
Save 和 close 文件。
在特定时间运行无人值守升级
无人值守升级在凌晨 12 点至早上 7 点之间随机运行,以防止由于每个人同时运行更新而导致镜像服务器负载激增。 您可以使用以下命令手动运行无人值守升级:
sudo unattended-upgrade -v
您还可以将此命令添加到您的 Cron 作业中。
sudo crontab -e
在您的 Crontab 文件底部添加以下行,以便无人值守升级将在每天凌晨 2 点运行。
0 2 * * * sudo /usr/bin/unattended-upgrade -v
设置 SMTP 中继
为了在每次安全更新后接收电子邮件通知,您的服务器需要能够发送电子邮件。 如果这是您的电子邮件服务器,那么唯一要做的就是安装 bsd-mailx
包裹。
sudo apt install bsd-mailx
如果这不是电子邮件服务器,则您需要设置 SMTP 中继。 我们可以安装 Postfix SMTP 服务器,然后通过电子邮件服务提供商中继电子邮件。
有几种 电子邮件服务提供商 (ESP) 可以充当中继主机。 有些收取一点费用,有些每月提供免费配额。 在本文中,我想向您展示如何使用 Sendinblue,它是一个电子邮件服务提供商,可让您每天免费发送 300 封电子邮件。
在 sendinblue.com 创建一个免费帐户。 完成用户配置文件后,单击 Transactional
选项卡,您将获得 SMTP 设置。 如果没有 SMTP 设置,您需要联系 Sendinblue 客户服务以激活交易电子邮件服务。
现在您需要配置 Postfix SMTP 服务器以使用 Sendinblue SMTP 设置。
让我们使用以下命令在 Ubuntu 上安装 Postfix SMTP 服务器。
sudo apt install postfix libsasl2-modules
当您看到以下消息时,按 Tab 键并按 Enter.
然后选择第二个选项: Internet Site
.
接下来,设置系统邮件名称。 例如,我输入我的域名 linuxbabe.com
.
安装 Postfix 后,使用 Nano 等命令行文本编辑器打开主配置文件。
sudo nano /etc/postfix/main.cf
找到以下行。
relayhost =
默认情况下,其值为空。 设置值 relayhost
到 [smtp-relay.sendinblue.com]:587
.
relayhost = [smtp-relay.sendinblue.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
Save 和 close 文件。 然后创建 /etc/postfix/sasl_passwd
文件。
sudo nano /etc/postfix/sasl_passwd
将 SMTP 中继主机和 SMTP 凭据添加到此文件中,如下所示。 代替 smtp_username
和 smtp_password
使用 SendinBlue 提供的您自己的用户名和密码。 请注意,用户名和密码之间有一个冒号。
[smtp-relay.sendinblue.com]:587 smtp_username:smtp_passowrd
Save 和 close 文件。 然后创建相应的哈希数据库文件 postmap
.
sudo postmap /etc/postfix/sasl_passwd
现在你应该有一个文件 /etc/postfix/sasl_passwd.db
. 重新启动 Postfix 以使更改生效。
sudo systemctl restart postfix
默认情况下, sasl_passwd
和 sasl_passwd.db
服务器上的任何用户都可以读取文件。 将权限更改为 600,以便只有 root 可以读写这两个文件。
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
从现在开始,Postfix 将通过 Sendinblue 发送电子邮件。
添加发件人地址
单击 Sendinblue 帐户仪表板右上角的下拉菜单,然后选择 发件人和 IP 选项卡以添加您的域和发件人地址。
发送测试邮件
现在我们可以发送一封测试电子邮件 mailx
命令如下。
sudo apt install bsd-mailx echo "this is a test email." | mailx -r from-address -s hello to-address
如果 SMTP 配置正确,您将收到一封电子邮件。
电子邮件不发送?
您可以查看邮件日志(/var/log/mail.log
) 来调试电子邮件未发送的原因。
如果你用括号包裹中继主机 /etc/postfix/main.cf
文件。
relayhost = [smtp-relay.sendinblue.com]:587
然后您还需要将主机名包装在 /etc/postfix/sasl_passwd
文件。
[smtp-relay.sendinblue.com]:587 [email protected]:YourGmailPassword
记得重新生成hash db 文件。
sudo postmap /etc/postfix/sasl_passwd
重新启动 Postfix 以使更改生效。
sudo systemctl restart postfix
禁用接收电子邮件
默认情况下,Postfix 被配置为接受传入邮件。 您可以将 Postfix 配置为仅发送电子邮件,但不接受任何传入电子邮件。 在中找到以下行 /etc/postfix/main.cf
文件。
inet_interfaces = all
将其更改为以下文本,以便 Postfix 仅在 localhost 上侦听。
inet_interfaces = loopback-only
电子邮件报告
无人值守升级可能会发送 3 封电子邮件:
- 无人值守升级返回:True。 这意味着软件包已成功安装。
- 无人值守升级返回:False。 这意味着安装更新时发生了一些错误。 通常需要人工干预。 如果您收到此电子邮件,则需要手动运行
sudo apt upgrade
. - 返回无人值守升级:无。 有可用的更新,但系统拒绝安装它们。
日志
日志可以在 /var/log/unattended-upgrades/
目录。
检查重启
这 checkrestart
命令可以帮助您找出升级后需要重新启动的进程。 它可以从 debian-goodies
包裹。
sudo apt install debian-goodies sudo checkrestart
总结
我希望本教程可以帮助您在 Ubuntu 服务器上设置无人值守升级。 与往常一样,如果您觉得这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧?