<b>3.1.2 基于linux方案的选择</b>
毫不奇怪,作为最受欢迎的开源操作系统,linux中的一些版本可用于beagle系列的开放硬件。linux被认为是一个由程序员为程序员设计的操作系统。linux以充分发挥硬件性能而闻名,尤其是对于比较低端或者比较老旧的计算机硬件。当然,这并不是说linux在高端硬件上运行得不够好。windows用户不久前才脱离32位兼容模式运行应用程序的禁锢,而linux系统的用户早在2001年就已经可以使用64位操作系统了。事实上,64位的linux内核在amd首款amd64架构处理器发布的2年前就已经就绪了。
你可能会惊讶地发现,有那么多你使用的设备在默默地运行着linux系统。许多网络设备运行linux系统,一些定制化的linux版本(如openwrt)专门被设计出来,用于替代商业产品出厂内置的linux。众所周知,许多智能电视和其他现代化家电都在运行着linux。在支持的平台种类数量方面,没有任何其他操作系统能与linux相匹敌。
linux在黑客用户群体里也是显而易见的赢家。linux系统上有大量的安全工具。支持多平台的工具都是先在linux系统上实现,然后才移植到其他操作系统平台上。协作式的开源环境滋养了那些不可或缺的安全工具的成长,例如支持监视模式和数据包注入的全功能的无线网卡驱动。linux提供给用户很多选择:linux有各种各样的脚本可用;用户可以从众多图形环境中自由选择,甚至可以完全放弃图形界面使用纯命令行;像文本编辑这样的常见任务,不同喜好的用户都有多个程序可用。
?ngstr?m
听到?ngstr?m这个词的时候,你也许会想到度量单位(10-10m),?ngstr?m是用来描述光的波长(颜色)和像原子、分子这样小东西的尺寸的。?ngstr?m发行版本也是一个不为人知的嵌入式linux发行版(http://angstrom-distribution.org)。这个linux发行版的开发者强调说它被叫作?ngstr?m发行版,而不是?ngstr?m linux。?ngstr?m发行版本的特点总结如表3.1所示。
表3.1 ?ngstr?m发行版的特点
性能
包管理器
桌面应用仓库支持
hacking应用仓库支持
社区支持
配置
备注 好——为beagle板子优化编译
opkg(和debian上的dpkg类似)
一般
差——主要面向嵌入式
一般——少量用户形成的社区
用了专用工具
beagle系列板子原厂内置,但不为普通用户所知
?ngstr?m发行版本预装在beagleboard.org出厂的每个设备上,从最开始的beagleboard到beaglebone black(在本书编写时,beagleboard.org刚刚宣布,未来发布的产品上可能预装debian linux)。如果了解beagleboard设计者的背景,以及在2008年最原始版本的beagleboard发布时arm设备的支持情况,你就不会惊讶为什么选择?ngstr?m发行版本作为默认预装的系统了。多数linux桌面用户可能不熟悉这个发行版本。虽然?ngstr?m发行版预装在所有的beagle上,为了让读者能更好地了解这个发行版的风格,这里还是简要地说一下构建?ngstr?m发行版的步骤吧。
通常嵌入式系统软件(包括操作系统)是在一台更为强大的桌面系统下构建的。这个过程被称为交叉编译(更多细节将在下一章讨论)。采用交叉编译的最主要原因是:嵌入式设备缺少足够的运算能力,无法在合理的时间内完成软件或者系统的构建。?ngstr?m发行版是由openembedded软件框架构建的(http://openembedded.org)。openembeded构建过程中使用bitbake构建工具(http://developer.berlios.de/projects/bitbake)。bitbake允许用户创建自己的“菜谱”,来精确描述软件包的“烹饪”过程,并自动把成功构建所依赖的软件组件包括进来。
构建?ngstr?m的过程非常简单。首先要下载openembedded bitbake安装设置脚本,根据?ngstr?m发行版官网所述,这些脚本可以从项目的git仓库获得,命令如下:git
clone git://git.angstrom-distribution.org/setup-scripts。?ngstr?m的服务器似乎不是最快最可靠的,如果下载遇到了困难,可以用github代替它。相应的命令是:git clone https://github.com/angstrom-distribution/setup-scripts 。
脚本下载完,第二步就是构建内核。所有的软件都使用oebb.sh脚本构建。该脚本使用machine环境变量来指定目标架构。这个可以在启动脚本程序中设置,也可以在shell中手动设置。显然在命令行上执行脚本前设置变量更方便些。可以通过在命令前加上variable=value(变量=值)的形式使环境变量作用于特定的命令(我打赌,linux新手肯定不知道)。下列命令将配置环境,编译beagles的软件,更新文件,并构建内核:
上述的命令将会执行很长时间。由于脚本的写法问题,openembedded层也会被下载,尽管它和beagles没什么关系。一旦内核构建好,最终步骤就是用选择的bitbake“菜谱”去构建文件系统了。例如:machine=beagleboard bash ./oebb.sh bitbake console-image将会构建一个只有命令行的根文件系统。如果用ubuntu系统作为构建主机,聪明的检查器将会向你“抱怨”找不到makeinfo,这个命令工具包含在texinfo包里。
德州仪器为?ngstr?m做了一些优化调整,以便能在beagles上获得更好的性能。有一些可以用来构建基于?ngstr?m的嵌入式系统的工具,德州仪器的jason krinder创建的bonescript,是一个可用来方便操作gpio的node.js库,集成在beagles标准?ngstr?m 发行版本中。虽然?ngstr?m允许用户轻松创建嵌入式设备,但它的仓库缺少很多必需品,特别是很多标准桌面应用和渗透测试工具。图3.5所示是一个运行?ngstr?m的beaglebone black开发板。
图3.5 运行?ngstr?m的beaglebone black开发板
arch linux
arch linux是以简单、轻量、灵活为目标而创建的(http://archlinux.org)。arch linux原本是为intel架构平台开发的,但是目前已经被移植到了armv5、armv6和armv7上(http://archlinuxarm.org)。arch持续更新并且针对硬件优化,例如,arch充分利用beagles上集成在armv7 cortex-a8里的“硬件浮点”数学处理器。arch的设计理念是让有经验的linux和unix用户用得得心应手。arch的特点总结如表3.2所示。
表3.2 arch linux的特点性能
备注 好——非常轻量
pacman
非常好
差——支持arm的工具非常少
好——活跃的社区,尤其是桌面版本
简单直接
支持armv5、armv6和armv7
http://archlinuxarm.org/platforms/armv7/ti/beaglebone-black上可找到关于将arch linux安装到beaglebone black的详细介绍。安装包括几个步骤。首先,用fdisk在microsd卡上分2个区。第一个分区保存bootloader,必须是一个至少64mb的fat16格式的分区。第二个分区格式化为ext4格式,包含根文件系统。第二步,使用mkfs在microsd卡分区上创建文件系统。第三步,从archlinuxarm.org上下载bootloader和根文件系统镜像。第四步,将镜像文件解压到microsd卡上,如果你的系统足够小,以至于可以存放到beagleboard或者beaglebone black的emmc上,可以先从microsd卡启动,再向emmc上安装。这个方案并不适合我们的渗透测试根系统,它占用的空间大于6gb。图3.6所示的是一个beaglebone black上运行的arc linux屏幕截图。
图3.6 beaglebone black上运行的arc linux
gentoo
gentoo是一个强大并且高度定制化的linux发行版本。一个最与众不同的特点就是几乎所有的东西都是从源码构建而来。因此它能提供高度的定制能力以及相当大的性能改进潜力。从源码构建能充分利用处理器特有功能;通过去除不需要的功能,可执行文件可以更小,更小的可执行文件可以加载得更快,占用更少的内存。gentoo的特点总结如表3.3所示。
表3.3 gentoo linux的特点
备注
极好——所有的东西都是定制化编译
portage
好——桌面版本更好
好
不同于其他流行的发行版本,但是相当容易
默认情况,所有东西都需要从源码构建,可以提供极好的性能,但是包安装通常是很耗时间的
安装gentoo是一个非常增长见识,但有时可能令人受挫的工作。如果你有一些linux方面的经验,并且想要学习到更多关于linux的知识,我强烈推荐你至少安装一次gentoo,甚至可以在一些老的、不用的硬件上安装。gentoo通常是分阶段安装的。首先,安装一个非常基础的系统;第二步,安装标准的构建工具。除了编译器和make,gentoo使用一个强大的包管理工具——portage;第三步, portage用来安装构成完整的gentoo系统的各种软件包。如果一个包在仓库里,可以通过portage很容易地构建,使用命令emerge <package-name>。如果一个包无法从gentoo仓库里获取,事情就变得更有趣一些了。
在beagles上安装gentoo的过程和安装桌面版是有所不同的。对于新手,在beagle上安装gentoo之前,需要一个支持microsd读卡器的桌面gentoo系统。桌面版的gentoo电脑用来创建在beagle上使用的gentoo系统microsd卡。详细的安装过程可以在http://dev.gentoo.org/armin76/arm/beagleboneblack/install.xml上找到。如同安装桌面版本一样,在beagles上安装gentoo比其他linux发行版本稍微复杂一些。
首先,安装所需的构建工具。第二步,构建交叉编译器。第三步,下载u-boot bootloader(包含补丁的完整版)的副本并构建。第四步,配置并构建内核(包括固件)。第五步,格式化microsd卡,幸运的是有脚本可以完成这个任务。第六步,下载一个基本的根文件系统并写到microsd卡上。第七步,下载portage快照,并复制到microsd卡的根文件系统里。第八步,配置一系列的选项(root密码、网络、文件系统、hostname、系统服务等)。第九步,将内核和u-boot复制到microsd卡的fat16格式分区上,最后,beagle可以从microsd卡启动,后续的其他包就可以安装了。
构建一个gentoo系统可能会花上几天的时间。对于这种额外付出的回报是获得一个高度优化调校过的系统,也许还能够获得一些在周围技术圈炫耀的资本。大多数常用桌面应用程序可以在gentoo的仓库里找到,但或许它在渗透测试应用程序方面还略逊于其他的发行版。因为构建应用可能是个费时的过程。鉴于这些原因,gentoo可能并不是我们打造渗透测试linux发行版的首选方案。
sabayon
在现实世界里,sabayon是一道意大利甜点。sabayon linux是gentoo的衍生版,sabayon的一个目标是为用户提供一个开箱即用的soho服务器功能(nfs、samba、bittorrent、apache等)系统。它还提供了很多解码器,允许用户把电脑作为家庭影院电脑(htpc)使用。sabayon的特点如表3.4所示。
表3.4 sabayon linux的特点
备注 优秀——基于gentoo
差——目前还没有太多用户
同gentoo
是一个为soho和家庭影院定制的gentoo
如同它的基础gentoo一样,sabayon使用滚动更新,这意味着基于sabayon的系统可以持续更新而不用等待下一个版本的发布。不同于gentoo的是,sabayon提供系统快照,以便于用户可以安装大量软件包而不用从源码构建它们。beaglebone安装sabayon的详细说明可以在https://wiki.sabayon.org/index.php?title=hitchhikers_guide_to_the_beaglebone_(and_armv7a)找到。不难想到,它的安装过程和gentoo很像。
buildroot
buildroot本质上并不是一个linux发行版本,而是一套编译完整嵌入式linux系统的工具系统(http://buildroot.uclibc.org/)。因为它是为了构建嵌入式linux系统而打造的,所以没有包含完整的软件仓库。这显然不是作为渗透测试系统基础的最佳选择。buildroot的特点如表3.5所示。
表3.5 buildroot的特点
备注 一般
无
差
没有标准工具
一个用于构建嵌入式linux系统的工具系统,非传统意义上的发行版本
使用erlang/otp的nerves项目
erlang是一种使用otp库来构建可扩展的软实时系统的编程语言,nerves项目使用buildroot构建的linux内核,并使用erlang交叉编译工具创建用于beaglebone black的固件镜像。虽然nerves也许能用于创建渗透测试设备,但它似乎并不是一个构建渗透测试操作系统基础的最佳方案。nerves项目的特点如表3.6所示。
表3.6 nerves项目的特点
备注 未知
差——项目才刚起步
用于创建软实时系统的系统
fedora
red hat linux是仍在被广泛使用的最老的发行版本之一,在2003年,red hat终止了red hat linux的支持,并且从那时开始只支持red hat enterprise linux(rhel)。fedora(原来被叫作fedora core)是一个red hat的社区版本,它被创建来替代red hat linux满足非企业用户的需要。fedora项目得到了red hat公司部分赞助支持,事实上,rhel是基于fedora代码为基础的分支。社区开发fedora,然后red hat选择将其中稳定的功能特性加入到rhel中。顺便一提,gnu许可要求red hat提供rhel的源代码,即产生了另一个发行版本(没有商业支持)centos(http://www.centos.org/)。fedora的特点如表3.7
所示。
表3.7 fedora的特点
red hat 包管理器(rpm)
未知
差——beagle镜像被发布出来了,然后被撤回了
标准工具
不像桌面版本fedora支持得那么好
fedora是一个主要面向桌面的linux发行版本,但是后来出现了其他架构的移植版本,如arm版(http://fedoraproject.org/en/get-fedora-options#2nd_arches)。如同rhel和一些其他发行版本一样,fedora使用red hat包管理器(rpm)管理软件包。仓库支持很完善。安装fedora简单明了。从http://fedoraproject.org/en/get-fedoraoptions#2nd_arches下载镜像文件,写入到microsd卡上,然后就完成了。有一个beaglebone black专用镜像,但是在写本书时,因为使用?ngstr?m内核和fedora根文件系统是一个有问题的组合,所以镜像被撤回了。运行fedora的beaglebone black的截屏如图3.7所示。
图3.7 beaglebone black上运行的fedora
debian
debian由ian murdock在1993年创建(http://www.debian.org/doc/manuals/project-history/)。debian以ian和他当时的女友,现在的妻子debra命名。debian已经被移植到了大量的架构上,它使用debian包管理器(dpkg)进行软件包管理。仓库支持很不错,但是很多从它衍生的发行版(如ubuntu)有着更好的支持。debian有着大量的衍生版本,这些衍生版本中,ubuntu是最受欢迎的。debian的特点如表3.8所示。
表3.8 debian的特点
dpkg——debian包管理器
差——桌面版本更好
非常好配置
良好的社区支持,大部分归功于一些个人付出努力的结果
常听到的关于debian的抱怨是,它不像其他linux发行版更新得那么频繁。奇怪的是衍生版本通常是持续更新的。debian对beagle的支持很好,安装debian的详细说明可以在http://elinux.org/beagleboarddebian上找到。由于它的流行,beagle上安装debian很简单,可以通过互联网安装一个最新的镜像,或者安装demo镜像到beagle上。
为了执行网络安装,首先使用git clone git://github.com/robertcnelson/netinstall.git下载脚本,然后使用下面的命令下载软件,复制到microsd卡(至少1gb大小)上。
安装demo镜像的过程类似,下载demo镜像、解压、校验,然后使用脚本安装到microsd卡上。下列的命令将会执行demo镜像的安装(注意:本书写作时,这是最新的版本;读者也许希望到网上找最新的版本):
这个系统是命令行版本,如果想安装桌面环境,需要在安装后增加合适的软件包。一个好处是这个的根文件系统足够小,可以安装到beaglebone black的emmc上,并且还有剩余空间容纳一些工具。
ubuntu
ubuntu和其衍生版极其受欢迎,ubuntu已经占领distrowatch排行榜前列几年了(http://distrowatch.com)。ubuntu初次发布是在2004年,由mark
shuttleworth的公司canonical维护(http://ubuntu.com)。canonical声称ubuntu是这个世界上最受欢迎的开源操作系统。ubuntu是来自南非一个富有哲理的词汇,其含义鼓励人们像一个社区一样在一起工作劳动。与它所基于的debian不同,ubuntu每6个月发布一个新版本。很多人认为ubuntu是初学者最容易使用的linux发行版本之一。ubuntu的特点如表3.9所示。
表3.9 ubuntu的特点
备注 好——支持armv7的硬件浮点
aptitude/dpkg
极好
根据canonical所说,ubuntu是世界上最受欢迎的linux发行版本。由于某些个人的努力,能够很好地支持beagles
由于它太受欢迎了,ubuntu有极好的软件仓库支持。ubuntu包管理器apt(advanced packing
tool),是一个极其简单易用的工具。安装一个新的软件包只需要在shell中输入sudo apt-get
install <package name>。更新系统的所有软件包也一件极其简单的事情,使用sudo apt-get update && sudo apt-get upgrade更新本地仓库信息,然后安装可用更新。如果不确定软件包的名称,或者认为一个工具可能被包含在另一个软件包里,可以通过执行apt-cache search <package or utility name>来找到正确的软件包名。还有图形化或基于文本的前端界面让软件包管理更容易。
虽然linux系统有许多图形窗口化的桌面环境,但多年来两个被广泛使用的、最主要的桌面环境是gnome和kde。两个桌面环境都有着自己的追随者。canonical还开发了它们自己的名为unity的图形化窗口的桌面环境。毫无意外地,一些kde和gnome的“信徒”并不喜欢unity。kubuntu提供给喜欢kde并想使用ubuntu的用户(http://kubuntu.org)。本书就是在运行libreoffice和其他一些开源工具的kubuntu系统上完成的。ubuntu gnome则是为那些喜欢gnome桌面环境的用户(http://ubuntugnome.org)准备的。
unity、kde和gnome对于beagle那有限的ram来说都有点太大了。beagles和低性能桌面电脑通常会使用一个轻量级的窗口系统。当一个轻量级桌面环境被用于一个桌面电脑时,这个发行版本名字是有变化的。如xubuntu 是一个使用xfce桌面环境的ubuntu版本。当在基于arm架构的硬件系统上运行它的时候,我们会说硬件上跑的是ubuntu系统,即使使用的不是unity桌面环境。
在beagles上运行ubuntu有多种选择。可以选择主版本、这个版本的变体和某个特定的内核。由于ubuntu和内核最近的变化,这些选择比初听起来的要麻烦。新的设备,例如beaglebone black只支持较新版本的ubuntu和kernel,这些版本与从前的有些不兼容。在我们讨论完一个优秀的渗透测试linux发行版的必备要素之后,再深入讨论这个问题。