本帖最后由 f541883216 于 2018-8-25 00:20 编辑
第二讲
万由U-NAS系统的Linux内核简析
我以前为坛友们破解提供过目前比较流行的“群晖”[5]和“威联通”[6]的系统。也对它们的启动盘结构进行过分析。其目的主要是嵌入式Linux的逆向工程教学。万由U-NAS系统现在这个当前版本并没有加密,也不需要破解,可以很方便地安装到各种x86系统的硬件,及虚拟机上。我擅长的领域是在匿名隐私研究,嵌入式linux 逆向工程,因此我在这里暂不对万由U-NAS系统的应用功能部分不做深入细致的分析,只是从它的基础Linux的部分给大家做点简单的分析。也只是作者本人的一点体会,不妥之处敬请批评指正。
当前版本万由U-NAS系统的Linux内核为:Linux U-NAS 3.16.0-6-amd64 #1 SMP Debian 3.16.56-1+deb8u1 (2018-05-08) x86_64 GNU/Linux 这个内核是属于Debian GNU/Linux 8 “Jessie”版本。Debian项目的Salvatore Bonaccorso于2018年5月8日星期二宣布为Debian GNU/Linux 9 “Stretch”和Debian GNU/Linux 8 “Jessie”操作系统系列提供一个新的内核补丁,以修补两个安全漏洞并解决一些回归问题。如果您在Debian GNU/Linux 9 “Stretch”版本上将内核更新到版本4.9.88-1+deb9u1所有这些问题,以及Debian GNU/Linux 8 “Jessie”版本中的3.16.56-1 + deb8u1。敦促所有Debian Stretch和Jessie用户都尽快更新其内核,并在安装新内核版本后重新启动计算机。现在这个万由U-NAS系统的Linux内核,正是属于存在安全漏洞,需要尽快更新补丁的。好在万由U-NAS系统不加密,坛友们可以自行安装更新内核补丁。具体补丁请参考如下:
安全Lutomirski在Linux内核的KVM(基于内核的虚拟机)实现中发现了此新内核更新修复的安全漏洞之一,这可能会允许非特权KVM来宾用户升级其权限或使来宾操作系统崩溃。具体修复补丁的方法,请点击链接查看(CVE-2018-1087)。
此内核更新解决的第二个安全漏洞由Everdox Tech LLC的Nick Peterson以Linux内核处理Mov SS或Pop SS指令提供的异常的方式发现,允许非特权用户导致拒绝服务并导致内核崩溃具。体修复补丁的方法,请点击链接查看(CVE -2018-8897)。
万由U-NAS系统的启动盘大约需要1.2G左右,从如下截图可以看出,它是基于GNU GRUG 2.02操作系统启动管理器的。
在X86架构的机器中,Linux、BSD 或其它Unix类的操作系统中GRUB、LILO 是大家最为常用,应该说是主流。
引导过程简介:
由硬盘启动时,BIOS通常是转向第一块硬盘的第一个扇区,即主引导记录(MBR)。
装载GRUB和操作系统的过程,包括以下几个操作步骤:
装载记录
基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。
装载Grub
这第二引导装载程序实际上是引出更高级的功能,以允许用户装载一个特定的操作系统。
装载系统。关于Grub启动盘接结构,我在【老骥伏枥-鸡年大礼包】[5] http://www.nasyun.com/thread-28751-1-1.html那篇文章有非常详细的介绍。有兴趣的坛友们可以参阅它。
引导linux内核后。GRUB把机器的控制权移交给操作系统。
文件系统
一些用户常困惑于GRUB中根文件系统(root file system)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的!
万由U-NAS系统的启动盘的结构非常简单清晰,请看如下截图:
它只有一个ext4分区,在/boot/grub/grub.cfg文件中,清楚地描述了启动过程。
加载内核文件:linux /boot/vmlinuz-3.16.0-6-amd64 root=UUID=1a7bdc6a-7a1d-49a1-a14d-ff09c80458f2 ro quiet
加载ramdisk文件:initrd /boot/initrd.img-3.16.0-6-amd64
引导linux内核后,然后挂载该启动盘的ext4分区为根文件系统。不需要解压rootfs,启动过程非常快。我破解过“群晖”[5]和“威联通”[6]的系统,这两个系统的rootfs都需要解压后才能挂载。万由U-NAS系统的启动盘的这种设计,我认为比较优越。启动快,不拖泥带水。当然啦,“群晖”和“威联通” 系统的启动盘有加密的考虑,所以才会那样做,这显然是加密要付出的代价。
万由U-NAS系统的数据盘结构也非常简单清晰,请看如下截图:
它也只有一个lvm分区。LVM[7]是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
万由U-NAS系统的启动盘和数据盘结都是本人喜欢的设计式样。非常简单清晰,这样对于NAS系统的数据备份,系统救援,数据恢复等等方面都有好处。
万由U-NAS系统的用户组管理采用的是LDAP集中式认证协议。“群晖”和“威联通” 系统都没有采用这种认证,而是沿用Linux系统的passwd, shadow来做系统的用户组管理的。这也是万由U-NAS系统在设计上的一个亮点。
LDAP[8]是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。那么什么是X.500,而为什么还要有LDAP出现呢?
X.500是OSI标准体系中的目录服务模型,它包含了命名空间的定义以及查询与更新目录的协议,但是X.500在很多场景下被认为有些“用力过猛”。而LDAP,虽然像X.500一样也为目录提供了数据/命名空间的模型与协议,但它被设计为运行在TCP/IP网络协议栈上(译者注:TCP/IP协议栈是IETF标准化组织定义的,而之前讲的OSI标准体系是区别于IETF的另外一套标准化组织,其实OSI体系更古老,更资深也更复杂,我们现在的互联网是基于TCP/IP的通信协议栈的,而OSI里面是有对应于TCP/IP的通信协议栈的,但由于设备厂家支持较少,最终没有流行起来。IETF与OSI有矛盾但也有合作,互相借鉴很多有价值的东西),所以我们可以把LDAP当成是“减肥”了的X.500。
结束语
本文主要是从万由U-NAS系统的Linux内核构造的角度对该系统做了初步的探讨。至于应用功能方面,各种教程已经有很多了。但对于系统结构方面分析的文章基本没有。
对于NAS的玩家来说,目前流行的各种NAS系统基本上都是采用开源的Linux系统,再加上厂商开发的特定硬件,和提供的web服务界面来组成。各种应用功能部分,也以Linux系统提供的开源软件包为基础。因此我认为NAS系统基本上应考虑分为两类:“小而精”与“大而全”。各个厂商在开发自己的产品时,都有自己的定位。那么到底是“小而精”好呢?还是“大而全”好呢?这里面就有一个“性能价格比”的问题了。本人是个技术党,产品市场的分析研究不是本人的长项。但又一点我想强调的是,系统结构开放的NAS本人比较认可。因为我可以根据自己的需要,对系统进行裁剪或添加。这也是为什么我在体验万由U-NAS系统时,会对它的系统结构方面进行分析的原因。
万由U-NAS系统厂商提供的web服务界面,虽然比“群晖”的web服务界面略有逊色,但与“威联通”绝对有一拼。
我的文章中主要提及了万由U-NAS系统的优点部分,并没有提及该系统没有缺点部分。本人即不是“毒舌”,也非“黑客”。万由U-NAS的开发团队开发出这个产品也不容易啊。
版权信息:
VMware Workstation 是2018 VMware Inc的注册商标
万由U-NAS 属于宁波万由电子科技有限公司的开发团队
参考文献:
[1] U-NAS-3.0 使用教程.pdf
[2] U-NAS 快速安装指南.pdf
[3] U-NAS 3.0系统安装教程.pdf
[4] U-Finder 使用教程.pdf
[5] 【老骥伏枥-鸡年大礼包】黑群晖6.02-8451版硬盘自启动,USB启动盘,系统救援盘
[6] 【老骥伏枥-狗年大礼包】嵌入式linux逆向工程,手把手教你作黑威联通
[7] LVM_百度百科
[8] LDAP_百度百科
老骥伏枥是何许人也?
|