如何轻松在OpenBSD系统/内核和软件包上应用补丁

时间:2020-01-09 10:40:01  来源:igfitidea点击:

在Linux(尤其是CentOS)中,我习惯于使用yum命令每周应用几次更新,但是我该如何在我的OpenBSD更严格的版本上进行更新?
如何在OpenBSD操作系统上应用更新?

OpenBSD就像Linux。
但是,它不使用yum命令。
它取决于称为pkg_add的工具。
您可以使用pkg_add来应用更新或以二进制格式安装新软件包。
有三种方法可以使基于OpenBSD的软件包,内核和基本系统保持最新状态。
第一种方法需要应用补丁并编译软件。
第二种方法取决于第三方,以应用内核和二进制软件包补丁。
第三种方法使用syspatch命令。
我建议对OpenBSD 6.1及更高版本的用户使用第三种方法。

方法1:使用源代码使OpenBSD 6.2保持最新

首先下载OpenBSD 6.2的源代码。

步骤1:获取源代码

# cd /usr/src

设置要使用的OpenBSD镜像和易于使用的版本号:

# BASE="http://mirror.esc7.net/pub/OpenBSD"
# VER="6.2"

现在,使用ftp命令获取OpenBSD用户域/基本系统和内核的源代码,运行:

# ftp ${BASE}/${VER}/src.tar.gz \
${BASE}/${VER}/sys.tar.gz \
${BASE}/${VER}/SHA256.sig

步骤2:验证下载的文件:

使用signify命令:

# signify -C -p /etc/signify/openbsd-62-base.pub -x SHA256.sig src.tar.gz
# signify -C -p /etc/signify/openbsd-62-base.pub -x SHA256.sig sys.tar.gz

验证下载的文件

使用tar命令解压缩tar包:

# tar zxf src.tar.gz
# tar zxf sys.tar.gz
## [ delete file using rm command ##
# rm SHA256.sig *.tar.gz
# ls

步骤3:获取勘误表以获取OpenBSD稳定版6.2

下载6.1勘误补丁并应用。
在此示例中,将获取包含所有6.2版本补丁程序的tar.gz文件:

# cd /tmp
# ftp https://ftp.openbsd.org/pub/OpenBSD/patches/6.2.tar.gz

再次解压所有补丁:

# tar -zxf 6.2.tar.gz

查看所有补丁:

# cd /tmp/6.2/common/
# ls

步骤4:一对一地应用补丁(内核和基本系统):

让我们从001_sshd.patch.sig补丁文件开始。
您需要输入以下命令来查看勘误/路径信息:

# more 001_sshd.patch.sig

查找有关补丁的更多信息以及如何在OpenBSD上应用它

您可以通过以下方式应用补丁:

# signify -Vep /etc/signify/openbsd-59-base.pub -x 001_sshd.patch.sig \
-m - | (cd /usr/src && patch -p0)

输出示例:

Hmm...  Looks like a unified diff to me...
The text leading up to this was:
-------------------------
|Signature Verified
|
|OpenBSD 5.9 errata 1, Mar 10, 2015:
|
|Lack of credential sanitization allows injection of commands to xauth(1).
|More information: http://www.openssh.com/txt/x11fwd.adv
|
|Prevent this problem immediately by not using the "X11Forwarding" feature
|(which is disabled by default).
|
|Apply by doing:
|    signify -Vep /etc/signify/openbsd-59-base.pub -x 001_sshd.patch.sig \
|        -m - | (cd /usr/src && patch -p0)
|
|And then rebuild and install sshd:
|    cd /usr/src/usr.bin/ssh
|    make obj
|    make depend
|    make
|    make install
|
|Index: usr.bin/ssh/session.c
|===================================================================
|RCS file: /cvs/src/usr.bin/ssh/session.c,v
|retrieving revision 1.280
|diff -u -p -u -r1.280 session.c
|--- usr.bin/ssh/session.c      16 Feb 2015 03:37:48 -0000      1.280
|+++ usr.bin/ssh/session.c      9 Mar 2015 17:02:44 -0000
-------------------------
Patching file usr.bin/ssh/session.c using Plan A...
Hunk #1 succeeded at 40.
Hunk #2 succeeded at 257.
Hunk #3 succeeded at 346.
Hunk #4 succeeded at 1826.
done

然后重建并安装修补的sshd:

# cd /usr/src/usr.bin/ssh
# make obj && make depend && make && make install

您可能必须重新引导系统才能进行内核更新。
请注意,每个勘误补丁程序将具有有关如何应用和安装补丁程序的不同信息,因此您需要使用more命令仔细阅读它们。
您需要对所有修补程序重复此过程。
我建议您订阅OpenBSD公告邮件列表以获取有关勘误的信息。
您需要对所有已下载补丁的其余部分重复该过程。

步骤5:升级所有第三方软件包

只需执行以下pkg_add命令:

# export PKG_PATH=ftp://mirror.planetunix.net/pub/OpenBSD/`uname -r`/packages/`machine -a`/
# pkg_add -Uuv

方法2:使用二进制补丁程序模式(第3方)使OpenBSD 5.9保持最新

保持安装的OpenBSD软件包最新是困难且耗时的。
没有人希望阅读邮件列表以发现安全修复程序和/或更新,更不用说要从其端口树中构建新软件包并将其手动安装在其每台服务器和/或台式机上了。

因此,MTier出现了。它正在启动一个新的软件包存储库,其中包括自5.3起的OpenBSD的最新安全修复程序和重要更新。

它易于设置,甚至易于维护,您无需再执行任何操作。
如果有可用更新,MTier甚至会通过电子邮件通知您(除非您选择退出)。

Mtier

您可以使用openup命令。
它是OpenBSD的一个小实用程序,可以独立运行,并检查程序包和基本系统中的安全更新。

openup使用常规的pkg工具,它没有在顶部实现任何功能。
您需要信任mtier和开放维护者才能使用此命令。
此命令的行为类似于yum update或apt-get upgrade命令。
首先,获取openup

# cd /root
# ftp https://stable.mtier.org/openup
# chmod +x openup

运行它来更新您的系统,包括软件包:

# ./openup

使用MTiers OpenBSD软件包和Binpatches更新,以使您的系统(包括第三方软件包)保持最新

下面的例子
在这种情况下,我在新升级的OpenBSD从5.9到6.0上运行openup:

# /root/openup

请注意,MTier提供两种服务级别:

  • LTS:binpatches,LTS软件包更新以及对两个最新版本的支持
  • 免费:最新版本的binpatches和稳定软件包

方法3:在amd64/i386上使用syspatch方法使OpenBSD 6.1服务器保持最新

OpenBSD版本6.1带有syspatch命令,以获取,验证,安装和还原基本系统的OpenBSD二进制补丁。
现在建议所有OpenBSD用户使用此方法。

应用所有补丁

执行以下命令:

$ doas syspatch

输出示例:

Get/Verify syspatch61-007_freetyp... 100% |*************************|   732 KB    00:01    
Installing patch 007_freetype
Missing set, skipping patch 007_freetype
Get/Verify syspatch61-025_ieee802... 100% |*************************|  9356 KB    00:14    
Installing patch 025_ieee80211

要查看可用补丁,请运行:

$ doas syspatch -c

输出示例:

007_freetype

要查看所有已安装的修补程序,请运行:

$ doas syspatch -l

输出示例:

001_dhcpd
002_vmmfpu
003_libressl
004_softraid_concat
005_pf_src_tracking
006_libssl
008_exec_subr
009_icmp_opts
010_perl
012_wsmux
013_icmp6_linklocal
014_libcrypto
015_sigio
016_sendsyslog
017_fuse
018_recv
019_tcp_usrreq
020_sockaddr
021_ptrace
022_fcntl
023_wsdisplay
024_sosplice
025_ieee80211

要还原最近安装的补丁程序,请运行:

$ doas syspatch -r

输出示例:

Reverting patch 025_ieee80211

如何更新所有应用

执行以下命令:

$ doas pkg_add -Uuv

输出示例:

Update candidates: quirks-2.304 -> quirks-2.304
quirks-2.304 signed on 2016-04-02T15:01:33Z
Update candidates: bash-4.4.12 -> bash-4.4.12
Update candidates: curl-7.53.1 -> curl-7.53.1
Update candidates: gettext-0.19.8.1 -> gettext-0.19.8.1
Update candidates: libiconv-1.14p3 -> libiconv-1.14p3
Update candidates: libidn2-0.16 -> libidn2-0.16
Update candidates: libpsl-0.17.0 -> libpsl-0.17.0
Update candidates: libunistring-0.9.7 -> libunistring-0.9.7
Update candidates: nghttp2-1.21.0 -> nghttp2-1.21.0
Update candidates: pcre-8.38p0 -> pcre-8.38p0
Update candidates: pftop-0.7p15 -> pftop-0.7p15
Update candidates: wget-1.19.1 -> wget-1.19.1

有关更多信息,请参见syspatch手册页:

$ man syspatch
$ man pkg_add