Are all BSDs created equally — 一次关于BSD内核漏洞的调查

Are all BSDs created equally — 一次关于BSD内核漏洞的调查

在今年(2017)的defcon大会上,Ilja van Sprundel做了一个名为 “所有的BSD生来是平等的吗?”(Are all BSDs created equally? ),副标题: 一次关于BSD系统内核漏洞的调查(A survey of BSD kernel vulnerabilities)。我在youtube上搜了一下,目前还没有视频。   浏览了一下pdf文件。主要内容如下: 作者花了三个月时间检查了OBSD/FBSD/NBSD的内核代码,主要涉及系统调用、驱动程序、TCP/IP栈、trap handler、文件系统以及用于兼容其他系统(如Linux)的代码,截止报告期,共发现bug或漏洞约115个,其中: FBSD: ~30 OBSD: 25 NBSD: ~60   作者列出的OpenBSD相关的bug有:   Unbound malloc and out of bound read (could panic or info leak) OpenBSD 6.1 Been there since OpenBSD 4.0 Fri Apr 28 08:34:31 2006 getcwd syscall when taking data from fuse / userland   mbuf mishandling, leading to crash Doesn’t guarantee it pulls up enough mbuf data OpenBSD…

Read More

使用syspatch为OpenBSD打补丁

使用syspatch为OpenBSD打补丁

从6.1版开始,OpenBSD支持使用二进制文件为系统打补丁,结束了每个补丁要用户自己下载源文件并编译、安装的历史,就像现在所有Linux发行版一样。也算是补上了一个短板。 syspatch的使用也很简单明了:

跟syspatch相关的配置: /etc/installurl : 指定到哪里去查找并下载补丁 这个文件默认不存在,需要自己创建并配置站点。这一点需要改进。有个默认的文件以及示例更合理一下。可以自己man installurl看一下。 配置内容可以是(就是一个URL): https://ftp.openbsd.org/pub/OpenBSD/ 跟syspatch相关的文件: /bsd.syspatch${OSrev} : 初始内核的备份文件(初始安装的、未打过任何补丁的内核) /var/syspatch/* : 保存了syspatch用于撤销补丁的压缩包(所以不能删除)   示例:

最后,reboot  

Read More

如何把一个软件移植到OpenBSD上

如何把一个软件移植到OpenBSD上

这是一篇根据此文意译的文章, 我只翻译了自己认为重要的东西。作者以自己移植python的dnslib库到OpenBSD的过程来描述移植的过程。作者为Bryan Everly。此译文发表时文章发布的原域名过期,无法访问。   事前准备 找到你想移植的软件 准备好承担做一个维护者的责任 和软件的开发者/团队协作,而不是为软件加几个补丁,让它在OB上能编译通过 你很可能没有权限把软件添加到ports中,请和ports邮件列表中的人合作 先读文档,再问问题 OpenBSD ports树传统 软件按类别放在/usr/ports目录下,如开发工具放在/usr/ports/devel,数据库软件放在/usr/ports/database等等 软件源码并不放在/usr/ports的任何目录下,而是在编译时从它的官网下载到/usr/ports/distfiles/PORT-v.v.v子目录下 实际编译时的工作目录在/usr/ports/pobj/PORT-v.v.v下 某个软件的ports包含如下标准的文件: Makefile — 包含编译指令 distinfo — 包含指定软件的验证信息,如tar包的SHA1/SHA256摘要信息 pkg — 子目录 pkg/DESCR — 关于此软件的简短描述,请保持列宽为72 pkg/PLIST — 由此ports编译成的软件包(package)的manifest文件 patches — 子目录,包含要为此软件的源码打的补丁包 大部分ports的Makefile的结尾会包含一个名为bsd.port.mk的文件。这个文件用于告诉ports如何利用OpenBSD现有的ports编译的基础架构。 以移植python库dnslib为例,在/usr/ports/net目录下新建一个文件夹py-dnslib,因为一个跟网络相关的工具,也是python的库文件,所以以py-开头。 接下来要创建Makefile.

第一行是注释,简短描述这个port的功能。 接下来的部分是版本号,要下载的源码包的名称,编译好的软件包的名称,最后是此软件在ports中的类别。 再往下是软件官网地址,port的维护者的信息。接下来的注释表示此软件采用BSD授权协议(可在软件的官方万展查询到)。接着的一行表示此软件可以放在OpenBSD发行的光盘中。 MASTER_SITES指示此软件的官方下载地址。 MODULES一行用于告知OpenBSD ports编译体系这是一个python包,可以使用OpenBSD上Python包的通用编译方式 FLAVORS表示软件的flavor(请查阅OpenBSD上flavor相关文档) 最后,do-test目标执行软件包自带的单元测试代码。   有了Makefile,接下来要测试各个编译目标 第一个就是make fetch,测试源文件下载是否正常。下载的文件会放在/usr/ports/distfiles下的一个子目录里。子目录的名称取决于你的Makefile里的$DISTNAME变量 然后是make extract。这个目标会把上面下载的源码压缩包解压,放在/usr/ports/pobj下的一个子目录里。子目录的名称取决于$WRKDIR(衍生与$PKGNAME) make makesum: 这个目标为下载的源文件产生校验和并放在distinfo文件里。 make update-patches:如果你需要给某个源文件打补丁,你会先把/usr/ports/distfiles/$DISTDIR下的目标文件复制到一个带后缀为.orig的文件,然后编辑目标文件,然后运行make update-patches。它会生成所需要的diff文件,然后你可以将它们放在patches子目录里。 make build: 实际编译源文件。 make update-plist: 这个目标会生成会更新pkg/PLIST文件 make do-test: 运行源文件自带的单元测试代码。 make fake:将编译好的软件安装在/usr/ports/pobj/$WRKDIR/fake-$MACHINE_ARCH文件夹下,而非根文件目录下 make package: 根据make fake生成的文件创建软件包 make install:将编译好的软件包安装的系统…

Read More

使用scrot命令行工具抓屏

scrot是一个X环境下的命令行抓屏工具。注意是X环境,只开个终端是不行的。在OpenBSD上需要另外安装:

scrot的常见用法是:

其中”-c”用于显示倒计时,”-d”用于设定延迟的秒数。最后screen.png是保存截屏要有的文件名。

Read More

OpenBSD进程的开机启动

OpenBSD上守护进程的开机启动由/etc/rc.conf.local来控制。需要程序随机器启动,需要相应编辑此文件。 OpenBSD上的守护进程一般分为系统自带以及用户安装两种。系统自带进程,如ftpd, relayd,named等;用户安装的守护进程则是用户自己通过pkg_add安装的程序所带的守护进程。 今天我们先谈一下如何开机启动系统自带的进程。以named为例。 对于这一类的进程,/etc/rc.conf文件下一般会有相应的变量来控制它是否随机器启动而运行。对于named来说: $ grep named /etc/rc.conf named_flags=NO # for normal use: “” named默认是不会随机器启动的。同时这个文件也给出提示,如果你想要启动它,把这一行改成: named_flags=”” 即可。 但是我们不应该直接改动/etc/rc.conf文件,虽然直接改也能生效。推荐的方法是编辑/etc/rc.conf.local文件,把这一行放入其中,也能起到同样的效果。这样做的好处是,升级系统的时候,你的配置不会被覆盖掉(/etc/rc.conf会在升级时被覆盖)。 如果你不想重启系统,可以看一下/etc/rc.d目录下是否有启动脚本。对于named来说,我们可以直接运行: /etc/rc.d/named start 以后我们再谈如何启动用户自己安装的守护进程。

Read More

如何断开无效的用户登录会话

昨天发现OpenBSD系统上有一个登录的会话,已经空闲了9天。想必是哪天在手机上测试SSH端口转发后造成的。 #w 6:07PM up 12 days, 21:42, 2 users, load averages: 0.24, 0.14, 0.09 USER TTY FROM LOGIN@ IDLE WHAT acheng p0 180.116.63.38 6:00PM 0 w acheng p4 114.227.123.110 27Jul12 9days – 该如何把它解决掉呢?查了一下,ttyp4上已经没有什么进程了,想用kill也没机会了。 #ps -t p4 PID TT STAT TIME COMMAND 正常情况下,即使用户会话断开,也会有一些进程在运行,我们可以通过上面这个命令找到这些进程,然后使用kill命令把它们干掉。于是我发邮件到misc@ 请教。经指点后发现,这是因为那个会话的SSHD没有正常退出,导致了utmp文件中相应的记录没有被清理,从而出现了w命令报告有用户登录会话,但却没有任何进程的情况出现。系统重启后这个不是问题的问题就会自动消失。 同时,推荐阅读utmp的用户手册来了解更多。 man utmp …. After the new lastlog record is written, the utmp file is opened and the utmp record for the user is inserted. This record remains until the user logs…

Read More

OpenBSD上的彩色LS输出

OpenBSD上的ls命令输出是黑白的,没有对不同的文件类型使用不同的颜色来区分。如果想要使用彩色,可以安装colorls这个程序。它就相当于一个“彩色的ls”(要使用colorls的-G参数)。 可以使用下面的操作来完成: 1. 安装colorls pkg_add -v colorls (假定你的PKG_PATH参数已经设定好了) 2. 设定命令别名 alias ls=’colorls -G’ 3. 把上面那一行添加到自己的.profile文件中,免得下次登录还得运行alias命令

Read More

php_network_getaddresses errors on OpenBSD

如果你使用OpenBSD来为你的Wordpress或drupal的CMS提供主机服务,你很可能会碰到类似下面的错误消息: Uh-oh, we were unable to verify your API Key. Please check them and try again! The server said:Could not connect (ERR 0: php_network_getaddresses: getaddrinfo failed: non-recoverable failure in name resolution) 我的OpenBSD服务器名称解析很正常,为什么还会报这个错误呢? 这是因为OpenBSD上的Apache默认是chroot到/var/www目录下的,而PHP脚本在名称解析时需要用到/etc/resolv.conf文件中配置的名称服务器。在chroot的情况下,PHP程序看到的“/”目录其实是实际的/var/www目录。 因此解决这个问题就很简单了: mkdir /var/www/etc/ cp /etc/resolv.conf /var/www/etc/ apachectl stop apachectl start

Read More
1 2